0-6ren"> 0-我有一个 .ts 文件列表,并希望将它们保存为多个视频文件。 首先,我有一个像这样从流式传输中获得的 .m3u8: #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURA-6ren">
gpt4 book ai didi

ffmpeg - "does not contain any stream"如果 "EXT-X-MEDIA-SEQUENCE"> 0

转载 作者:行者123 更新时间:2023-12-04 23:08:02 30 4
gpt4 key购买 nike

我有一个 .ts 文件列表,并希望将它们保存为多个视频文件。

首先,我有一个像这样从流式传输中获得的 .m3u8:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_01944.ts
#EXT-X-ENDLIST



步骤1:

因此,我尝试将其转换为几个 m3u8,如下所示:

段1.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_00569.ts
#EXT-X-ENDLIST

段2.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:567
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts
#EXTINF:3.01,
aaa001_00003.ts

...

#EXTINF:3.01,
aaa001_01288.ts
#EXT-X-ENDLIST

等等...

然后一个一个地做ffmpeg cmd ..

ffmpeg -i /fs/segment2.m3u8 -safe 0 -map 0:v -map 0:a -cpu-used 4 -threads 0 -preset veryfast -c copy -bsf:a aac_adtstoasc output.mp4



但是那些 EXT-X-MEDIA-SEQUENCE > 0(即从segment2.m3u8 ...)将导致

"Output file #0 does not contain any stream"



然后我试着让'segment2.m3u8'看起来像这样
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key"
#EXTINF:3.01,
aaa001_00002.ts <--the first video chunk
#EXTINF:3.01,
aaa001_00570.ts <--the start point of segment 2
#EXTINF:3.01,
aaa001_00571.ts

...

#EXTINF:3.01,
aaa001_01288.ts
#EXT-X-ENDLIST



ffmpeg 工作正常,并给了我一个输出视频,所以看起来流 channel 信息在第一个 block 中。

但是,仍然存在几个问题
  • 第一段视频在 segment2.mp4 中,我显然不想要它。
  • segment2输出视频先播放3.01s,然后卡住图像直到时间达到aaa001_00570.ts并再次播放


  • 那么,有什么建议可以让我从第一个 block 中引用流信息吗?还是在播放列表等中忽略它?

    更新解决方案

    因为它在 #EXT-X-MEDIA-SEQUENCE:0 和 #EXT-X-KEY: IV = 默认情况下有效

    所以我在每个播放列表中添加 IV=hex(#EXT-X-MEDIA-SEQUENCE)

    段1.m3u8
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:5
    #EXT-X-MEDIA-SEQUENCE:0
    #EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key",IV=0x00000000000000000000000000000000
    #EXTINF:3.01,
    aaa001_00002.ts
    #EXTINF:3.01,
    aaa001_00003.ts

    ...

    #EXTINF:3.01,
    aaa001_00569.ts
    #EXT-X-ENDLIST

    段2.m3u8
    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-TARGETDURATION:5
    #EXT-X-MEDIA-SEQUENCE:567
    #EXT-X-KEY:METHOD=AES-128,URI="aaa001_00001.key",IV=0x00000000000000000000000000000237
    #EXTINF:3.01,
    aaa001_00570.ts

    ...

    #EXTINF:3.01,
    aaa001_01288.ts
    #EXT-X-ENDLIST

    最佳答案

    AES-128 加密/解密需要一个 16 字节的初始化向量 (IV)。如果 IV 属性未在 EXT-X-KEY 标记中指定,则它默认为 EXT-X-MEDIA-SEQUENCE

    您的问题很可能是由错误的 IV 引起的。您必须根据播放列表中的条目数找到正确的序列号,片段的文件名无关紧要。

    您可以使用 openssl in CLI mode 来测试一个段是否被正确解密。

    关于ffmpeg - "does not contain any stream"如果 "EXT-X-MEDIA-SEQUENCE"> 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54977051/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com