1. 从“video-use”这个标题说起一个被低估的视频自动化切口第一次看到“video-use”这个标题我脑子里蹦出来的不是某个具体工具而是一类需求把视频当成可编程的素材而不是只能靠剪辑软件手点。这个方向最近一年明显热起来了原因很直接——Claude Code 这类终端里的 AI 编程助手开始普及ffmpeg 这种老牌命令行工具被重新翻出来当“视频流水线的发动机”ElevenLabs 负责配音Remotion 负责用 React 写视频。四个东西凑一块就形成了一个很实用的组合用自然语言描述需求让 AI 帮你写 ffmpeg 命令和 Remotion 组件最后批量产出视频。“video-use”这个名字本身很朴素直译就是“视频使用”。但恰恰是这种朴素说明它想解决的不是“做一个炫酷的剪辑软件”而是“怎么把视频用起来”。我理解它的核心场景有这么几类一是批量处理比如把一堆素材统一转码、裁切、加水印二是程序化生成比如根据数据自动生成带旁白的短视频三是流程自动化比如把长视频自动切片、加字幕、导出多平台版本。这些活儿如果纯手工做一个视频十分钟一百个视频就是十几个小时但用命令行加脚本可能几分钟就跑完了。适合看这篇内容的人我大致分三类。第一类是开发者尤其是做内容工具、营销自动化、在线教育平台的需要把视频能力嵌进自己的产品里。第二类是内容创作者一个人管好几个账号想用技术手段把重复劳动干掉。第三类是对 AI 编程感兴趣的人想拿视频处理这个场景练手因为 ffmpeg 命令足够复杂正好能体现 Claude Code 的价值。不管你是哪一类下面这些内容都是从实际项目里抠出来的不是纸上谈兵。2. 整体设计思路为什么是 Claude Code ffmpeg ElevenLabs Remotion2.1 四个工具各自的位置和不可替代性先把这个组合的分工说清楚不然后面聊细节容易乱。ffmpeg 是底座负责所有“重活”解码、编码、裁剪、拼接、变速、加字幕、推流。它的能力边界非常宽基本上你能想到的视频操作它都有对应参数缺点是命令长、参数多、报错不友好。Claude Code 是“翻译层”你把需求用中文说清楚它帮你生成 ffmpeg 命令或者 Remotion 代码还能根据报错帮你调。ElevenLabs 是“声音层”负责把文本转成自然语音用来做旁白、解说、多语言版本。Remotion 是“表现层”用 React 组件的方式描述视频画面适合做数据可视化、动态文字、模板化内容。这四个东西不是随便凑的。我试过只用 ffmpeg 加脚本做简单批处理没问题但一旦涉及“根据数据动态生成画面”ffmpeg 的 filter 链会变得极其难维护。也试过只用 Remotion画面表现力确实强但处理大文件、做转码和推流时还是得回到 ffmpeg。ElevenLabs 单独用也行但和视频对齐时间轴是个麻烦事需要 ffmpeg 来探测音频时长、调整视频节奏。所以这个组合的本质是ffmpeg 管“流”Remotion 管“帧”Claude Code 管“胶水”ElevenLabs 管“嘴”。2.2 为什么用 Claude Code 而不是直接查文档有人会问ffmpeg 文档那么全为什么还要用 Claude Code我的实际体验是ffmpeg 的文档全但散同一个功能可能有五六种写法参数之间还有依赖关系。比如你想把视频转成 H.265 并且控制码率需要同时考虑-c:v libx265、-crf、-preset、-tag:v hvc1这几个参数少一个在 Safari 上就播不了。Claude Code 的价值在于它能根据你的上下文给出一个“能跑”的组合而不是让你在文档里大海捞针。更重要的是Claude Code 能处理“意图到命令”的映射。你说“把这个文件夹里所有竖屏视频转成横屏背景模糊填充”它直接给你一条带scale、pad、boxblur的 filter 链。你说“给这个视频加中文字幕字体用思源黑体”它知道要调subtitles滤镜并且指定force_style。这种效率提升在批量处理时特别明显因为你可以把命令存成脚本改几个参数就能复用。2.3 方案选型的几个关键取舍在实际搭这套流程时有几个取舍点值得说清楚。第一音频和视频是分开生成还是同步生成。我倾向于分开因为 ElevenLabs 生成音频需要时间Remotion 渲染视频也需要时间分开做可以并行而且音频改起来比视频便宜。第二Remotion 是本地渲染还是服务端渲染。本地渲染适合小批量服务端渲染适合定时任务但服务端要考虑 Chromium 的依赖问题这个后面会细说。第三ffmpeg 是直接调命令行还是用封装库。直接调命令行最灵活但要注意参数转义用fluent-ffmpeg这类库写起来舒服但遇到冷门滤镜还是得回到命令行。提示如果你只是做简单的转码和裁剪其实不需要 Remotionffmpeg 加 Claude Code 就够了。Remotion 的价值在“画面需要根据数据变化”的场景比如每天生成不同数字的报表视频。3. 核心细节解析ffmpeg 命令、Claude Code 用法与 Remotion 组件3.1 ffmpeg 安装与版本选择别小看这一步ffmpeg 的安装看起来简单但版本选错会浪费很多时间。Windows 上最常见的是去官网下ffmpeg-master-latest-win64-gpl.zip解压后把bin目录加到 PATH。这里有个坑essentials版本和full版本的区别。essentials体积小但缺少一些编码器比如libx264是有的但libfdk_aac可能没有。如果你要做高质量音频编码建议下full版本。另外Windows 上如果之前装过旧版 ffmpeg重装系统后 PATH 可能还指向旧路径这时候用where ffmpeg确认一下实际调用的位置。Ubuntu 上安装更简单apt install ffmpeg就行但源里的版本可能比较老。如果你需要新特性比如libsvtav1编码器建议用静态编译版或者自己编译。自己编译的话./configure那一步要仔细看输出确认需要的编码器都 enabled 了。我见过有人编译完发现没有libx264就是因为没装libx264-dev。macOS 上用 Homebrew 最省事brew install ffmpeg默认带大部分常用编码器。验证安装是否成功不要只看ffmpeg -version还要跑一条实际命令。比如ffmpeg -f lavfi -i testsrcduration5:size1280x720:rate30 -c:v libx264 test.mp4这条命令会生成一个 5 秒的测试视频。如果能正常生成说明编码器没问题。如果报Unknown encoder libx264那就是编译时没启用。3.2 Claude Code 的安装与在视频项目里的用法Claude Code 的安装方式取决于你的环境。macOS 和 Linux 上通常用 npm 全局安装Windows 上可以用 WSL 或者原生客户端。安装完之后在项目目录里运行claude就能进入交互模式。这里有个实用技巧把 ffmpeg 的常用命令和项目约定写进CLAUDE.md文件Claude Code 会自动读取这样它生成的命令会更贴合你的项目风格。比如你可以写“本项目视频统一用 H.264 编码CRF 23音频 AAC 128k”后面它就不会给你生成 H.265 的命令。在视频项目里用 Claude Code我习惯分三步走。第一步先让它帮我写一条“最小可用命令”确认思路对。第二步让它把命令参数化用变量代替硬编码的路径和数值。第三步让它把命令封装成 shell 脚本或者 Node.js 脚本方便批量调用。这个流程的好处是每一步都有验证不会出现“写了一堆代码结果跑不起来”的情况。注意Claude Code 生成的 ffmpeg 命令有时候会包含一些“看起来对但实际不存在”的参数比如把-vf写成-filter。跑之前先用ffmpeg -h确认一下参数名或者直接跑报错了再让它修。3.3 ElevenLabs 配音与时间轴对齐的实操细节ElevenLabs 的 API 用起来不复杂关键是拿到音频之后怎么和视频对齐。我的做法是先根据文案生成音频然后用ffprobe拿到音频时长再根据时长调整视频片段的长度。比如你有一段 10 秒的视频素材但旁白有 15 秒那就需要把视频放慢或者加循环。ffprobe -v error -show_entries formatduration -of defaultnoprint_wrappers1:nokey1 audio.mp3这条命令能直接输出时长很方便。另一个细节是音频的采样率和声道数。ElevenLabs 默认输出 MP3采样率可能是 44.1kHz但视频项目里常用 48kHz。如果直接混流ffmpeg 会自动重采样但为了保险可以在命令里显式指定-ar 48000 -ac 2。还有如果旁白和背景音乐要混合记得用amix滤镜并且控制各自音量不然背景音乐容易盖过人声。我一般把旁白设成 1.0背景音乐设成 0.15 到 0.25 之间具体看音乐类型。3.4 Remotion 组件的编写要点与渲染参数Remotion 的核心是用 React 写视频。一个最简单的组件长这样AbsoluteFillh1Hello/h1/AbsoluteFill然后用useCurrentFrame()拿到当前帧根据帧数做动画。它的优势在于你可以用 CSS、SVG、Canvas 任何前端技术来画画面而且支持参数化。比如做一个“每日数据播报”视频你可以把数据作为 props 传进去组件根据数据渲染不同的图表。渲染的时候npx remotion render是常用命令。这里有几个参数值得注意--concurrency控制并发渲染的帧数默认是 CPU 核心数的一半如果你的机器内存不大建议调低--crf控制输出质量和 ffmpeg 的 CRF 含义一样--codec可以选h264、h265、vp8等。如果渲染出来的视频要在 Safari 上播记得用h264并且加--pixel-format yuv420p不然可能黑屏。Remotion 和 ffmpeg 的衔接点在于Remotion 渲染出来的是视频文件你可以用 ffmpeg 做后续处理比如加字幕、混音、推流。反过来ffmpeg 也可以先处理素材再交给 Remotion 合成。我通常的做法是Remotion 负责“从无到有”生成画面ffmpeg 负责“从有到好”做后期。4. 实操过程从零搭一条视频自动化流水线4.1 环境准备与依赖安装的完整清单先把环境列清楚免得后面缺东西。Node.js 建议用 18 或 20 LTS因为 Remotion 对 Node 版本有要求。ffmpeg 用 6.0 以上Claude Code 用最新版。如果要做服务端渲染还需要装 Chromium 的依赖Ubuntu 上一般是libnss3、libatk1.0-0、libatk-bridge2.0-0、libcups2、libdrm2、libxkbcommon0、libxcomposite1、libxdamage1、libxfixes3、libxrandr2、libgbm1、libpango-1.0-0、libcairo2、libasound2这一串。少一个 Remotion 渲染就会报错而且报错信息不一定直接指向缺失的库。安装顺序也有讲究。先装 ffmpeg因为它是底层依赖再装 Node.js然后npm init一个项目接着装 Remotionnpx create-videolatest可以快速起一个模板最后装 Claude Code。ElevenLabs 不需要本地安装用 API 就行但需要申请 API Key建议放在环境变量里不要硬编码。4.2 用 Claude Code 生成第一条批处理命令假设你有一个文件夹input/里面是各种格式的视频你想把它们统一转成 1080p、H.264、CRF 23、AAC 128k 的 MP4。你可以直接对 Claude Code 说“帮我写一条 ffmpeg 命令把 input 目录下所有 mp4 和 mov 转成 1080p H.264 CRF 23 AAC 128k输出到 output 目录文件名不变。”它大概率会给你类似这样的命令for f in input/*.mp4 input/*.mov; do ffmpeg -i $f -vf scale1920:1080:force_original_aspect_ratiodecrease,pad1920:1080:(ow-iw)/2:(oh-ih)/2 \ -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \ output/$(basename ${f%.*}).mp4 done这条命令里的scale加pad是常用组合作用是保持宽高比缩放然后用黑边填充到 1920x1080。如果你想要模糊背景而不是黑边可以把pad换成boxblur加overlay但命令会复杂不少。我建议先用简单版本跑通再逐步加复杂度。4.3 接入 ElevenLabs 生成旁白并混流ElevenLabs 的 API 调用可以用 curl 或者 Node.js。用 curl 的话大概是这样的curl -X POST https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID \ -H xi-api-key: $ELEVENLABS_API_KEY \ -H Content-Type: application/json \ -d {text:这是旁白内容,model_id:eleven_multilingual_v2} \ --output voice.mp3拿到voice.mp3之后用 ffmpeg 和视频混流ffmpeg -i video.mp4 -i voice.mp3 -c:v copy -c:a aac -b:a 192k \ -map 0:v:0 -map 1:a:0 -shortest output.mp4这里-shortest很重要它保证输出时长以较短的流为准。如果视频比音频长音频播完就结束如果音频比视频长视频播完就结束。如果你希望视频循环直到音频播完那就不能用-shortest而是要用-stream_loop -1配合-t指定时长。4.4 Remotion 渲染与 ffmpeg 后处理的衔接Remotion 渲染出来的视频通常是无声的或者只有简单的音效。如果你要加旁白可以在 Remotion 里用Audio组件也可以渲染完再用 ffmpeg 混。我倾向于后者因为 ffmpeg 混音更灵活可以加淡入淡出、音量包络、多轨混合。Remotion 渲染命令大概是npx remotion render src/index.ts MyComposition out/video.mp4 \ --props{title:今日数据,value:42} \ --concurrency4 --crf23 --pixel-formatyuv420p渲染完之后再用 ffmpeg 加旁白和字幕。字幕可以用subtitles滤镜前提是你有 SRT 或 ASS 文件。如果是动态生成的字幕可以用 Claude Code 帮你把文案转成 SRT 格式时间轴根据音频时长按比例分配。4.5 批量任务的调度与错误处理批量跑视频任务最怕的是跑到一半某个文件出错整个脚本挂掉。我的做法是在循环里加错误捕获出错就跳过并记录日志。比如for f in input/*.mp4; do if ! ffmpeg -i $f ... output/$(basename $f) 2error.log; then echo 处理失败: $f failed.txt fi done另外ffmpeg 默认会输出大量日志批量跑的时候建议加-loglevel error只输出错误信息不然日志文件会爆炸。如果要做并行处理可以用xargs -P或者 GNU parallel但要注意 CPU 和内存占用视频编码很吃资源并行数不要超过核心数的一半。5. 常见问题与排查技巧实录5.1 ffmpeg 报错速查表报错信息常见原因解决方法Unknown encoder libx264编译时未启用该编码器换用 full 版本或重新编译Invalid argument参数拼写错误或滤镜语法错误用ffmpeg -h filter滤镜名查语法No such filter: xxx滤镜未编译进当前版本查ffmpeg -filters确认可用滤镜moov atom not found输入文件损坏或未完整下载用ffmpeg -i检查文件完整性Conversion failed输出路径不存在或权限不足检查目录是否存在、是否有写权限height not divisible by 2H.264 要求宽高为偶数在 scale 里加trunc(iw/2)*2:trunc(ih/2)*25.2 Claude Code 使用中的几个坑第一个坑是“幻觉参数”。Claude Code 有时候会生成一些看起来合理但实际不存在的 ffmpeg 参数比如-c:v libx264rgb这种。跑之前最好用ffmpeg -encoders | grep 264确认一下。第二个坑是路径转义。如果你的文件名里有空格或中文Claude Code 生成的命令可能没加引号导致 ffmpeg 把文件名拆成多个参数。解决办法是自己在命令里给变量加双引号。第三个坑是版本差异。Claude Code 的训练数据可能包含旧版 ffmpeg 的用法而新版可能改了参数名比如-same_quant在新版已经废弃。遇到这种情况直接让它根据报错调整。5.3 Remotion 渲染失败的排查思路Remotion 渲染失败最常见的原因是 Chromium 启动不了。如果你在服务器上跑先确认依赖库都装了。如果报Failed to launch browser可以试试npx remotion browser ensure重新下载浏览器。另一个常见问题是内存不足尤其是渲染 4K 视频时。解决办法是降低--concurrency或者用--scale参数降低渲染分辨率最后再用 ffmpeg 放大。还有一个坑是字体问题服务器上如果没有中文字体渲染出来的中文会变成方块。解决办法是把字体文件放进项目用remotion/google-fonts或者staticFile加载。5.4 音频视频不同步的几种可能音视频不同步通常有三个原因。第一音频采样率和视频帧率不匹配比如音频 44.1kHz 视频 30fps混流时没重采样。解决办法是显式指定-ar 48000。第二用了-shortest但音频比视频长导致视频被截断。解决办法是去掉-shortest用-t指定总时长。第三视频本身有可变帧率VFR转码时没转成固定帧率CFR。解决办法是加-vsync cfr或者-fps_mode cfr。这个坑在手机录屏素材上特别常见因为手机录屏经常是 VFR。5.5 推流场景的延迟问题如果你用 ffmpeg 推流到 SRS 或者其他流媒体服务器延迟大是常见问题。原因通常是编码参数太保守比如-preset slow会导致编码缓冲变大。解决办法是用-preset ultrafast或者-tune zerolatency并且把-g设小一点比如-g 30。另外-fflags nobuffer和-flags low_delay也能降低延迟。但要注意低延迟和画质是矛盾的ultrafast出来的画质会差一些需要根据场景权衡。提示推流延迟还和网络有关如果上行带宽不够ffmpeg 会缓冲延迟自然就上去了。可以用-b:v限制码率或者用-maxrate和-bufsize控制码率波动。6. 几个我踩过的坑和实际体会先说一个最容易被忽略的磁盘空间。视频处理非常吃磁盘一个 10 分钟 1080p 的中间文件可能好几个 G批量处理时如果没清理临时文件磁盘很快就满了。我的做法是在脚本里加trap不管成功失败都清理临时目录。另一个体会是不要追求“一条命令解决所有问题”。ffmpeg 的 filter 链越长调试越困难。我现在的习惯是分步处理先转码再裁剪再加字幕每一步输出一个中间文件确认没问题再进下一步。虽然多占点磁盘但省下来的调试时间更值。还有一点关于 Claude Code 的体会它生成的代码质量和你给的上下文强相关。如果你只说“帮我处理视频”它给的东西很泛如果你说“我有一个 1920x1080 30fps 的 MP4想转成 1080x1920 竖屏背景用模糊填充输出 H.264 CRF 20”它给的命令基本能直接用。所以花时间把需求描述清楚比反复让它改要高效得多。最后分享一个小技巧把常用的 ffmpeg 命令和 Remotion 组件存成模板用的时候改几个参数就行。我自己的模板库里有一个“竖屏模糊背景”模板、一个“加字幕”模板、一个“混音”模板覆盖了八成日常需求。剩下的两成再让 Claude Code 现写。这样既保证了效率又保留了灵活性。
