MKV to MP4 如何压制成硬字幕
看了吱一声
编辑于 2023年11月08日 22:02
收录于文集
共2篇

        首先来说说我的遭遇,前几天心血来潮制作一个视频,本来MKV视频文件(英文语音)我是封装了SRT中英双语字幕的,用MKVTOMP4转换后,视频用potplayer播放测试了一下,双语字幕显示都很正常,但是诡异的是,上传到B站之后,发现播放并没有字幕,后来查询相关信息,原因是:视频上传B站,转码过程中会自动过滤掉封装的字幕。(原谅我是B站菜鸟,不知道这个规则。)

        其实如果视频是国语的话,有没有字幕也没啥问题,但是视频语音若是是英文或是其它外国语种的话可能小伙伴看起来会有点不是很舒爽,当然B站也支持上传外挂字幕,但是个人觉得很麻烦,因为之前翻译做好SRT双语字幕是整部视频的,上传B站字幕会做一些分割处理,这样再重新做片段字幕非常麻烦,耗时耗力,于是就萌生把它做成硬字幕再分割上传就比较方便了。

        既然想法有了,just do it !

        于是开始准备,测试了不少转码压制的软件(这里就不提软件名称了,不太好。),发现并不理想,还是听从知乎大神的建议用大名鼎鼎的开源软件 FFmpeg,之前也接触过这个软件,优缺点并存,优点是具有强大的视频处理能力,可以轻松处理多媒体文件,实现转码、剪辑、视频截图、添加水印、提取音视频、处理字幕等操作(功能太多,不再罗列。),满足各种多媒体处理需求。但是,它的缺点也非常明显:都是MS-DOS下的命令行操作,对普通人太不友好了,当然也有的人推出带UI界面的版本,但本人懒得去折腾,学习回味一下命令行操作也不错!下面就切入正题,开整!


1、下载ffmpeg安装包

到ffmpeg官网https://ffmpeg.org/download.html 按照下图所示红框里面下载,获得FFmpeg软件压缩包。

FFmpeg软件包下载网站

FFmpeg软件包版本选择

解压压缩文件,进入bin目录,能看到ffmpeg.exe、ffplay.exe、ffprobe.exe三个文件。

ffmpeg\bin下的三个文件


2、设置环境变量(特指Windows版本,其他(比如MAC)版本设置自行搜索。)

如果你下载ffmpeg只是为了使用Captura(录屏),直接跳过这一步。

如果是另有他用(比如我们今天要做的压制硬字幕操作),由于该程序只有命令行模式,需要配置软件环境,给软件调用设置环境变量。

点击“ 系统属性 > 高级系统设置 > 环境变量 > 用户变量 ”,选择“ Path ”条目,点击“ 编辑 > 新建 ”,把第一步的bin文件夹路径复制粘贴进去,然后点击确定即可(比如我自己的路径就是:D:\ffmpeg\bin )。

设置ffmpeg环境变量路径

进入电脑桌面,右击计算机图标,点击属性,在呈现的页面中选中高级系统设置(win10 此选项在屏幕右上部)选择高级 →选择环境。

桌面计算机属性

win10高级系统设置

win10 环境变量

环境变量的Path

鼠标点击这个Path,选择下面的“ 编辑 ”按钮进入,呈现下面的界面。

新建win10 环境变量路径

我们选择新建,点击“ 新建 ”按钮,把你解压后的ffmpeg文件夹得bin路径输入进入,当如下图是我自己的路径,你自己电脑的路径根据你自己的实际路径输入即可。

输入win10环境变量地址

注意:此处设置的是用户变量,仅当前windows用户可以使用,如果需要每个用户都能够使用,需要添加到“系统变量”的“Path”条目中(这个就不在啰嗦,自行查找资料。)。

我们打开cmd命令行窗口,输入命令:“ffmpeg –version”,窗口返回ffmpeg的版本信息,进入win10 CMD 命令符窗口(怎么进入就不用我多说了吧!),输入指令:ffmpeg –version,如下图。

ffmpeg版本信息命令

输入指令:ffmpeg,显示如下,既是设置成功,那么是不是接下来你就可以直接使用指令命令ffmpeg对媒体执行各种操作了呢?NO!!!还差关键一步。

ffmpeg指令执行

重启计算器!重启计算机!重启计算机!重要的事情说三遍!!!


3、使用FFmpeg命令压制硬字幕

使用FFmpeg将MKV软字幕转换为,MP4烧录成硬字幕的步骤如下:

烧录为硬字幕,使用以下命令将MKV软字幕烧录为MP4硬字幕:

ffmpeg -i input.mkv -vf subtitles=input.mkv output.mp4

其中,input.mkv为输入文件名,output.mp4为输出文件名。

注意:在进行指令操作的时候,要把文件放到命令行显示的目录下,或是进入你原来存放的目录,FFmpeg不会新建目录的,千万注意,否则指令操作会报错。

其他参数说明

-c:v copy 表示视频流直接复制

-c:a copy 表示音频流直接复制

-c:s mov_text 表示字幕流以mov_text格式封装

-vf subtitles=input.mkv 表示使用input.mkv中的字幕流作为硬字幕。(注意:以上命令只是示例,具体使用时需要根据实际情况进行调整。)

附送一个格式转换命令:

转换为mp4格式 使用以下命令将mkv文件转换为mp4格式,并嵌入软字幕:

ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text output.mp4

其中,input.mkv为输入文件名,output.mp4为输出文件名。


4、后记

查验结果,原来转码的MP4只是封装了字幕,字幕有选择还可以关闭。

MP4封装的字幕

使用FFmpeg制作硬字幕之后,字幕选项里已经没有字幕选项了,而且字幕开关也不起作用了,既是关闭字幕显示也无妨,不影响字幕的输出,这就是硬字幕,成功!!!

MP4硬字幕展示

同时赘述一点,FFmpeg对计算机硬件指标有要求,虽然压制的非常专业,但是我的计算机可能是性能问题,处理起来不是很快,我压制硬字幕的视频大概3Gb,压制了大概1个小时。当然如果你硬件条件好,可以使用FFmpeg指令调用硬件会大大提高速度,至于具体的操作指令,大家还行自行搜索,希望本文能帮到大家,祝大家玩耍的愉快。