如何在不重新编码的情况下更改视频的帧率

Ebo*_*ike 15 video video-conversion avconv

我正在尝试更改 MP4 视频的帧率(这是一个 120fps 的 GoPro 视频,我想以 30fps 的速度播放以获得慢动作效果)。

我为此使用 avconv:

avconv -i SourceMovie.mp4 -vf setpts=4.0*PTS -r 30 DestMovie.mp4
Run Code Online (Sandbox Code Playgroud)

这在技术上有效,但它重新编码了电影。除了速度慢,这显然是一个质量问题。从技术上讲,应该有一种方法可以在视频标题中设置 fps,我该如何更改?(除 avconv 之外的任何工具也可以使用。)

Mit*_*tch 18

MP4Box可以做到。

命令

MP4Box -add SourceMovie.mp4#video -raw 1 -new test
Run Code Online (Sandbox Code Playgroud)

创建文件testtest_track1.h264. 您现在可以使用您想要的任何支持的帧率(在本例中为 30)创建一个 mp4 文件:

MP4Box -add test_track1.h264:fps=30 -new DestMovie.mp4
Run Code Online (Sandbox Code Playgroud)

MP4Box 是gpac软件包的一部分,因此请确保已安装它。

  • 这真的不简单,但我明白了 - 你需要分两步完成。首先将视频流单独提取为 raw (`MP4Box -add source.mp4#video -raw 1 -new test`),然后再次将其保存为 MP4 (`MP4Box -add test_track1.h264:fps=30 -new dest.mp4)。 mp4`)。您也可以在那里添加音轨(通过#audio)。 (6认同)
  • 最好在第一个命令中使用“-single”选项。“MP4Box -single 1 -raw 1 SourceMovie.mp4”仅创建一个文件“SourceMovie_track1.h264”,而不是两个。 (2认同)

tho*_*hom 6

更改视频(容器)标头中的帧速率对视频流(或音频流)本身没有影响。重新编码是唯一的选择。

视频流具有时间戳,并且在大多数视频中,由于帧间压缩,帧之间相互依赖。一些播放器可以加快和减慢视频的速度,但不能通过嵌入式命令或其他方式来实现。当容器命令要求这样做时,任何玩家都不能即时更改帧速率。视频文件最终会超出规范(即不符合标准),99.9% 的玩家将拒绝遵守。不重新编码就完全不可能做你想做的事。当然,您可以等待重新编码,直到编辑的最后一步。

  • 嗨迈克,不,你的问题并不愚蠢,坦率地说,你的想法很聪明。我喜欢你的思维方式。我在答案中添加了更多信息,因为将其放入评论框中太长了。 (2认同)