如何使用 ffmpeg 将 30 fps 的视频转换为 24 fps,然后再转换为 25 fps?

如何使用 ffmpeg 将 30 fps 的视频转换为 24 fps,然后再转换为 25 fps?

我想为我爸爸制作一张 PAL DVD,里面是一部以 24 fps 拍摄并以 30 fps 格式存储的电影。我尝试直接将其转换为 25 fps,但结果并不流畅。有很多重复的帧 - 比如 5 帧,然后是重复的帧,然后是 3 帧,重复的帧,8 帧,重复的帧等等。但是,当我将其转换为 24 fps 时,它很流畅。我有另一个 24 fps 的视频,当我将其转换为 25 fps 时,它也非常流畅(也就是说,我想每秒只会丢失一帧)。

因此,我希望 ffmpeg 首先将电影转换为 24 fps,然后将其转换为 25 fps,看看是否会比直接转换为 25 fps 产生更流畅的结果。

我该怎么做?我觉得这可能与管道有关,但我不知道该怎么做。

输入是 640 x 480 x 29.97 fps AVC1,然后我想无损转换为 24 fps,并将其导入 720 x 576 x 25 fps MPEG2 视频。我已经找到了如何执行缩放和填充过滤器的方法,但我无法掌握管道操作。这太复杂了。

编辑:我正在运行 Windows 7。

答案1

有一个非正统的解决方案,但显然可以给你预期的结果。你需要进行两次转换,我建议每次转换分两次进行,以尽量减少整个过程中的质量损失。

第一步,您需要将原始视频转换为可被两个帧速率(原始和目标)整除的帧速率。在这种情况下,可被 30 和 25 整除的较小数字是 150。因此,进行第一次转换,将 <-r> 参数更改为 150。为了保持与原始视频相似的质量,您需要将原始比特率乘以 5。这是必要的,因为结果视频的每秒帧数将是原始视频的 5 倍。音轨可以直接复制。

第二步是将第一次转换的结果转换为帧速率 = 25 的视频。对于此转换,您可以使用比第一步小 6 倍的比特率,质量将相似。此步骤中还可以复制音轨。

经过这两次转换后获得的视频不会具有与原始视频相同的质量,但是结果将是使用 ffmpeg 可以获得的最佳结果,而不会对电影的原始时间进行任何更改,也不会扭曲音频。

答案2

好吧,我根据在 Google 上找到的示例尝试了以下方法,似乎有效。它并没有解决我的问题,也没有像我想象的那样产生流畅的视频,但它实现了我最初提出的问题。

ffmpeg -i %1 -r 24 -c:v rawvideo -c:a pcm_s16le -f avi pipe:1 | ffmpeg -i - -r 25 -c:v mpeg2video -q:v 4 -c:a mp2 -b:a 192k "%~nx1.vob"

此命令将 30 fps 的输入文件 %1 转换为 24 fps,然后将解压缩的帧和解压缩的音频传输到 ffmpeg 的另一个实例,后者将它们转换为 mpeg2video 和 mp2 音频中的 25 fps。

相关内容