【转载】使用FFmpeg在B站直播的姿势

转载一篇妹空酱写的东西


在B站直播已经成了潮流,但是有时候我们总有一些奇怪的需求:

  1. 我的机器配置烂死了,无法做到x264实时压制然后推流,我只想复制视频流放个片。

  2. 我想在服务器上无人值守转播内容。

Oh,你需要FFmpeg。

在Windows下,只需要下载一个编译好的ffmpeg.exe即可。而对于Linux用户,编译一个相信也难不倒你吧~

先谈谈我们的第一个需求,复制视频流播片。

ffmpeg -re -i "1.mp4" -vcodec copy -acodec aac -b:a 192k \
-f flv "rtmp://dl.live-send.acg.tv/live-dl/你的直播码" 

来解释一下每个参数的意思。

-re 按照视频的FPS进行推流,如果不加这个参数的话……反正不行。

-i 指定输入文件地址。

-vcodec copy 指定视频编码为复制。

-acodec aac 音频使用aac编码。后面的-b:a 192k则是指定码率。

-f flv 指定输出格式,这个必须是flv才能推到直播服务器。

最后一串就是直播地址了。

That’s easy, right?

对于第二点。

-i 指定的输入文件并不一定是本地文件,可以是网络视频流,甚至可以是.m3u8文件。

一个示例:无人值守转播Line Live。

ffmpeg -i "http://lss.line-cdn.net/p/live/hs-usWVd7LwNrZzsLIS4xNCxebGE1JBkrISUGFjZrEGczPikMfQhhM2lZNVQ2fhUWAxA4F2tUbDJkJWtXfXNjZmUVcDllMmlQ/720/chunklist.m3u8" \
-vcodec copy -acodec libmp3lame -ac 2 -ar 44100 -b:a 96k \
-f flv "rtmp://dl.live-send.acg.tv/live-dl/直播码" 

另外,输出文件也可以有多个,只需要在最后再指定音视频编码和输出格式,再加地址即可。比如:

ffmpeg -i "http://lss.line-cdn.net/p/live/hs-usWVd7LwNrZzsLIS4xNCxebGE1JBkrISUGFjZrEGczPikMfQhhM2lZNVQ2fhUWAxA4F2tUbDJkJWtXfXNjZmUVcDllMmlQ/720/chunklist.m3u8"\
 -vcodec copy -acodec libmp3lame -ac 2 -ar 44100 -b:a 96k \
 -f flv "rtmp://dl.live-send.acg.tv/live-dl/直播码"\
 -vcodec copy -acodec copy -f mp4 "record.mp4"

以上,可以实现一边直播一遍录流。