FFmpeg是一个强大的视频流处理工具, 基本的转码操作就不说了. 我想认识它都是从它无所不能的格式转换开始的.

如果你有B站的直播账号, 可以试试下面这些命令, 如果你想推龙珠, 或是虎牙, 欢迎你探索FFmpeg的命令, 我给你在博客加链接哈.

如果真想直播, 还是用OBS吧, 这是个简单教程.

使用FFmpeg推上B站

其实我参考了这位兄台的配置: 使用FFmpeg在B站直播的姿势

1
2
3
4
5
6
7
8
9
10
11
# 后面的地址, 就是RTMP地址+直播码
ffmpeg -re \
-i Hero.E09.DVDrip.x264.AC3-YYeTs.mkv \
-vf subtitles=Hero.E09.DVDrip.x264.AC3-YYeTs.srt \
-c:v libx264 \
-preset veryfast \
-maxrate 3000k \
-bufsize 6000k -pix_fmt yuv420p -g 50 -b:a 160k -ac 2 \
-ar 44100 \
-f flv \
"rtmp://js.live-send.acg.tv/live-js/?streamname=xxx&key=xxx"

上面这个命令是向直播间推送了一段视频, 要是全介绍一遍命令你也不想看, 我挑几个关键的 说一下哈(其实我之前没有用过FFmpeg, 剩下的暂时真的不想去了解了, 有问题请大家在 评论区直接指出就好了).

参数 一些含义
-re 放慢读取速度, 不加这个参数, 推视频的时候fps会达到100~200, 服务器来不及接受的.
-i; -vf 指定视频以及字幕.
-c:v libx264 我也不知道为什么一定要用x264编码一下, 可能就是需要吧
-flv B站只接受flv格式的推流

树莓派推送

有很多同学有树莓派这种小东西, 你们完全可以用树莓派直接推送, 反正对于Linux来说, FFmpeg已经快要成为了默认软件, 贴出来直播地址, 我们一起围观.

FFmpeg录屏以及测试

说完了RTMP推送, 再来一点屏幕录制以及测试相关的内容:

1
2
3
4
5
6
7
ffmpeg \
-f x11grab \
-s 1920x1080 -i :0.0+0,0 \
-c:v libx264 \
-preset ultrafast -crf 0 \
-r 30 \
output.mp4

像上面的这条命令, 就可以录制屏幕内容到output.mp4中.

请注意, 因为我是Linux用户, 所以我这边使用-f x11grab, 如果你是Windows 用户, 请使用-f gdigrab, Mac用户请自己探索哈.

上面的命令, 对于录制来说, 已经够了, 但是我们只是想查看一下视频, 其实不一定要他生成 文件的, 生成了还要去删.

实现快速预览

这个时候, 如果你有流这个概念, 就应该可以知道, 视频也是一种流, 刚刚的操作只是将 视频流导入了output.mp4这个文件中, 那么, 我们可以直接使用播放器来播放这个视频流, 顺势就有了下面的命令, 可以不生成文件, 直接使用stdout作为中间流传递.

1
2
3
4
5
6
7
ffmpeg \
-f x11grab \
-s 1920x1080 -i :0.0+0,0 \
-c:v libx264 \
-preset ultrafast -crf 0 \
-r 30 \
-f flv - | mpv -

命令中的-输出视频流到stdout, mpv -就表示从stdout来读入视频流 (也可以使用vlc -).

所以, 你可以直接使用本地播放器来查看测试FFmpeg的输出文件.

最后, 放上我的直播地址, 直播缺氧的时候, 欢迎大家来看, 哈哈哈, 好像这才是重点:

https://live.bilibili.com/3995303