如何使用FFmpeg将 .ts 文件格式合并转换成 MP4 文件格式?
微wx笑 2021-04-05【音频视频】 5 0关键字: ts TS流 文件格式 转换 MP4 m3u8 FFmpeg
现在越来越多的视频网站采用 m3u8、TS流(.ts扩展名的文件)的技术实现方式,这样本地缓存或下载到本地的就是N多个扩展名为 .ts 的文件,这样就给本地播放带来了困难。如何将 .ts 文件格式转换成 MP4 文件格式呢?
现在越来越多的视频网站采用 m3u8、TS流(.ts扩展名的文件)的技术实现方式,这样本地缓存或下载到本地的就是N多个扩展名为 .ts 的文件,这样就给本地播放带来了困难。如何将 .ts 文件格式转换成 MP4 文件格式呢?
TS是什么?
TS的全称则是Transport Stream,即传输流,DVD节目中的MPEG2格式,是MPEG2-PS,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的,m3u8是一个TS切片列表文件,它记录视频的每个切片的时长与顺序 。现主流视频网站都采用这种模式。
缘起
看到一个比较好的视频,希望下载到本地收藏,结果发现是采用 m3u8、TS流的方式,自己知道怎么编写一下下载工具,于是开始探寻将 .ts 文件格式转换成 MP4 文件格式的方法。经过一番搜索,发现其实实现方式都是基于 FFmpeg 实现的。
高级方式
其实是对于大多数人来说这是最低级的方式,就是自己下载 FFmpeg(FFmpeg 是开源的)的源码,自己编译出 FFmpeg 的工具,然后进行文件格式转换。
一般方式
去下载别人已经编译好的 FFmpeg 工具,然后通过命令进行文件格式转换。去这里下载针对不同操作系统的版本:http://ffmpeg.org/download.html
命令
ffmpeg -i input.ts -c:v copy -c:a libfaac out.mp4 ffmpeg -i input.ts -c:v libx264 -crf 24 -c:a libfaac out.mp4 ffmpeg -allowed_extensions ALL -i "input.m3u8" -f mp4 -codec copy "output.mp4"
注意:如果.ts文件是经过加密的,那在视频网站上播放的时候,你会看到加载 index.m3u8 文件之后会加载一个 key.key 的文件,里面保存是的加密解密的密码,.ts文件通常是采用AES128加密,这是一种对称加密方式,对称加密也就是加密解密使用相同的密码,加密内容可还原。
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4
似乎如果.ts文件是加密的,那么就需要有m3u8文件才行,因为查看ffmpeg的帮助,发现参数-key需要二进制的值
crypto AVOptions: -key <binary> ED....... AES encryption/decryption key -iv <binary> ED....... AES encryption/decryption initialization vector -decryption_key <binary> .D....... AES decryption key -decryption_iv <binary> .D....... AES decryption initialization vector -encryption_key <binary> E........ AES encryption key -encryption_iv <binary> E........ AES encryption initialization vector
解释:
-i代表输入参数
-c:v 是指video编码
-c:a 是指audio编码
-bsf bitstream filter
-f format 文件格式
-crf 画面质量
在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。通常的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。
2021-10-28新测可用的方法:
新建file.txt文档
file 'E:\TS视频下载\沙丘\6.ts' file 'E:\TS视频下载\沙丘\8.ts' file 'E:\TS视频下载\沙丘\10.ts' file 'E:\TS视频下载\沙丘\12.ts' file 'E:\TS视频下载\沙丘\14.ts' file 'E:\TS视频下载\沙丘\16.ts' file 'E:\TS视频下载\沙丘\18.ts' file 'E:\TS视频下载\沙丘\20.ts'
注意ts文件列表前面的 file ,不加是不行的,后面可以只是文件名,不包含目录。
执行ffmpeg命令
# -safe 0: 防止Operation not permitted
ffmpeg.exe -f concat -safe 0 -i file.txt -c copy out.mp4
简单方式
最简单的方式是使用TS助手,使用它下载加轮换格式一步就搞定了。
后面会补充TS助手的下载地址,以及详细的使用方法
续:TS助手 v3.52 网站网页 .m3u8 .ts 视频下载工具神器 .ts文件合并转换MP4
2022-12-11更新
ffmpeg.exe -f concat -safe 0 -i index.m3u8 -f mp4 -codec copy output.mp4
index.m3u8 文件格式
file p00014.ts file p00016.ts file p00017.ts file p00018.ts file p00019.ts file p00020.ts
如果ts文件内容为空或数据有错误,执行命令时会报错,删除对应的ts 行就可以了。
2022-12-18更新
TS助手是使用 aria2 下载 ts 文件,但是由于有些服务器的原因,aria2 会下载失败,但是使用 wget 下载却正常。
相关文章:
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/toolbox/media/2021-04-05/632.html