剪切 MP4 文件中的部分音轨

剪切 MP4 文件中的部分音轨

我有一个 .MP4 文件,其中有一个视频轨道(H.264,25 FPS)和一个音频轨道(MP2)。总长度约为 2:52(两小时 52 分钟)。我注意到 A/V 在约 2:34 之前是同步的,但之后是不同步的,即音频延迟约 0.3 秒。

我的计划是

  1. 将音轨提取为 .MP2
  2. 剪切 0.3 秒(使用 mp3directCut,效果很好)
  3. 将视频轨道与剪切的音轨混合。

完成。但是,结果并不令人满意,因为从视频一开始 A/V 就不同步了。我仔细查看了原始文件并转储了时间戳。视频轨道的最小 PTS 为 0.16 秒,所有 PTS 都增加了 0.04 并且没有任何间隙。音轨的最小 PTS 为 0.212 秒,大多数 PTS 增加了 24 毫秒(对于 MP2 来说正常),但很少有差异小于或大于 24 毫秒(这是可以的,但显然在提取轨道时会出现问题,请参阅下面的问题)

我的问题是:提取到 MP2 时会丢失时间戳吗?那么我的初始计划就注定要失败。还有什么其他方法可以剪切 MP4 文件中的一小部分音轨?当然,无需重新编码音频。我熟悉 FFmpeg 和 AviDemux。

答案1

提取为 MP2 时会丢失时间戳吗?

是的。.mp2/.mp3没有时间戳。

还有哪些方法可以剪切 MP4 文件中音轨的一小部分?

任何支持 MP2 的带时间戳的容器,即 MPEG-TS、MP4/MOV、MKV。可能还有其他。


尝试使用 concat 解复用器,

ffmpeg -i in.mp4 -f concat -i audio.txt -map 0:v -map 1:a -c copy out.mp4

哪里audio.txt

file in.mp4
outpoint 2:34:00
file in.mp4
inpoint 2:34:00.30

答案2

解决方案是:

  1. 将音轨的第一部分提取为part1.mp4
  2. 将音轨的第二部分提取为part2.mp4
  3. 将 part1.mp4 与 part2.mp4 连接起来得到 complete.mp4
  4. 将原始文件中的视频与 complete.mp4 中的音频混合在一起

有关具体的 FFmpeg 命令,请参阅上面 @Mulvya 的评论。再次感谢他/她的支持。

相关内容