提示

返回博客列表

一部片子带中英双语字幕轨,播放器里随便切——封装多字幕的坑

一部片子带中英双语字幕轨,播放器里随便切——封装多字幕的坑

外剧、公开课、演唱会——经常需要中英双语字幕,而且观众想随时切。很多人做法是"烧进画面",结果想关都关不掉,还糊。正确做法是封装成字幕轨,让播放器负责显示。这篇讲怎么往一个 mp4/mkv 里塞多根字幕、以及为什么 mkv 比 mp4 更适合干这事。

MP4 vs MKV:字幕轨支持的天壤之别

先说结论:要稳定带多字幕轨,优先 MKV。MP4 理论上能用 mov_text 封装,但支持的语言/编码有限,不少播放器只读第一条。MKV 对 SRT/ASS/UTF-8 基本来者不拒。

ffmpeg -i movie.mp4 -i zh.srt -i en.srt   -map 0:v -map 0:a -map 1 -map 2   -c copy -c:s srt out.mkv

-map 1 -map 2 把两个字幕文件分别加进去,-c:s srt 指定字幕编码。

坑一:语言标记没写,播放器显示"未知字幕"

观众在 VLC 里看到两条都叫"轨道 1/轨道 2",体验很差。加上 metadata:s

ffmpeg -i movie.mp4 -i zh.srt -i en.srt   -map 0:v -map 0:a -map 1 -map 2   -c copy -c:s srt   -metadata:s:s:0 language=chi -metadata:s:s:0 title=中文   -metadata:s:s:1 language=eng -metadata:s:s:1 title=English   out.mkv

metadata:s:s:0 是第一条字幕轨,依次类推。不写这个,后面全是白忙。

坑二:ASS 字幕的字体在别人电脑上崩了

SRT 是纯文本,ASS 带样式(字体/位置/特效)。ASS 好看,但换台没装对应字幕字体的机器,样式就乱套。所以要么用通用字体(思源/Noto),要么把字体也嵌进 mkv:

ffmpeg -i movie.mkv -attach NotoSansCJK.ttc -metadata:s:t:0 mimetype=application/x-truetype-font out.mkv

坑三:想"双语同屏"而不是切换

封装轨道是"切换",不是"同屏"。要双语同时显示,只能硬压(把两条字幕都 burn 进去)或者播放器叠加。硬压用 subtitles 滤镜叠两次:

ffmpeg -i movie.mp4 -vf "subtitles=zh.srt:si=0,subtitles=en.srt:si=0" out.mp4

代价:重编码、字幕永久烙在画面上、且中文英文位置会重叠要自己调 force_style

怎么确认塞进去了

ffprobe -v error -show_entries stream=index,codec_type,codec_name:stream_tags=language,title -of json out.mkv

看到 codec_type=subtitle 出现两条,语言标记对得上,就成了。

一点经验:给观众发,尽量发 MKV + 带语言标记;自己存档,SRT 单独丢一边更灵活。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部