使用 ffmpeg select 过滤器
use of ffmpeg select filter
我坚持使用 ffmpeg select 过滤器,因为我只想获取输入视频的结束帧,但我无法弄清楚过滤器的 selection 表达式完成工作,
我的代码如下所示:
ffmpeg -i in.mp4 -filter_complex "select=expr_selecting_lastest_frame, overlay=overlay_expr" out.jpg
现在我该如何编码 expr_selecting_lastest_frame?
你们有想法吗?
还有其他方法可以完成工作吗?请帮忙,谢谢!
使用 ffprobe 获取总帧数并将其分配给 var
$frame_count="$(ffprobe -v 0 -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 in.mp4)";
使用 select 过滤器中的变量
ffmpeg -i in.mp4 -filter_complex "select='eq(n,$frame_count)'" -vframes 1 out.jpg
或倒数第二帧
ffmpeg -i in.mp4 -filter_complex "select='eq(n,$frame_count-1)'" -vframes 1 out.jpg
对于具有已知持续时间和全局 header 的格式,例如 MP4 或 MKV,您可以
ffmpeg -sseof -3 -i file -vsync 0 -q:v 1 -update true out.jpg
sseof
从末尾开始查找 - 我使用值 3 来说明具有较长音频流的文件。 -update
是一个 image2 muxer 选项,它告诉 ffmpeg 覆盖输出文件。所以最后一次覆盖输出是在处理最后一帧时。
我坚持使用 ffmpeg select 过滤器,因为我只想获取输入视频的结束帧,但我无法弄清楚过滤器的 selection 表达式完成工作, 我的代码如下所示:
ffmpeg -i in.mp4 -filter_complex "select=expr_selecting_lastest_frame, overlay=overlay_expr" out.jpg
现在我该如何编码 expr_selecting_lastest_frame? 你们有想法吗? 还有其他方法可以完成工作吗?请帮忙,谢谢!
使用 ffprobe 获取总帧数并将其分配给 var
$frame_count="$(ffprobe -v 0 -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 in.mp4)";
使用 select 过滤器中的变量
ffmpeg -i in.mp4 -filter_complex "select='eq(n,$frame_count)'" -vframes 1 out.jpg
或倒数第二帧
ffmpeg -i in.mp4 -filter_complex "select='eq(n,$frame_count-1)'" -vframes 1 out.jpg
对于具有已知持续时间和全局 header 的格式,例如 MP4 或 MKV,您可以
ffmpeg -sseof -3 -i file -vsync 0 -q:v 1 -update true out.jpg
sseof
从末尾开始查找 - 我使用值 3 来说明具有较长音频流的文件。 -update
是一个 image2 muxer 选项,它告诉 ffmpeg 覆盖输出文件。所以最后一次覆盖输出是在处理最后一帧时。