libavfilter缩略图似乎只处理第一组N帧

时间:2012-01-28 20:26:57

标签: ffmpeg

根据文档(见下文),' - vf缩略图'应该处理批量的N帧并从每个批次中挑选1帧,但事实并非如此。难道我做错了什么?我还尝试了“-vframes 5”和“out%d.png”的各种选项,但我重复了多次相同的帧,但它确实处理了多批N帧。

8.37缩略图

在给定的连续帧序列中选择最具代表性的帧。

它接受要分析的帧批量大小作为参数(默认N = 100);在一组N帧中,过滤器将选择其中一个,然后处理下一批N帧,直到结束。

由于过滤器跟踪整个帧序列,因此较大的N值将导致较高的内存使用量,因此不建议使用较高的值。

以下示例每50帧提取一张图片:

缩略图= 50

使用ffmpeg创建缩略图的完整示例:

ffmpeg -i in.avi -vf thumbnail,scale = 300:200 -frames:v 1 out.png

1 个答案:

答案 0 :(得分:1)

您需要设置另一个参数-vsync(将其设置为0或2),或者muxer出错帧,因为默认情况下-vsync=1

例如,正确的命令是

ffmpeg -i INPUT_FILE -vsync 0 -vf thumbnail,scale=300:200 -frames:v 20 -f image2 img-%04d.jpg

至于我,我使用 I-frame 选择器代替缩略图过滤器 - 它会生成更多文件,但对于我的目的来说更准确。 这是带时间戳的示例,首先我们必须从文件中找到正确的fps(这是Mac OS X grep方言)来设置r=

的值
ffmpeg -i INPUT_FILE 2>&1 | grep -Po "[^\s]+\sfps"

此外,您需要选择自己的fontfile,我使用Mac OS X文件

现在全部准备就绪(f.e。保存前20个I帧)

ffmpeg -i INPUT_FILE -someq -vsync 0 -vf \
drawtext="fontfile=/Library/Fonts/Courier\ New.ttf: \
timecode='00\:00\:00\:00':r=23.98: fontcolor=0xFFFFFFFF:fontsize=18:\
shadowcolor=0x000000EE:shadowx=1:shadowy=1",select='eq(pict_type\,I)'\
-vframes:v 20 -f image2 img-%04d.jpg

(很奇怪,我在\上出错 - 吐出的线条,但都是一行的