首页 > 解决方案 > 如何使用 FFMPEG 为 -SS 找到“安全”点以避免破坏 A/V 同步?

问题描述

我需要找到一种在不破坏音频/视频同步的情况下使用 -SS 剪切视频的方法。

偶尔它工作得非常好,但大多数时候音频会稍微不同步。显然有一些类似于音频关键帧的东西,但我不知道如何找到它们。

将 -SS 与编解码器的任何规范(包括 -c 复制)结合使用时会出现问题。

就我的目的而言,我不能失去质量,所以这些是必要的。

ffmpeg -i src.mp4 -ss 1:00 -t 30 -c copy result.mp4

往往会破坏同步。

ffmpeg -i src.mpr -ss 1:00 -t 30 result.mp4

产生匹配的 a/v,但使用默认压缩会导致显着的质量损失。

我需要一种方法来找到剪辑将导致匹配 a/v 的时间。

标签: audioffmpeg

解决方案


这个问题实际上与视频关键帧有关。音频/视频有效地在您的 MP4 输出中的不同时间开始。

对于它的价值,我发现使用 Matroska 输出效果很好,因为它似乎比 MP4 更好地支持这些不同的时间戳。

无论如何,您可能会发现此讨论很有帮助: https ://github.com/mifi/lossless-cut/pull/13

这是可能对您有用的相关 FFmpeg 命令。请试一试!

ffmpeg -ss 1:00 -i src.mp4 -t 30 -avoid_negative_ts make_zero -c copy result.mp4

这里的关键是avoid_negative_ts,我相信它允许将以前的 GOP 输出到文件,但是将它们的时间戳设置为全部发生在零(直到它们不应该,当然),这样它们就可以用于解码,允许你任意剪切文件而不转码。


推荐阅读