【问题标题】:Converting MP4 into m3u8 with multiple subtitle tracks using ffmpeg使用 ffmpeg 将 MP4 转换为具有多个字幕轨道的 m3u8
【发布时间】:2021-07-26 15:44:54
【问题描述】:

我目前正在开发一个视频管道,该管道将接收一个 mp4 文件和 n 个 webvtt 文件,并输出一个带有可选字幕轨道的 m3u8 文件,我在用 ffmpeg 找出正确的咒语时遇到了一些困难。

以下是我现在使用的命令,用于在将所有内容集成到我的项目之前对其进行测试:

ffmpeg -i sample.mp4 -i sample-vtt-en.vtt -i sample-vtt-es.vtt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -c:v copy -c:a copy -c:s webvtt \
  -metadata:s:s:0 language=en \
  -metadata:s:s:1 language=es \
  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls \
  -master_pl_name master.m3u8 \
  out/sample.m3u8

运行上述程序时,出现以下错误

[webvtt @ 0x7fb6c6075a00] Exactly one WebVTT stream is needed.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:3 --
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #1:0 -> #0:2 (webvtt (native) -> webvtt (native))
  Stream #2:0 -> #0:3 (webvtt (native) -> webvtt (native))
    Last message repeated 1 times

此外,当我使用单个 webvtt 文件处理它时,它不会出错,但输出不太正确。最大的问题是主播放列表不包含任何字幕信息,也不识别任何曲目。 sample.m3u8 播放列表似乎确实了解字幕轨道,但它们以各种奇怪的方式分割。

有人可以帮助我完成我想要完成的事情吗?

【问题讨论】:

    标签: ffmpeg http-live-streaming m3u8


    【解决方案1】:

    HLS muxer 目前似乎不允许仅包含字幕的变体流。我不使用 HLS,所以如果我错了,或者如果您是未来的读者,情况可能会发生变化,您需要进一步调查。

    次优解决方法是使用 -var_stream_map HLS 多路复用器选项将音频添加到变体流。比如:

    ffmpeg -i sample.mp4 -i sample-vtt-en.vtt -i sample-vtt-es.vtt \
      -map 0:v -map 0:a -map 0:a -map 1 -map 2 \
      -c:v copy -c:a copy -c:s webvtt \
      -metadata:s:s:0 language=en \
      -metadata:s:s:1 language=es \
      -start_number 0 -hls_time 10 -hls_list_size 0 -f hls \
      -var_stream_map "v:0,name:video a:0,s:0,language:eng,name:english a:1,s:1,language:spa,name:espanol"
      -master_pl_name master.m3u8 \
      out/sample.m3u8
    

    【讨论】:

    • 让我问一下,如果我将容器格式保留为 mp4,这可能吗?只要我能完成我想做的事情,我就不会被锁定在 m3u8 格式或 HLS 中。
    • @RPK 当然,但播放器对 mov_text 的支持并不普遍。 ffmpeg -i video.mp4 -i eng.vtt -i spa.vtt -map 0 -map 1 -map 2 -c copy -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=spa -movflags +faststart output.mp4
    • 这些视频文件适用于 iOS 和 Android 上的移动消费,所以我必须做一些挖掘来测试这些平台是否支持 mov_text。我将此答案标记为正确。感谢您的帮助。
    • @RPK mov_text 是 MPEG-4 定时文本 (MP4TT) 或 MPEG-4 流式文本格式。参见 ISO/IEC 14496-17。有时称为 3gpp 定时文本(MP4 技术上不正确)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2016-01-11
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多