複数のビデオを実行するffprobeコマンド

複数のビデオを実行するffprobeコマンド

現在、/home/videosディレクトリで.mp4で終わるすべてのビデオファイルに対してこのコマンドを実行して、/root/videoduration.txtにある各ファイルの実行時間を出力しています。

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal '/home/videos/video1.mp4' | awk -F: '{printf "%02d:%02d:%02d",$1,$2,$3}' >> /root/videoduration.txt && sed -i -e '$a\' /root/videoduration.txt

.mp4で終わるディレクトリ内のすべてのビデオに対してこれを行い、持続時間だけを出力するにはどうすればよいですか?スクリプトはアルファベット順に書く必要があります。

答え1

コマンドをループでラップする必要があります。申し訳ありません。sed何をしたのか、ループの終わりに合うのか、それとも各ループの後に発生するのかわかりませんffprobe(そうであれば、結果ファイルで実行するよりもffprobe出力をパイプする方が良いでしょう)。sedsed

例ループ:

for file in $( ls -1 -Q /home/videos/*.mp4 | sort ); do
  ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal $file | awk -F: '{printf "%02d:%02d:%02d",$1,$2,$3}' >> /root/videoduration.txt && sed -i -e '$a\' /root/videoduration.txt
done

または

while read file; do
  ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal $file | awk -F: '{printf "%02d:%02d:%02d",$1,$2,$3}' >> /root/videoduration.txt && sed -i -e '$a\' /root/videoduration.txt
done < <( ls -1 -Q /home/videos/*.mp4 | sort )

関連情報