☰
用代码和AI批量生产视频:ffmpeg、Remotion、Manim与Claude Code实战
2026/9/26 2:01:12 网站建设 项目流程

1. 从"video-use"这个模糊标题说起:它到底想解决什么问题

第一次看到"video-use"这个标题,加上正文和关键词都是空的,我脑子里第一反应是:这大概率是一个围绕"用代码来操作视频"的工具集或者工作流封装。再结合热搜词里反复出现的 Claude Code、ffmpeg、Remotion、Manim 这几个词,方向基本就清晰了——它想做的事情,是把"视频处理"这件事从传统的剪辑软件里拽出来,放进命令行和代码的世界里,让开发者、技术博主、自动化爱好者能用脚本的方式批量生成、处理、合成视频。

为什么我敢这么判断?因为这几个关键词本身就构成了一条完整的技术链路。ffmpeg 负责底层的音视频编解码、裁剪、拼接、转码、推流;Remotion 负责用 React 组件的方式声明式地生成视频;Manim 负责数学动画和程序化可视化;而 Claude Code 则是那个把上面这些工具串起来的"胶水"和"大脑"——你用自然语言描述需求,它帮你写 ffmpeg 命令、生成 Remotion 组件、调试 Manim 脚本。所谓 "video-use",本质上就是"把视频当作一种可以被编程、被自动化、被 AI 辅助生产的对象来使用"。

这个定位解决了一个非常真实的痛点。传统视频制作的门槛在于:你要么学会 Premiere、Final Cut、达芬奇这类重型软件,要么忍受各种在线工具的模板限制。但如果你是一个程序员、一个需要批量产出内容的运营、一个做数据可视化的研究者,你真正想要的是"可复现、可版本控制、可批量、可参数化"的视频生产流程。ffmpeg 给了你底层能力,Remotion 和 Manim 给了你上层表达,Claude Code 给了你降低学习成本的入口。这套组合的价值,就是把视频从"手工工艺品"变成"可编程的产物"。

这篇文章适合谁看?三类人。第一类是有一定命令行基础、想把视频处理自动化的开发者;第二类是内容创作者,尤其是需要批量做教程、做数据动画、做产品演示的人;第三类是对 Claude Code 这类 AI 编程助手感兴趣、想找一个真实落地场景来练手的人。哪怕你之前完全没碰过 ffmpeg,只要你能看懂基本的终端操作,这篇内容都能带你从零把这条链路跑通。下面我会按照"环境准备—底层能力—上层表达—AI 辅助—实战串联—踩坑排查"的顺序,把每个环节讲透。

2. 环境准备:ffmpeg、Node 与 Claude Code 的安装取舍

2.1 ffmpeg 的安装:为什么我强烈建议用包管理器而不是手动解压

ffmpeg 是整个 video-use 链路的地基,没有它,后面 Remotion 渲染、Manim 导出、视频转码全都无从谈起。安装 ffmpeg 有两条主流路线:一是去官网下载编译好的二进制包(Windows 上常见的就是那个ffmpeg-master-latest-win64-gpl.zip之类的压缩包),解压后手动把bin目录加到系统 PATH;二是用包管理器,比如 Windows 上的winget、choco、scoop,macOS 上的brew,Ubuntu 上的apt。

我个人的经验是:能用包管理器就用包管理器。原因很实在——手动解压的二进制包不会自动更新,而且一旦你重装了系统或者换了机器,PATH 配置就得重来一遍,非常容易出问题。热搜词里就有一条"ffmpeg 安装后重装了系统 如何回复",这其实反映的就是手动安装的典型后遗症。用包管理器的话,一条命令搞定,升级也是一条命令。

# macOS brew install ffmpeg # Ubuntu / Debian sudo apt update && sudo apt install ffmpeg # Windows (winget) winget install ffmpeg # Windows (scoop) scoop install ffmpeg

装完之后一定要验证,别装完就以为万事大吉:

ffmpeg -version ffmpeg -encoders | grep -i "h264\|hevc"

第一条命令确认 ffmpeg 能被调用,第二条确认你的构建里带了 H.264/HEVC 编码器。很多人踩的坑是:装了一个精简版构建,结果发现没有libx264,一编码就报错。如果你确实需要特定编码器(比如做 Android 交叉编译、需要 x264 静态库),那就得走源码编译路线,这个话题热搜里也有"跨平台交叉编译 android 编译 x264 & ffmpeg"这种长文,属于进阶内容,普通使用场景用官方或包管理器版本足够了。

