FFmpeg合并.ts(或.m3u8)文件和字幕文件为新的视频文件

269 阅读5分钟

使用多媒体视频处理工具FFmpeg工具将.ts(或.m3u8)文件和字幕文件合并成带同步字幕的新视频。

.ts文件: MPEG2-TS(Transport Stream)是一种音视频封装格式。 .m3u8文件类似,请搜索了解。

.m3u8文件: m3u8文件是m3u(MP3 URL,MP3地址)文件的Unicode(统一编码)版本。m3u8中的“8”代表UTF-8编码,这是目前网络通信中最常见的全球通用编码标准。

.vtt文件: VTT文件是Web Video Text Tracks(WebVTT)格式的字幕文件。 .vtt是纯文本文件,可用文本编辑器打开并查看其内容是哪种语言。

.srt文件: SRT(SubRip文本)是一种广泛应用于视频字幕同步的行业标准格式,其文件扩展名为.srt,可通过纯文本编辑器直接编辑。

可以先通过下载工具如IDM下载.ts文件(或.m3u8文件)和.vtt文件(或.srt文件)等。

注意: 建议将所有的字幕文件编码统一为 UTF-8 格式,避免乱码。

1 下载安装适合您操作系统的FFmpeg版本

下载和配置FFmpeg环境变量的方法自行搜索。

2 将所有的.ts文件放在一个文件夹中,合并.ts文件

用.ts文件举例

2.1 方法一,使用FFmpeg的concat协议来合并.ts文件

就地新建一个文本文件(如filelist.txt),其内容为逐行列举所有的.ts文件。即每行一个TS文件名,格式为file xxx.ts,如下文或见图示

file 001.ts

file 002.ts

file 003.ts

...

在这里插入图片描述

列举完后保存退出即可。

在当前ts文件夹空白处按 windows + r 键弹出运行框,输入PowerShell 或 CMD打开命令行,运行命令:

/*
  ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.ts
*/

说明:上述output为自定义的合并后的ts文件名。

2.2 方法二,直接使用concat协议(适用于少量文件)

命令为

/*
  ffmpeg -i concat:001.ts|002.ts|003.ts -c copy output.ts
*/

说明:跟方法一的区别是直接在命令中列举所有的ts文件。

3 使用FFmpeg将合并后的.ts文件与字幕文件合并成视频

如合并后的ts文件名为output.ts,对应的中英文字幕文件是merged.vtt,期望合并后的视频为mp4格式,且名称为output_final,则命令为:

/*
  ffmpeg -i output.ts -i merged.vtt -c copy -c:s mov_text output_final.mp4
  
  说明:
  -c copy 表示视频和音频流直接复制,不重新编码,以保持高清质量。
  -c:s mov_text 表示将字幕流设置为mov_text格式(适用于MP4容器)。
*/

3.1 一次性合成.m3u8和字幕文件

也可以通过开发者工具获取到原视频文件的.m3u8文件的链接地址,然后直接一次性合并原视频和字幕文件,转换成新的视频。

在这里插入图片描述

如m3u8的地址是 hls.ted.com/project_mas… ,对应的字幕文件是Talk.vtt,期望生成的视频是output_final.mp4,则命令为:

/*
  ffmpeg -i https://hls.ted.com/project_masters/10514/manifest.m3u8 -i Talk.vtt -c c
opy -c:s mov_text output_final.mp4
*/

4 字幕不同步的问题

以上方法可能会遇到合并后的mp4视频文件 字幕不同步 的问题。

4.1 先合并生成新视频

建议把字幕文件放一边,先将下载的ts或m3u8文件转换成mp4文件,再用其它工具解决字幕不同步的问题。

FFmpeg将ts或m3u8转为mp4文件的命令是:

/*
  ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4
*/

/*
  ffmpeg -i input.mkv -c:v libx264 -c:a aac -strict experimental output.mp4
  mkv转mp4,视频H264、音频AAC编码(微信视频号要求视频是视频H264、音频AAC编码)
*/

/*
  ffmpeg -i http://xxx.com:8891/1231/index.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4
*/

不会的命令可搜索。

4.2 用视频播放器同步字幕

推荐用PotPlayer视频播放器解决字幕不同步的方法:

1、将视频和字幕文件改为同一个名字,如video.mp4和video.vtt (其它格式的字幕文件也可以,如video.srt),便于打开视频时让播放器自动识别字幕文件,否则需要手动导入字幕。

在这里插入图片描述

2、PotPlayer可以手动调整字幕跟视频同步,这个就是纯PotPlayer中操作了,不会的搜索一下。

在这里插入图片描述

提示: 导入原视频和字幕文件后,PotPlayer可以将原字幕格式导出保存为另一种格式。

5 中英文双语字幕问题

上述操作完成后,视频应该有一种语言的字幕了,且字幕是同步的。但想要同步的双语字幕该怎么办呢?

5.1 手动翻译字幕

字幕文件可以是.vtt或.srt或.txt等多种格式,且字幕文件本质上是文本,可以用文本编辑器如Notepad直接打开编辑。

假如原字幕是英文字幕,现在想添加同步的中文字幕,笨方法是将英文一句一句翻译为中文后粘贴回去,如图:

单一字幕

在这里插入图片描述

双语字幕

在这里插入图片描述

手动翻译完成之后,还是将视频和字幕命名为相同名称,再次播放视频时,PotPlayer即可自动识别。

但PotPlayer无法生成和导出双语同步字幕视频,需要使用PotPlayer重新录制一遍。

如感觉麻烦,可以使用剪映等视频剪辑软件合并原视频和双语字幕文件,生成一个合二为一的新视频。

5.2 软件翻译字幕

使用字幕翻译软件(如SrtTranslator,若SrtTranslator失效可找其它类似软件),直接将原单一字幕文件翻译生成为一个新的双语字幕文件,用PotPlayer打开即可自动识别。

合并原视频和双语字幕文件的方法仍然需要使用其它的视频剪辑软件。

5.3 用音视频剪辑软件生成

如将原视频和单一字幕文件导入剪映后,开启它的双语字幕功能后可傻瓜式地生成我们需要的目标视频,但需要会员,请自行考虑。

6 生成目标视频

上文提过,解决了.ts(或.m3u8)合成mp4(或mkv等其它格式)视频问题、字幕不同步问题、无双语字幕问题等,最终需要借助视频剪辑软件生成合并后的目标视频文件,这才是我们想要的。

微信公众号:

TechU.png