You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows VPS上FFmpeg推YouTube 24/7异常终止:160-167小时停服求助

解决YouTube 24小时推流160-167小时后意外终止的问题

你在Windows VPS上用FFmpeg循环推流YouTube时,碰到了运行160-167小时后意外终止的问题,结合你提供的不完整批处理代码,我整理了几个可能的原因和对应的解决方案,应该能帮你定位并解决问题:

一、先补全并优化你的批处理代码(先搞定日志!)

你的原代码里-metad...截断了,先补全完整的推流命令,最重要的是加上日志记录——没有日志的话,根本没法知道是FFmpeg报错、网络断了还是系统搞的鬼:

@echo off
:: 定义路径,改成你自己的实际路径
set "FFMPEG_EXE=C:\Users\NASA\Desktop\ffmpeg\bin\ffmpeg.exe"
set "VIDEO_FOLDER=C:\Users\NASA\Desktop\ffmpeg\bin\1"
set "YOUTUBE_RTMP=rtmp://a.rtmp.youtube.com/live2/你的推流密钥"

:: 生成视频文件列表(包含完整路径)
dir /b /s "%VIDEO_FOLDER%\*.mp4" > video_list.txt

:stream_loop
:: 循环播放列表里的每个视频,每次推流都记录日志
for /F "usebackq delims=;" %%V in ("video_list.txt") DO (
    echo [%%date%% %%time%%] 开始推流: %%V >> stream_status.log
    :: 调用FFmpeg推流,把所有输出和错误都写入日志
    "%FFMPEG_EXE%" -re -i "%%V" ^
        -vcodec libx264 -preset veryfast -maxrate 2500k -bufsize 3368k ^
        -vf "format=yuv420p" -g 60 ^
        -acodec libmp3lame -b:a 198k -ar 44100 ^
        -metadata title="" -metadata artist="" -metadata album_artist="" -metadata album="" ^
        -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 10 ^
        -f flv "%YOUTUBE_RTMP%" >> stream_status.log 2>&1
    echo [%%date%% %%time%%] 推流结束/中断: %%V | 退出代码: %errorlevel% >> stream_status.log
)
:: 整个列表播完后重新循环
goto stream_loop

这里加了自动重连参数,还把所有日志都写到stream_status.log里,下次终止后直接看日志最后几行,就能知道具体原因。

二、可能的终止原因及解决办法

1. FFmpeg内存泄漏

长期循环调用FFmpeg(哪怕每次是新进程),旧版本可能存在内存泄漏问题,运行几百小时后耗尽内存导致崩溃。

  • 解决办法
    • 直接去FFmpeg官网下载最新的Windows构建包替换旧版本,新版本修复了很多已知的内存泄漏bug。
    • 定期清理系统内存(不过更靠谱的还是升级FFmpeg)。

2. Windows系统资源耗尽

VPS的内存、CPU或者磁盘空间被长期运行的进程占满:

  • 解决办法
    • 打开任务管理器,监控推流期间的内存、CPU使用率,看看是不是持续上升直到耗尽。
    • 定期清理日志文件(比如每天自动压缩旧日志),确保磁盘有足够空间。
    • 如果VPS内存太小,考虑升级配置——毕竟24小时推流本身就需要稳定的资源。

3. 网络波动导致推流断开

YouTube的RTMP连接很容易因为网络丢包、延迟过高断开,而旧命令没有自动重连机制:

  • 解决办法
    • 我在上面的代码里已经加了-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 10,这个参数会让FFmpeg在连接断开时自动尝试重连,最多等10秒。
    • 测试VPS的网络稳定性:用ping google.com -t运行几个小时,看看有没有丢包,如果丢包严重,联系VPS提供商解决网络问题。

4. Windows自动更新或系统任务终止进程

很多Windows VPS会自动安装更新并重启,或者有后台任务(比如杀毒软件扫描)终止FFmpeg进程:

  • 解决办法
    • 禁用Windows自动更新:在设置里找到Windows更新,改成“手动更新”,或者用组策略彻底关闭自动更新。
    • 检查任务计划程序,看看有没有定期运行的任务会重启系统或终止进程。
    • 把批处理注册成Windows服务:用NSSM工具把你的批处理包装成服务,这样即使断开远程桌面,进程也能后台运行,而且服务会自动重启崩溃的进程。

5. 批处理循环的逻辑漏洞

原批处理的for /F循环如果碰到文件名带空格、特殊字符,或者视频文件被意外删除,可能会跳出循环,导致整个推流终止:

  • 解决办法
    • 我在代码里加了usebackq参数,能正确处理带空格的文件路径。
    • for循环加上错误捕获,哪怕某个视频处理失败,整个循环也会继续运行,不会直接终止。

三、长期稳定运行的小技巧

  • 用Windows性能监视器跟踪内存、CPU、磁盘的使用情况,设置警报,当资源不足时及时收到通知。
  • 定期重启VPS:比如每周手动或自动重启一次,避免系统长期运行产生的资源累积问题。
  • 备份视频列表:如果视频文件夹里的文件有变动,重新生成video_list.txt,避免循环时找不到文件。

内容的提问来源于stack exchange,提问作者JerryJumper88

火山引擎 最新活动