gpt4 book ai didi

ffmpeg - 如果我使用ffmpeg分别构建TS段,是否需要#EXT-X-DISCONTINUITY标签?

转载 作者:行者123 更新时间:2023-12-04 23:19:01 25 4
gpt4 key购买 nike

我要达到什么目的:
我有 1000 张 PNG 图片。我想从每个单独的图像创建一个 0.1 fps 的 30 秒视频。然后我想一个接一个地从所有这些视频中创建多个 m3u8 播放列表,每个播放列表都有随机顺序的视频。
我尝试了什么:
我使用以下命令为我的每个图像创建了一个 TS 视频文件:

ffmpeg -y -loop 1 -t 30 -r 0.1 -i INPUT_IMAGE_X.png -c:v libx264 -crf 26 -pix_fmt yuv420p OUTPUT_VIDEO_X.ts
然后我使用以下格式创建了一个播放列表:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:30
#EXTINF:30.00000,
OUTPUT_VIDEO_1.ts
#EXTINF:30.00000,
OUTPUT_VIDEO_2.ts
#EXTINF:30.00000,
OUTPUT_VIDEO_3.ts
...
#EXTINF:30.00000,
OUTPUT_VIDEO_1000.ts
#EXT-X-ENDLIST
问题:
当我使用 AVPlayer 在 iOS 应用程序中播放此类播放列表时,会发生以下情况:
  • 总时长正确显示
  • 所有片段(最后一个片段除外)仅播放 20 秒
  • 最后一段正确播放 30 秒
  • 播放器在到达显示的时间线末尾之前停止播放视频(因为除了最后一个,每个片段都短了 10 秒)

  • 可能的解决方案
    我发现如果我在所有片段之间插入#EXT-X-DISCONTINUITY 标签,所有片段都会正确播放 30 秒。但是我也注意到,在这种情况下,AVPlayer 在开始播放视频之前需要更多的加载时间。
    问题
    是否有可能以不需要不连续标签的方式创建我的视频?它们使我的播放列表文件更大,并增加了视频开始的延迟。

    最佳答案

    您需要的是每个段中的正确时间戳。我相信-itsoffset应该这样做— -itsoffset 0 (或根本没有)第一段,-itsoffset 30第二个,-itsoffset 60对于第三个,等等。
    您可能还可以使用 concat demuxer 让 ffmpeg 为您完成所有工作。读取输入和-f hls -hls_time 30 -hls_playlist_type vod ; concat demuxer 将处理“循环”每个图像并正确设置时间戳,hls muxer 将写入 TS 段和 HLS list 。

    关于ffmpeg - 如果我使用ffmpeg分别构建TS段,是否需要#EXT-X-DISCONTINUITY标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70714058/

    25 4 0