我目前正在对目录 /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
to的输出传递给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 )