尧图精选

AI助手+ffmpeg+Remotion+Manim:代码化视频处理工作流实战

🕒 发布时间:2026/9/26 19:44:42 📁 来源:尧图网络
1. 从video-use这个模糊词说起它到底想解决什么问题第一次看到video-use这个词我脑子里冒出来的第一个念头是这大概率不是一个现成的开源库或者某个具体软件的名字而更像是一个动作描述——使用视频、把视频用起来。结合后面跟着的一串热词Claude Code、ffmpeg、Remotion、Manim我基本能判断出这个项目的真实意图用 AI 编程助手Claude Code作为调度中枢把 ffmpeg 这类底层音视频工具、Remotion 这类代码化视频渲染框架、Manim 这类数学动画引擎串起来实现用代码和自然语言来生产、处理、使用视频的完整工作流。说白了过去我们做视频要么打开剪辑软件手动拖时间轴要么写一堆零散的 ffmpeg 命令。而现在有了 Claude Code 这种能在终端里读写文件、执行命令、理解上下文的智能体视频处理这件事的交互方式变了——你可以用一句话描述需求让它帮你生成 ffmpeg 命令、写 Remotion 组件、调 Manim 脚本甚至把三者组合成一条流水线。这篇文章我想聊的不是某个单一工具的安装教程而是把 video-use 当成一个视频工程化的思路来拆解为什么要把 AI 助手和这些工具放在一起用它们各自负责哪一段实际跑起来会遇到哪些坑我会把 ffmpeg、Remotion、Manim 三者的定位讲清楚再给出可复现的配置和命令最后分享几个我在真实项目里踩过的坑。适合谁看如果你已经会一点命令行、想用代码批量处理视频或者想让 AI 帮你干视频这摊活那这篇就是写给你的。2. 为什么是AI 助手 三个视频工具这个组合2.1 先搞清楚三个工具各自管什么很多人一上来就懵ffmpeg、Remotion、Manim 不都是搞视频的吗为什么要一起用其实它们的定位完全不同我打个比方你就懂了。ffmpeg 是视频界的瑞士军刀它管的是格式转换、裁剪、拼接、压缩、抽帧、推流、加字幕这类底层操作。它不负责创作只负责处理。你给它一个 mp4它能给你转成 m3u8、切成 10 秒一段、压到指定码率、抽出一堆 png。它的强项是批量和自动化弱项是从零画一个动画——你用 ffmpeg 画个会动的圆试试能把你逼疯。Remotion 是用 React 写视频。它把视频当成一个 React 组件树每一帧就是一次 render你用写网页的方式写视频布局用 flex动画用 interpolate数据从 props 传进去。它适合做数据驱动的视频——比如根据一份 JSON 生成 100 条不同文案的短视频这种活手动剪辑会死人Remotion 几行代码搞定。Manim 是用 Python 画数学动画。它最初是为解释数学概念而生的擅长坐标系、函数图像、几何变换、公式推导这类精确的、有数学逻辑的动画。它的动画是声明式的你告诉它把这个圆移动到那个位置它自动补间。所以三者的分工是Manim 和 Remotion 负责生成内容ffmpeg 负责加工和输出。而 Claude Code 站在最上面负责理解你的自然语言需求帮你写脚本、拼命令、调参数。2.2 AI 助手在这里到底省了什么你可能会问这些工具我自己写脚本也能用为什么非要加个 Claude Code我的真实体会是省的不是写代码的时间而是查文档 试错的时间。ffmpeg 的参数有上千个-vf、-filter_complex、-map这些组合起来极其反人类我干了这么多年遇到不常用的滤镜还是得查。Remotion 的 API 更新快Manim 的版本差异大CE 版和旧版语法不一样这些版本细节最耗人。Claude Code 的价值在于它能读你本地的文件、看你的报错、直接改脚本再跑一遍。你不需要把错误信息复制到网页对话框里来回粘贴它就在你的终端里ffmpeg报错了它能看到改完直接重跑。这个闭环是它和普通聊天式 AI 最大的区别。提示Claude Code 是终端里的智能体工具安装和使用方式请以官方渠道说明为准。不同系统Windows、macOS、Linux的安装路径和环境变量配置有差异建议先确认自己的 shell 环境bash 还是 zsh再动手。2.3 一个典型场景把三者串起来举个我实际做过的例子要给一批教学视频加片头动画 数据图表 统一转码。片头动画用Manim画一个公式推导的 3 秒动画导出成 mp4。数据图表用Remotion读取 CSV生成带动态柱状图的 5 秒片段。合成与转码用ffmpeg把片头、图表、正片按顺序拼接统一压成 H.264 AAC输出到指定目录。整个流程里Claude Code 帮我写了 Manim 的场景类、Remotion 的组件、以及那条最恶心的concatfilter_complex命令。如果没有它光那条拼接命令我可能就要调半小时。3. 环境搭建三个工具各自的安装要点和踩坑3.1 ffmpeg 安装别用系统自带的旧版本ffmpeg 的安装是三者里最接地气但也最容易出问题的。Linux 上apt install ffmpeg装出来的版本往往很旧某些新滤镜不支持Windows 上官网下载的ffmpeg-master-latest-win64-gpl.zip解压后要手动加 PATH。我的建议是Windows去官网下载ffmpeg-master-latest-win64-gpl.zip带 gpl 的版本功能全解压到比如C:\ffmpeg然后把C:\ffmpeg\bin加到系统环境变量 PATH 里。加完一定要重开终端否则 PATH 不生效——这个坑我见过太多人踩。macOSbrew install ffmpeg最省事但默认可能不带某些编码器需要brew install ffmpeg --with-xxx新版 brew 已不支持 --with改用brew tap homebrew-ffmpeg/ffmpeg再装。Linux优先用官方静态编译包或者用apt装完再ffmpeg -version确认版本。验证安装是否成功跑这一条ffmpeg -version ffmpeg -encoders | grep -i libx264\|aac第二条是确认有没有 H.264 和 AAC 编码器这俩是做通用 mp4 的刚需。如果libx264没出现说明你装的是精简版得换包。注意网上有些ffmpeg 安装包来源不明建议只从官网或官方认可的镜像下载。装完如果重装了系统PATH 会丢重新加一遍即可不用重装 ffmpeg 本身。3.2 Remotion 安装Node 版本是隐形门槛Remotion 是 npm 包安装本身简单npx create-videolatest但它对 Node 版本有要求太老的 Node比如 14会直接报错。我建议 Node 18 或 20 LTS。另外 Remotion 首次渲染会下载一个 Chromium它靠浏览器渲染每一帧国内网络环境下这一步可能很慢甚至失败需要提前配好 npm 镜像或者手动指定浏览器路径。Remotion 的核心概念就三个Composition一个视频项目、Sequence时间轴上的片段、useCurrentFrame当前帧号。理解了这三个剩下的就是写 React。3.3 Manim 安装CE 版和旧版的语法差异要命Manim 现在主流是Manim Community EditionCE安装pip install manim装完还要装系统依赖Linux 上要libcairo2-dev、libpango1.0-dev、ffmpegmacOS 上要brew install cairo pango ffmpeg。这些依赖缺一个渲染就会报找不到 cairo之类的错。最大的坑是版本语法差异。旧版 Manim3b1b 原版里写ShowCreationCE 版改成了Create旧版TextMobjectCE 版是Text。你在网上抄的代码很可能是旧版的直接跑就报AttributeError。我的做法是先确认自己装的是哪个版本manim --version然后只参考对应版本文档。3.4 Claude Code 的角色它是胶水不是引擎Claude Code 本身不渲染视频它是调度层。安装方式各平台不同Windows 上可以通过 npm 或官方安装包Linux/macOS 用命令行安装。装完在项目目录里启动它就能读取当前目录的文件。它的关键能力是执行命令并读取输出。比如你让它把 input.mp4 转成 720p 的 mp4它会生成类似这样的命令并执行ffmpeg -i input.mp4 -vf scale-2:720 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4注意scale-2:720里的-2这是让宽度按比例自动算且保持偶数H.264 要求宽高是偶数。这种细节AI 助手基本不会写错但新手手写经常写成-1导致编码失败。4. 用 ffmpeg 打底video-use 里最高频的几条命令4.1 转码与压缩crf 和码率怎么选ffmpeg 最常用的就是转码。核心参数是-crf恒定质量因子范围 0-51数值越小质量越高、文件越大。经验值用途crf说明归档/母版18几乎无损文件大通用发布23默认值画质和体积平衡网络预览28明显压缩体积小极限压缩32画质肉眼可见下降命令模板ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4-preset控制编码速度从ultrafast到veryslow越慢压缩率越高。我一般用medium赶时间用fast。4.2 裁剪、拼接、抽帧三个高频操作裁剪从第 10 秒开始取 5 秒ffmpeg -ss 10 -i input.mp4 -t 5 -c copy output.mp4-ss放在-i前面是快速定位速度快但可能不精确放在后面是精确裁剪慢但准。要精确就放后面。拼接多个同编码视频按顺序连# 先写一个列表文件 list.txt # file part1.mp4 # file part2.mp4 ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4-c copy不重新编码速度快但要求所有片段的编码参数一致。如果参数不一致就得用filter_complex重新编码慢很多。抽帧每秒抽 1 帧ffmpeg -i input.mp4 -vf fps1 frame_%04d.png%04d是补零的序号生成frame_0001.png这种。4.3 m3u8 转 mp4热词里高频出现的需求热词里有ffmpeg m3u8转换mp4格式这个需求很常见。m3u8 是 HLS 的播放列表本身只是文本真正的视频是它引用的.ts分片。转换命令ffmpeg -i index.m3u8 -c copy output.mp4如果分片是加密的有#EXT-X-KEY需要提供密钥文件命令会复杂一些。-c copy能直接封装不重编码速度快。注意如果 m3u8 里的分片路径是相对路径要在 m3u8 所在目录执行命令否则 ffmpeg 找不到分片。4.4 推流场景延迟问题的本质热词里还有ffmpeg 推流到 srs 存在延迟。推流延迟通常来自三块编码缓冲、传输缓冲、播放器缓冲。降低延迟的思路编码端用-tune zerolatency关掉 B 帧-bf 0。用-g设置较小的 GOP关键帧间隔比如帧率的 1-2 倍。传输用低延迟协议播放器端也要相应配置。ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -bf 0 -g 30 -c:a aac -f flv rtmp://server/live/stream-re是按真实时间戳读取模拟直播节奏。这套参数能把延迟压到比较低的水平但具体数值取决于网络和服务器配置。5. Remotion 与 Manim代码化生成视频的两条路5.1 Remotion 适合什么不适合什么Remotion 的杀手锏是数据驱动 批量生成。比如你有 100 个产品的信息想生成 100 条 15 秒的介绍视频每条文案和图片不同。用 Remotion你写一个组件把数据当 props 传进去然后循环渲染 100 次。这种活在传统剪辑软件里是灾难。它的基本结构import { Composition, useCurrentFrame, interpolate } from remotion; const MyVideo ({ title }) { const frame useCurrentFrame(); const opacity interpolate(frame, [0, 30], [0, 1]); return div style{{ opacity, fontSize: 60 }}{title}/div; }; export const RemotionRoot () ( Composition idMyVideo component{MyVideo} durationInFrames{150} fps{30} width{1920} height{1080} defaultProps{{ title: Hello }} / );interpolate是核心它把帧号映射成任意数值实现动画。durationInFrames是总帧数150 帧 30fps 就是 5 秒。不适合的场景需要复杂转场、精细调色、大量实拍素材剪辑的Remotion 会很别扭这种还是交给传统工具。5.2 Manim 的动画逻辑为什么它适合数学Manim 的核心是Scene类和play方法。你定义对象然后self.play(动画)Manim 自动补间。from manim import * class SquareToCircle(Scene): def construct(self): square Square() circle Circle() self.play(Create(square)) self.play(Transform(square, circle)) self.wait()渲染命令manim -pql script.py SquareToCircle-pql是 preview quality low快速预览用。正式输出用-pqhhigh quality。Manim 适合数学是因为它的坐标系、函数图像、几何对象都是内置的Axes、plot、Transform这些让画函数图像并让它动起来变得极其简单。这是 Remotion 和 ffmpeg 都做不到的。5.3 三者协作的接口统一成 mp4三者协作的关键是统一输出格式。Manim 和 Remotion 都能导出 mp4ffmpeg 能读 mp4所以接口就是 mp4。Manim 输出默认在media/videos/下分辨率由-r或 quality 参数决定。Remotion 输出npx remotion render MyVideo out/video.mp4。ffmpeg 合成把上面两个 mp4 和正片拼接。要注意分辨率和帧率要统一否则拼接时要么报错要么画面变形。我一般统一成 1920x1080 30fps。6. 让 Claude Code 真正干活提示词和协作方式6.1 怎么描述需求它才听得懂Claude Code 再强你描述得含糊它也抓瞎。我的经验是给它输入、输出、约束三要素。差的描述帮我处理一下视频。好的描述把当前目录下的raw.mp4转成 720p、H.264、AAC 的 mp4输出到out/final.mp4如果原视频宽高比不是 16:9 就加黑边补齐。第二种描述里输入raw.mp4、输出out/final.mp4、约束720p、H.264、AAC、补黑边都齐了它生成的命令基本一次就对。6.2 让它读报错、改脚本、重跑这是 Claude Code 相比网页版 AI 最大的优势。流程是你让它执行命令。命令报错它能看到 stderr。它分析原因改脚本或命令。重新执行直到成功。比如 ffmpeg 报Invalid argument它可能会检查是不是-vf里的滤镜参数写错了或者输入文件路径有空格没转义。这种看报错-改-重跑的循环在终端里一气呵成不用你复制粘贴。6.3 用 skill 和自定义指令固化常用流程Claude Code 支持自定义 skill技能你可以把转 720p这种常用操作写成一个 skill以后一句话调用。热词里claude code 怎么手动装 github 上的 skills说的就是这个。我的做法是把常用的 ffmpeg 命令模板、Remotion 项目结构、Manim 场景模板整理成文档放在项目里让 Claude Code 参考。这样它生成的代码风格统一不用每次重新解释。提示不同版本的 Claude Code 对 skill 的支持方式可能不同建议以你所用版本的官方文档为准。如果提示might not be available in your country说明该服务在你所在区域不可用请遵守当地规定。7. 实战踩坑那些文档里不会写的问题7.1 ffmpeg 路径含空格和中文的坑Windows 上路径带空格是常态比如C:\My Videos\input.mp4。ffmpeg 命令里如果不加引号会被当成两个参数。正确写法ffmpeg -i C:\My Videos\input.mp4 output.mp4中文路径在部分旧版本 ffmpeg 上还会乱码建议项目目录全用英文这是最省心的做法。7.2 Remotion 渲染内存爆掉Remotion 渲染长视频时如果并发太高内存会爆。默认并发是 CPU 核数可以手动限制npx remotion render MyVideo out/video.mp4 --concurrency2另外useCurrentFrame里如果有大量计算每帧都算一遍会很慢能用useMemo缓存的就缓存。7.3 Manim 渲染慢到怀疑人生Manim 的 high quality 渲染非常慢一个 10 秒的动画渲染几分钟很正常。我的策略是开发阶段用-pql低质量快速预览确认动画逻辑对了再上-pqh。另外self.wait()太多会拖慢渲染能省则省。7.4 拼接时音视频不同步用concat拼接时如果各片段的帧率或音频采样率不一致会出现音画不同步。解决办法是先统一转码再拼接ffmpeg -i part1.mp4 -r 30 -ar 44100 -c:v libx264 -c:a aac part1_norm.mp4对每个片段做一遍归一化再 concat基本不会出问题。7.5 AI 生成的命令要验证再批量跑Claude Code 生成的命令第一次一定要小范围验证。我曾经让它批量处理 200 个视频结果它生成的命令里有个参数写错200 个全废了重跑花了很久。后来我养成习惯先拿 1 个文件跑通确认输出没问题再批量。8. 把 video-use 变成可复用的流水线8.1 目录结构约定一个清晰的目录结构能让 AI 助手和你自己都少犯错project/ raw/ # 原始素材 scripts/ # Manim、Remotion 脚本 temp/ # 中间产物 out/ # 最终输出 list.txt # 拼接列表约定好之后Claude Code 生成的路径就不会乱。8.2 用脚本封装重复命令高频命令写成 shell 脚本或 npm script比如scripts/to720.sh#!/bin/bash ffmpeg -i $1 -vf scale-2:720 -c:v libx264 -crf 23 -c:a aac -b:a 128k $2以后./to720.sh raw/a.mp4 out/a.mp4就行不用每次让 AI 重新生成。8.3 版本管理把脚本纳入 gitManim 和 Remotion 的脚本都是代码应该纳入 git。这样改坏了能回滚也能看到每次调整。ffmpeg 命令如果写在脚本里同样纳入版本管理。8.4 一个完整的端到端示例假设要做一条公式动画 数据图表 转码的视频Manim 生成片头manim -pqh scripts/intro.py Intro输出到temp/intro.mp4。Remotion 生成图表npx remotion render Chart out/temp/chart.mp4。归一化两个片段到 1080p/30fps。写list.txt用 ffmpeg concat 拼接。最终转码输出到out/final.mp4。每一步都可以让 Claude Code 帮你写命令、跑、看结果。跑通一次后把整条流程写成一个build.sh以后一键执行。9. 关于工具选型的一点个人判断用了这套组合一段时间后我的体会是不要为了用而用。如果你的需求只是把视频转个格式ffmpeg 一条命令就够了没必要上 Remotion 和 Manim。Remotion 适合数据驱动、批量生成Manim 适合数学动画、精确演示ffmpeg 适合处理、转换、合成。三者是互补关系不是替代关系。Claude Code 的价值在于降低试错成本尤其是那些你不熟的参数和 API。但它不是万能的生成的命令你得懂个大概才能判断对错。所以我一直建议先自己把 ffmpeg 的基础命令、Remotion 的核心概念、Manim 的 Scene 结构过一遍再让 AI 帮你提速。这样它出错的时候你能一眼看出来而不是被它带着跑偏。最后分享一个小技巧把你这套流程里最常用的 10 条命令整理成一个cheatsheet.md放在项目根目录让 Claude Code 每次先读它。这样它生成的命令会贴合你的习惯风格统一返工率能降一大截。这个习惯我坚持了半年现在处理视频的效率比纯手写命令高了不止一倍。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →