音频视频您现在的位置是:首页 > 工具箱 > 音频视频

如何将 .ts 文件格式转换成 MP4 文件格式?

<a href='mailto:'>微wx笑</a>的头像微wx笑2021-04-05 19:27:39音频视频人已围观关键字: ts  TS流  文件格式  转换  MP4  m3u8  FFmpeg  

现在越来越多的视频网站采用 m3u8、TS流(.ts扩展名的文件)的技术实现方式,这样本地缓存或下载到本地的就是N多个扩展名为 .ts 的文件,这样就给本地播放带来了困难。如何将 .ts 文件格式转换成 MP4 文件格式呢?

现在越来越多的视频网站采用 m3u8、TS流(.ts扩展名的文件)的技术实现方式,这样本地缓存或下载到本地的就是N多个扩展名为 .ts 的文件,这样就给本地播放带来了困难。如何将 .ts 文件格式转换成 MP4 文件格式呢?8lt编程技术_踩坑日志_进阶指南_无知人生

TS是什么?

TS的全称则是Transport Stream,即传输流,DVD节目中的MPEG2格式,是MPEG2-PS,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的,m3u8是一个TS切片列表文件,它记录视频的每个切片的时长与顺序 。现主流视频网站都采用这种模式。8lt编程技术_踩坑日志_进阶指南_无知人生

缘起

看到一个比较好的视频,希望下载到本地收藏,结果发现是采用 m3u8、TS流的方式,自己知道怎么编写一下下载工具,于是开始探寻将 .ts 文件格式转换成 MP4 文件格式的方法。经过一番搜索,发现其实实现方式都是基于 FFmpeg 实现的。8lt编程技术_踩坑日志_进阶指南_无知人生

高级方式

其实是对于大多数人来说这是最低级的方式,就是自己下载 FFmpeg(FFmpeg 是开源的)的源码,自己编译出 FFmpeg 的工具,然后进行文件格式转换。8lt编程技术_踩坑日志_进阶指南_无知人生

一般方式

去下载别人已经编译好的 FFmpeg 工具,然后通过命令进行文件格式转换。去这里下载针对不同操作系统的版本:http://ffmpeg.org/download.html8lt编程技术_踩坑日志_进阶指南_无知人生

image.png8lt编程技术_踩坑日志_进阶指南_无知人生

命令

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加密,这是一种对称加密方式,对称加密也就是加密解密使用相同的密码,加密内容可还原。8lt编程技术_踩坑日志_进阶指南_无知人生

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4

似乎如果.ts文件是加密的,那么就需要有m3u8文件才行,因为查看ffmpeg的帮助,发现参数-key需要二进制的值8lt编程技术_踩坑日志_进阶指南_无知人生

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

解释:8lt编程技术_踩坑日志_进阶指南_无知人生

-i代表输入参数8lt编程技术_踩坑日志_进阶指南_无知人生

-c:v 是指video编码8lt编程技术_踩坑日志_进阶指南_无知人生

-c:a 是指audio编码8lt编程技术_踩坑日志_进阶指南_无知人生

-bsf bitstream filter8lt编程技术_踩坑日志_进阶指南_无知人生

-f format 文件格式8lt编程技术_踩坑日志_进阶指南_无知人生

-crf 画面质量8lt编程技术_踩坑日志_进阶指南_无知人生

在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。通常的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。8lt编程技术_踩坑日志_进阶指南_无知人生

简单方式

最简单的方式是使用TS助手,使用它下载加轮换格式一步就搞定了。8lt编程技术_踩坑日志_进阶指南_无知人生

image.png8lt编程技术_踩坑日志_进阶指南_无知人生


8lt编程技术_踩坑日志_进阶指南_无知人生

未完,待续……8lt编程技术_踩坑日志_进阶指南_无知人生

后面会补充TS助手的下载地址,以及详细的使用方法8lt编程技术_踩坑日志_进阶指南_无知人生


8lt编程技术_踩坑日志_进阶指南_无知人生

本文由 微wx笑 创作,采用 CC BY-NC 4.0 许可协议。 非商业性使用可自由转载、引用、甚至修改,但需署名作者且注明出处。

很赞哦! () 有话说 ()