最近接触流媒体的一些东西,大概这里安利两个命令行工具用于对 mp4 文件的操作;
Ffmpeg
ffmpeg 是一款非常出名的命令行工具,你可以用它进行格式转换(初中生的我只知道格式工厂),甚至对流进行编码;
$ ffmpeg -i input.mp4 output.avi
除此之外你也可以使用它来进行媒体资源基本信息的查看,比如:
$ ffmpeg -i videoplayback.mp4
你可以看到命令行的输出:
你可以看到视频的流的一些信息,比如分辨率,码率,编码方式等。
MP4 转换为 HLS
使用 ffmpeg
你可以将 mp4 文件转为支持 HLS 的 m3u8 文件,一个命令就搞定;
$ ffmpeg -i yourfile.mp4 -codec: copy -start_number 0 -hls_time 15 -hls_list_size 0 -f hls output.m3u8
简单说下命令行的一些含义:
codec
表示媒体的编码类型,你可以改成其他格式,copy 是一个关键词,表示复制原有视频的编码类型;- hls_time 表示分片的时间长度,按照每个分片 10s 来分割;
f
表示输出文件格式类型,-f hls
就是表示按照 hls 来进行输出i
表示需要转换的文件地址
MP4Box
MP4Box MP4Box 是一款同样可以对多个类型(mp4,avi,TS)的文件进行操作修改的命令行工具;同样它也具备输出流文件的功能。 你需要下载 CAPC 然后下载安装完成后,命令行输入 mp4box 即可使用了;
MP4 转换为 DASH
MP4 转换为 DASH 需要借助 mp4box, 如果自己写脚本的话,会比较复杂,我们可以使用 mp4-to-mpegdash 的脚本:
git clone https://github.com/Cloudoki/mp4-to-mpegdash
然后使用项目里的 transcode.pl
脚本就好:
$ perl transcode.pl yout_file.mp4
它会输出不同分辨率的文件,你可以修改:
my $versions = [ '320', '640', '720', '1280', '1920', '2560' ];
为需要的分辨率就好,你可以在修改更多值,因为它本身需要循环调用 mp4box 命令。
如果你对 mp4box 更加感兴趣,你可以去 官网 查看更多命令教程。