Ubuntu + ffmpeg 分片 HLS 通用。
一、先查看你的 MKV 里有几条字幕(关键)
运行这条命令,只看字幕流:
ffmpeg -i "/mp4mkv/manmovie/侏罗纪世界3[中文字幕].Jurassic.World.Dominion.2022.1080p.MA.WEB-DL.DDP5.1.Atmos.H264-PandaQT.mkv" 2>&1 | grep Subtitle
你会看到类似这样的输出:
Stream #0:2: Subtitle: ass (default)Stream #0:3: Subtitle: subripStream #0:4: Subtitle: hdmv_pgs_subtitle
记住规则:
#0:2 → 0:s:0#0:3 → 0:s:1#0:4 → 0:s:2
后面的数字 0、1、2 就是你要选的字幕编号!
二、直接指定某一条字幕(复制即用)
你只需要改这一个参数:
-map 0:s:数字
例子 1:选第一条字幕
-map 0:s:0
例子 2:选第二条字幕
-map 0:s:1
例子 3:选第三条字幕
-map 0:s:2
三、你最终可用的完整命令(带指定字幕)
我给你写好通用模板,你只需要改 0:s:数字 即可:
ffmpeg -i "你的文件.mkv" \-map 0:v \-map 0:a \-map 0:s:1 \ <==== 这里改成你要的字幕序号 0/1/2-c:v copy \-profile:v 0 \-level 3.1 \-c:a aac -b:a 128k -ac 2 -ar 44100 \-c:s webvtt \ <==== HLS 必须转 webvtt-f hls \-hls_time 8 \-hls_list_size 0 \-hls_segment_filename "seg_%04d.ts" \"输出.m3u8"
详细说明:
分割成tls分片:-f mpegts 输出 单个 .ts 文件-f hls 自动输出 一堆 .ts 分片 + 一个 .m3u8 索引文件-bsf h264_mp4toannexb 修正视频编码格式,让手机能看到画面-pix_fmt yuv420p 报错 / 黑屏 / 有声音无画面-b:a 128k -ac 2 -ar 44100 AAC-LC 立体声,绝无声卡 / 无声问题-c:a aac 手机通用音频编码-c:v libx264 标准 H.264 编码器-profile:v baseline -level 3.1 安卓 /iOS 兼容性最好的档次-map 0:v -map 0:a -map 0:s:0强制只保留:视频 + 音频 + 第一条中文字幕Subtitle:subrip # subrip = SRT 字幕(纯文本中文字幕)
四、你的真实文件可直接运行的命令(示例)
假设你要 第二条中文字幕(0:s:1):
ffmpeg -i "/mp4mkv/manmovie/侏罗纪世界3[中文字幕].Jurassic.World.Dominion.2022.1080p.MA.WEB-DL.DDP5.1.Atmos.H264-PandaQT.mkv" \-map 0:v \-map 0:a \-map 0:s:1 \-c:v copy \-profile:v 0 \-level 3.1 \-c:a aac -b:a 128k -ac 2 -ar 44100 \-c:s webvtt \-f hls \-hls_time 8 \-hls_list_size 0 \-hls_segment_filename "/mp4mkv/moviepath/emh1bHVvamlzaGlqaWUz/seg_%04d.ts" \"/mp4mkv/moviepath/emh1bHVvamlzaGlqaWUz/zhuluojishijie_three.m3u8"
用 FFmpeg 生成 DASH(MPD + 碎片化 MP4)
不转码、极速切片(推荐,CPU 极低)
ffmpeg -i 你的视频.mp4 \-c copy \-f dash \-seg_duration 5 \-use_template 1 \-use_timeline 1 \-init_seg_name init-\$RepresentationID\$.m4s \-media_seg_name chunk-\$RepresentationID\$-\$Number\$.m4s \输出文件.mpd# 示例cd d:\m3u8\mpdffmpeg -i 1080P.mp4 -c copy -f dash -seg_duration 5 -use_template 1 -use_timeline 1 -init_seg_name init-\$RepresentationID\$.m4s -media_seg_name chunk-\$RepresentationID\$-\$Number\$.m4s alison.mpd
转码 + 切片(源为 MKV/HEVC 时)
ffmpeg -i 你的视频.mkv \-c:v libx264 -crf 23 -preset fast \-c:a aac -b:a 128k \-f dash \-seg_duration 5 \-use_template 1 \输出文件.mpd# 使用流复制的命令ffmpeg -i 1080P.mkv -c:v copy -c:a copy -f dash -seg_duration 5 -use_template 1 blison.mpd-c:v copy: 直接复制视频流,不进行重新编码。-c:a copy: 直接复制音频流,不进行重新编码。示例: 将分辨率调整为 1280x720 (720p)ffmpeg -i 1080P.mkv -vf scale=1280:720 -c:v libx264 -crf 23 -preset fast -c:a aac -b:a 128k -f dash -seg_duration 5 -use_template 1 blison.mpd示例: 将帧率设置为 30fpsffmpeg -i 1080P.mkv -c:v libx264 -crf 23 -preset fast -r 30 -c:a aac -b:a 128k -f dash -seg_duration 5 -use_template 1 blison.mpd# 示例ffmpeg -i 1080P.mkv -c:v libx264 -crf 23 -preset fast -c:a aac -b:a 128k -f dash -seg_duration 5 -use_template 1 blison.mpd
