在我的 .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