直播常用 FFmpeg & ffplay 命令

5,872 阅读2分钟

因为我是做直播行业的,所以经常需要借助 FFmpeg 的一些命令来高效的辅助我的工作,下面介绍几个我常用到的命令。

ffplay 播放视频

ffplay 可以播放绝大多数的音视频文件,如果你是在 macos 上通过 brew 安装的 FFmpeg,需要单独带上 ffplay:

  1. brew install ffmpeg --with-ffplay

然后用 ffplay 播放一个在线的视频:

  1. ffplay http://joeyio.com/streaming/test.flv

如果想显示更详细的信息,比如想排查流的问题,可以自己指定 loglevel,比如我们指定 loglevel 为 debug,会显示更多详细的信息,排查问题更方便:

  1. ffplay http://joeyio.com/streaming/test.flv -loglevel debug

转封装 (比如:m3u8 -> mp4)

想象一下这个场景, 运营妹子找你帮忙把一个在线的 m3u8 流下载下来,想要 MP4 格式的,怎么办呢? 来,一行命令搞定!

  1. ffmpeg -i "http://joeyio.com/streaming/test.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 24 out.mp4

拉流 + 转推

有时候我们在做活动,或者测试流的时候,会想从一个地址拉一路流,然后做一些处理,转推到另外一个流上。简称为转推。

先看一下这个例子:

  1. 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 在文件的末尾,这样在线播放的时候,就会比较慢。我们可以把它迁移到文件的最前面。

  1. ffmpeg -i test.mp4 -bsf:a aac_adtstoasc -vcodec libx264 -crf 24 -movflags faststart test_faststart.mp4

这些是我工作中用的比较多的一些命令,如果你有一些有意思的命令,欢迎留言补充哦