ffmpeg - 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
解决方案
推荐阅读
- node.js - imgbb 通过 api 在相册中上传图片
- php - 我的 wordpress 不断将我重定向到原始网站
- elixir - 当我的遥控器是嵌入式系统时,如何使用来自 IEx 的 :observer?
- javascript - 将 NextJS 中的 Google Analytics 与 Twin.Macro / Styled Components 设置集成:如何更改 _document.js?
- reactjs - 与 monorepo 中的每个包共享 typescript 模块
- spring - 基于 Spring Boot @RequestScope 和 Hibernate 模式的多租户
- c++ - 如何重构嵌套的for循环?
- c# - MongoDB C#映射隐藏字段
- angular - Angular,在点击事件上获取html标签嵌入数据
- flutter - FirebaseAuth 令牌问题扑朔迷离