1. 从"video-use"这个标题说起:它到底想解决什么问题
第一次看到"video-use"这个标题,我脑子里蹦出来的第一个念头是:这大概率不是一个单纯的播放器项目,而是一套围绕"视频怎么被用起来"的工具链。事实也确实如此。把 video-use 拆开看,它要回答的核心问题很朴素——手头有一堆素材、一段文案、一个想法,怎么用尽量少的重复劳动,把它变成一条能发出去的视频。
传统做法是什么?打开剪辑软件,拖时间线,手动对齐字幕,一段段配音,导出,再压一遍。一条三分钟的视频,熟练工也得折腾一两个小时。而 video-use 这类项目的思路是:把视频生产拆成几个可编程的环节——脚本生成、语音合成、素材拼接、字幕烧录、编码导出——每个环节交给一个专门的工具,再用一层编排逻辑把它们串起来。
这套链路里,几个关键词反复出现:Claude Code负责"想"和"编排",ffmpeg负责"干重活",ElevenLabs负责"开口说话",Remotion负责"用代码画画面"。它们各自解决一段,拼起来就是一条自动化的视频流水线。
这篇文章适合谁看?如果你是会写点代码、想批量做视频的开发者,或者你是做内容但被重复剪辑折磨到崩溃的运营,再或者你只是好奇"AI 做视频"到底是怎么落地的,那这篇都值得往下读。我不会只讲概念,会把每一步的命令、参数、踩过的坑都摊开说。
提示:本文涉及的 ffmpeg、Remotion、ElevenLabs 都是通用工具,具体版本和 API 可能随时间变化,实操时以官方最新文档为准。
2. 整体设计思路:为什么是这四个工具的组合
2.1 视频生产的本质是一条数据流水线
很多人把做视频当成"创作",但从工程角度看,它其实是一条数据转换流水线:文本 → 音频 → 时间轴 → 画面帧 → 编码文件。每一段转换都有明确的输入输出,只要接口定义清楚,就能自动化。
video-use 的设计哲学就是抓住这条流水线,把"人"从每个环节里抽出来,只在最需要判断的地方介入。比如脚本要不要改、配音语气对不对、画面节奏顺不顺,这些交给人;而字幕对齐、格式转换、批量导出,全部交给机器。
为什么选这四个工具而不是别的?我拆开讲。
2.2 Claude Code:把"编排"这件事交给一个能读代码的助手
Claude Code 在这里扮演的角色不是"生成视频",而是生成并执行生产视频的代码。你可以把它理解成一个坐在你终端里的工程师:你说"帮我把这段文案配上语音、加上字幕、导出成竖屏 1080x1920",它会去写调用 ffmpeg 和 ElevenLabs 的脚本,然后跑起来。
选它的理由很实际:视频流水线里最烦的不是某个单点操作,而是胶水代码——把 A 的输出喂给 B,处理路径、编码、异常。这类代码写起来枯燥、改起来频繁,正好是 AI 助手最擅长的活。而且 Claude Code 能直接在你的项目目录里读写文件、执行命令,省去了"复制粘贴到聊天框再复制回来"的来回。
2.3 ffmpeg:视频处理领域绕不开的"瑞士军刀"
只要涉及视频,ffmpeg 几乎无法回避。它是命令行工具,能力覆盖转码、裁剪、拼接、加水印、烧字幕、抽帧、推流。video-use 里所有"对视频文件动手"的操作,底层基本都是 ffmpeg。
为什么不用图形化软件?因为批量和可复现。图形软件点一次是一次,ffmpeg 写一条命令就能跑一千个文件。而且命令本身就是文档,下次照着跑就行,不依赖某个软件的版本和界面。
2.4 ElevenLabs:让机器配音听起来不像机器
配音是视频体验的分水岭。早期 TTS 一听就是"电子音",观众三秒就划走。ElevenLabs 的价值在于音色自然、情感可控、支持多语言,生成出来的语音接近真人。在 video-use 里,它负责把脚本文字转成音频文件,再交给 ffmpeg 合成到视频里。
2.5 Remotion:用 React 写视频,让画面也能"编程"
Remotion 是个很有意思的东西——它让你用 React 组件来描述视频画面。也就是说,视频的每一帧都是一个 React 渲染结果。好处是:画面可以数据驱动。你有 100 条文案,就能生成 100 条结构相同、内容不同的视频,不用手动改。
这四个工具的分工可以这样理解:
| 工具 | 角色 | 输入 | 输出 |
|---|---|---|---|
| Claude Code | 编排者 | 自然语言需求 | 可执行脚本 |
| ElevenLabs | 配音员 | 脚本文本 | 音频文件 |
| Remotion | 画面设计师 | 数据 + 组件 | 视频帧序列 |
| ffmpeg | 后期工人 | 各种素材 | 成品视频 |
2.6 为什么这套组合能跑通
关键在于每一环都有稳定的命令行或 API 接口。Claude Code 能调命令行,ffmpeg 是纯命令行,ElevenLabs 有 HTTP API,Remotion 有 CLI。接口稳定意味着流水线可复现,不会因为某个软件更新界面就全盘崩溃。这是选择工具时最容易被忽略、却最重要的一条标准。
3. 环境准备:把四个工具装到位
3.1 安装 Claude Code 并接入你的工作流
Claude Code 的安装方式在不同系统上略有差异。以常见的 Linux 或 macOS 环境为例,通常通过包管理器或官方提供的安装脚本完成。Windows 用户如果遇到兼容性问题,建议在 WSL 里操作,体验会顺很多。
安装完成后,第一件事是在项目目录里初始化。进入你的 video-use 项目文件夹,运行 Claude Code,它会读取当前目录结构,之后你让它写脚本、改配置,它都能基于真实文件来操作,而不是凭空猜。
注意:Claude Code 在部分区域可能不可用,安装前先确认你的环境是否在支持范围内。如果提示不可用,不要反复重试,先解决环境问题。
关于"接入 DeepSeek"这类需求,本质是替换底层模型。做法通常是在配置里指定模型端点和密钥。这一步的坑在于:不同模型对工具调用的支持程度不一样,有些模型能很好地调用命令行工具,有些则容易"幻觉"出不存在的命令。实测下来,涉及大量文件操作和命令执行的任务,选工具调用能力强的模型会省心很多。
3.2 ffmpeg 安装:别用太老的版本
ffmpeg 的安装渠道很多。Windows 上常见的是下载编译好的压缩包(比如带 essentials 字样的构建),解压后把bin目录加到系统 PATH 里。Linux 上用包管理器一条命令搞定,macOS 用 Homebrew。
这里有个血泪教训:不要用系统自带的老版本 ffmpeg。很多新特性(比如某些硬件加速编码器、新的滤镜)在老版本里根本没有,你会对着文档调半天参数,最后发现是版本问题。装完先跑一句确认版本:
ffmpeg -version如果输出里看不到你需要的编码器,用ffmpeg -encoders查一下。比如你要用 GPU 加速,就得确认h264_nvenc或h264_vaapi在列表里。
提示:重装系统后 ffmpeg 命令失效,八成是 PATH 没配。把 ffmpeg 的 bin 目录重新加进环境变量,重启终端即可,不用重装。
3.3 ElevenLabs 的 API 准备
ElevenLabs 走的是 HTTP API。你需要注册账号、拿到 API Key,然后把它放进环境变量,别硬编码在脚本里:
export ELEVENLABS_API_KEY="你的密钥"调用时选好 voice_id(音色)和 model(模型)。音色决定了"谁在说话",模型决定了"说得自不自然、支不支持多语言"。这两个参数是配音质量的关键,后面会细讲。
3.4 Remotion 项目初始化
Remotion 是个 Node 项目,初始化方式类似常见的脚手架:
npx create-video@latest它会生成一个带示例组件的项目结构。核心目录里,每个视频就是一个 React 组件,你用<Sequence>、<AbsoluteFill>这些内置组件来编排画面和时间。跑npx remotion studio能在浏览器里实时预览,改代码即时刷新,调试体验很好。
3.5 把四个工具串起来的目录结构
我习惯这样组织项目,清晰且好维护:
video-use/ ├── scripts/ # Claude Code 生成的编排脚本 ├── audio/ # ElevenLabs 生成的配音 ├── assets/ # 图片、背景音乐、logo ├── remotion/ # Remotion 画面工程 ├── output/ # ffmpeg 导出的成品 └── config.json # 音色、分辨率、路径等参数把参数抽到config.json里,好处是换一个视频项目时只改配置,不动脚本。这是从"能跑"到"好用"的关键一步。
4. 核心环节实操:从文案到成片
4.1 第一步:用 Claude Code 生成生产脚本
假设我手上有一段 300 字的文案,想做一条竖屏短视频。我会直接对 Claude Code 说:
"读一下 config.json,把 script.txt 里的文案用 ElevenLabs 转成配音,保存到 audio/ 目录,然后用 ffmpeg 把配音和 assets 里的背景视频合成,烧上字幕,导出竖屏 1080x1920 的 mp4 到 output/。"
Claude Code 会去读文件、写脚本、执行。这里的关键是把需求说清楚:输入在哪、输出到哪、什么格式、要不要字幕。说得越具体,它写的脚本越接近你要的。
它生成的脚本大概长这样(示意):
import os, json, requests, subprocess cfg = json.load(open("config.json")) text = open("script.txt").read() # 1. 调 ElevenLabs 生成配音 resp = requests.post( f"https://api.elevenlabs.io/v1/text-to-speech/{cfg['voice_id']}", headers={"xi-api-key": os.environ["ELEVENLABS_API_KEY"]}, json={"text": text, "model_id": cfg["tts_model"]}, ) open("audio/voice.mp3", "wb").write(resp.content) # 2. ffmpeg 合成 subprocess.run([ "ffmpeg", "-y", "-i", "assets/bg.mp4", "-i", "audio/voice.mp3", "-vf", "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920", "-shortest", "output/final.mp4" ])这段脚本不复杂,但把整条链路串起来了。注意-shortest参数:它让输出时长以最短的输入为准,避免背景视频比配音长导致结尾拖沓。
4.2 第二步:配音参数怎么调才自然
ElevenLabs 的配音质量,八成取决于三个参数:voice_id、model_id、stability。
- voice_id:音色。中文内容建议选支持中文的音色,否则会有奇怪的口音。
- model_id:模型。多语言模型适合中英混排,纯中文内容用专门的模型可能更自然。
- stability:稳定性。数值低,语气起伏大、更有感情,但可能不稳定;数值高,平稳但偏机械。做口播类内容,我一般调到中间偏下。
还有一个容易忽略的点:文本预处理。数字、英文缩写、标点,直接丢给 TTS 经常读错。比如"2024"可能被读成"两千零二十四","AI"可能被逐字母念。稳妥做法是在送进 TTS 前,把文本里的数字和缩写替换成你想要的读法。这一步用 Claude Code 写个简单的替换脚本就能搞定。
实操心得:先拿一小段文本试音,确认音色和读法没问题,再批量生成。批量跑完才发现音色不对,返工成本很高。
4.3 第三步:ffmpeg 合成与字幕烧录
ffmpeg 合成是整条链路里参数最多、最容易出错的一环。我把它拆成几个常见操作。
画面缩放与裁剪:竖屏视频要把横屏素材填满,用scale加crop组合:
ffmpeg -i input.mp4 -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920" output.mp4force_original_aspect_ratio=increase保证画面铺满不拉伸,crop再把多余部分裁掉。
烧录字幕:把 srt 字幕烧进画面:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontSize=24,PrimaryColour=&HFFFFFF'" output.mp4force_style里能调字号、颜色、描边。中文字幕常见问题是字体缺失导致方块,需要在系统里装好中文字体,或者用fontsdir指定字体目录。
音频替换与混音:把原视频静音、换成配音:
ffmpeg -i video.mp4 -i voice.mp3 -map 0:v -map 1:a -c:v copy -shortest output.mp4-map 0:v -map 1:a明确指定"视频取第一个文件、音频取第二个文件",-c:v copy表示视频流不重新编码,速度快、画质无损。
格式转换:比如把 m3u8 转成 mp4:
ffmpeg -i input.m3u8 -c copy output.mp4-c copy直接复制流,不转码,几秒就能完成。
4.4 第四步:用 Remotion 做数据驱动的画面
如果视频画面是固定的模板、只是文字和图片在变,Remotion 就派上用场了。你写一个组件,接收数据作为 props,Remotion 就能批量渲染出 N 条视频。
一个最简单的字幕组件示意:
import { AbsoluteFill, useCurrentFrame } from "remotion"; export const Caption = ({ text }) => { const frame = useCurrentFrame(); return ( <AbsoluteFill style={{ justifyContent: "flex-end", alignItems: "center" }}> <div style={{ fontSize: 48, color: "#fff", opacity: frame > 10 ? 1 : 0 }}> {text} </div> </AbsoluteFill> ); };useCurrentFrame()拿到当前帧号,你可以据此做淡入淡出、位移等动画。渲染命令:
npx remotion render Caption out/video.mp4Remotion 的优势在于画面逻辑和内容分离。改文案不用碰组件,改样式不用碰数据。做系列化内容时,这个特性省下的时间非常可观。
4.5 第五步:导出参数与画质权衡
导出时最纠结的是画质和体积的平衡。核心参数是 CRF(恒定质量因子):
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4- CRF:数值越小画质越好、体积越大。18 接近无损,23 是默认平衡点,28 以上明显糊。短视频平台一般 20-23 就够。
- preset:编码速度与压缩率的权衡。
medium是平衡点,slow压得更小但更慢,fast反之。 - 音频码率:口播类 128k 足够,音乐类可以上 192k。
注意:如果目标平台会二次压缩,你导出时画质留点余量,别压得太狠,否则平台再压一遍就糊成一片。
5. 常见问题与排查技巧实录
5.1 ffmpeg 报错速查表
ffmpeg 的报错信息往往很"硬核",新手容易懵。我把常见的整理成表:
| 报错关键词 | 常见原因 | 解决方向 |
|---|---|---|
| Invalid argument | 参数拼写错、滤镜语法错 | 逐段检查滤镜链,逗号冒号别混 |
| No such filter | 版本不支持该滤镜 | 升级 ffmpeg 或换等价滤镜 |
| Unknown encoder | 编码器未编译进版本 | 换编码器或换构建版本 |
| moov atom not found | 文件损坏或未完整下载 | 重新获取源文件 |
| Fontconfig error | 字幕字体缺失 | 安装字体或指定 fontsdir |
5.2 字幕不同步怎么办
字幕和配音对不上,是自动化流程里最常见的问题。原因通常有三类:TTS 实际时长和预估不符、字幕切分粒度和语音不匹配、帧率不一致。
排查顺序:先用ffprobe看音频真实时长,再检查字幕文件的时间戳。如果字幕是按字数平均切的,那基本对不准——语音的停顿和文字长度不成正比。稳妥做法是让 TTS 返回逐词时间戳(很多 TTS 服务支持),再据此生成字幕,对齐精度会高很多。
5.3 推流延迟问题
有人会问 ffmpeg 推流到流媒体服务器延迟高怎么办。延迟来源通常是编码缓冲、GOP 长度、传输协议。降低延迟的思路:缩短 GOP(关键帧间隔)、减小编码缓冲、用低延迟的传输方式。但要注意,延迟和稳定性是跷跷板,压得太狠容易卡顿。具体参数得根据网络环境实测调。
5.4 Claude Code 用不顺的几个坑
- 命令幻觉:模型可能编出不存在的命令。养成习惯,第一次跑新脚本时先看它要执行什么,别直接放行。
- 路径问题:相对路径和绝对路径混用容易出错。统一用项目根目录的相对路径,或在配置里定义基准目录。
- 上下文丢失:长任务里模型可能"忘记"前面的约定。把关键约定写进项目里的说明文件,让它每次都能读到。
5.5 批量生产的稳定性技巧
批量跑一百条视频,最怕跑到第 80 条崩了。我的做法是:每条视频独立成任务,失败不影响其他;中间产物落盘,配音、字幕都存文件,崩了能从断点续跑;加日志,每条任务的输入输出和耗时都记下来,出问题好定位。
实操心得:批量任务先拿 3 条试跑,确认全流程没问题再放量。省下的返工时间远超试跑成本。
6. 工具选型的取舍与扩展方向
6.1 什么场景适合这套方案
这套 video-use 流水线最适合结构化、可模板化的视频:口播、知识科普、产品介绍、数据播报。这类视频画面规律、文案驱动,自动化收益最大。
反过来,强创意、强剪辑节奏的内容,比如影视混剪、复杂转场,目前还是人工更靠谱。工具能帮你省掉重复劳动,但替代不了审美判断。
6.2 各环节的可替换方案
工具不是绑死的。配音除了 ElevenLabs,也有其他 TTS 可选;画面除了 Remotion,也能用 ffmpeg 直接拼图;编排除了 Claude Code,也能自己写脚本。选型的核心标准就一条:接口稳定、可脚本化。只要满足这条,换谁都行。
6.3 性能与成本考量
批量生产时,成本主要来自两块:TTS 调用费用和渲染算力。TTS 按字符计费,文案越长越贵,所以脚本要精炼。渲染方面,Remotion 渲染吃 CPU,量大时可以考虑分布式渲染或云渲染。ffmpeg 编码如果支持硬件加速(NVENC、VAAPI),速度能提升数倍,值得配置。
6.4 后续可以怎么扩展
这套流水线跑通后,能往上叠的东西很多:接入数据源自动生成文案、根据热点自动选题、多语言版本一键生成、A/B 测试不同封面。核心思路不变——把重复的环节自动化,把判断的环节留给人。
我自己跑下来最大的体会是:别一上来就追求全自动。先把单个环节跑通、跑稳,再逐步串联。每一步都验证过,整条链路才可靠。急着一步到位,往往卡在某个不起眼的参数上,耗掉一整天。