Bash
如何使用命令行查找多個 mp3 的累積持續時間?
我有一個包含很多 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