使用ffmpeg选择过滤器

问题描述 投票:1回答:2

我坚持使用ffmpeg选择过滤器,因为我只想获取输入视频的结束帧,但我无法弄清楚过滤器的选择表达式以完成工作,我的代码如下所示:

ffmpeg -i in.mp4  -filter_complex  "select=expr_selecting_lastest_frame, overlay=overlay_expr"  out.jpg

现在我如何编写expr_selecting_lastest_frame?你们有想法吗?有没有其他方法来完成工作?请帮帮忙,谢谢!

video ffmpeg video-encoding video-editing
2个回答
2
投票

使用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)";

在选择过滤器中使用var

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

2
投票

对于具有已知持续时间和全局标题的格式,如MP4或MKV,您可以这样做

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

sseof从最后搜索 - 我使用值3,来计算具有更长音频流的文件。 -update是一个image2 muxer选项,它告诉ffmpeg覆盖输出文件。因此,最后一次覆盖输出是在处理最后一帧时。

© www.soinside.com 2019 - 2024. All rights reserved.