繁体   English   中英

如何在不使用ffmpeg保持视频持续时间的情况下重新采样FPS?

[英]How to resample FPS without keeping duration of the video using ffmpeg?

我有一个50fps的avi视频,但是相机以25fps的速度捕获。 因此,第二帧为空。 实际上,相机有时不提供框架,甚至有更多的空框架。

我想使用ffmpeg删除所有空帧并将fps设置为25。到目前为止,我发现的最好的命令是:

-i video.avi -c mpeg4 -qscale:v 8 -vf fps=25 -vsync drop output.avi

当仅每隔两帧为空时,这在理想情况下将起作用。 这些帧将被丢弃,fps设置为25,并且视频持续时间在没有重复帧的情况下将保持不变。 但是,如果还有更多的空帧,则ffmpeg会使重复的帧保持持续时间。 我需要以某种方式处理视频,并且任何空的或重复的帧都是不可接受的。 另一方面,我不介意视频会更短。

有一种简单但占用大量空间的方法来执行您想要的操作。 但是,它不是特定于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中),请将编解码器指定为:

        -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

大多数现代视频播放设备(和计算机)都可以识别此文件格式。

(要使用的匹配声音格式/编解码器:ProRes(aif)为pcm_s16le,libx264(m4a)为aac)


我还想指出,也可以通过编程方式从文件夹中删除空的(即全黑)框架:使用脚本语言(如PHP的GD2库)或图像包(如ImageMagick)。 运行命令以确定框架是否全黑,如果是,请删除文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM