【问题标题】:ffmpeg conversion to mp4 shifts the audio by one frameffmpeg 转换为 mp4 将音频移动一帧
【发布时间】:2016-09-23 07:01:39
【问题描述】:

我有一个 .mov 文件(编解码器 = 运动 jpeg),其中包含每秒包含小脉冲的音频流。

当我使用 ffmpeg 将此文件转换为 mp4 时,我注意到我的所有脉冲现在都关闭了一帧。

我只是简单地使用了“ffmpeg -i source_file.mov target_file.mp4”

这是音频信号之间的比较图像:

A1 是原始音频(.mov),A2 是 ffmpeg 的 mp4 输出音频。 如您所见,与原始脉冲相比,脉冲晚了一帧。

我知道 h264 编解码器是有损的,但如果你问我,一帧偏移似乎是一个很大的损失。

我可以使用 ffmpeg 来获得更好的音频流吗?

这里是输入文件:https://www.dropbox.com/s/6y5g7lo5dvu0ub1/BBB_09_tree_trunk_009_ANIM_001.mov?dl=0

这是输出文件: https://www.dropbox.com/s/10zuzwn0qs8l853/BBB_09_tree_trunk_009_ANIM_001.mp4?dl=0

【问题讨论】:

    标签: audio ffmpeg mp4


    【解决方案1】:

    我一直在根据自己的需要处理这个问题,我的文件格式必须是 mp4。我正在使用 mxf 文件。我尝试了几个选项,发现这样可以给出最准确的结果(为简单起见,我删除了细节):

    ffmpeg -ss 00:00:00.021 -i "input.mxf" -itsoffset -0.044 -i "input.mxf" -c:v libx264 -c:a aac -map 0:a -map 1:v "输出.mp4"

    在 21 毫秒开始第一个文件并将其映射为音频,然后将视频向后移动 44 毫秒,这给了我最准确的同步(在几个样本内)。我不知道为什么 22ms 不那么准确(当这就是引物样本问题似乎等同的时候)并且我发现没有任何东西可以让我在样本中进行更精细的工作。带有 PTS 偏移的过滤器没有影响。也许它对不同的文件格式的工作方式不同。还值得注意的是,没有 -itsoffest 的相同命令给出了相同的同步结果,但有一个区别。视频流持续时间为 1 帧,音频和容器持续时间为 1 毫秒。使用 -itsoffest,持续时间仅相差 1ms。您可以使用 22 毫秒来获得准确的持续时间,但请检查您的同步,它可能会稍微多一点。

    另外值得注意的是,我偶然发现了一些开发人员对 -itsoffset 标签的评论,其中澄清了它不适用于音频,它适用于视频。似乎上面的答案是建议将 offest 映射到音频,这显然不是该功能的构建方式。 https://trac.ffmpeg.org/ticket/1349

    【讨论】:

      【解决方案2】:

      如果你复制音频,你不应该得到转变。

      ffmpeg -i source_file.mov -c:a copy target_file.mp4 
      

      【讨论】:

      • 它有所帮助,但并不完全。我现在有一个半帧的转变。我的一位同事告诉我它并不总是有效......即:命令(带有“-c:a copy”参数)中止并为他正在测试的某些文件提供错误......)
      • 看起来您在这里拥有的是 AAC priming sample,玩家负责,但显然 Premiere 没有。你可以试试ffmpeg -i source_file.mov -itsoffset 0.044 -i source_file.mov -map 0:v -map 1:a -c:a copy target_file.mp4。我看看有没有直接的解决办法。
      • 与传递 -c:a 副本的结果相同
      • 可以接受 MP3 编解码器吗? -c:a libmp3lame。将其添加到您的原始命令中。
      • 是的 mp3 很好,但我仍然有半帧音频转换
      猜你喜欢
      • 2021-12-23
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2021-08-11
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多