FFmpeg 从可变持续时间的视频中截取屏幕截图

FFmpeg take screenshots from videos with variable duration

我有一堆视频比较长,所以我截图了第10秒(-ss 00:00:10)。有时视频很短,比如 5 秒,-ss 00:00:10 失败。

我没有计算视频大小的选项,因为没有下载整个视频的选项(视频托管在 S3 上并通过 CloudFront 用作流)。

也许有一些我忽略的内置选项?

我真的不想做的是在失败时逐渐缩短 -ss 选项,所以这将是最后的手段。

一个班轮:

ffprobe -show_entries format=filename,duration -of default=noprint_wrappers=1:nokey=1 /path/to/input/file -loglevel 0 | awk 'BEGIN {RS="";FS="\n"}{system("ffmpeg -ss "/2" -i "" -vframes 1 out.png") }'

意思是:

使用 ffprobe 获取文件持续时间(以秒为单位),然后通过管道传输到 awk 并使用等于 duration/2[= 的查找时间执行帧提取 ffmpeg 命令15=]