这是我的命令。我需要在末尾添加一些内容,以便每秒或指定秒数拉出一个 vframe 并保存到文件。我已经看到了如何单独执行此操作但不是作为第二个输出。我一直在尝试但就是无法成功。有人知道吗?
ffmpeg -y -nostdin -hide_banner -loglevel warning -err_detect ignore_err -fflags +genpts -async 1 -probesize 5120000 -analyzeduration 5000000 -i source.m3u8 -vcodec copy -scodec copy -acodec copy -individual_header_trailer 0 -f segment -segment_format mpegts -segment_time 10 -segment_list_size 6 -segment_format_options mpegts_flags=+initial_discontinuity:mpegts_copyts=1 -segment_list_type m3u8 -segment_list_flags +live+delete -segment_list output_%d.ts
答案1
在第一个输出之后立即添加第二个输出。使用 select video 过滤器在每个 X 秒间隔内挑选最近的帧,然后使用 setpts 过滤器生成平滑的时间戳。请注意,这将解码整个视频流。在保存的片段上运行单个命令的成本最低。
使用
ffmpeg -y -nostdin -hide_banner -loglevel warning -err_detect ignore_err -fflags +genpts -async 1 -probesize 5120000 -analyzeduration 5000000 -i source.m3u8 -vcodec copy -scodec copy -acodec copy -individual_header_trailer 0 -f segment -segment_format mpegts -segment_time 10 -segment_list_size 6 -segment_format_options mpegts_flags=+initial_discontinuity:mpegts_copyts=1 -segment_list_type m3u8 -segment_list_flags +live+delete -segment_list output_%d.ts -vf "select='lt(mod(t\,X),0.007)',setpts=N/FR/TB" -q:v 10 frames-%d.jpg