注意:Windows 上如果同时装了多个来源的 ffmpeg,PATH 里顺序靠前的那个会生效。排查"命令行为什么和我预期不一样"时,先用where ffmpeg(Windows)或which ffmpeg(macOS/Linux)确认到底调用的是哪一个。

2.2 Node 环境与 Remotion 的关系:版本别乱选

Remotion 是一个基于 React 的视频生成框架,它的运行依赖 Node.js。这里有个容易被忽略的点:Remotion 对 Node 版本是有要求的,太老的 Node(比如 14 以下)会直接跑不起来。我一般建议直接用 Node 18 或 20 的 LTS 版本,稳定且生态兼容性好。

node -v # 建议 v18.x 或 v20.x npm -v

如果你机器上有多个项目依赖不同 Node 版本,强烈建议用nvm(macOS/Linux)或nvm-windows来管理,避免全局版本冲突。这个习惯在同时折腾 Remotion、Manim 相关工具链的时候特别有用,因为不同工具对 Python 和 Node 的版本要求经常打架。

2.3 Claude Code 的安装与"区域不可用"问题的应对思路

Claude Code 是 Anthropic 推出的命令行 AI 编程助手,它最大的价值在于能直接在你的项目目录里读写文件、执行命令、理解上下文。热搜里出现了大量"claude code 安装""claude code 使用教程""vscode 配置 claude code""claude code 接入 deepseek"这类词,说明大家对它的落地非常关注。

安装方式通常是 npm 全局安装:

npm install -g @anthropic-ai/claude-code claude --version

然后在项目目录里直接运行claude就能进入交互。至于热搜里那条"claude code might not be available in your country",这属于服务可用性层面的问题,我这里不做展开,也不建议围绕它做任何规避性操作。我的建议是:把 Claude Code 当作一个提效工具,能用就用,不能用就用其他等价的 AI 编程助手替代,核心方法论是一样的——用自然语言驱动代码生成和调试。热搜里还有"claude code 接入 deepseek""claude code 接 deepseek"这类词,反映的就是大家希望用不同模型后端来驱动同一套工作流,这个思路本身是合理的,具体配置以各工具官方文档为准。

VS Code 里配置 Claude Code 的话,一般是通过集成终端直接调用,或者装对应的扩展。我的经验是:别急着上花哨的集成,先在纯终端里把claude跑顺,确认它能正确读取你的项目文件、能执行命令,再去折腾编辑器集成,否则出问题你分不清是工具本身的问题还是集成层的问题。

3. ffmpeg:video-use 链路里绕不开的底层能力

3.1 为什么 ffmpeg 是"视频编程"的通用语言

ffmpeg 本质上是一个音视频处理的"瑞士军刀",它的命令行参数看起来吓人,但逻辑其实很统一:输入(-i)、处理(滤镜、编码参数)、输出(目标文件)。所有上层工具——Remotion 渲染出来的帧序列、Manim 导出的视频、你从网上下载的素材——最终都要经过 ffmpeg 这一层来做封装、转码、拼接。

我常跟人说,学会 ffmpeg 的几个核心命令,你的视频处理能力会直接上一个台阶。下面这几个是我日常用得最多的:

# 1. 格式转换:把 m3u8 转成 mp4(热搜里高频出现) ffmpeg -i input.m3u8 -c copy output.mp4 # 2. 裁剪时间段:从第 10 秒开始取 30 秒 ffmpeg -ss 00:00:10 -i input.mp4 -t 30 -c copy output.mp4 # 3. 提取音频 ffmpeg -i input.mp4 -vn -acodec copy output.aac # 4. 压缩视频(控制体积) ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset medium output.mp4 # 5. 拼接多个视频(需要先统一编码参数) ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

这里重点说两个坑。第一个是-c copy的适用场景:它表示"不重新编码,直接复制流",速度极快,但前提是输入输出的容器格式兼容。比如你把 m3u8 转 mp4 用-c copy通常没问题,但如果你要裁剪一个关键帧间隔很大的视频,-c copy可能导致开头几秒黑屏或者时间戳错乱,这时候就得去掉-c copy让它重新编码。第二个是拼接:concat协议要求所有输入视频的编码参数(分辨率、帧率、编码器、像素格式)完全一致,否则要么报错要么输出花屏。稳妥做法是先把每段都统一转一遍再拼。

3.2 推流场景下的延迟问题:为什么"推上去"和"看到"是两回事

