我有一个 mp4
文件,只有一个视频流(没有音频)和一个 wav
音频文件,我想使用 添加到视频中ffmpeg
。音频和视频在 session 期间同时录制,前者来自 PC 上的混音器输出,后者来自数字摄像机。
我正在使用这个 ffmpeg
命令:
ffmpeg -i incontro3.mp4 -itsoffset 18.39 -i audio_mix.wav -c:v copy -c:a aac final-video.mp4
我在这里使用 -itsoffset 18.39
选项,因为我知道 18.39s 是视频音频延迟。
我遇到的问题是在输出文件中,音频在开始时与视频完全同步, 它在电影播放过程中慢慢失去同步。
如果 ffprobe
视频文件的输出是:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'incontro3.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.25.100
Duration: 00:47:22.56, start: 0.000000, bitrate: 888 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 886 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
音频文件的 ffprobe
输出是:
Input #0, wav, from 'audio_mix.wav':
Metadata:
track : 5
encoder : Lavf57.25.100
Duration: 00:46:32.20, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
我正在使用最新的 ffmpeg
Zeranoe windows build git-9591ca7 (2016-05-25).
期待任何帮助/想法!
更新 1: 看起来问题出在视频-音频合并的上游,并且可能出在由生成的 MTS
文件的串联和转换中将摄像机转换为 mp4
视频。当我在理解上取得任何进展时,我会跟进......
更新 2: 问题不在于相机生成的 MTS
文件的初始合并。或者,至少,如果我将它们与 cat
或 ffmpeg -f concat
更新 3: 按照 @Mulvya 的建议,我观察到漂移率是恒定的(至少就我的肉眼判断而言)。我还尝试用另一个软件叠加 A/V 轨道,漂移完全相同,从而排除 ffmpeg
是罪魁祸首。我的(不好的)感觉是这个问题可能与数码摄像机的内部时钟和用于录音的笔记本电脑以略微不同的速率运行有关(参见 here 我刚刚发现的相同问题的报告)。
最佳答案
由于漂移率是恒定的,您可以使用 FFmpeg 过滤器的组合来重新定时音频。
ffmpeg -i audio_mix.wav -af asetrate=44100*(10/9),aresample=44100 retimed.wav
这里,44100*(10/9)
表示实际编号。表示 1 秒声音的样本数,即如果在原始 WAV 播放 100 秒后,刚听到的音频是第 90 秒,则样本消耗率应增加 10/9
。这将导致非常规的采样率,因此添加了 aresample 以将其重新采样回标准速率。
关于audio - 将 wav 和 mp4 与 ffmpeg 合并时音视频同步漂移缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436897/