現在、/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
出力をパイプする方が良いでしょう)。sed
sed
例ループ:
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 )