FFmpeg循环推流脚本
撸了个FFmpeg的循环推流脚本,你的VPS除了吃灰以外还能24小时不间断直播视频。自己用的脚本,单纯分享一下,如有问题自行解决。
7×24小时陪伴型直播
- 一个躺着就能创业的新项目 我来手把手教你怎么搞
1:需要配合screen运行:
只是安装一个叫做screen的一个窗口管理的工具
-
直接敲Yum这一行就可以不用管上下的
-
然后安装完了之后他会提示completed
**yum -y install screen**
2:开个新窗口:
**screen -S stream**
3:首先这里我们需要先敲命令来创建一个目录
- 一个都不要打错 打错了就运行不起来了
- 首先mkdir(make directory)就是创建一个目录的意思
mkdir /home /1ighthouse/ffmpg
- 我们创建好这个目录之后
- 敲这个指令进到我们刚才创建的目录
cd /home /lighthouse/ffmpg
我们来复制一串脚本 完整代码如下:复制
- 这个脚本是一个叫做拉拉的兄弟写的
- 然后粘到这直接粘到这来
- 他放在自己的网页上了
- 然后我会把网页的地址放到评论区
- 然后大家可以进到这个页面里面复制这串脚本命令
- 但是如果说你熟悉Linux的朋友
- 其实我们要做的事情大概就是三四行代码就可以写完
- 这哥们为什么写了个这么复杂的一个脚本
- 他是针对小白用户的 他会带一些命令提示
- 然后教你一步一步的自动化的操作
- 所以这个是比较小白friendly的这么一个做法 就相当于他写了个程序帮你去装
- 但实际上如果朋友你会自己写的话 但实际上如果朋友你会自己写的话
- 其实四五行三四行就能写完;然后这个哥们的脚本可以直接用
- 但是里面为了要实现我们定义一些我们自己视频的一些要求的话
- 我一会儿会有几个地方要改;一会儿我会跟大家说
- 然后把命令粘过来之后直接回车
- 然后选择1一是我们为了要装我们现在要用到的FFmpeg
- 什么是FFmpeg 我跟大家解释一下FFmpeg是个开源的
- 帮你去做你的视频编解码;然后推流的一个工具
- 相当于我们现在为了跑这个脚本;就是为了装这个工具
- 所以我们敲下1
1就是安装 然后回车之后我们输入yes
yes
- 这个过程就很漫长了;如果说你挑一个香港的主机或者是境外的主机 从境外的源下载是很快的;当然这次也不慢
- 如果你看到 permission denied 说明你需要提升你的权限 提升管理员权限才能安装 我们输入这个su提升一下现在我们的用户的权限
su
输一下刚才你的密码
我们再跑一遍
装好之后我们来测试一下 还是粘贴刚才的这一串脚本
运行开始菜单 start_menu
start_menu
然后回车然后我们试下2
- ok 他没有报错 直接让你填推流码和推流地址了
- 这时候我们control加c退出
- 然后我们现在在这里需要做一件事
- 就是我们现在自动推流直播的工具已经装好了 我们现在需要准备视频对吧 那好 那我的习惯 这个方法有很多种 目的就是把你的视频 你可能一个视频可能十个视频可能一百个视频对吧
- 你要传到你的服务器上 要让你服务器的FFmpeg去实时的编码这些你上传的视频
- 然后给他不间断的推到这个视频平台上
- 所以我们现在需要把我们做好的视频放到服务器上放到云盘上
- 你可以用你习惯的方式
- 这里我用的是Mac系统 我这里就给大家演示一下
- 打开homebrew来执行安装 command加****空格建
- Mac系统我的习惯是直接用 Terminal去做当然也可以用第三方软件
- 用他自带的用他自带的terminal是怎么实现的
- 首先我们打开terminal就是终端机
打开****terminal
- 然后这里就要填一下刚才你复制过的主机地址
- 然后粘贴在输入栏 然后点一下确定
- 在这里点 这我己经创建好了
- 然后用户名我们选择root 就是最高权限的账号 超级管理员
- 然后点连接
- 第一次连接你的服务器需要去把密钥给他加一下
- 所以这块按照提示来我们输入yes
- ok 然后输入你的root的密码
- 可以看到这显示已经连接好了
- 连接好了我们来看一下刚才我们创建文件夹有没有做好
cd /home/lighthouse/ffmpg
;s
然后输入ls
ls
可以看到这是我们刚才把FFmpeg装好的地址
- 这里我们需要再创建一个目录用来放我们要上传的视频
- 我们创建一个叫video的文件夹
- 还是刚才命令mkdir /home/ighthouse/video
mkdir /home/lighthouse/videol
- ok 这个文件夹就创建好了
- 我们验证一下video这个文件夹有没有创建好
- 回到他的上级目录看一下能不能看到
cd /home /lighthouse
ls
- 能看到叫做video的文件夹``
- 看到没有 video这个文件夹我们刚刚创好的
- 现在下一步我的习惯就是
- 这个我刚才说了 你有一万种方法可以把你的视频传到你的服务器上!
- 你可以用什么ftp的工具 也可以用终端机都可以
- 这里做演示
- 我先敲入put然后空格
put
然后把你要的一个文件夹 把你要上传的视频文件拖进去
- 他会自动帮你把绝对目录打好
- 然后记住这里有个空格
- 然后再输入我们要放在服务器上的位置
- 也就是刚才我们创建好的叫做video的文件夹
代码有空格
/home/lighthouse/video
- 然后如法炮制输入put 你传完一个之后 然后空格再放其他的视频文件 直到全部你要不间断推流的视频全部放好我再说一遍 你可以1个 你也可以100个 这个看你自己的文件尺寸还有空间有多大 但是趁着这个时间 我跟着大家正好说一下 腾讯云的lighthouse轻量服务器 经过我测试最便宜的两核的这些虛拟机 你如果像我一样做不间断的直播推流的话 你的视频规格一定要满足几个点 第一就是一定不能高于108030p 也就是30帧 然后你的生成的文件一定要是MP4格式的 当然你用高版本的FFmpeg也可以支持其他的视频格式 但是为了演示起见 大家按照我的操作来的话 那么这里你要自己做的视频就必须是MP4格式的 然后一定要1080p30帧 60帧不是不行 他性能会有一些问题 再说了60FPS的视频消耗流量也更高 我们既然用轻量化的服务器 我们就把我们的需求也轻量化出来 我自己就是1080p30帧的视频 然后我们回到刚才的界面
- 我们再复制一下刚才的脚本 来给他运行起来 然后直接选择2
start_menu
然后直接选择2
这次我们要输入推流地址和直播码
- 我拿B站举例子 油管也是一样的
- B站有个问题就是你一段时间不操作这个页面的话
- 他直播间会给你关了
- 所以这个时候我们要选 选好之后手要快点 点完分区之后点开始直播
- 然后这里就会有服务器地址
- 服务器地址要复制到这里
- 大家看好 复制完了不要按回车
- 然后再回到这个里面去找你的串流密钥
- 然后这里一定要加一个下斜线 看到没有
- 因为B站他是自带下斜线的
- 你就可以把你的串流码直接复制在后面
- 但是像YouTube之类的 有些平台他不一定最后有斜线
- 你需要加上斜线
- 也就是说这个部分的格式 前半部分是推流服务器地址
- 后半部分是你的串流码
- 我们做好之后按回车
- 然后这里提示要输入你的视频存放目录
- 那就是我刚才我们做的 /home/lighthouse/video
/home/lighthouse/video
- 敲进去之后的命令意思就是说 从这个文件夹里面去寻找视频文件给他实时的推流
- 然后这里就不要加水印了
- 虽然说可以加水印 水印实现方式也是通过FFmpeg
- 但是一旦加水印就对你的CPU提出了比较高的要求
- 就是我们五六十块钱买的虚拟机可能就没办法做到很流畅的去推流了
- 所以这里我们敲 no回车
这里跟大家正好说一下
我用到的脚本是一个叫拉拉的兄弟 在他自己网站上po出来了 他自己写的一个脚本 这脚本是干嘛的 基本上就是傻瓜式的一键安装我们需要用到的工具 其实你要熟悉Linux的话 我们需要的最后实现的功能包括下载FFmpeg 然后实时直接编码推流 循环播放 其实三五行的命令就可以实现 这哥们为什么写了这么长的脚本 就是为了给小白用户使户“ 带着提示来的 就是你可以按照像跑程序一样 所以说写的比较长 这也是针对多数可能不熟悉Linux的朋友做的 我就直接用他的脚本 但是这有个问题 有两行的代码我们要改 为了实现我们的要求 比如说控制视频的码率 控制这个视频的规格 怎么样合理的利用我们的带宽 所以这里我会跟大家讲 左半部分就是完全纹风不动的 我建议你下一个类似于notepad或者你写Python写程序用的任何的编译器都可以 你下一个 就我用的就是这个叫sublime 你可以下个sublime 也不要钱 然后有序号就行 因为我要为了跟大家好说清楚具体哪里的代码要改 咱们来到72行 要从72行 直到79行 这一部分我们先删掉 我会把右边的部分直接复制粘贴在评论区 大家去覆盖掉就好了 我们给他复制 把多余的括号删掉 最后的成果就是preset 我正好跟大家讲一下FFmpeg的一些控制的命令是干嘛的 这个preset就是你的编码方式 因为我们要用ultra fast用最快的编码方式 然后video codec用的是264编码器 然后后面我就不解释了 这里就是b:v这里是你的视频码率 这里调成1500会比较好 当然你要是比如说做Tiktok做其他的平台 你买一个境外服务器 这里可以调大一点 比如说你1080p30FPS的视频 你最好是做到三四千四五千 这里因为我们为了控制视频的码率 然后我们每个月的流量是有限的 我算了一下如果1500kpps的码率的话 刚好是能够你一个月用的 所以这里我们改成1500 然后后面是音频的编码方案 其实92k128k都可以这里我就用92k了
只有这里要改
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
}
然后为了验证一下我们这个脚本能不能跑起来
**要记得我们每次开直播的时候 **
去到刚才我们light house这个目录
cd /home/lighthouse
要记得我们每次开直播的时候
- 我们要用窗口screen来实现
- 输入这个命令之后你随便取个名字
- 比如说你知道final
screen -s final
我们就打开了一个叫final的窗口
这一步很重要 一定要输
然后进到这里面之后
运行开始菜单
start_menu
- 以窗口模式打开一个新的控制页面之后 粘贴脚本直接回车
- 然后选择2 我们就直接粘我们b站或者说你其他的这些直播平台
- 所以我们需要点完开始直播之后 迅速的复制我们需要的推流码和推流密钥
- 这里要注意你隔几分钟不用的话
- B站直播的这些东西会变成默认
- 然后粘在这里 这里注意
- 还是那个地方要注意
- 这里有一个斜线B站是帮我们做好的 所以不用我额外处理
- 然后YouTube的话 油管的话这里是没有斜线的
- 我们要手动加一个隔开 你的推流地址和你的串流码
然后输入你的视频存放目录:/home/lighthouse/video
/home/lighthouse/video
no
- 但如果说你尝试B站或者说抖音什么 这个没必要调太高你的带宽也撑不住
- 如果说我们现在此时此刻关闭这个页面
- 就把整个页面关
- 那么这个直播就断了;那么为了让这个直播我们能够关机
- 我们的本地的电脑可以不管;然后相当于是让云主机就只执行自己的命令
- 不需要我们拿终端机去维持着这个界面;那么我们现在也可以再打开一个终端机
如果你用windows的话就用命令提示行
如果你用Mac的话像我一样可以打开一个terminal
- 然后我们输入我们的1P地址连进去之后
- 这是通过SSH的方式连进去
- 然后你输入这个命令可以看一下现在有哪个进程是在跑 screen -1s
screen -1s
可以看到11729点final
- 此时此刻正在推流直播的进程 进程后面显示的是attached
- 也就是说attached了这一个页面
- 网页如果我们关掉直播就断了 我们为了让他跟网页脱离关系
所以要用detach式命令输入screen -d 11729.final
screen -d 11729.final
- 输完这个命令可以看到 我们这里就detach
- detach是什么意思;就是页面不受他控制了
- 但是进程一直跑;此时此刻我们就可以关电脑了什么都可以关了
- 云主机就永远在跑着;永远在推流 永远在直播
- 这个时候我们想关掉怎么办screen -X-S 11729.final quit
screen -X-s 11729.final quit
敲完指令可以再看一下
screen -1s
- 还有没有进程在跑 可以看到刚才11729已经没了
- 然后正常来说我们的直抨广该就会断掉了
- 现在应该是一个断掉的状态了
- 因为他收不到视频的流了已经开始异常了
- 也就是这个时候我们的云主机己经不再推流了 己经不再消耗流量 已经不再运算了
- 这个时候我们关闭直播就好了;就是这么简单 然后这里再跟大家看一下后台的情况
- 像我刚才说的
- 如果说你的视频编码是1080p30p的话
- 大概也就占用到你的CPU的实时编码 也就占到个百分之几十
- 最高我测试大概就能跑到六七十
- 这是很合理的一个利用资源的方式然后内存也是够的
- 大家看到我才用了4/1的内存 然后这里很关键了
- 你时时刻刻的出口可以看到我平均是在一兆两兆的样子
- 按照这个速率来说一个月刚好是能用大概400多个的G空间\
- 这就是一个月60块钱的腾讯的lighthouse轻量服务器
- 刚好可以做到不间断直播推流的这么一个事儿 当然如果说你买更大的流量
- 更大的带宽的云主机 你可以考虑一个主机以往多个地址推流
- 比如说同时往B站推 往微博推 往抖音推都是可以实现的
- 当然这个需要你自学一些命令多线程去处理 然后对你的CPU也有要求
1.目前支持循环推流mp4格式的视频,注意视频文件的名字不能含有空格或其他特殊符号。
2.视频加水印,水印位置默认在右上角。
我们来复制一串脚本我们来复制一串脚本
完整代码如下:
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#=================================================================#
# System Required: CentOS7 X86_64 #
# Description: FFmpeg Stream Media Server #
# Author: LALA #
# Website: https://www.lala.im #
#=================================================================#
# 颜色选择
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
font="\033[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
for video in $(ls *.mp4)
do
ffmpeg -re -i "$video" -c:v copy -c:a aac -b:a 192k -strict -2 -f flv ${rtmp}
done
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
评论
发表评论