我有一个50fps的avi视频,但相机以25fps的速度捕捉。因此,每隔一帧是空的。事实上,相机不时提供一个帧,而且还有更多空帧。
我想使用ffmpeg删除所有空帧并将fps设置为25.我到目前为止找到的最好的是这个命令:
-i video.avi -c mpeg4 -qscale:v 8 -vf fps=25 -vsync drop output.avi
当仅每隔一帧为空时,这将适用于理想情况。这些帧将被丢弃,fps设置为25,视频持续时间将保持不变,没有重复帧。但是如果有更多的空帧,ffmpeg会制作重复的帧以保持持续时间。我需要以某种方式处理视频,任何空的或重复的帧都是不可接受的。另一方面,我不介意视频会更短。
答案 0 :(得分:0)
有一种简单但空间密集的方式来做你想做的事。然而,它不是特定于ffmpeg的 - 但你可以使用ffmpeg来做到这一点。这是怎么回事。
只需导出图片,使用您的图片浏览器删除空图片,然后重新导入视频文件。
要将整个视频导出为单独的图像文件,请使用:
ffmpeg -i yourvideofile.avi -f image2 "./to-remove-empty/%5d.png"
将已修剪的文件重新导入到可以使用的内容中:
ffmpeg -r 25 -i "./empty-removed/*.png" -c:v mpeg4 -qscale:v 8 output.avi
(* .png中的星号应该使它读取没有预先重新编号整个集合的帧)
如果您之后需要在NLE中编辑文件,我建议单独加载帧(即从文件中加载),或者将生成的视频编码为像ProRes HQ(422)这样的中间编解码器。要做到这一点(即使在Windows中),请将codec指定为:
-c:v prores_ks -profile:v 2 -pix_fmt yuv422p10le output.mov
或者,如果您以后需要使用它,我建议使用x264(h264的开放版本)而不是根据您的示例直接使用mpeg4 - 为此,请使用以下格式规范:
-c:v libx264 -crf 23 -pix_fmt yuv420p output.mp4
大多数现代视频播放设备(和计算机)都能识别这种文件格式。
(匹配声音格式/编解码器使用:pcm_s16le用于ProRes(aif),aac用于libx264(m4a))
我还想指出,也可以通过编程方式从文件夹中删除空(即全黑)帧:使用脚本语言(如PHP的GD2库)或图像包(如ImageMagick)。运行命令以确定帧是否全黑,如果是,则删除文件。