【问题标题】:ffmpeg Reduce frame rateffmpeg 降低帧率
【发布时间】:2019-11-20 05:56:10
【问题描述】:

我正在尝试将 h264 视频转换为 h265。有些视频是 50fps 并且似乎有很多重复帧(100000+)。我猜这些是 25fps 的视频,不知何故,它们的每一帧都是重复的。

ffmpeg 似乎并没有丢帧,所以我想这是在浪费空间(虽然我希望很少,但它可能不是最佳的)。

不过我想解决这个问题。

有没有办法将帧速率设置为 30,比如说(-r 30)并让 ffmpeg 正确地保持一切同步(音频正确对齐)并且没有任何实际问题?这可能需要插值之类的,但我绝对不希望音频关闭(这很关键),我不希望改变长度。

我不确定我是否可以只指定 -r 30 并且一切都会解决,如果它甚至很重要(也许 h265 可以非常有效地处理这些重复项?),或者我是否需要指定更多?

所以,从某种意义上说,我实际上是在提高帧速率(如果它是 25fps,我将提高到 30,因此是插值)。

我也有很多发生这种情况的视频。有没有什么有效的方法可以在必要时返回并重新编码?

在 h265 中包含这些重复帧的压缩后果是什么?它是非常有效地存储它们还是我在浪费空间?

我有几百 GB 的文件,可能很多文件都有这个问题,因为我不知道发生了什么,也没有调查它,但看到了很多消息。我实际上认为这只是一些毫无意义的错误,因为很明显视频与另一个一致。如果 100k 重复帧意味着静态视频,但我没有想到有人会复制每一帧(因为这只会浪费空间)。 [我试图搜索,但很少有关于这个特定问题的信息]

【问题讨论】:

  • 您如何不确定-r 30 是否会成功?当你尝试这样做时它做了什么?
  • @L.ScottJohnson 我不确定,但我不想使用它,它不起作用并浪费一个小时转换视频。这就是我问的原因。似乎 -r 实际上并没有进行任何插值,因此当可以进行插值时,它似乎不是一个很好的选择。

标签: ffmpeg


【解决方案1】:

如果输出速率与输入速率不同,ffmpeg 默认会复制或丢帧;除非您专门使用诸如 mininterpolate 或 framerate 之类的过滤器,否则不会发生插值。

x264 和类似地,x265 有效地存储重复帧 - 我们正在谈论

【讨论】:

  • 它如何管理使事物与丢弃或复制帧保持正确同步?这不会产生微计时问题吗?我们谈论的是 3/5 错误累积(50 fps 到 30fps)。我猜它会丢弃并添加帧以使所有内容保持同步,例如,每 15 帧内容应该排队。
  • 您知道使所有这些工作达到最佳状态的正确命令吗?插值会显着增加压缩时间吗?我以 1:1 的比例运行,所以如果时间加倍,那就不值得了。
  • 在从一种速率转换为另一种速率时,您总是会遇到微计时问题。由于输出时间戳是根据最接近源时间戳的输出时间戳“槽”分配的,因此可以保持整体同步。
  • 是的,但魔鬼在细节中。如果它是几秒钟的数量级,那么它是一个问题,如果它是毫秒,那么它不是。如果它每 3/5 秒重新同步一次,那么这很明显。这取决于算法。我确信 ffmpeg 做得很好,并且会以最小化问题的方式复制或丢帧,但我正在寻找一种通过适当的命令充分利用 ffmpeg 的方法。 -r 30 够吗?当一个人有 29.95 时呢?如果算法太基本,这会使情况变得更糟。时间可能会逐渐减少。 lcm(3000,2995) = 1797000.
  • 它也不像“试试看”那么简单...因为我是批量转换并且无法查看每个视频...而且因为有各种各样的视频编码有些可能无法正常工作,直到源被删除后才会被注意到。
猜你喜欢
  • 2021-03-26
  • 2017-10-21
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多