| 2 min read

最近接触流媒体的一些东西,大概这里安利两个命令行工具用于对 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 更加感兴趣,你可以去 官网 查看更多命令教程。

You Can Speak "Hi" to Me in Those Ways