如何通过终端根据视频长度删除视频?
我的截止点是 30 秒,我想删除 30 秒以下的所有内容。如果我按大小选择 ( find . -type f -size +27818098c
),它不会给我准确的结果,因为视频的比特率不同。
答案1
有点奇怪,但是:
for f in *.avi; do
echo "Testing $f"
ffmpeg -i "$f" 2>&1 | awk '/Duration/ { split($2,a,":"); exit a[1]*3600+a[2]*60+a[3] < 30 ? 3 : O }'
[[ $? -eq 3 ]] && rm -i -- "$f"
done
假设您已经ffmpeg
安装。rm
在删除文件之前会询问您,但-i
如果您确定它能满足您的要求,您可以删除它。
可移植的 Ruby 脚本不是要求确认 – 但你可以替换f.delete
为来puts f
检查它会做什么:
ruby <<"EOF"
Dir.glob("*.avi").each { |f|
ff = %x( ffmpeg -i "#{f}" 2>&1 )
d = ff.match(/Duration: ([0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2})/)[1].split(":").map{|s| s.to_i}
s = (d[0]*60*60 + d[1]*60 + d[2])
f.delete if s < 30
}
EOF