gpt4 book ai didi

ios - 使用 FFmpeg 的 HEVC 视频切割问题

转载 作者:行者123 更新时间:2023-11-28 21:03:22 25 4
gpt4 key购买 nike

我需要使用 FFmpeg 剪辑视频,但我无法对原始视频进行转码(由于性能原因)。我在 iPhone 上处理 HEVC 视频时遇到了一个问题:剪切视频的开头有滑行现象。

这是我们在发布之前转换视频的方式:

ffmpeg.exe -i original.MOV -c:v copy -c:a aac -ss 4 -y good.mp4

但是对于 HEVC 视频,在剪切视频的开头有 1 秒的小故障:

enter image description here

然后我尝试在输入视频之前放置搜索选项:

ffmpeg.exe -ss 4 -i original.MOV -c:v copy -c:a aac -y good.mp4

结果看起来不错:

enter image description here

经过一些谷歌搜索后发现输入前的 -ss 选项更快但不太准确,而输入后和输出前的 -ss 选项较慢但更准确。

所以我的问题是:

  • 为什么 -ss 选项的行为与放在输入之前/之后的不同?

  • 有没有一种方法可以避免使用 output seek ffmpeg 选项出现故障?

  • “更准确/更不准确”是什么意思?这是否意味着搜索可能太大或太小(比我们指定的大/小)?这种差异有多大?

最佳答案

Why -ss option behaves differently then it is put before/after input?

当用作输入选项(-ss … -i …)时,ffmpeg 首先寻找输入流中的指定位置,然后开始解码帧。

在输入 (-i) 之后使用时,ffmpeg 将从头解码流并丢弃给定时间戳之前的所有帧。

请注意,通常在 -i 之前使用 -ss 时会重置时间戳,这意味着:

  • -ss 10 -i … -t 10 生成从 00:00:10 开始的 10 秒剪辑,
  • -i … -ss 10 -to 20 做同样的事情,
  • -ss 10 -i … -to 10 做同样的事情。

Is there a way to avoid glitches using output seek ffmpeg option?

是的。转码时应该没有任何问题,因为流将首先被解码,包括所有需要的先前帧,即使不在搜索范围内也是如此。然后,转码开始,新的时间戳将分配给输出帧。

What does 'more/less accurate' mean? Does it mean that the seek may be too big or to little (bigger/less than we specified)? How big may be this difference?

在 FFmpeg 2.1 之前,这是一个更大的问题,但现在在您转码时,在输入选项之前寻求准确。查看Seeking wiki entry了解更多信息。

准确性问题仅适用于流复制(-c copy)。在这里,您只能开始从 keyframe 生成有效输出;所有以前的帧都是无用的。

因此,如果您在第 2、4、6 秒等处有关键帧,但您指定在第 5 秒处剪切,则 ffmpeg 将只能从第 6 秒开始输出。但是,它会包括来自第 5–6 秒,尽管带有负时间戳,这样它们就不会被解码器显示。

这是可能发生故障的地方。解码器不遵守这些负时间戳,并且仍然显示帧,然后这些帧看起来被破坏了,因为之前的关键帧不是流的一部分。一些解码器可能只播放音频而不显示视频。

在这种情况下,最好对视频进行转码。

关于ios - 使用 FFmpeg 的 HEVC 视频切割问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47100251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com