热搜里有一条"ffmpeg 推流到 srs 存在延迟",这是个非常典型的实战问题。很多人第一次做推流,发现本地画面和远端播放差了十几秒,以为是网络问题,其实大部分延迟来自编码缓冲和播放器缓冲,而不是带宽。

要降低延迟,核心思路是减少各个环节的缓冲。几个关键参数:

ffmpeg -re -i input.mp4 \ -c:v libx264 -preset ultrafast -tune zerolatency \ -c:a aac -ar 44100 \ -f flv rtmp://your-server/live/stream

-re让 ffmpeg 按真实时间戳读取输入(不加的话它会用最快速度把文件推完);-preset ultrafast -tune zerolatency是编码器层面的低延迟配置,牺牲一点压缩率换实时性;音频采样率统一成 44100 避免重采样引入额外缓冲。但即便这些都做了,如果播放端(比如某些播放器或网页播放器)默认缓冲策略很激进,你依然会看到延迟。所以排查推流延迟,一定要分段定位:先确认编码端延迟,再确认传输延迟,最后确认播放端缓冲。别一上来就怀疑网络。

3.3 那些让人抓狂的报错:invalid argument 与参数顺序

ffmpeg invalid argument是热搜里的高频词,这个报错信息极其笼统,几乎什么原因都可能触发。我总结下来最常见的三类:

第一类是参数顺序错误。ffmpeg 的参数是位置敏感的,-ss放在-i前面和后面,行为完全不同。放在前面是"快速定位"(基于关键帧,可能不准),放在后面是"精确解码定位"(慢但准)。很多人把滤镜参数写在了输出文件后面,直接报 invalid argument。

第二类是滤镜语法错误。滤镜链用逗号分隔,滤镜之间用分号,一旦少个引号或者括号不匹配,就会报这个错。复杂滤镜建议先用简单输入测试,逐步加参数。

第三类是编码器不支持某个参数。比如你给一个不支持 B 帧的编码器传了 B 帧相关参数,或者像素格式不匹配。

排查这类问题的通用方法:把命令拆到最简,先跑通一个最小可用命令,再逐步加参数。这比盯着报错信息猜要高效得多。

4. Remotion 与 Manim:两条截然不同的"代码生成视频"路线

4.1 Remotion 的定位:用 React 组件描述视频

Remotion 的核心思想非常优雅:视频就是"随时间变化的 React 组件树"。你写一个组件,用useCurrentFrame()拿到当前帧号,然后根据帧号决定画面长什么样。渲染时 Remotion 会逐帧截图再合成视频。这意味着你前端的所有技能——CSS 动画、SVG、Canvas、第三方图表库——都能直接用在视频里。

为什么这个路线对开发者友好?因为它是声明式的。你不需要关心"第几秒该做什么动作"这种命令式的时序控制,你只需要描述"在任意时刻 t,画面应该是什么样"。这种思维转变一旦建立,做数据驱动的视频、批量生成个性化视频就变得极其自然。

一个最小的 Remotion 组件大概长这样:

