私は多くの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
答え1
正確に期間を秒単位で取得し、それを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
答え2
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