ffmpeg - 提取单帧 - 去隔行

ffmpeg - 提取单帧 - 去隔行

我想从视频的每一秒中提取第一张图像。我有一个基于视频时间码的命令行,当视频是逐行扫描时它可以正常工作,但在隔行扫描时则不行(在这种情况下只输出第一个字段,从而创建半高图像)。我尝试了各种组合,bwdifselect我创建的过滤器链要么导致错误,要么仍然返回半尺寸图像。有人可以帮我解释语法吗?

以下是我对渐进式视频源正常工作的过滤器的调用:
ffmpeg -i $infile -vf "select='if(eq(n\,0),1,floor(t)-floor(prev_selected_t))" -vsync 0 $outfile

以下仍然只返回隔行源的半高图像:
... -vf "bwdif=0,select='if(eq(n\,0),1,floor(t)-floor(prev_selected_t))'"

... -vf "bwdif=0,select='between(mod(n\,$ips)\,1\,2)'" --$ips是每秒的图像数量

... -vf "select='between(mod(n\,$ips)\,1\,2)',bwdif=0"

...并且在相关说明中,是否有关于select过滤器的真正完整,详尽的文档?(不,我不认为“ffmpeg 过滤器”第 16.16 章是详尽的)。

谢谢。

答案1

解决方案是使用交织首先过滤。这会导致半高帧重新隔行,然后再使用 bwdif 将它们反隔行成完整帧。对我有用的完整命令行是:

ffmpeg -i $infile -vf "tinterlace=mode=merge,bwdif=0,select='if(eq(n\,0),1,floor(t)-floor(prev_selected_t))" -vsync 

非常感谢 stackoverflow 的一个帖子中名为 Gyan 的回复者(可能就是从事 ffmpeg 开发的人?)。

相关内容