
だから、MP3ファイルのリストと再生時間を表示したいと思います。
ffprobe
ファイルの持続時間を表示します。しかし、その出力はひどいです。これにはすべてが含まれておりstderr
、コンパイル方法に関する「非常に便利な」情報を削除する方法はありません。
したがって、繰り返すと、*.mp3
メッセージが毎回表示されます。
フィルタスクリプトを書くことができますが、より簡単な解決策がありますか?
答え1
次の出力を取得するには:
00:07:22 first.mp3
00:02:33 second.mp3
00:04:04 third.mp3
使用:
for file in *.mp3
do
echo -n $(ffprobe "$file" 2>&1 | grep 'Duration' | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1)
echo " $file"
done
どこ
2>&1
stderrをstdoutにリダイレクトするgrep ...
期間のある行のみのフィルタリング- 最初の
cut ...
抜粋Duration: 00:07:22.33
- 2番目の
cut ...
抜粋00:07:22.33
- 3番目の
cut ...
抜粋00:07:22
答え2
stderr
このオプションを使用すると、-loglevel -quiet
入力した情報を簡単に削除できます。この場合、表示したいフィールドを照会する必要があります。
[user@host ~]$ ffprobe -loglevel quiet -show_entries format=duration test/test.mp3
[FORMAT]
duration=172.434286
[/FORMAT]
これで、秒単位の持続時間で圧縮できるいくつかの追加情報が提供されます。
[user@host test]$ ffprobe -loglevel quiet -show_entries format=duration \-print_format default=noprint_wrappers=1:nokey=1 -pretty test.mp3
0:02:52.434286
ここでは、-print_format
次を使用して追加情報を削除できます。
default=noprint_wrappers=1
これら[FORMAT]
は削除されます。nokey=1
キー名が削除されます。duration=
最後に、持続時間(秒単位)をいくつかの形式で使用または変換-pretty
できます。-sexagesimal
HH:MM:SS.MICROSECONDS
フォルダ内のすべてのMP3ファイルを見つけるには、上記のコマンドを組み合わせることができますfind
。ffprobe
[user@host ~]$ find test/ -name '*mp3' -printf "%f:\t" -exec ffprobe -loglevel error -print_format default=noprint_wrappers=1:nokey=1 -pretty -show_entries stream=duration "{}" \;
test.mp3: 0:02:52.434286