FFmpeg - 混合连接 MP4 文件时出现 A/V 同步问题

问题描述

首先,我想说我花了一整天时间研究这个问题,尝试了我在网上找到的所有方法,但没有一个解决方案有效,所以我很绝望。

我正在使用 Azure 媒体服务测试实时流式传输。当事件停止时,我希望将录音作为单个 MP4 文件获取,但 Azure 以碎片形式分别保存视频和音频轨道。我发现我可以连接这些文件(我使用了 OSX cat 命令),所以我确实有完美的 MP4 视频和音频文件 - 它们都没有任何中断地播放并且看起来很好。

以下是这些文件的 FFmpeg 信息:

Input #0,mov,mp4,m4a,3gp,3g2,mj2,from 'video_1200k.mp4':
  Metadata:
    major_brand     : isml
    minor_version   : 512
    compatible_brands: ismlpiff
    encoder         : Lavf58.45.100
  Duration: 01:05:49.57,start: 0.085000,bitrate: 1166 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),yuv420p,1280x720,1163 kb/s,23.98 fps,23.98 tbr,90k tbn,47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]

Input #1,from 'audio_128k.mp4':
  Metadata:
    major_brand     : isml
    minor_version   : 512
    compatible_brands: ismlpiff
    encoder         : Lavf58.45.100
  Duration: 01:06:09.57,start: 0.000000,bitrate: 132 kb/s
    Stream #1:0(und): Audio: aac (LC) (mp4a / 0x6134706D),44100 Hz,stereo,fltp,128 kb/s (default)
    Metadata:
      handler_name    : Audio
      vendor_id       : [0][0][0][0]

我注意到了持续时间的差异,但我认为当我混合这些流时,我会得到一个文件,其中最后几秒钟只有音轨。我从测试最基本的 FFmpeg 命令 ffmpeg -i video_1200k.mp4 -i audio_128k.mp4 -c copy muxed.mp4 开始,但结果发现 A/V 不同步 - 视频领先于音频,并且随着时间的推移差距增加了很多。

我几乎尝试了我在类似帖子中找到的所有 FFmpeg 命令参数,包括重新编码、偏移音频、加速音频(以匹配视频持续时间)、添加音频过滤器(aresample=async 与不同的值) 并且他们都没有帮助 - 我设法实现的只是在视频开始时获得同步,但是音频越来越延迟(在 50 分钟时延迟大约为 15 秒)。

任何想法我做错了什么?任何提示将不胜感激。

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)