2011-06-04 70 views
4

在我之前的post中,我學會了如何從ffmpeg中提取一個文件的持續時間。如何添加許多值?

ffmpeg -i file.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d , 

它將輸出類似於00:08:07.98的東西。

我想直到結束是一個腳本,在那裏我可以說

get_duration.sh * 

,它將添加所有的時間長度和類似04:108:1107.198輸出的東西。

它不必將分鐘轉換爲小時等等。這將是很好,雖然=)

我可以列出

for f in *; do 
    ffmpeg -i "$f" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,; 
done 

所有的長度,但我怎麼添加這些奇怪格式的數字?

回答

6

使用以下awk腳本應該很好地工作:

BEGIN { h=0; m=0; s=0; cs=0; } 
/Duration:/ { 
    split($2, time_arr, ":"); 
    h = h + time_arr[1]; 
    m = m + time_arr[2]; 
    split(time_arr[3],time_arr2,"."); 
    s = s + time_arr2[1]; 
    cs = cs + time_arr2[2]; 
    } 
END { 
    s = s + int(cs/100); 
    cs = cs % 100; 
    m = m + int(s/60); 
    s = s % 60; 
    h = h + int(m/60); 
    m = m % 60; 
    printf "%02d:%02d:%02d.%02d\n", h, m, s, cs; 
} 

add_durations.awk將這個,那麼你可以做:

for f in *; do ffmpeg -i "$f" 2>&1; done | awk -f add_durations.awk 

注意這也將轉換小時等爲您提供: )。

+4

小心:我認爲你的毫秒值會打印9毫秒爲0.9,而不是0.009。 – 2011-06-04 22:07:44

+0

謝謝!希望現在糾正。我愚蠢地誤解爲「s.ms」而不是百分之一秒。我已經爲所有數字添加了零填充,如ffmpeg命令。 – MGwynne 2011-06-05 06:38:49