2012-09-21 88 views
5

我一直在尝试使用ffmpeg 0.11.1从视频中提取关键帧。到目前为止,我尝试过的所有命令都不提取关键帧,而是返回所有帧,即输出中的25fps *总时间帧数。 我试着将keyint_min设置为25,以确保每秒最多有1个关键帧。ffmpeg关键帧提取

ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -g 250 -keyint_min 25 -i C:\test.mp4 -vsync 2 -f image2 C:\testTemp\thumbnails-%02d.jpeg 

但仍然返回所有帧。

然后我试着将关键帧分开20秒。

ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)*(isnan(prev_selected_t)+gte(t-prev_selected_t\,20))' -vsync 0 -f image2 C:\testTemp\%09d.jpg 

再次同样的结果,所有的帧都被返回。

我该怎么办?

回答

9

在您的第一个命令中,您使用过滤器作为输入选项。我不知道ffmpeg会如何解释这一点。

尝试这种情况:

ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)',setpts='N/(25*TB)' C:\testTemp\%09d.jpg 

更改25到源的帧速率:30000/1001对于NTSC视频,24000/1001为NTSC膜,25,用于PAL等

控制输出质量与-q:v-qscale:v选项(在旧的ffmpeg中只称为-qscale)。 mpeg *的范围是1-31,其中31是最差的质量。

下次请记住,ffmpeg用法问题将在superuser.com上提出,因为stackoverflow专门用于编程。

+0

嗨,谢谢,但我得到一个错误错误初始化过滤器选择与参数。 '打开和关闭'的数量不相等,所以我试着改变select部分select ='eq(pict_type \,I),setpts = N /(25 * TB)'然后选择''eq(pict_type \,I ),setpts ='N /(25 * TB)''但都返回相同的错误 –

+0

对不起。糟糕的粘贴工作。我更新了命令,但我目前无法测试。 – LordNeckbeard

+0

我得到:缺少')'或'eq(pict_type \,I)'中有太多的参数,然后在解析表达式'eq(pict_type \,I)'时出现另一个错误' –