MP3ファイルと再生時間のリスト

MP3ファイルと再生時間のリスト

だから、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>&1stderrを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できます。-sexagesimalHH:MM:SS.MICROSECONDS


フォルダ内のすべてのMP3ファイルを見つけるには、上記のコマンドを組み合わせることができますfindffprobe

[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

関連情報