Bash

如何使用命令行查找多個 mp3 的累積持續時間?

  • November 7, 2018

我有一個包含很多 mp3 文件的目錄,我需要一種簡單的方法來查找它們的累積持續時間。我知道我可以找到一個文件的持續時間

ffmpeg -i <file> 2>&1 | grep Duration

我也知道我可以使用以下命令對目錄中的所有 mp3 文件執行此命令

for file in *.mp3; do ffmpeg -i "$file" 2>&1 | grep Duration; done

這可以稍微過濾一下

for file in *.mp3; do ffmpeg -i "$file" 2>&1 | grep Duration | cut -f4 -d ' '; done

但是我該如何總結呢?ffmpeg不需要使用。輸出格式也不是那麼重要。秒或 mm:ss 或類似的東西會做。我希望它看起來像這樣:

$ <command>
84:33

您可以準確地獲得以秒為單位的持續時間,然後將它們與 bc 相加:

for file in *.mp3;do ffprobe -v error -select_streams a:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 "$file";done|paste -sd+|bc -l

自行將此數字轉換為 HH:MM:SS 格式。例如https://stackoverflow.com/a/12199816/6481121

Ipors Sicer 的回答非常有效。為了補充他的答案,我去掉了點之後的所有內容,並使用這個答案稍作修改來得到這個:

secs=$(for file in *.mp3;
   do ffprobe -v error -select_streams a:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 "$file";
done | paste -sd+|bc -l|cut -f1 -d '.'); 
printf '%d:%d\n' $(($secs/60)) $(($secs%60))

我得到了這個輸出:

87:2

引用自:https://unix.stackexchange.com/questions/480375