首页 > 解决方案 > ffmeg:合并的 TS 文件中的音频漂移,用于单独的音频和视频 TS 文件

问题描述

基本情况

我有两个 TS 文件列表(每个列表都在 m3u8 文件中指定)。第一个列表中的 TS 文件只有视频。第二个列表中的 TS 文件只有音频。

我将第一个列表中的 TS 文件组合起来,以获得持续时间 A 的仅视频文件 result_video.ts(请参阅下面使用的代码)。我组合了第二个列表中的 TS 文件,以获得持续时间 B 的纯音频文件 result_audio.ts(请参阅下面使用的代码)。问题是,A * 76.28% = B虽然我希望两个文件具有相同的长度。然后,我将 result_video.ts 和 result_audio.ts 结合起来,得到一个 result.ts 文件,其中的音频严重偏离视频,并且音频在合并块的点处有间隙。

问题:如何保证音频不会太慢?或:如何正确组合 TS 文件。

获取两个结果文件的代码

ffmpeg -safe 0 -f concat -i filelist_video.txt -c copy result_video.ts
ffmpeg -safe 0 -f concat -i filelist_audio.txt -c copy result_audio.ts

获取最终结果的代码

ffmpeg.exe -i .\video_merge_0.ts -i .\audio_merge_0.ts -c copy result.ts

仅使用一个 TS 文件进行测试

我将第一个音频输入 TS 文件复制到另一个 TS 文件。这样做会产生下面的输出,混合开销为22.44%,可疑地接近1-76.28%.

ffmpeg.exe -i audio_chunk1.ts -c copy audio_chunk1_tmp.ts

我得到信息:

Output #0, mpegts, to 'audio_chunk1.ts':
  Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 125 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=     118kB time=00:00:05.99 bitrate= 161.1kbits/s speed=3.48e+03x
video:0kB audio:96kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 22.444508%

使用 hls

以下现在生成文件audio_chunk1_tmp.ts, audio_chunk1_tmp0.ts, ... audio_chunk1_tmp2.ts。因此,由于某种原因,单个文件已经被拆分。但是,ffmpeg显示5.87s输入的结果持续时间为5.99s(可能没问题)。

ffmpeg.exe -i audio_chunk1.ts -f hls audio_chunk1_tmp.ts

标签: ffmpegmerge

解决方案


推荐阅读