gpt4 book ai didi

ffmpeg - 将单个 mp4 文件转换为 ts 会产生意外的播放

转载 作者:行者123 更新时间:2023-12-04 23:20:13 34 4
gpt4 key购买 nike

我正在将三个 mp4 文件(h264,无音频,每个持续时间为三秒)转换为 mpeg-ts 格式,如下所示。

ffmpeg -i 1.mp4 -c copy 1.ts
ffmpeg -i 2.mp4 -c copy 2.ts
ffmpeg -i 3.mp4 -c copy 3.ts
请注意:我无法事先合并 mp4 文件。每个都必须单独转换,如上所示,因为它们是由现场录音机生成的。
然后,我手动创建了一个像这样的 .m3u8 list ,所以我可以按顺序播放这 3 个 ts 文件:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:3
#EXTINF:3,
1.ts
#EXTINF:3,
2.ts
#EXTINF:3,
3.ts
#EXT-X-ENDLIST
当我运行 ffplay index.m3u8命令:
  • 1.ts按预期播放了三秒;
  • 2.ts 播放“瞬间”(可能只是一帧);
  • 3.ts 按预期播放了三秒钟。

  • 有人可以解释为什么 2.ts 显示这么短的时间吗?当我运行 ffmpeg -i 2.ts ,输出正确显示三秒的持续时间。
    Input #0, mpegts, from '2.ts':
    Duration: 00:00:03.00, start: 1.480000, bitrate: 49 kb/s
    如何更改我的 mp4 -> ts 转换命令,以便每个文件可以播放整个持续时间(即每个文件三秒)?如果可能的话,我想避免重新编码。
    谢谢,我加了 link to the three files and the manifest为了完整性。

    最佳答案

    好的,如果受到 ffmpeg 设置为“1.480000”的“开始”值的影响,我发现了这种行为,如原始问题所示。
    通过为每个文件设置不同的、正确的起始值,播放将正常工作。这是通过 -muxdelay 完成的。标志represents the "maximum demux-decode delay" (即偏移量)。出于某种原因,至少在我的情况下,应该为标志提供预期值的一半(例如,如果前一个视频播放 3 秒,则为 1.5)

    ffmpeg -i 1.mp4 -muxdelay 0 -c copy 1.ts
    ffmpeg -i 2.mp4 -muxdelay 1.5 -c copy 2.ts
    ffmpeg -i 3.mp4 -muxdelay 3.0 -c copy 3.ts
    问题解决了,但我仍然想知道为什么只有 2.ts 受到问题的影响。

    关于ffmpeg - 将单个 mp4 文件转换为 ts 会产生意外的播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68626048/

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