修复具有滞后音频的 m4v 视频(音频和视频不同步)

dre*_*ves 2 audio video video-editing video-conversion macos

这是Windows的类似问题:

修复与音频不同步的视频的工具?

我希望在 Mac 上解决这个问题。

我试过 Handbrake 和 Avidemux(后者似乎有一个选项——“shift”——来修复它,但它根本不播放音频所以我不知道它是否在做任何事情!)。

slh*_*hck 5

给自己一份 FFmpeg 的副本。有关如何执行此操作的信息,请参阅这篇文章的底部。

视频是否落后于音频,反之亦然,这并不重要。基本命令如下。我们将传递两次输入,从两个-i选项可以看出,然后延迟一个输入,并将它们合并在一起。

ffmpeg -i in.flv -itsoffset offset -i in.flv -map 1:0 -map 0:1 -c copy out.flv
Run Code Online (Sandbox Code Playgroud)

这里offset是以秒为单位的延迟,例如1.50.35。该值必须为正,因此如果您的音频滞后于视频,我们将不得不偏移视频。这在上面的示例中显示。同样,如果视频滞后于音频,我们将不得不抵消音频。

那么,您如何选择是延迟音频还是视频呢?好吧,由于我们已经延迟了整个in.flv,我们将只选择音频或视频流并将它们与原始音频或视频流合并。这是在-map选项中完成的。

基本上,map有两个数字。冒号前的数字指定输入文件编号(从 0 开始),第二个数字指定输入文件流(也从 0 开始)。

因此,要延迟音频,请使用以下两个选项:

  • -map 1:0 意思是:从第二个输入文件中获取第一个流,(来自原始文件的视频)
  • -map 0:1 意思是:从第一个输入文件中获取第二个流(来自延迟文件的音频)

如果您必须延迟视频,请将其转过来:

  • -map 0:0 意思是:从第一个输入文件中获取第一个流(来自延迟文件的视频)
  • -map 1:1 意思是:从第二个输入文件中获取第二个流(来自原始文件的音频)

最后-c copy将简单地告诉 FFmpeg 复制视频和音频比特流。这意味着将没有编码过程。这使得命令超快,您甚至不会在此过程中失去任何质量。但是,如果您遇到同步错误,那么您应该忽略-c copy并让 FFmpeg 重新编码输入。


您可以通过Homebrew获得最新的稳定 FFmpeg 版本。