我来教你最清晰、最稳妥、100%能选中你想要那条字幕的方法,Ubuntu + ffmpeg 分片 HLS 通用。

一、先查看你的 MKV 里有几条字幕(关键)

运行这条命令,只看字幕流

  1. ffmpeg -i "/mp4mkv/manmovie/侏罗纪世界3[中文字幕].Jurassic.World.Dominion.2022.1080p.MA.WEB-DL.DDP5.1.Atmos.H264-PandaQT.mkv" 2>&1 | grep Subtitle

你会看到类似这样的输出:

  1. Stream #0:2: Subtitle: ass (default)
  2. Stream #0:3: Subtitle: subrip
  3. Stream #0:4: Subtitle: hdmv_pgs_subtitle

记住规则:

#0:20:s:0
#0:30:s:1
#0:40:s:2

后面的数字 0、1、2 就是你要选的字幕编号!


二、直接指定某一条字幕(复制即用)

你只需要改这一个参数:

  1. -map 0:s:数字

例子 1:选第一条字幕

  1. -map 0:s:0

例子 2:选第二条字幕

  1. -map 0:s:1

例子 3:选第三条字幕

  1. -map 0:s:2

三、你最终可用的完整命令(带指定字幕)

我给你写好通用模板,你只需要改 0:s:数字 即可:

  1. ffmpeg -i "你的文件.mkv" \
  2. -map 0:v \
  3. -map 0:a \
  4. -map 0:s:1 \ <==== 这里改成你要的字幕序号 0/1/2
  5. -c:v copy \
  6. -profile:v 0 \
  7. -level 3.1 \
  8. -c:a aac -b:a 128k -ac 2 -ar 44100 \
  9. -c:s webvtt \ <==== HLS 必须转 webvtt
  10. -f hls \
  11. -hls_time 8 \
  12. -hls_list_size 0 \
  13. -hls_segment_filename "seg_%04d.ts" \
  14. "输出.m3u8"

四、你的真实文件可直接运行的命令(示例)

假设你要 第二条中文字幕(0:s:1):

  1. ffmpeg -i "/mp4mkv/manmovie/侏罗纪世界3[中文字幕].Jurassic.World.Dominion.2022.1080p.MA.WEB-DL.DDP5.1.Atmos.H264-PandaQT.mkv" \
  2. -map 0:v \
  3. -map 0:a \
  4. -map 0:s:1 \
  5. -c:v copy \
  6. -profile:v 0 \
  7. -level 3.1 \
  8. -c:a aac -b:a 128k -ac 2 -ar 44100 \
  9. -c:s webvtt \
  10. -f hls \
  11. -hls_time 8 \
  12. -hls_list_size 0 \
  13. -hls_segment_filename "/mp4mkv/moviepath/emh1bHVvamlzaGlqaWUz/seg_%04d.ts" \
  14. "/mp4mkv/moviepath/emh1bHVvamlzaGlqaWUz/zhuluojishijie_three.m3u8"

五、最关键的一句总结

  • -map 0:s:0 = 第一条字幕
  • -map 0:s:1 = 第二条字幕
  • -map 0:s:2 = 第三条字幕

HLS 分片只能带一条字幕,所以必须这样指定!


如果你把你运行 grep Subtitle 的输出发给我,我可以直接告诉你应该选 0/1/2 哪一个,保证是中文字幕!