[bat+ffmpeg]windows下一种基于ffmpeg和deepseek的以单张图片制作超长时间静态视频流的快速方法(倍增)
最近往b站上投稿只有音频流的视频受挫【稿件分辨率<1x10,解码失败】,于是想要以图片作为静态视频背景,再和音频流以仅拷贝的方式合并在一起
不知道为什么,我的电脑在使用单张图片(1920x1200,891kB,png)进行静态视频合成时,只有5x的速度(即想要制作24h的只有单张图片的静态视频,需要等待24/5 = 4.8h),不能满足我的需求(如果不预先生成视频流,每次都以图片和音频生成新视频的速度还是5x(音频流拷贝速度极快,所以整体速度取决于生成视频流的速度),不能接受这样的速度)

于是和deepseek热烈讨论了几个小时,得到了两种方案:
1.使用 lavfi 生成纯色帧 :
ffmpeg -f lavfi -i color=c=black -t 86400 -y output.mkv
ffmpeg -f lavfi -i color=c=black:s=1920x1080:r=1:d=86400 -c:v libx264 -preset ultrafast -pix_fmt yuv420p -y template_24h.h264 (这个参数优化更多,速度更快)【这个已经脱离使用图片为音频补充视频流的范畴,但是可以解决只有音频流不能上传的问题,而且可以选择不预先生成模板视频流(即随着音频流的复制以纯色背景即时补充视频流),1000x的速度可以接受】
ffmpeg -f lavfi -i color=c=black -t 86400 -y output.mkv 参数简介: ffmpeg -f lavali // 纯色帧生成参数 -i color=c=black //指定颜色 -t 86400 // 时长单位为秒,该条命令生成的静态视频长度为86400s=24h -y output.mkv // 输出文件名
2.先生成2min(或其他长度)的基础模板,再不断自我复制流合成为更长的静态视频
@echo off setlocal enabledelayedexpansion set "static_image=D:\BaiduNetdiskDownload\fangzha\pic.jpg" set "target_duration=86400" rem 24小时=86400秒 set "base_duration=300" rem 5分钟基础片段 echo 生成24小时静态视频(倍增拼接法)... echo. rem 第一步:生成5分钟基础片段(最高质量设置) ffmpeg -loop 1 -i "%static_image%" ^ -c:v libx264 -preset veryslow -tune stillimage ^ -crf 18 -r:v 24 -an -t %base_duration% ^ -y "base_5min.mkv" echo 基础5分钟片段生成完成,开始倍增拼接... rem 第二步:指数级倍增拼接 set "current_duration=%base_duration%" set "current_file=base_5min.mkv" set /a iteration=1 :doubling_loop if !current_duration! geq %target_duration% goto complete rem 拼接两个相同片段实现时长倍增 echo file '!current_file!' > concat_list.txt echo file '!current_file!' >> concat_list.txt set /a next_duration=current_duration*2 set "next_file=segment_!next_duration!s.mkv" ffmpeg -f concat -i concat_list.txt -c copy -y "!next_file!" rem 清理上一级文件(保留最新即可) if not "!current_file!"=="base_5min.mkv" del "!current_file!" set "current_file=!next_file!" set "current_duration=!next_duration!" set /a iteration+=1 echo 已生成: !current_duration! 秒视频(!iteration!次拼接) goto doubling_loop :complete rem 重命名为最终文件 ren "!current_file!" "24hours_video.mkv" del concat_list.txt 2>nul echo. echo ======================================== echo 24小时视频生成完成! echo 总拼接次数: %iteration% echo 最终文件: 24hours_video.mkv echo ======================================== pause (来自deepseek的)关键参数解析: ffmpeg -loop 1 // 固定写法,无限循环素材 -i "%static_image%" // 图片地址 -c:v libx264 -preset veryslow // x264编码 -tune stillimage // ffmpeg针对静态视频的优化参数 -crf 18 // 数字(0-50),越小视频质量越高体积越大 -r:v 24 // 每秒帧数,越小视频体积越小,不建议小于1(24小时的视频,原图片800kB,每秒24帧大约10g,每秒1帧大约1g) -an -t %base_duration% -y "base_5min.mkv"
前者速度1000x(9950x+6000hz)

后者(2000x),生成完基础模板视频后复制流速度取决于io

浙公网安备 33010602011771号