FFmpeg 中的“输出流中的非单调 DTS”错误,先前的值和当前值相等

FFmpeg 中的“输出流中的非单调 DTS”错误,先前的值和当前值相等

我有多个.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,所以...我不认为这是完美的解决方案。

所以我有以下问题:

  1. 为什么会出现这些错误?我的.ts文件到底出了什么问题?
  2. 如何.ts正确地重新混合这些文件以便不会出现“输出流中的非单调 DTS”错误?

这里是我正在使用的 zip 存档中的文件。我只在其中包含了三个 .ts 文件,这应该足以进行测试。

任何帮助都将不胜感激。谢谢!

相关内容