audio - 将 wav 和 mp4 与 ffmpeg 合并时音视频同步漂移缓慢

标签 audio video ffmpeg synchronization

我有一个 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 文件的初始合并。或者,至少,如果我将它们与 catffmpeg -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/

相关文章:

java - 用Java播放音效

android - 如何使用 mp3 音频文件和图像制作 3gp 视频?

javascript - 使用javascript将视频添加到div

ffmpeg - 从 ffmpeg 流式传输到 Youtube 时没有音频

ffmpeg 零延迟网络摄像头流式传输

javascript - WebAudio API 数据数组大小?

java - 为什么这段代码不播放任何声音?

c++ - 有没有办法在 Mac OS 上播放系统提示音?

javascript - HTML5 视频 - 加载百分比?

ffmpeg - 如何使用初始帧为视频添加时间