使用linux的ffmpeg进行B站直播推流

很久之前买了个友善的开发板R2S,一直在家吃灰。最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程。

第一步:安装ffmpeg
sudo apt update sudo apt install ffmpeg 

第二部分:创建用来存放视频的文件夹

这里我选择在/opt下创建video 文件夹,将自己的视频上传到该文件夹

mkdir /opt/video 

第三部分:相关推流的脚本

#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH   # 颜色选择 red='33[0;31m' green='33[0;32m' yellow='33[0;33m' font="33[0m"  ffmpeg_install(){ # 安装FFMPEG read -p "你的机器内是否已经安装过FFmpeg4.x?安装FFmpeg才能正常推流,是否现在安装FFmpeg?(yes/no):" Choose if [ $Choose = "yes" ];then 	yum -y install wget 	wget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xz 	tar -xJf ffmpeg-4.0.3-64bit-static.tar.xz 	cd ffmpeg-4.0.3-64bit-static 	mv ffmpeg /usr/bin && mv ffprobe /usr/bin && mv qt-faststart /usr/bin && mv ffmpeg-10bit /usr/bin fi if [ $Choose = "no" ] then     echo -e "${yellow} 你选择不安装FFmpeg,请确定你的机器内已经自行安装过FFmpeg,否则程序无法正常工作! ${font}"     sleep 2 fi 	}  stream_start(){ # 定义推流地址和推流码 read -p "输入你的推流地址和推流码(rtmp协议):" rtmp  # 判断用户输入的地址是否合法 if [[ $rtmp =~ "rtmp://" ]];then 	echo -e "${green} 推流地址输入正确,程序将进行下一步操作. ${font}"   	sleep 2 	else     	echo -e "${red} 你输入的地址不合法,请重新运行程序并输入! ${font}"   	exit 1 fi   # 定义视频存放目录 read -p "输入你的视频存放目录 (格式仅支持mp4,并且要绝对路径,例如/opt/video):" folder  # 判断是否需要添加水印 read -p "是否需要为视频添加水印?水印位置默认在右上方,需要较好CPU支持(yes/no):" watermark if [ $watermark = "yes" ];then 	read -p "输入你的水印图片存放绝对路径,例如/opt/image/watermark.jpg (格式支持jpg/png/bmp):" image 	echo -e "${yellow} 添加水印完成,程序将开始推流. ${font}" 	# 循环 	while true 	do 		cd $folder 		for video in $(ls *.mp4) 		do 		ffmpeg -re -i "$video" -i "$image" -filter_complex overlay=W-w-5:5 -c:v libx264 -c:a aac -b:a 192k -strict -2 -f flv ${rtmp} 		done 	done fi if [ $watermark = "no" ] then     echo -e "${yellow} 你选择不添加水印,程序将开始推流. ${font}"     # 循环 	while true 	do 		cd $folder         video=$(find ./ -type f | shuf -n 1)         ffmpeg -re -i "$video" -preset ultrafast -vcodec libx264 -g 60 -b:v 6000k -c:a aac -b:a 128k -strict -2 -f flv ${rtmp}     done fi }  # 停止推流 stream_stop(){ 	screen -S stream -X quit 	killall ffmpeg 	}  # 开始菜单设置 echo -e "${yellow} CentOS7 X86_64 FFmpeg无人值守循环推流 For LALA.IM ${font}" echo -e "${red} 请确定此脚本目前是在screen窗口内运行的! ${font}" echo -e "${green} 1.安装FFmpeg (机器要安装FFmpeg才能正常推流) ${font}" echo -e "${green} 2.开始无人值守循环推流 ${font}" echo -e "${green} 3.停止推流 ${font}" start_menu(){     read -p "请输入数字(1-3),选择你要进行的操作:" num     case "$num" in         1)         ffmpeg_install         ;;         2)         stream_start         ;;         3)         stream_stop         ;;         *)         echo -e "${red} 请输入正确的数字 (1-3) ${font}"         ;;     esac 	}  # 运行开始菜单 start_menu 

先执行以下命令新建终端

screen -S myVideo 

然后执行上面的脚本,按照提示输入B站的推流地址(服务器地址+串流密钥),视频文件位置(如/opt/video),即可。然后按ctrl+d或输入exit退出当前screen。完成以上,/opt/vide文件夹的视频会在你的直播间循环播放

其他说明

  • 推流地址可以在以下页面获取
    使用linux的ffmpeg进行B站直播推流
  • 要先在B站开播,然后再执行脚本。
发表评论

相关文章