Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video ffmpeg选择滤波器的使用_Video_Ffmpeg_Video Encoding_Video Editing - Fatal编程技术网

Video ffmpeg选择滤波器的使用

Video ffmpeg选择滤波器的使用,video,ffmpeg,video-encoding,video-editing,Video,Ffmpeg,Video Encoding,Video Editing,我一直坚持使用ffmpeg选择过滤器,因为我只想拾取输入视频的结束帧,但我无法找出过滤器的选择表达式来完成工作, 我的代码如下所示: ffmpeg -i in.mp4 -filter_complex "select=expr_selecting_lastest_frame, overlay=overlay_expr" out.jpg 现在,我如何对expr\u选择最新帧进行编码? 你们有什么想法吗? 有没有其他办法完成这项工作?请帮忙,谢谢 使用ffprobe获取总帧数并将其分配给一个变

我一直坚持使用ffmpeg选择过滤器,因为我只想拾取输入视频的结束帧,但我无法找出过滤器的选择表达式来完成工作, 我的代码如下所示:

ffmpeg -i in.mp4  -filter_complex  "select=expr_selecting_lastest_frame, overlay=overlay_expr"  out.jpg
现在,我如何对expr\u选择最新帧进行编码? 你们有什么想法吗?
有没有其他办法完成这项工作?请帮忙,谢谢

使用ffprobe获取总帧数并将其分配给一个变量

$frame_count="$(ffprobe -v 0 -select_streams v:0 -count_frames -show_entries stream=nb_read_frames -of csv=p=0 in.mp4)";
在选择过滤器中使用变量

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

对于具有已知持续时间和全局标头的格式,如MP4或MKV,可以执行以下操作

ffmpeg -sseof -3 -i file -vsync 0 -q:v 1 -update true out.jpg

sseof
从末尾开始搜索-我使用了一个值3,以说明音频流较长的文件
-update
是一个image2 muxer选项,它告诉ffmpeg覆盖输出文件。因此,最后一次覆盖输出是在处理最后一帧时。

您只有一个输入。你在叠加什么?嗨,Gyan,谢谢你的评论,我会在我的实际工作中使用更复杂的过滤器链表达式,但在我的问题中,请只关注“选择”过滤器。你不能使用选择过滤器。选择过滤器有不同的应用,它用于比较视频中的后续帧并计算它们的差值。我想您必须按帧编号或持续时间提取帧。我希望找到一种只需编写一行命令即可实现目标的方法,但这似乎是不可能的,谢谢大家。