
手上正好有闲置VPS,在荒岛博客《FFmpeg 循环推流脚本》的代码基础上,结合电丸科技 AK 的视频(https://www.youtube.com/watch?v=Ko20sPb93fo)修改而成,方便个人使用。
Github仓库:https://github.com/KuwiNet/Live
v2 版本已重构为「配置 + systemd 托管」模式:不再需要手动改脚本里的码率行,不再依赖
killall停进程,支持 rtmps /srt 推流,异常自动重试。旧版本仍可通过
git log查看。
一、准备
- 上传视频到服务器目录(FTP / SFTP / FinalShell 均可),或自行用 Rclone 挂载网盘:
mkdir -p /opt/video
- 安装基础工具:
Debian / Ubuntu
apt-get update && apt-get install -y wget curl screen
Rocky / AlmaLinux /openEuler(CentOS 7 已 EOL,不建议再用)
dnf install -y wget curl screen
二、下载并安装
国外服务器
wget -O /root/live.sh https://raw.githubusercontent.com/KuwiNet/Live/main/live.sh
chmod 755 /root/live.sh
国内服务器(Gitee 镜像)
wget -O /root/live.sh https://gitee.com/kuwinet/live/raw/main/live.sh
chmod 755 /root/live.sh
安装 FFmpeg(脚本会自动选包管理器,无可用包时回退到 johnvansickle 静态包):
/root/live.sh setup
需要新版 FFmpeg 时用静态包(推荐,已经是当前最新的 9.0 稳定分支):
/root/live.sh setup static # BtbN 9.0 GPL 静态包(默认)
/root/live.sh setup static master # 每夜构建,最激进,出问题可换回 9.0
各来源的版本对照:
| 来源 | 版本 | 说明 |
|---|---|---|
| Debian 12 源 | 5.1 | 够用,最省事 |
| Debian 13 / Ubuntu 24.04 源 | 7.1 / 6.1 | 较新 |
BtbN 静态包 static |
9.0(当前 n9.0.2) | 自带 x264、libsrt、nvenc;要求 glibc ≥ 2.28、内核 ≥ 4.18 |
| johnvansickle 静态包 | 7.0.2 | 适合 CentOS 7 等老系统(glibc 2.17),但静态链接 glibc 会丢 DNS 解析,需装 nscd |
脚本的编码参数在 5.x ~ 9.0 上均可用(已用 9.0.2 实测无缩放、缩放归一化、水印、无音轨素材四种情况)。
装完用 which -a ffmpeg 确认生效的是 /usr/local/bin/ffmpeg 还是系统旧版本;如果仍是旧版本,说明 PATH 里 /usr/local/bin 不在前面。
三、写配置(推荐方式)
/root/live.sh config
按提示填入推流地址、视频目录、码率等,脚本会把配置写到 /etc/live.conf 并设为 600 权限(内含推流码,注意别外泄、别提交到仓库)。
也可以手动复制模板:
cp live.conf.example /etc/live.conf
chmod 600 /etc/live.conf
vi /etc/live.conf
常用项说明:
| 配置项 | 说明 |
|---|---|
STREAM_URL |
推流地址,支持 rtmp:// rtmps:// srt:// udp:// |
VIDEO_DIR |
视频目录,绝对路径 |
VIDEO_BITRATE / AUDIO_BITRATE |
码率,默认 6000k / 192k,按上行带宽调整 |
HEIGHT / FPS |
统一输出分辨率 / 帧率,素材杂乱时建议设 720 / 30 |
ORDER |
random(每轮随机)或 name(按文件名顺序) |
WATERMARK_IMAGE |
水印图片路径,留空不加 |
ENCODER |
编码器:libx264(默认)/ h264_nvenc / h264_qsv / h264_vaapi |
NVENC_PRESET / NVENC_RC |
NVENC 用,p1~`p7/cbr·vbr` |
VAAPI_DEVICE |
VAAPI 用,默认 /dev/dri/renderD128 |
LOG_FILE |
日志路径,留空则进 systemd journal |
四、运行
方式 A:systemd 托管(推荐,开机自启 + 崩溃自动拉起)
/root/live.sh service # 自动安装到 /usr/local/bin 并注册服务
systemctl start live
systemctl status live
journalctl -u live -f # 实时日志
方式 B:screen 会话(临时调试)
/root/live.sh daemon # 在 screen 会话 live 中后台启动
screen -r live # 进入查看,Ctrl-A D 脱离
方式 C:前台运行(自己看着日志)
/root/live.sh start
五、运维命令
/root/live.sh status # 运行状态、子进程、screen/systemd 情况
/root/live.sh stop # 停止(只停自己这个实例,不会 kill 别人的 ffmpeg)
六、注意事项
推流码即密码:
live.conf权限保持600,不要截图、不要提交到仓库;日志里推流码已被掩码成****。码率:
6000k适合 1080p 平台默认画质,上行带宽不足时下调到3000k或4000k,否则必卡。CPU / 硬件加速:默认
libx264软编,低配机器把PRESET调成ultrafast。有独显或核显时改ENCODER即可,脚本已按编码器自动切换对应参数(不会把-preset veryfast、-tune zerolatency这类 x264 参数硬塞给 NVENC):
# NVIDIA 独显(需驱动 + ffmpeg 含 nvenc,BtbN 静态包自带)
ENCODER="h264_nvenc"
NVENC_PRESET="p4" # p1 最快 / p7 画质最好
NVENC_RC="cbr"
# Intel 核显
ENCODER="h264_qsv"
PRESET="veryfast"
# Linux 上 AMD/Intel 走 VAAPI(脚本会自动加 format=nv12,hwupload)
ENCODER="h264_vaapi"
VAAPI_DEVICE="/dev/dri/renderD128"
启动时若编码器不可用(没装驱动 / ffmpeg 未编译该编码器),配置校验会直接报出来,不会等到推流跑起来才发现。
素材一致性:不同分辨率 / 帧率混播容易触发平台断流重建,建议
HEIGHT=720、FPS=30统一输出。磁盘:长期运行建议开启
LOG_FILE并配合 logrotate;脚本在日志超过 100MB 时会自动轮转一次。无音轨素材:脚本用
-map 0:a:0?兼容无音轨文件,但部分平台要求必须有音轨,建议素材统一带 AAC 音轨。