将MKV中的字幕提取出来,放到另一个MKV中
将MKV中的字幕提取出来,放到另一个MKV中
使用 ffmpeg 提取和添加字幕其实非常高效,因为它不需要对视频和音频进行重新编码(类似于复制粘贴),速度极快。
下面是完整的两步操作指南:
第一步:从原始 MKV 中提取字幕
首先,你需要知道字幕在原视频中是第几个轨道(Stream)。
-
查看输入文件的流信息: 在终端或命令行中运行以下命令:
1
ffmpeg -i input1.mkv
在输出的信息中,寻找类似
Stream #0:2: Subtitle: subrip或ass的字样。例如,#0:2表示第 0 个文件的第 2 个轨道是字幕。 -
提取字幕: 假设字幕是第 2 个轨道(
0:2),你可以使用以下命令将其提取为单独的字幕文件(如.srt或.ass):1
ffmpeg -i input1.mkv -map 0:2 output_sub.srt
💡 小提示:如果原字幕是 SRT 格式,后缀就用
.srt;如果是 ASS(特效字幕),后缀就用.ass。如果不确定,也可以直接提取为.mkv格式的纯字幕流文件。
第二步:将字幕加入到另一个 MKV 文件中
现在你要把刚刚提取的 output_sub.srt 合并到目标视频 input2.mkv 中。
使用以下命令进行封装(Muxing):
1 | ffmpeg -i input2.mkv -i output_sub.srt -c copy -map 0 -map 1 output_final.mkv |
参数解释:
-i input2.mkv:输入目标视频(文件 0)。-i output_sub.srt:输入刚刚提取的字幕(文件 1)。-c copy:核心参数。表示直接复制视频、音频和字幕流,不进行流的重编码,几秒钟就能完成。-map 0:将第一个文件(视频+原音频等)的所有内容映射到输出文件中。-map 1:将第二个文件(字幕)的内容映射到输出文件中。output_final.mkv:最终生成的、带有新字幕的 MKV 文件。
🚀 进阶:一步到位(不生成中间字幕文件)
如果你不想在电脑里多留一个 .srt 文件,也可以直接把 input1.mkv 的字幕“跨文件”合并到 input2.mkv 中:
1 | ffmpeg -i input2.mkv -i input1.mkv -c copy -map 0 -map 1:s:0 output_final.mkv |
原理解析:
-map 0保留了目标视频的所有流,而-map 1:s:0则是精准定位第二个输入文件(input1.mkv)中的第一个字幕流(s:0),直接将它塞进新文件中。
其实,mkv文件也可以像压缩文件一样打开提取和添加(不过这种方法没试成功)
MKV(Matroska Video)文件在本质上确实非常像一个压缩包。
它是一种封装格式(Container Format),就像一个大箱子或一个
.zip压缩包,里面分门别内地装了视频轨、多个语言的音频轨、各种语言的字幕轨,甚至还可以包含字体文件和封面图片。但是,它和普通的
.zip或.rar压缩包在操作上有一个核心区别:它不能直接用 WinRAR 或 7-Zip 这类常规解压软件直接双击打开并往里拖拽文件。如果你想用类似“操作压缩包”的可视化方式来提取和添加字幕,不需要用复杂的命令行(FFmpeg),有两款专为 MKV 设计的“解压/打包”神器:
1. 像“解压”一样提取:MKVExtractGUI
这是一个专门用来从 MKV “解压”出特定轨道的图形化工具(配合 MKVToolNix 使用)。
- 怎么操作:你只需要把 MKV 文件拖进去,它就会像解压软件一样,把视频、音频、字幕一条条列出来。
- 提取字幕:勾选你想要的字幕轨道(比如
Subtitle (SubRip/SRT)),点击 Extract(提取),字幕文件就直接被“解压”出来了。2. 像“新建压缩包”一样添加:MKVToolNix GUI
这是处理 MKV 文件的终极神器,它的工作原理完美符合你说的“往里加东西”。
- 第一步:把你的目标视频文件拖进软件里。
- 第二步:把你要添加的字幕文件(如
.srt或.ass)也拖进去。- 第三步:在下方的列表里,你会看到视频、音频和新加入的字幕都在里面了。你可以勾选或取消勾选某些轨道,还可以调整字幕的语言标签(比如设置为“中文”)。
- 第四步:点击底部的 “开始混流”(Start multiplexing)。
💡 为什么它这么快? 因为它和压缩文件一样,只是把字幕文件“放进箱子里”,并没有对视频进行重新渲染(压制)。整个过程不需要显卡或 CPU 拼命计算,通常只需几秒钟,一个带有新字幕的新 MKV 文件就诞生了。
简单来说:
MKVToolNix GUI就可以直接用来提取字幕,但它的操作界面是倾向于“打包”的,所以提取时的操作不太直观。 你可能会发现,MKVToolNi文件夹下“有mkvextract.exe但没有 GUI”,是因为MKVExtractGUI是第三方开发者专门为mkvextract.exe这个命令行工具制作的外挂“图形壳”,需要单独下载放入该文件夹。既然你已经安装了
MKVToolNix GUI,完全不需要再去额外下载别的软件,用它就可以同时搞定“添加”和“提取”。下面教你如何用原版的
MKVToolNix GUI提取字幕:如何用 MKVToolNix GUI 提取字幕?
虽然它没有一个叫“解压”的按钮,但你可以通过关闭其他轨道的方式来实现提取:
- 拖入文件:把你的 MKV 视频文件拖入 MKVToolNix GUI 的“输入”窗口。
- 取消勾选其他轨道:在下方的“轨道、章节和标签”列表中,取消勾选视频轨(video)和音频轨(audio),只保留你想要提取的那一条字幕轨。
- 修改输出文件名:在最下方的“输出文件”一栏,把文件后缀名从
.mkv手动改为你需要的字幕格式(例如:如果原字幕是 SRT,就改成.srt;如果是 ASS,就改成.ass)。- 开始混流:点击底部的 “开始混流”。
几秒钟后,软件就会把那条字幕单独剥离出来,生成一个纯字幕文件。
总结两者的关系
软件/组件 角色 擅长做什么 MKVToolNix GUI (你已安装) 官方核心总管 最擅长合并(添加)。虽然也能通过“只保留字幕”的方式来提取,但改后缀的操作对新手稍显隐蔽。 MKVExtractGUI (第三方) 专属提取小弟 最擅长提取。它的界面全是勾选项,勾完直接点 Extract 就能把字幕、音频、甚至是视频里的插图单独“吐”出来,不需要手动改后缀。 懒人建议:
既然你手头已经有了
MKVToolNix GUI,直接用它并通过“只勾选字幕 + 改后缀名”的方法来提取最省事,不需要再去折腾下载别的文件了!
接下来讨论边加入字幕边完成视频的转码问题
H.265 的压缩效率比 H.264 高出近一倍。在保证肉眼几乎看不出画质损失(无损感官)的前提下,把 1.7G 的 H.264 视频压缩到 700M - 900M 左右,正是 H.265 最擅长的领域。
既然不硬性规定体积,以保证画面清晰度为主,我们同样需要使用动态质量模式(CRF)。在 H.265 编码下,CRF 的黄金平衡点是 26 到 28(注意:H.265 的 CRF 值比 H.264 大 3 左右,代表相同的视觉清晰度)。
修改后的完整命令如下:
1 | ffmpeg -i input1.mkv" -i input1.ass -map 0 -map 1 -c:v libx265 -crf 26.5 -preset medium -c:a copy -c:s copy "output.x265.mkv" |
(注意:我顺便把输出文件的后缀前缀改成了 .x265.mkv,方便你以后区分)
关键参数调整说明:
-c:v libx265:将视频编码器改为 H.265 (HEVC)。-crf 26.5:这是为你量身定制的动态质量系数。对于文戏较多、偶有高频细节的视频,26.5 可以完美在“高画质”和“小体积”之间取得平衡,出来后的体积基本在 800M 上下浮动。- 如果你追求更极致的画质,可以调小到
25(体积会稍大,约 1G)。 - 如果你觉得 800M 还是大,可以调大到
28(体积会进一步缩小到 600M 左右)。
- 如果你追求更极致的画质,可以调小到
-preset medium:H.265 的预设速度。如果你追求更高的压缩率(让文件更小一点点),且电脑配置不错,可以改为-preset slow;如果想切片快一点,可以改为-preset fast。-c:a copy:音频流继续保持直接复制。因为原视频是 DDP5.1(杜比数字+),直接复制能完美保留高保真多声道音质,且不占重新编码的时间。
⏳ 提示
H.265 编码对电脑 CPU 的计算能力要求比 H.264 明显更高。运行此命令后,编码速度可能会比转 H.264 慢一些,这是完全正常的。
转码速度有点慢?
转码速度不到 2 倍(即 2x 左右)是因为你在使用 CPU 进行纯软件解码和编码(libx265)。H.265 的算法极其复杂,纯靠 CPU 算力确实非常吃力。
你的英伟达显卡(N卡)上带有专门的硬件编解码模块(叫做 NVENC),如果把任务丢给显卡,转码速度通常可以瞬间飙升到 10倍、20倍甚至更高!
内存(RAM)对转码速度影响不大,核心瓶颈完全在 CPU vs 显卡(GPU)。
下面教你如何修改命令,启用 N 卡硬件加速:
🚀 N卡硬件加速命令(秒速级)
英伟达显卡对应的 H.265 硬件编码器叫 hevc_nvenc。你可以把命令修改为:
1 | ffmpeg -hwaccel cuda -i input1.mkv" -i input1.ass -map 0 -map 1 -c:v hevc_nvenc -cq 28 -rc constqp -preset p4 -c:a copy -c:s copy "output.x265.mkv" |
🛠️ 关键参数变动解析(针对显卡优化):
-hwaccel cuda:【显卡解码】 让显卡先负责把输入的 H.264 视频源文件进行解码。-c:v hevc_nvenc:【显卡编码】 核心参数。调用 N 卡的 NVENC 硬件芯片去编码生成 H.265 视频。-cq 28 -rc constqp:【显卡画质控制】 * ⚠️ 注意:显卡不支持普通的-crf参数。 显卡对应的恒定质量模式需要组合使用-rc constqp和-cq。- N 卡的 HEVC 编码效率在同等码率下比 CPU 略低一点点,所以这里推荐将
-cq设为26到28之间(数值越小画质越好)。
- N 卡的 HEVC 编码效率在同等码率下比 CPU 略低一点点,所以这里推荐将
-preset p4:英伟达显卡的预设(p1 最快,p7 质量最好)。p4是中庸平衡,如果你想要画质更好一点,可以改为p5或p6。
⚖️ 显卡转码的“利与弊”(请知悉)
虽然显卡转码速度有毁灭性的提升,但天下没有免费的午餐,硬件加速存在一个固有的物理特性:
- 优点:极致的速度。原本需要放完一集美剧的时间才能转完,现在可能 2 分钟就搞定了,CPU 占用率极低,电脑也不会卡顿。
- 缺点:同等体积下,画质比 CPU 略逊一点。或者反过来说,为了达到和 CPU 一模一样的清晰度,显卡压出来的文件体积通常会比 CPU 压出来的大 10% ~ 20%。
总结建议: 如果你有几十集美剧要转,强烈建议用上面的 N卡方案,效率体验极佳;如果你只转这一部电影/一集视频,且是个追求极致画质、对几十兆体积非常敏感的“数码数毛党”,那可以继续让 CPU 在后台慢慢啃(不到 2 倍速也算正常速度)。
忽然想起,intel的这款CPU中也是带核显的(它叫做核心显卡(简称核显,iGPU),而它内部集成的硬件电路叫做 Intel Quick Sync Video(简称 QSV,高速视频同步技术)。)
如果你的电脑是 Intel 处理器 + NVIDIA 独显的双显卡配置,用 Intel 核显(QSV)来转码其实是一个“神仙玩法”:用核显去跑转码(速度极快),把独立的 NVIDIA 显卡完全解放出来,你甚至可以在转码的同时流畅地用 N 卡打游戏,两不耽误。
而且在 H.265 编码上,Intel 最近几代核显(尤其是 11 代及以后的核显)的 QSV 编码质量和压缩率,在某些测试里甚至比 N 卡的 NVENC 还要稍微好那么一点点。
🚀 Intel 核显加速命令
Intel 核显在 FFmpeg 中对应的 H.265 编码器叫做 hevc_qsv。你可以把命令修改为:
1 | ffmpeg -hwaccel qsv -c:v h264_qsv -i "input1.mkv" -i input1.ass -map 0 -map 1 -c:v hevc_qsv -global_quality 25 -preset medium -c:a copy -c:s copy "output.x265.mkv" |
🛠️ 关键参数解析(针对 Intel 核显优化):
-hwaccel qsv -c:v h264_qsv:【核显硬解码】 让 Intel 核显去负责解码输入的 H.264 视频源文件,减轻 CPU 负担。-c:v hevc_qsv:【核显硬编码】 核心参数,调用 Intel 核显的 QSV 硬件芯片去编码生成 H.265 视频。-global_quality 25:【核显画质控制】 * ⚠️ 注意:Intel 核显也不支持普通的-crf。 * QSV 对应的恒定质量模式叫ICQ(智能恒定质量),参数由-global_quality控制。- 数值范围通常是 1 到 51,数值越小质量越好。要控制在 800M 左右并保证高画质,推荐设置在
24到26之间。
- 数值范围通常是 1 到 51,数值越小质量越好。要控制在 800M 左右并保证高画质,推荐设置在
⚠️ 使用 Intel 核显的额外注意事项
- 核显必须处于开启状态:有时候如果你的显示器接在独立显卡上,系统可能会在设备管理器里自动把 Intel 核显“屏蔽”掉。如果运行命令报错找不到设备,你需要去主板 BIOS 里把
iGPU Multi-Monitor(内显多屏幕支持)或者核显设为 Enabled(启用)。 - 速度对比:核显(QSV)的速度同样是硬件级的,相比于你之前不到 2 倍(
2x)的纯 CPU 速度,QSV 通常能直接飙到8x - 15x以上,几分钟就能转完一集。
那如果将intel核显与Nvidia显卡的优点结合起来呢?
这确实是一个非常聪明的“极客思路”!
然而,在现实的视频转码世界里,核显 + N卡并没有融合成一个“只有优点、没有缺点”的超级战神。
它们之间的关系更像是各自为战的偏科生。当你使用 -c:v hevc_qsv 时,实际上只有 Intel 核显在疯狂工作,N卡此时正躺在旁边“摸鱼”;反之,用 hevc_nvenc 时,核显也在休息。它们无法像游戏里的双显卡交火(SLI)那样“1+1=2”地共同去压制同一个视频流。
所以,即使你同时拥有它们,硬件加速固有的物理缺陷依然存在。我们可以把“纯CPU”、“N卡”和“Intel核显”放在一起做个最终的大比拼,你就能一眼看出它们的代价是什么了:
🎥 三大转码阵营终极硬核比拼
| 特性 / 维度 | 纯 CPU (libx265) | NVIDIA 独显 (hevc_nvenc) | Intel 核显 (hevc_qsv) |
|---|---|---|---|
| 转码速度 | 🐌 极慢 (1x - 2x) | 🚀 极快 (15x - 30x+) | 🚄 很快 (8x - 20x) |
| 压缩率 (相同画质下体积) | 🏆 最小 (最省硬盘空间) | 📉 较大 (比CPU大15%-20%) | ⚖️ 中等 (比N卡略好,比CPU大) |
| 画面细节 (数毛党最爱) | 🏆 极高 (复杂场景不糊) | 📉 一般 (高速运动可能出现色块) | ⚖️ 较好 (近年新核显表现不错) |
| 电脑资源占用 | 🥵 CPU满载,电脑卡死 | 🎮 GPU占用,无法畅玩大作 | 🍃 核显单飞,不影响系统和游戏 |
⚠️ 硬件加速永远无法规避的 3 个“底层缺陷”
为什么硬件加速(无论核显还是N卡)无法做到完美?因为它们在芯片设计上就做了取舍:
-
“硬编码”是死脑筋:
CPU 转码(软解)之所以画质好、体积小,是因为它会反复计算。遇到画面变动慢的文戏,它就拼命压低码率;遇到打斗的武戏,它就提高码率。而显卡和核显内部的硬解码模块(NVENC/QSV)为了追求极致的速度,精简了算法,它没有那么多时间去反复揣摩和优化每一帧,只能用更简单粗暴的方式把视频塞进 H.265 的框架里。
-
高保真细节丢失(高频死穴):
在面对大雨、大雪、暗部噪点、漫天飞沙这种极度消耗码率的画面时,硬件编码器为了维持速度和规定的质量,往往会选择把这些细节“糊掉”(变成色块)。而 CPU 宁可慢成狗,也会把每一片雪花精准地画出来。
-
环境依赖高:
硬件编码严重依赖驱动。有时候 Windows 更新了个显卡驱动,或者 FFmpeg 版本变动,原有的硬件加速命令就可能突然报一堆底层错误(比如常见的
Device not found或D3D11 error),不如 CPU 命令那样一成不变的稳定。
🛠️ 怎么选?给你的最终实用建议
既然没有完美方案,那就看你的核心诉求是什么:
- 如果你在洗版(批量压制几十部电视剧):毫不犹豫选择 Intel核显(QSV) 或 N卡(NVENC)。时间就是生命,稍微多占一点硬盘空间、肉眼看不出的画质损失,在巨大的速度优势面前根本不值一提。
- 如果你在收藏最爱的影史留名神作(如《星际穿越》《指环王》):请老老实实切回 纯 CPU(libx265),哪怕让电脑通宵跑一整夜,它带给你的极致原画质和小体积也是无可替代的。
这次你只是转一集《豪斯医生》,既然核显命令已经让你体验到了飞一般的速度,那就放心用它享受科技的便利吧!
其实 Intel 核显(QSV)和 NVIDIA 显卡(NVENC)在本质上是一样的。它们都是用芯片上的专属硬件电路来给视频做“流水线式”的快餐打包,所以它们面临的画质/体积缺陷也几乎一模一样。
至于它们俩之间的细微差别,确实主要体现在速度和一些细微的偏科上:
1. 速度对比:N卡是绝对的短跑冠军 🏃♂️
在纯粹的转码速度上,N卡(尤其是 RTX 20系、30系、40系及更新的显卡)拥有更大的硬件吞吐量和更强的 NVENC 单元。
- NVIDIA 显卡:通常能跑到 15x - 30x+ 的速度(一集 40 分钟的剧,1 到 2 分钟就压完了)。
- Intel 核显:通常在 8x - 20x 左右(稍微慢一点点,但也只需要 2 到 4 分钟)。
2. 压缩率对比:Intel 核显近年来略胜一筹 📐
虽然核显速度稍慢,但在处理 H.265 (HEVC) 编码时,Intel 11代以后的核显(Xᵉ 架构及更新)在“精细度”上做了一些优化。
- 如果给它们一模一样大的体积(比如你限定的 800M),Intel 核显压出来的画面,在暗部细节和动态场景下,往往会比 N 卡稍微细腻一点点,更接近 CPU 的效果。
💡 总结一下它们在电脑里的分工:
既然你只有一集视频,而且已经用 hevc_qsv(核显)成功跑起来了,那就完全没必要再折腾换成 N 卡命令了。
现在的状态就非常完美:核显在后台默默帮你高效转码,你的主力 N 卡和 CPU 核心都闲着,你甚至可以一边转码,一边双开个 3A 游戏大作或者看 4K 电影,电脑依然丝滑顺畅!
算不上报错,一个小插曲
这个警告的意思是:“由于时间戳错乱,Matroska(MKV)封装器不得不强行开辟一个新的数据块(Cluster)来存放数据。”
🔍 为什么会报这个警告?
MKV 文件在底层就像竹筒一样,是分成一节一节的,每一节叫做一个 Cluster(簇/数据块)。正常情况下,视频、音频、字幕的数据帧应该按照时间顺序(0秒 -> 1秒 -> 2秒)整整齐齐地排队放进这些 Cluster 里。
但在以下情况下,排队会乱掉:
- 时间戳交错(Interleaving)太严重:你刚才添加的那个外部 SRT/ASS 字幕文件,由于是独立制作的,它的时间戳(PTS/DTS)和原本视频文件里的音视频轨道在底层没有对齐。比如,视频正读到第 10 秒,突然塞进来一个时间戳被判定在第 5 秒或第 20 秒的字幕数据。
- 硬件硬编码的通病:在使用
hevc_qsv或hevc_nvenc硬件加速时,显卡/核显由于处理速度太快,吐出视频帧的顺序或缓冲机制与音频、字幕流不同步,导致多轨道合并时出现时间戳“断层”或“倒退”。
⚠️ 这会有什么后果?
- 90% 的情况:完全没有影响。这只是一个 Warning(警告)而不是 Error(错误)。视频压完后你可以用 PotPlayer 播放一下,如果没有音画不同步、没有卡顿、字幕显示正常,你完全可以忽略它。
- 极少数差的情况:如果警告疯狂刷屏,可能会导致压出来的 MKV 文件在某些特定时间点音频突然静音几秒钟,或者在拖动进度条(快进快退)时产生明显的卡顿。
🛠️ 怎么解决它?
如果你强迫症犯了不想看到它,或者压出来的视频确实有音频断续、播放过快的问题,可以在命令中加入一个 FFmpeg 的“强力对齐参数”:-max_interleave_delta 0。
把这个参数加在输出文件名的前面。修改后的 Intel 核显转码命令如下:
1 | ffmpeg -hwaccel qsv -c:v h264_qsv -i "input1.mkv" -i input1.ass -map 0 -map 1 -c:v hevc_qsv -global_quality 25 -preset medium -c:a copy -c:s copy -max_interleave_delta 0 "output.x265.mkv" |
这个参数的作用: -max_interleave_delta 0 会强行解除 FFmpeg 对多轨外交错时间的限制,允许它无限期等待并对齐视频、音频和外挂字幕的时间轴,通常能彻底消除这个警告。



