因为我是做直播行业的,所以经常需要借助 FFmpeg 的一些命令来高效的辅助我的工作,下面介绍几个我常用到的命令。
ffplay 播放视频
ffplay 可以播放绝大多数的音视频文件,如果你是在 macos 上通过 brew 安装的 FFmpeg,需要单独带上 ffplay:
brew install ffmpeg --with-ffplay
然后用 ffplay 播放一个在线的视频:
ffplay http://joeyio.com/streaming/test.flv
如果想显示更详细的信息,比如想排查流的问题,可以自己指定 loglevel,比如我们指定 loglevel 为 debug,会显示更多详细的信息,排查问题更方便:
ffplay http://joeyio.com/streaming/test.flv -loglevel debug
转封装 (比如:m3u8 -> mp4)
想象一下这个场景, 运营妹子找你帮忙把一个在线的 m3u8 流下载下来,想要 MP4 格式的,怎么办呢? 来,一行命令搞定!
ffmpeg -i "http://joeyio.com/streaming/test.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 24 out.mp4
拉流 + 转推
有时候我们在做活动,或者测试流的时候,会想从一个地址拉一路流,然后做一些处理,转推到另外一个流上。简称为转推。
先看一下这个例子:
ffmpeg -re -i http://joeyio.com/streaming/test.flv -vcodec libx264 -acodec copy -vf scale=480:852 -b:v 1.5M -f flv "rtmp://joeyio.com/streaming/mirror?param=xxx"
在具体解释这个命令做的事情之前,先来简要的介绍一个各个参数:
-
-re : 表示按帧率发送(保持视频按照时间戳发送,否则视频文件将很快传输完毕, 参考这里)
-
-i : 指定输入源
-
-vcodec : 指定编解码器,因为下面有 -vf 改变分辨率以及 -b:v 改变码率,需要重新解码再编码,所以需要指定视频的编解码器,这里使用开源的 libx264
-
-vf : 设置视频滤镜,这里设置为
scale=480:852
,就是修改分辨率为 480*852 (宽 * 高) -
-b:v : 设置视频码率,这里是 1.5 Mbps,音频用-b:a 来设置
-
-acodec: 音频格式不需要改变, 所以用 copy
-
-f : 强制指定格式,这里是 flv
所以上面的命令的意思是:
首先从 http://joeyio.com/streaming/test.flv
拉一路流,把分辨率改为 480*852,码率设置为 1.5Mbps,并推流到 rtmp://joeyio.com/streaming/mirror?param=xxx
这个地址上。
把 MP4 的 moov 移动到前面,减少 MP4 在线播放首屏时间
moov 是 MP4 文件的一部分,是播放之前必须要解析的。有些 MP4 的 moov 在文件的末尾,这样在线播放的时候,就会比较慢。我们可以把它迁移到文件的最前面。
ffmpeg -i test.mp4 -bsf:a aac_adtstoasc -vcodec libx264 -crf 24 -movflags faststart test_faststart.mp4
这些是我工作中用的比较多的一些命令,如果你有一些有意思的命令,欢迎留言补充哦