众所周知,MKVToolNix可以为mkv文件加入多种字幕,但到了mp4,内嵌字幕会变的比较麻烦。起因是从Youtube下载了一部MV,由于音视频和字幕是分开下载的,而且下载的是AV1编码,就想着不要重新打包mkv,而是直接在mp4中嵌入字幕。
首先说原理,PotPlayer是可以识别到Codec ID为tx3g
标签的字幕,tx3g
是用于3GPP/MPEG时期的带有时间标记的文本,我们要利用这个特性,让字幕显示为tx3g
,这样一般的播放器就都可以识别了。实现起来比较简单的方式就是使srt或者ttxt(GPAC Timed Text XML)会通过MP4Box直接显示为tx3g
。
先将下载的字幕(我下载到的是webvtt格式)转换为srt,webvtt转换为srt比较简单,没有工具的情况下,作为文本文件打开,把标记WEBVTT文件头删掉就可以了。
然后通过下面的代码直接mux即可:
»首先说明的是,MKVToolNix无法加载tx3g格式的字幕,这种字幕一般封装在mp4文件中,以网上下载的居多。另外用BBDown下载的bilibili视频如果带字幕的话,也是这种格式。
以某集电视剧为例,文件名:IRIS.S02E01.2013.WEB-DL.1080p.H265.AAC-Xiaomi.mp4
首先需要了解字幕文件所在的轨道号:
»最近手头一大堆的 mp4 视频,从中提取了音频部分,准备放在手机上听,而 mp4 一般提取音频是 aac 格式,这种文件放在 foobar2000 里播放的时候是没有进度条的,所以必须封装为 m4a,m4a 本身其实就是 mp4。
工具最简单的用 mp4box 就可以了,也可以用 ffmpeg,不过这货过于强大,而且兼容性不如 mp4box。
原理参考这里:
mp4box.exe -add 1.aac:name="" -new 1.m4a 顺便做了个批处理工具,直接把要转换的 aac 拖入即可。 »
众所周知,Youtube提供的视频,其中最高规格是1080p,但却只有video only,如果想下载到本地的话,是没有声音的,有声版本最高是720p.h264.aac,这时,便需要提取这个720p的音频部分,再加上1080p的视频部分进行封装。
封装的工具大多是ffmpeg或者mp4box,其中包含有很多前端,比如My MP4Box GUI或者YAMB。
最近,heartnn在potplayer播放某个自己已经封装完的视频后,发现下面的问题:
»