如何使用FFmpeg更改视频帧速率,无损并保持相同的帧数?
我一直在寻找堆栈溢出和谷歌遍地搜索答案...即使它看起来应该是一个非常简单的命令行给我,我无法在任何地方找到答案。如何使用FFmpeg更改视频帧速率,无损并保持相同的帧数?
我想用FFmpeg将视频的帧频从23.976fps更改为24fps,无损并保留帧的总数。
,使其更简单:
比方说,我有一个25fps的视频 100帧的总lenght。
我怎样才能改变它的帧速率50fps的,与的FFmpeg,无损和保持100帧的相同总lenght?
这是迄今为止最好的解决方案我碰到(可发现here):
提取帧作为rawvideo:
的ffmpeg -i input.mov - ˚Frawvideo -b 5000 -pix_fmt YUV420P -vcodec rawvideo -s 1920×1080 -y temp.raw
重新创建新的视频帧率:
ffmpeg的-f rawvideo -b 5000 -pix_fmt YUV420P -r -s 24 1920×1080 -i temp.raw -y output.mov
注1:,我不得不删除“-b 50000000”以新的帧速率重新创建视频时,为了使其正常工作。
它完全按照我的意图去做,但我仍然想知道是否有更简单的方法来做到这一点?我试图只在同一行中将它们放在一起,正如在同一篇文章中所建议的,但是无法使其正常工作。
注2:即使它不正是我想要它做的事,我只是后来才意识到有使用这种方法,我宁愿避免质量损失。
谢谢大家提前!
如果你的视频编解码器是H.264/5,那么这个两步法是有效的,并且是无损的。
#1解复用原始比特流
ffmpeg -i in.mov -c copy in.264
#2 Remux的新的帧速率
ffmpeg -r 24 -i in.264 -c copy out.mov
对于其他的编解码器,如果有一个原始比特流格式提供,则它可以在没有转码的情况下完成。
如果转码是好的,下面的单步工作:
ffmpeg -r 24 -i in.mov -vsync 0 -c:v <codecname> out.mov
当然,你要像bitrate..etc指定参数来控制质量。
嗨Mulvya,非常感谢。是的,视频是直接从相机编码为H.264,并且您的建议非常完美。真的很感激,你救了我的一天。再次感谢你!! – Nuno
更改帧率不会丢失任何帧。它只是改变它们显示的速度。 100帧/ 25fps = 4秒视频,将其改为50fps现在可制作2秒视频(例如:仍然包含总共100帧)。向我们展示在帧率调整期间丢失帧的ffmpeg命令。 –