import { useCurrentFrame, interpolate } from 'remotion'; export const FadeInTitle = ({ text }) => { const frame = useCurrentFrame(); const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: 'clamp', }); return ( <div style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#111', color: '#fff', fontSize: 80, opacity, }}> {text} </div> ); };

interpolate是 Remotion 里最常用的函数,它把帧号映射到任意数值区间,做淡入淡出、位移、缩放都靠它。我个人的经验是:先把静态画面调好,再加时间维度。很多人一上来就写复杂动画,结果画面本身布局就是乱的,调试起来非常痛苦。

4.2 Manim 的定位:程序化数学动画与可视化

Manim 是那个做数学动画的框架(很多人是通过 3Blue1Brown 的视频知道它的)。它和 Remotion 的差异非常大:Remotion 面向的是"通用 UI 和图形",Manim 面向的是"几何、函数、公式、坐标系"这类数学对象。如果你要做的是"把一段算法过程可视化""把函数图像动态画出来""做教学动画",Manim 是更合适的选择。

Manim 用 Python 写,核心概念是 Scene 和 Mobject。你定义一个 Scene,在里面用self.play()编排动画:

from manim import * class PlotDemo(Scene): def construct(self): axes = Axes(x_range=[-3, 3], y_range=[-1, 5]) curve = axes.plot(lambda x: x**2, color=BLUE) label = axes.get_graph_label(curve, label="y=x^2") self.play(Create(axes)) self.play(Create(curve), Write(label)) self.wait(1)

渲染命令是manim -pql scene.py PlotDemo,其中-ql是低质量快速预览,正式出片用-qh高质量。这里有个非常实用的经验:开发阶段永远用低质量预览,因为高质量渲染一个几分钟的动画可能要跑很久,你不可能每次都等。等画面和时序都调好了,再一次性出高质量版本。

4.3 两条路线怎么选:一张对照表说清楚

维度RemotionManim
编程语言JavaScript / TypeScript (React)Python
擅长领域UI 演示、数据视频、营销素材、批量个性化数学动画、算法可视化、教学视频
学习曲线会 React 就很快上手需要理解 Scene/Mobject 模型
渲染方式逐帧截图 + ffmpeg 合成逐帧渲染 + ffmpeg 合成
输出控制帧级精确,参数化强动画编排精细,数学对象丰富
典型场景产品介绍、动态图表、模板化视频公式推导、几何演示、函数动画

我的建议是:别纠结选哪个,先看你的内容形态。做产品、做数据、做批量内容,选 Remotion;做数学、做算法、做教学,选 Manim。两者底层都依赖 ffmpeg 做最终合成,所以 ffmpeg 的基本功是共通的。

5. 用 Claude Code 把整条链路串起来:AI 辅助的真实用法

5.1 Claude Code 在 video-use 场景里到底能帮什么

很多人对 AI 编程助手的期待是"我说一句话,它给我一个成品"。实际用下来,Claude Code 在 video-use 这类场景里最有价值的不是"一步到位",而是降低试错成本。具体来说,它能帮你做这几件事:

第一,写和调 ffmpeg 命令。ffmpeg 参数多、报错晦涩,你可以直接把报错贴给它,让它分析可能的原因并给出修正命令。这比你自己翻文档快得多。

第二,生成 Remotion 组件骨架。你描述"我要一个标题从左滑入、然后淡出的动画",它能给你一个可运行的组件,你在上面改就行。

第三,写 Manim 脚本。数学动画的 API 记忆成本高,让 AI 生成初稿再手动微调,效率提升明显。

第四,排查环境问题。比如"我装了 ffmpeg 但命令找不到",它能引导你一步步检查 PATH、检查安装来源。

但这里必须泼一盆冷水:AI 生成的命令和代码,你必须自己验证。尤其是 ffmpeg 命令,一个参数写错可能导致输出文件损坏或者耗时极长。我的习惯是:AI 给的命令,先在短素材上跑一遍,确认输出正常,再用到正式素材上。

5.2 一个真实的工作流:从需求到成片的完整链路

假设我要做一个"函数图像动态演示"的短视频,完整链路是这样的:

第一步,用 Claude Code 生成 Manim 脚本初稿。我在项目目录里运行claude,然后描述需求:"用 Manim 做一个 y = sin(x) 从 0 到 2π 的动态绘制动画,带坐标轴和标签。"它会给我一个scene.py。

第二步,本地低质量预览。manim -pql scene.py SinPlot,看动画节奏对不对。不对就改,改完再预览。这一步可能要来回好几次。

第三步,高质量渲染。manim -qh scene.py SinPlot,得到高分辨率视频文件。

第四步,用 ffmpeg 做后期处理。比如加背景音乐、压缩体积、转成适合发布的格式:

ffmpeg -i SinPlot.mp4 -i bgm.mp3 \ -c:v copy -c:a aac -shortest \ -map 0:v:0 -map 1:a:0 output.mp4

第五步,如果要做成系列,把参数抽出来,用脚本批量生成不同函数的动画。这时候 Remotion 或者纯 Python 脚本编排就更合适。

整个链路里,Claude Code 主要作用在第一、第四步,帮你快速产出初稿和命令。中间的质量把控和参数微调,还是得靠你自己的判断。

5.3 关于"skills"和自定义能力:别被概念吓到

热搜里出现了"claude code skill""claude code 怎么手动装 github 上的 skills"这类词。所谓 skill,本质上是给 AI 助手预置的一套指令或工具封装,让它在你特定场景下表现更专业。比如你可以定义一个"ffmpeg 命令生成"的 skill,里面写清楚你常用的编码参数、输出规范,这样 AI 生成的命令就更贴合你的习惯。

我的建议是:先别急着搞自定义 skill,先把基础工作流跑顺。等你发现自己反复在给 AI 解释同样的背景信息时,再把这些信息沉淀成 skill,这时候收益才明显。上来就折腾配置,很容易本末倒置。

6. 实战中那些没人告诉你的坑与排查思路

6.1 渲染慢到怀疑人生:先分清是"渲染"慢还是"编码"慢

做代码生成视频,最常见的抱怨就是"太慢了"。但慢在哪,很多人分不清。Remotion 和 Manim 的流程都是"逐帧生成图像 → 编码成视频",慢可能慢在帧生成(你的组件/场景太复杂),也可能慢在编码(ffmpeg 参数不合理)。

排查方法:先只渲染一小段。Remotion 可以用--frames=0-30只渲染前 30 帧,Manim 用低质量模式。如果小段也慢,那是帧生成的问题,去优化你的组件或场景;如果小段很快、完整渲染慢,那可能是编码阶段的问题,检查 ffmpeg 的 preset 和并发设置。

另一个通用技巧:降低预览分辨率。开发阶段用 480p 甚至更低,正式出片再上 1080p。这个习惯能帮你省下大量等待时间。

6.2 中文字体缺失:一个几乎人人都会踩的坑

用 Remotion 或 Manim 渲染带中文的视频,十有八九会遇到"中文显示成方块"的问题。原因很简单:渲染环境里没有安装中文字体,或者代码里指定的字体名在系统里不存在。

解决办法分两步:第一,确认系统里装了中文字体(Linux 上常见的是fonts-noto-cjk);第二,在代码里显式指定字体名,别依赖默认字体。Remotion 里通过 CSSfontFamily指定,Manim 里通过Text(..., font="你的字体名")指定。指定之前先用系统命令确认字体名到底叫什么,别凭感觉写。

6.3 时间戳与音画不同步:拼接和转码时的隐形杀手

做视频拼接或者多段合成时,音画不同步是最烦人的问题之一。根源通常是各段素材的时间戳基准不一致,或者帧率不统一。ffmpeg 拼接前,务必把所有素材统一到相同的帧率、分辨率、音频采样率。可以用ffprobe先检查每段素材的参数:

ffprobe -v error -select_streams v:0 \ -show_entries stream=r_frame_rate,width,height \ -of csv=p=0 input.mp4

确认参数一致后再拼接,能避免绝大多数同步问题。如果实在无法统一,就老老实实重新编码,别图省事用-c copy。

6.4 排查链路:遇到问题时的标准动作

我把日常排查视频问题的思路整理成一个固定流程,遇到问题按顺序走,基本不会乱:

  1. 确认输入:用ffprobe看清楚输入文件的编码、分辨率、帧率、时长。
  2. 最小复现:把命令或代码简化到最小可复现的程度,排除无关参数干扰。
  3. 分段验证:把长流程拆成几段,逐段确认输出正常,定位问题出在哪一段。
  4. 看日志:ffmpeg 的日志信息量很大,别只看最后一行报错,往上翻往往有更具体的线索。
  5. 换素材测试:用一段已知正常的短素材替换,判断是素材问题还是流程问题。

这套流程看起来笨,但比"瞎试参数"高效得多。我见过太多人遇到报错就疯狂改参数,结果越改越乱,最后连最初能跑的命令都忘了。

7. 把 video-use 变成你自己的生产力工具

聊到这里,其实"video-use"这个模糊标题背后的东西已经比较清楚了:它不是某一个具体软件,而是一套用代码和 AI 来生产视频的方法论。ffmpeg 是地基,Remotion 和 Manim 是两种不同风格的上层建筑,Claude Code 是加速器,而真正决定产出质量的,是你对内容本身的理解和对工具链的熟练度。

我个人的体会是,这套东西最大的价值不在于"替代剪辑软件",而在于可复现和可批量。当你把视频生产流程代码化之后,改一个参数就能重新生成一版,换一批数据就能批量产出,这是传统手工剪辑做不到的。对于需要持续产出内容的人来说,前期投入学习这套链路的成本,会在后面被反复摊薄。

最后分享几个我踩过坑之后总结的小习惯:第一,所有 ffmpeg 命令先在短素材上验证,别直接跑长视频;第二,开发阶段永远用低质量预览,正式出片再上高配置;第三,把常用的命令和参数沉淀成脚本或笔记,别每次都重新查;第四,AI 生成的代码和命令一定要自己过一遍,它是助手不是替身。这套链路真正跑顺之后,你会发现做视频这件事,突然变得像写代码一样可控了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询