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(如果是这样,最好将ffprobeto的输出传递给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 )

相关内容