![FFmpeg 中的“输出流中的非单调 DTS”错误,先前的值和当前值相等](https://linux22.com/image/1615895/FFmpeg%20%E4%B8%AD%E7%9A%84%E2%80%9C%E8%BE%93%E5%87%BA%E6%B5%81%E4%B8%AD%E7%9A%84%E9%9D%9E%E5%8D%95%E8%B0%83%20DTS%E2%80%9D%E9%94%99%E8%AF%AF%EF%BC%8C%E5%85%88%E5%89%8D%E7%9A%84%E5%80%BC%E5%92%8C%E5%BD%93%E5%89%8D%E5%80%BC%E7%9B%B8%E7%AD%89.png)
我有多个.ts
段(AES-128 加密)、.m3u8
它们的块列表和一个用于解密它们的密钥。
我的目标是将这些.ts
文件重新混合为一个.mp4
。我显然也不想以任何方式修改其中的实际视频/音频流。
我正在使用以下命令:
ffmpeg -allowed_extensions ALL -i chunklist.m3u8 -c:v 复制 -c:a 复制输出.mp4
但会出现一堆“非单调 DTS”错误。这导致输出文件在播放过程中每 3 秒左右就会掉帧一次。
我知道这是一个常见问题,在这里讨论过很多次,但是,其他问题中描述的解决方案似乎对我来说不起作用,而且就我而言,以前的值和当前的值是相等的。
以下是前三.ts
部分的控制台输出:
[hls,applehttp @ 0000022945ff9fc0] Opening 'key' for reading
[hls,applehttp @ 0000022945ff9fc0] Opening 'crypto:part0.ts' for reading
Input #0, hls,applehttp, from 'chunklist.m3u8': Duration: 02:34:55.36, start: 0.000000, bitrate: 0 kb/s Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Data: timed_id3 (ID3 / 0x20334449)
Metadata:
variant_bitrate : 0
Stream #0:1: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709/unknown/unknown), 1920x1080 [SAR 1:1 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Metadata:
variant_bitrate : 0
Stream #0:2: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp
Metadata:
variant_bitrate : 0
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709/unknown/unknown), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29.97 fps, 29.97 tbr, 90k tbn, 90k tbc
Metadata:
variant_bitrate : 0
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp
Metadata:
variant_bitrate : 0
Stream mapping: Stream #0:1 -> #0:0 (copy) Stream #0:2 -> #0:1 (copy) Press [q] to stop, [?] for help
[mp4 @ 00000229460c8500] Non-monotonous DTS in output stream 0:0; previous: **177177**, current: **177177**; changing to **177178**. This may result in incorrect timestamps in the output file.
[hls,applehttp @ 0000022945ff9fc0] Opening 'crypto:part1.ts' for reading
[mp4 @ 00000229460c8500] Non-monotonous DTS in output stream 0:0; previous: 357357, current: 357357; changing to 357358. This may result in incorrect timestamps in the output file.
[mp4 @ 00000229460c8500] Non-monotonous DTS in output stream 0:0; previous: 537538, current: 537538; changing to 537539. This may result in incorrect timestamps in the output file.
[hls,applehttp @ 0000022945ff9fc0] Opening 'crypto:part2.ts' for reading
[mp4 @ 00000229460c8500] Non-monotonous DTS in output stream 0:0; previous: 717718, current: 717718; changing to 717719. This may result in incorrect timestamps in the output file.
[mp4 @ 00000229460c8500] Non-monotonous DTS in output stream 0:0; previous: 897898, current: 897898; changing to 897899. This may result in incorrect timestamps in the output file.
似乎如果我连接这些.ts
文件,然后将大.ts
文件重新混合.mp4
,就不会出现丢帧的情况,除了在开始时,由于某种原因,我丢了 2 帧。VLC 播放器还检测到帧速率为 30.05,而它应该是 29.97,所以...我不认为这是完美的解决方案。
所以我有以下问题:
- 为什么会出现这些错误?我的
.ts
文件到底出了什么问题? - 如何
.ts
正确地重新混合这些文件以便不会出现“输出流中的非单调 DTS”错误?
这里是我正在使用的 zip 存档中的文件。我只在其中包含了三个 .ts 文件,这应该足以进行测试。
任何帮助都将不胜感激。谢谢!