MKV格式电影英文字幕轨导出机器翻译
从网上下载了一部外国电影,没有中文字幕,但是有英文字幕。
尝试用ffmpeg导出英文字幕轨,然后利用网络翻译工具,进行机器翻译处理,得到中文字幕轨。
记录一下实验方法,供更多同学参考
实验使用的文件是Civil.War,实验完成后已删除。
名称: Civil.War.2024.2160p.AMZN.WEB-DL.DDP5.1.Atmos.H.265-FLUX.mkv
大小: 12785690114 字节 (11 GiB)
CRC32: A0D2EF12
CRC64: F7FD7DABA8353137
SHA256: 278D63E80C72E9F7995FA866B9FDBB1A71830A69C154AE82511ED9883EB65BAA
SHA1: E30830E1D4E118B02C03B2CD944029E7579E435D
BLAKE2sp: 6E0649724290132E7ECC8A9EC683021FE9A0FD1E2EC11978080204D4A466A1C2
探测字幕轨的编号
首先,要探测字幕轨的位置,可以用ffmpeg或mediainfo或potplayer。
ffmpeg探测字幕轨
ffmpeg命令行代码如下:
ffmpeg -i input.mkv
由于没有输出参数,ffmpeg不会进行转码处理,只会显示出字幕轨的情况。
mediainfo探测字幕轨
如果用mediainfo
则会得到以下信息(截取部分)
完整名称 : Civil.War.2024.2160p.AMZN.WEB-DL.DDP5.1.Atmos.H.265-FLUX\Civil.War.2024.2160p.AMZN.WEB-DL.DDP5.1.Atmos.H.265-FLUX.mkv
格式 : Matroska
格式版本 : Version 4
文件大小 : 11.9 GiB
时长 : 1 时 48 分
总体码率 : 15.7 Mb/s
编码程序 : mkvmerge v79.0 ('Funeral Pyres') 64-bit
编码函数库 : libebml v1.4.4 + libmatroska v1.7.1
视频
ID : 1
格式 : HEVC
格式/信息 : High Efficiency Video Coding
格式配置 (Profile) : Main@L5@Main
编解码器 ID : V_MPEGH/ISO/HEVC
时长 : 1 时 48 分
码率 : 14.9 Mb/s
宽度 : 3 840 像素
高度 : 2 080 像素
画面比例 : 1.85:1
原始画面比例 : 1.85:1
帧率模式 : 恒定帧率 (CFR)
帧率 : 23.976 (24000/1001) FPS
色彩空间 : YUV
色度抽样 : 4:2:0
位深 : 8 位
数据密度 [码率/(像素*帧率)] : 0.078
流大小 : 11.3 GiB (95%)
语言 : 英语 (English)
Default : 是
Forced : 否
色彩范围 : Limited
色彩原色 : BT.709
传输特性 : BT.709
矩阵系数 : BT.709
音频
ID : 2
格式 : E-AC-3 JOC
格式/信息 : Enhanced AC-3 with Joint Object Coding
传播名 : Dolby Digital Plus with Dolby Atmos
编解码器 ID : A_EAC3
时长 : 1 时 48 分
码率模式 : 恒定码率 (CBR)
码率 : 768 kb/s
声道数 : 6 声道
声道格式 : L R C LFE Ls Rs
采样率 : 48.0 kHz
帧率 : 31.250 FPS (1536 SPF)
压缩模式 : 有损
相对视频的延迟 : 19 毫秒
流大小 : 597 MiB (5%)
语言 : 英语 (English)
服务类别 : Complete Main
Default : 是
Forced : 否
复杂度指数 : 16
动态对象总数 : 15
音床声道数 : 1 声道
音床声道配置 : LFE
文本 #1
ID : 3
格式 : UTF-8
编解码器 ID : S_TEXT/UTF8
编解码器 ID/信息 : UTF-8 Plain Text
时长 : 1 时 39 分
码率 : 34 b/s
元素总数 : 989
流大小 : 25.4 KiB (0%)
语言 : 英语 (English)
Default : 否
Forced : 否
文本 #2
ID : 4
格式 : UTF-8
编解码器 ID : S_TEXT/UTF8
编解码器 ID/信息 : UTF-8 Plain Text
时长 : 1 时 40 分
码率 : 39 b/s
元素总数 : 1139
流大小 : 28.6 KiB (0%)
标题 : SDH
语言 : 英语 (English)
Default : 否
Forced : 否
文本 #3
ID : 5
格式 : UTF-8
编解码器 ID : S_TEXT/UTF8
编解码器 ID/信息 : UTF-8 Plain Text
时长 : 1 时 48 分
码率 : 32 b/s
元素总数 : 928
流大小 : 25.9 KiB (0%)
标题 : Latin American
语言 : 西班牙语 (Spanish)
Default : 否
Forced : 否
可以看到mkv文件包含三个字幕轨,只需要提取任意一个进行机器翻译即可。
其中,第二个字幕轨是SDH(Subtitles for Deaf and Hard-of-hearing)是失聪及听障者字幕,包含详细的环境描述,如果在地铁上看电影可以使用这个版本的字幕。。
提取外语字幕轨
用FFMPEG可以方便的将字幕轨提取出来,
ffmpeg -i input.mkv -map 0:s:3 subtitle.srt
提取完成后,FFMPEG在命令行给出截取部分提示信息部分,如下:
Stream mapping:
Stream #0:4 -> #0:0 (subrip (srt) -> subrip (srt))
Press [q] to stop, [?] for help
size= 58kB time=01:48:41.37 bitrate= 0.1kbits/s speed=82.8x
video:0kB audio:0kB subtitle:26kB other streams:0kB global headers:0kB muxing overhead: 125.698326%
不涉及重编码,还以为会秒出结果,实际花了1分钟时间。
可能是需要对MKV文件中各个block?进行依次提取字幕轨内容,所以速度比较慢,只能达到82倍速。
PS,相比于重编码视频stream已经是快上天了。
这里选择了第三个字幕轨0:s:3
,结果对应的是西班牙语字幕。
无所谓,丢给WPS机器翻译救急而已,不再重新导出字幕轨了。
机器翻译
得到的字幕轨是subtitle.srt
格式的,实际是txt文本格式,直接改后缀或拖到notepad打开即可。
因为买了WPS会员,所以尝试用WPS做全文翻译。
如果没有WPS会员,用百度翻译也不错。
另外,现在AI很流行,可以试试AI翻译。
WPS全文翻译只对word格式有效,把notepad打开的文档中全部复制到一个*.doc
文件中。
由于,WPS翻译全文需要消耗会员免费翻译页数,字幕txt行数比较多,直接反应需要消耗页数130+(超过免费的50页)。
所以,把字体改到最小的5pt,并设置每页显示3栏,压缩doc格式文件的页数到9页。
然后,一键“全文翻译”,顺利的完成全文翻译,复制翻译后的内容,保存为Chinese.txt
,然后重命名Chinese.srt
,就得到一个中文字幕了。
自己观看测试用,就不去做重新封装了,直接在播放器中选择外部字幕Chinese.srt
,熟悉的中文字幕就来了!
LowB机翻版,哈哈哈