Nun*_*uno 2 video ffmpeg frame-rate frame rate
我一直在 Stack Overflow 上寻找答案并到处搜索……尽管对我来说它应该是一个非常简单的命令行,但我在任何地方都找不到答案。
我想使用 FFmpeg 将视频的帧速率从 23.976fps 更改为 24fps,无损并保持总帧数。
为了使它更简单:
假设我有一个25fps 的视频,总长度为 100 帧。
如何使用FFmpeg将其帧速率更改为 50fps,无损并保持 100 帧的总长度相同?
这是迄今为止我遇到的最好的解决方案(可以在这里找到):
将帧提取为 rawvideo:
ffmpeg -i input.mov -f rawvideo -b 50000000 -pix_fmt yuv420p -vcodec rawvideo -s 1920x1080 -y temp.raw
使用新的帧率重新创建视频:
ffmpeg -f rawvideo -b 50000000 -pix_fmt yuv420p -r 24 -s 1920x1080 -i temp.raw -y output.mov
注意 1: 在使用新的帧速率重新创建视频时,我必须删除“-b 50000000”,以使其正常工作。
它完全符合我的意图,但我仍然想知道是否有更简单的方法来做到这一点?正如同一篇文章中所建议的那样,我尝试将它们仅在一行中连接在一起,但无法使其正常工作。
注 2: 尽管它完全符合我的要求,但我后来才意识到使用这种方法存在质量损失,我宁愿避免这种情况。
提前谢谢大家!
如果您的视频编解码器是 H.264/5,则此两步方法有效且无损。
#1解复用到原始比特流
ffmpeg -i in.mov -c copy in.264
Run Code Online (Sandbox Code Playgroud)
#2使用新帧率重新混合
ffmpeg -r 24 -i in.264 -c copy out.mov
Run Code Online (Sandbox Code Playgroud)
对于其他编解码器,如果有可用的原始比特流格式,则无需转码即可完成。
如果转码没问题,以下单步工作:
ffmpeg -r 24 -i in.mov -vsync 0 -c:v <codecname> out.mov
Run Code Online (Sandbox Code Playgroud)
当然,您需要指定比特率等参数来控制质量。