本文基于FFmpeg编写脚本文件,实现在Linux系统中直播推流的作用,可在B站、抖音、YouTube等视频平台直播
Install Screen
- Debian/Ubuntu(基于apt包管理器):
1 | sudo apt-get update sudo apt-get install screen |
Fedora/RHEL/CentOS(基于dnf或yum包管理器):
1
2
3sudo dnf install screen
#或者使用
sudo yum install screenArch Linux/Manjaro(基于pacman包管理器):
1 | sudo pacman -Syu screen |
- openSUSE(基于zypper包管理器):
1 | sudo zypper install screen |
Install FFmpeg
Ubuntu:
1
sudo apt update sudo apt install ffmpeg
Debian
1
2sudo apt update
sudo apt install ffmpegCentOS
1
2sudo yum install epel-release
sudo yum install ffmpegFedora
1
sudo dnf install ffmpeg
Arch Linux
1
sudo pacman -S ffmpeg
openSUSE
1
sudo zypper install ffmpeg
Live.sh
1 | read -p "输入你的推流地址和推流码(rtmp协议):" rtmp |
Directrly Live Stream
1 | read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder |
1 | read -p "输入你的推流地址和推流码(rtmp协议):" rtmp |
Entire Edition
1
2
3
4
5
6
7
8
9read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder
printf "file '%s'\n" $folder* > order.txt
read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
while true
do
ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}"
doneEntire Edition 1.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 定义函数
start_streaming()
{
# 获取视频存放目录
read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/): " folder
# 生成视频文件列表
printf "file '%s'\n" "${folder}"* > order.txt
# 获取推流地址
read -p "输入你的推流地址和推流码(rtmp协议): " rtmp
# 开始推流
while true
do
ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}" || break
done
}
# 调用函数
start_streamingEntire Edition 2.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 获取视频存放目录
read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder
# 检查目录是否存在
if [ ! -d "$folder" ]; then
echo "目录不存在,请重新输入!"
exit 1
fi
# 生成视频拼接列表
printf "file '%s'\n" "$folder"* > order.txt
# 获取推流地址和推流码
read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
# 开始推流
while true
do
# 拼接视频流并推流
ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}"
# 检查命令是否执行成功
if [ $? -ne 0 ]; then
echo "推流失败,请检查网络连接或推流地址!"
exit 1
fi
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S') 推流成功!"
doneEntire Edition 3.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 获取视频存放目录
read -p "输入视频存放目录 (绝对路径,例如/opt/video/,路径结尾要接/):" folder
# 检查目录是否存在
if [ ! -d "$folder" ]; then
echo "目录不存在,请重新输入!"
exit 1
fi
# 生成视频拼接列表
printf "file '%s'\n" "$folder"* > order.txt
# 获取推流地址和推流码
read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
# 开始推流
while true
do
# 拼接视频流并推流
ffmpeg -re -f concat -safe 0 -i order.txt -vcodec copy -acodec copy -f flv "${rtmp}" \
-vf "scale=1280:720" \ # 添加视频缩放选项,将视频缩放为1280x720分辨率
-af "volume=2.0" \ # 添加音频增益选项,将音频增益调整为2倍音量
-preset fast # 添加编码器选项,使用快速编码器预设
# 检查命令是否执行成功
if [ $? -ne 0 ]; then
echo "推流失败,请检查网络连接或推流地址!"
exit 1
fi
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S') 推流成功!"
done