You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FFmpeg将MKV转换为保留所有音轨和字幕的HLS并生成master.m3u8

如何使用FFmpeg将MKV转换为保留所有音轨和字幕的HLS并生成master.m3u8

嗨,我懂你想要的效果——把MKV转成HLS格式,还得完整保留原文件里的所有音轨和字幕,最后生成能统一管理这些流的master.m3u8。其实不用折腾Python/PHP脚本,FFmpeg本身就支持一步搞定,而且能自动帮你把所有流分组好。

核心FFmpeg命令

直接运行下面的命令就能实现你的需求:

ffmpeg -i input.mkv \
  -c:v h264 -crf 23 -preset medium \
  -c:a aac -b:a 192k \
  -c:s webvtt \
  -hls_time 10 \
  -hls_list_size 0 \
  -hls_flags independent_segments \
  -master_pl_name master.m3u8 \
  -map 0 \
  output_%v.m3u8

参数详解(帮你理解为什么这么写)

  • -i input.mkv:指定你要转换的MKV输入文件
  • -c:v h264 -crf 23 -preset medium:视频用H.264编码(HLS标准支持),crf 23是默认的质量参数(数值越小质量越高,18-28是常用范围),preset medium平衡转码速度和压缩效率
  • -c:a aac -b:a 192k:音频转成AAC编码(HLS必选),192k比特率是兼顾音质和体积的常用值
  • -c:s webvtt:把原MKV里的字幕转成WebVTT格式,这是HLS支持的字幕标准格式
  • -hls_time 10:每个TS分片视频的时长设为10秒,你可以根据需求调整(比如5秒或15秒)
  • -hls_list_size 0:保留所有生成的TS分片文件,不会自动删除旧的
  • -hls_flags independent_segments:确保每个TS分片都能独立播放,提升在不同播放器上的兼容性
  • -master_pl_name master.m3u8:指定生成的主播放列表文件名就是master.m3u8
  • -map 0:关键参数——把输入MKV里的所有流(视频、所有音轨、所有字幕)都映射到输出,这样就能完整保留所有内容

执行后会生成什么?

运行命令后,FFmpeg会自动生成:

  • 一系列TS视频分片文件(比如output_0.ts、output_1.ts...)
  • 对应每个音轨的媒体播放列表(比如output_0.m3u8对应视频+第一音轨,output_1.m3u8对应第二音轨,以此类推)
  • 每个字幕对应的WebVTT文件(比如output_0.vtt)和对应的字幕播放列表
  • 最终的master.m3u8:这个主列表会把所有视频、音轨、字幕流按标准HLS格式分组,播放器可以直接读取它,让用户选择切换不同的音轨或字幕

额外小提示

如果你需要更精细的控制(比如只保留部分音轨/字幕),可以调整-map参数:

  • 比如只想保留视频、所有音轨和前2个字幕:-map 0:v -map 0:a -map 0:s:0 -map 0:s:1
  • 排除某条音轨(比如第3条,索引从0开始):-map 0 -map -0:a:2

测试的时候可以先用小体积的MKV文件试手,确认命令正常工作后再处理大文件。如果原MKV里的字幕是ASS/SRT格式,FFmpeg会自动转成WebVTT,不用额外处理。

备注:内容来源于stack exchange,提问作者Tutifruti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:15:31