在 ffmpeg 中,如何仅延迟 .mp4 视频的音频而不转换音频?

在 ffmpeg 中,如何仅延迟 .mp4 视频的音频而不转换音频?

在我的 .mp4 文件中,音频延迟为 -3840 毫秒。我已在 KMplayer 中同步它,但我不想使用 MKVGUI 制作 .mkv 文件。我只需要将音频延迟 3840 毫秒,其他一切都应保持不变。
使用 ffmpeg 完成此操作的正确命令是什么?
非常感谢您的帮助。

答案1

如果你需要延时视频3.84 秒,使用如下命令:

ffmpeg -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 1:v -map 0:a -c copy "movie-video-delayed.mp4"

如果你需要延迟音频3.84 秒,使用如下命令:

ffmpeg -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 0:v -map 1:a -c copy "movie-audio-delayed.mp4"

确保您的 ffmpeg 版本不太旧,比 2012 更新的版本就足够了。


解释

-itsoffset 3.84 -i "movie.mp4"

偏移时间戳全部在输入文件中流速为 3.84 秒关注选项(movie.mp4)。itsoffset 记录在主要选项部分

-map 1:v -map 0:a

从第二个(延迟)输入获取视频流,从第一个输入获取音频流 - 两个输入当然可以是同一个文件。map 记录在高级选项部分

您可以在这里找到更详细的解释:
http://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/

答案2

正如目前所述得票最高的答案,您可以使用 ffmpeg 的-itsoffset。根据ffmpeg 维基,如果您不想偏移所有流,您只需指定两次输入文件。一次指定您想要保持原样的流,另一次指定您想要偏移的流。然后您只需将您想要的流映射到最终输出文件。这样,就无需提取流,然后稍后将它们重新混合在一起。

例如(从 wiki 复制),如果您希望所有音频流偏移 5 秒:

ffmpeg -i video.mp4 -itsoffset 5 -i video.mp4 -map 0:v -map 1:a out.mp4
  • -map 0:v将从第一个输入文件 (video.mp4) 复制视频
  • -map 1:a-itsoffset将从第二个输入文件复制音频。该文件也恰好是 video.mp4,但由于在相应选项之前使用了,因此延迟了 5 秒-i

答案3

制作第一个静音音频:

ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 3 silence_3_sec.mp3

然后连接文件:

ffmpeg -i "concat:silence_3_sec.mp3|input.mp3" -acodec copy out.mp3

答案4

我使用 Audacity 提取音频,然后从视频末尾剪掉一些静音(等于延迟),并添加到音频的开头。

对音频进行任何其他调整(例如标准化)后,我导出音频,并通过 ffmpeg 替换原始音频:

ffmpeg-i "in.mp4" -i "synced.m4a" -vcodec copy -acodec copy -map 0:0 -map 1:0 out.mp4

相关内容