Claude Code 驱动视频处理:ffmpeg、Remotion 与 Manim 实战
1. 项目缘起当视频处理遇上代码生成第一次看到video-use这个标题我脑子里蹦出来的不是某个具体工具而是一类正在快速成型的开发范式——用代码来驱动视频的生产、加工和分发。过去做视频要么开剪辑软件手动拖时间线要么写一堆零散的 shell 脚本调 ffmpeg中间还夹着各种格式转换、分辨率适配、字幕烧录的琐事。现在不一样了Claude Code 这类代码生成工具开始渗透到日常开发流里配合 ffmpeg、Remotion、Manim 这些底层能力视频处理正在从“手工活”变成“可编程的工程问题”。video-use这个标题本身很朴素但它背后指向的东西很实在一套围绕视频使用场景的代码化工作流。它可能是一个封装好的命令行工具也可能是一组 Claude Code 的 skill 配置甚至可能是一个用 Remotion 或 Manim 做程序化视频生成的模板仓库。不管具体形态是什么核心诉求是一致的——把视频的获取、转码、合成、渲染、推流这些环节用可复用、可版本控制的代码串起来而不是每次靠记忆敲命令。我之所以对这个方向感兴趣是因为过去半年里身边做内容自动化、做数据可视化视频、做批量短视频生产的朋友几乎都在往这个方向靠。有人用 Claude Code 写 ffmpeg 的批处理脚本有人用 Manim 做数学讲解视频有人用 Remotion 做 React 组件式的视频合成。这些工具单独拎出来都不新鲜但把它们组合成一套“video-use”的工作流并且让 Claude Code 参与进来做代码生成和调试效率提升是肉眼可见的。这篇文章适合谁看如果你手头有批量视频处理的需求比如把一堆素材统一转码、加水印、切片、生成不同平台的版本或者你想用代码生成教学视频、数据动画、产品演示又或者你只是好奇 Claude Code 在多媒体领域能怎么用那接下来的内容应该能给你一些可直接抄作业的思路。我会从整体设计讲到具体实操把 ffmpeg、Remotion、Manim 和 Claude Code 的配合方式拆开揉碎尽量让不同基础的人都能上手。2. 整体设计思路为什么是这套组合2.1 核心需求拆解视频处理的三个层次在动手之前先把“video-use”这个场景拆成三个层次来看这样选型和设计才不会乱。第一个层次是基础转码与流处理。这是最底层的需求包括格式转换、分辨率缩放、码率控制、音频提取、字幕封装、切片、拼接、推流等。这一层的王者是 ffmpeg几乎没有替代品。它的命令行参数多到让人头疼但一旦封装成脚本或函数就是最稳的基础设施。第二个层次是程序化视频合成。这一层解决的是“用代码生成视频内容”的问题。比如你要做一个数据可视化动画或者一个带动态文字和图表的产品介绍手动剪辑效率太低。Remotion 用 React 组件的方式描述视频帧Manim 用 Python 代码生成数学动画两者定位不同但互补。Remotion 更适合 Web 技术栈的人做营销视频、动态海报Manim 更适合教育、科研场景做公式推导和几何动画。第三个层次是智能辅助与自动化编排。这一层是 Claude Code 发挥作用的地方。它不直接处理视频像素而是帮你写 ffmpeg 命令、生成 Remotion 组件、调试 Manim 报错、把零散脚本组织成可维护的项目。你可以把它理解成一个懂视频处理上下文的结对程序员。这三个层次叠起来就是video-use的完整图景ffmpeg 做底层流处理Remotion/Manim 做上层内容生成Claude Code 做开发效率的放大器。2.2 工具选型背后的逻辑为什么不只用 ffmpeg有人可能会问ffmpeg 已经能转码、能滤镜、能拼接为什么还要引入 Remotion 和 Manim这个问题我一开始也纠结过后来想明白了ffmpeg 擅长的是“处理已有视频”而 Remotion 和 Manim 擅长的是“从零生成视频”。两者的输入完全不同。ffmpeg 的输入是视频文件或流输出也是视频文件或流它的核心能力是编解码和滤镜图。你可以用 ffmpeg 的drawtext滤镜加文字用overlay滤镜叠图片但一旦涉及复杂的动态布局、数据驱动的图表、逐帧变化的动画ffmpeg 的滤镜图就会变得极其臃肿且难以维护。我试过用 ffmpeg 的zoompan和drawtext表达式做动态字幕参数写到后面自己都看不懂改一个效果要调半天。Remotion 的思路完全不同。你用 React 写组件每个组件描述某一帧的画面Remotion 负责把这些帧渲染成视频。这意味着你可以用 CSS 做布局用 JavaScript 做数据计算用 React 的生态做交互预览。对于需要频繁调整样式和数据的内容这种方式的开发效率远高于 ffmpeg 滤镜。Manim 则是另一个极端。它专注于数学和科学动画提供了坐标系、几何图形、公式排版等高级抽象。你要画一个函数图像的变化过程Manim 几行代码就能搞定用 ffmpeg 或 Remotion 做同样的事会痛苦得多。它的学习曲线陡一些但在特定场景下无可替代。所以选型逻辑很清晰批量转码和流处理用 ffmpegWeb 风格的数据驱动视频用 Remotion数学科学动画用 ManimClaude Code 贯穿始终做代码生成和调试。这不是为了堆工具而是每个工具在自己的领域里确实省时间。2.3 Claude Code 在视频工作流中的角色定位Claude Code 在这套工作流里不是主角但它是让主角们配合更顺畅的粘合剂。我实际用下来它在视频处理场景里主要干四件事。第一是生成和解释 ffmpeg 命令。ffmpeg 的参数组合太多-vf、-af、-filter_complex的语法又容易写错。你可以用自然语言描述需求让 Claude Code 生成命令再让它解释每个参数的含义。比如“把 input.mp4 转成 720p、H.264、CRF 23、音频 AAC 128k同时加一个右下角水印”它能直接给出可运行的命令并告诉你-c:v libx264、-crf 23、-preset medium这些参数为什么这么选。第二是搭建 Remotion 和 Manim 的项目骨架。Remotion 项目需要配置remotion.config.ts、注册根组件、定义 compositionManim 需要组织 scene 类、配置渲染参数。这些样板代码让 Claude Code 生成比手动查文档快得多。尤其是 Remotion 的版本更新较快API 有时会变让 Claude Code 根据当前版本生成代码能减少踩坑。第三是调试报错。ffmpeg 的报错信息经常很晦涩比如Invalid argument后面跟一堆看不懂的上下文。Manim 的报错有时指向 LaTeX 编译问题有时指向 Python 类型错误。把报错贴给 Claude Code让它分析可能的原因并给出修复建议比自己在搜索引擎里翻半天高效。第四是把零散脚本重构成可维护的项目。一开始可能只是一堆.sh文件随着需求变多需要拆成配置文件、工具函数、任务编排。Claude Code 可以帮你做这种重构把硬编码的参数抽成配置把重复的逻辑封装成函数。注意Claude Code 生成的命令和代码一定要自己验证一遍再用于生产环境。尤其是涉及文件删除、覆盖、批量处理的命令先用小样本测试确认无误再全量跑。3. 核心细节解析ffmpeg 的实战要点3.1 安装与版本选择别在这件事上浪费时间ffmpeg 的安装本身不复杂但版本选择有讲究。Windows 上最常见的做法是下载ffmpeg-master-latest-win64-gpl.zip或essentials版本解压后把bin目录加到 PATH。这里有个细节essentials版本包含常用的编解码器体积小full版本包含更多冷门编解码器体积大。如果你只是做常规的 H.264/H.265 转码、AAC 音频、MP4 封装essentials完全够用。macOS 上用 Homebrew 安装最省事brew install ffmpeg会带上大部分常用库。Linux 上可以用包管理器安装但发行版自带的版本可能偏旧某些新滤镜或新编码器不支持。如果需要最新特性可以考虑用静态编译版本或自己编译但编译 ffmpeg 是个体力活依赖库多、配置参数复杂除非有特殊需求否则不建议新手折腾。版本查看用ffmpeg -version重点看两个信息一是版本号二是编译时启用的库列表。如果你要用libx264做 H.264 编码确认列表里有--enable-libx264要用libx265做 H.265确认有--enable-libx265。如果缺少某个库转码时会报Unknown encoder错误。实操心得在 Windows 上把 ffmpeg 的bin目录加到系统 PATH 后记得重启终端或 IDE否则新环境变量不生效。我见过有人加了 PATH 但命令还是找不到折腾半天发现是终端没重启。3.2 常用命令模板把重复劳动封装起来ffmpeg 的命令行参数组合千变万化但日常用到的其实就那几类。我把最常用的几个模板整理出来你可以直接改成自己的路径和参数。格式转换与压缩ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4这条命令把 MOV 转成 MP4视频用 H.264 编码CRF 23 是质量参数数值越小质量越高、文件越大23 是默认值18 到 28 之间比较常用。-preset medium控制编码速度与压缩率的平衡ultrafast最快但文件大veryslow最慢但文件小。音频用 AAC 128k对大多数场景够用。分辨率缩放ffmpeg -i input.mp4 -vf scale1280:720 -c:v libx264 -crf 23 -c:a copy output.mp4scale1280:720把画面缩放到 720p。如果原始比例不是 16:9直接指定宽高会导致画面变形。更稳妥的写法是scale1280:-2让高度按比例自动计算-2表示取偶数H.264 要求宽高为偶数。加水印ffmpeg -i input.mp4 -i logo.png -filter_complex [0:v][1:v]overlayW-w-10:H-h-10 -c:a copy output.mp4overlayW-w-10:H-h-10把水印放在右下角距离右边和下边各 10 像素。W和H是主视频宽高w和h是水印宽高。如果要放左上角改成overlay10:10。提取音频ffmpeg -i input.mp4 -vn -c:a copy output.aac-vn表示不要视频流-c:a copy表示音频直接复制不重新编码速度极快且无损。如果输出格式和源音频格式不一致需要重新编码比如-c:a libmp3lame -b:a 192k。切片ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:30 -c copy output.mp4从第 1 分 30 秒开始截取 30 秒-c copy表示不重新编码速度极快。但-c copy只能在关键帧处切割如果起始时间不在关键帧上实际起点可能有偏差。要精确切割去掉-c copy重新编码。这些模板用 Claude Code 生成时你可以直接描述需求比如“帮我把这个视频转成 720p加右下角水印音频保持原样”它会给出对应的命令。但你要理解每个参数的含义否则出了问题不知道怎么调。3.3 滤镜图的坑为什么你的命令总是报错ffmpeg 的滤镜图是新手最容易翻车的地方。简单滤镜用-vf或-af复杂滤镜用-filter_complex。两者的区别在于-vf只能处理一路视频流-filter_complex可以处理多路输入输出做叠加、拼接、画中画必须用后者。常见的报错Invalid argument往往和滤镜图语法有关。比如overlay滤镜需要两路输入如果你写成-vf overlay10:10就会报错因为-vf只有一路输入。正确的做法是用-filter_complex [0:v][1:v]overlay10:10。另一个常见问题是滤镜之间的连接。多个滤镜用逗号分隔表示串联用分号分隔表示并联。比如-vf scale1280:720,drawtexttextHello:x10:y10是先缩放再画字。如果写成-vf scale1280:720;drawtext...就会报错因为分号在-vf里不表示并联。drawtext滤镜还有个坑文字里的特殊字符需要转义。比如冒号、单引号、反斜杠都要处理否则会被解析成参数分隔符。我一般把文字写在文本文件里用textfile参数读取避免转义问题。提示调试滤镜图时先用短片段测试比如-t 5只处理前 5 秒确认效果和性能都符合预期再跑全片。滤镜图复杂时渲染速度会明显下降提前测试能省很多时间。4. Remotion 与 Manim程序化视频生成的两条路4.1 Remotion 的核心概念用 React 描述每一帧Remotion 的思路很直观视频就是一系列帧每一帧就是一张图片如果你能用 React 组件描述每一帧的画面就能生成视频。它的核心 API 是useCurrentFrame()和useVideoConfig()前者返回当前帧号后者返回视频的帧率、宽高、时长等信息。一个最简单的 Remotion 组件长这样import { useCurrentFrame, useVideoConfig, AbsoluteFill } from remotion; export const MyComposition () { const frame useCurrentFrame(); const { fps, durationInFrames } useVideoConfig(); const opacity Math.min(1, frame / 30); return ( AbsoluteFill style{{ backgroundColor: black, justifyContent: center, alignItems: center }} h1 style{{ color: white, opacity, fontSize: 80 }} 第 {frame} 帧 /h1 /AbsoluteFill ); };这段代码做了一件事在黑色背景上显示当前帧号并且前 30 帧内透明度从 0 渐变到 1。AbsoluteFill是一个铺满画面的容器类似 CSS 的position: absolute; inset: 0。你可以用任何 CSS 属性做布局和样式用 JavaScript 做数据计算用 React 的组件化做复用。Remotion 的渲染命令是npx remotion render指定 composition ID 和输出路径。它底层会调用 Chrome 的无头模式逐帧截图再用 ffmpeg 合成视频。所以你的机器上需要装 Chrome 或 Chromiumffmpeg 也要在 PATH 里。Remotion 适合什么场景我总结下来是三类一是数据驱动的视频比如根据 JSON 数据生成图表动画二是模板化的营销视频比如批量生成不同文案和配色的产品介绍三是需要频繁调整样式的视频因为 React 的热更新和预览体验比传统剪辑软件好太多。4.2 Manim 的适用边界数学动画的专用工具Manim 是 3Blue1Brown 作者开发的数学动画引擎后来社区维护了 Manim Community 版本。它的核心抽象是Scene、Mobject和Animation。Scene是画布Mobject是画面上的对象圆、线、公式、文字Animation描述对象如何变化。一个简单的 Manim 场景from manim import * class SquareToCircle(Scene): def construct(self): circle Circle() square Square() square.flip(RIGHT) square.rotate(-3 * TAU / 8) circle.set_fill(PINK, opacity0.5) self.play(Create(square)) self.play(Transform(square, circle)) self.play(FadeOut(square))这段代码创建了一个正方形然后把它变换成圆形最后淡出。self.play()是播放动画的方法Create、Transform、FadeOut是内置动画类型。Manim 会自动处理帧的插值和渲染你只需要描述“从什么状态变到什么状态”。Manim 的强项是数学公式和几何图形。它内置了 LaTeX 支持可以直接写MathTex(r\int_0^\infty e^{-x^2} dx \frac{\sqrt{\pi}}{2})渲染出漂亮的公式。坐标系、函数图像、向量场这些也有高级抽象。但它的弱项是通用 UI 布局和复杂交互做产品介绍视频或数据仪表盘动画Remotion 更合适。Manim 的渲染命令是manim -pql scene.py SquareToCircle-p表示渲染后预览-ql表示低质量快速渲染用于调试正式输出用-qh高质量。渲染过程会生成一系列 PNG 帧再用 ffmpeg 合成视频。所以 ffmpeg 同样是底层依赖。4.3 两者与 ffmpeg 的配合方式Remotion 和 Manim 生成的视频往往还需要 ffmpeg 做后处理。比如 Remotion 渲染出来的视频可能码率偏高需要用 ffmpeg 压缩Manim 输出的视频可能没有音频需要用 ffmpeg 合并音轨多个片段需要拼接也是 ffmpeg 的活。一个典型的工作流是Remotion 生成主视频ffmpeg 加背景音乐和水印再输出不同平台的版本。或者 Manim 生成动画片段ffmpeg 把多个片段拼接并加转场。Claude Code 在这里的作用是帮你写这些后处理脚本把 Remotion 的渲染命令、Manim 的渲染命令、ffmpeg 的后处理命令串成一个可执行的流程。实操心得Remotion 和 Manim 的渲染都比较吃资源尤其是高分辨率和高帧率时。建议在开发阶段用低分辨率低帧率快速预览确认效果后再用高质量参数正式渲染。Remotion 可以用--scale0.5降低分辨率Manim 用-ql低质量模式。5. Claude Code 实操从安装到生成视频脚本5.1 安装与配置把环境搭起来Claude Code 的安装方式取决于你的使用场景。如果是命令行版本通常通过 npm 安装npm install -g anthropic-ai/claude-code然后运行claude命令启动。如果是 VS Code 插件版本在扩展市场搜索安装即可。桌面版客户端也有适合不习惯命令行的用户。安装完成后需要配置 API 密钥或登录账号。具体配置方式因版本而异这里不展开。重点说一下在视频处理场景下的配置建议把工作目录设置到你的视频项目根目录这样 Claude Code 能直接读取项目里的脚本、配置和素材列表生成的代码也更贴合上下文。如果你用 VS Code建议把 Claude Code 和 ffmpeg、Python、Node.js 的环境配好。ffmpeg 要在 PATH 里Python 要装 Manim 的依赖Node.js 要能跑 Remotion。这些环境问题让 Claude Code 帮你排查也很方便把报错贴给它就行。5.2 用 Claude Code 生成 ffmpeg 批处理脚本假设你有一个文件夹里面是几十个 MOV 格式的素材需要批量转成 720p 的 MP4并且加同一个水印。手动敲命令不现实写脚本又容易出错。这时候可以让 Claude Code 生成一个 bash 脚本。你可以这样描述需求“写一个 bash 脚本遍历当前目录下所有 .mov 文件用 ffmpeg 转成 720p 的 MP4H.264 编码CRF 23音频 AAC 128k加右下角水印 logo.png输出到 output 目录文件名保持不变但扩展名改成 .mp4。”Claude Code 会生成类似这样的脚本#!/bin/bash mkdir -p output for file in *.mov; do filename$(basename $file .mov) ffmpeg -i $file -i logo.png \ -filter_complex [0:v]scale1280:-2[vid];[vid][1:v]overlayW-w-10:H-h-10 \ -c:v libx264 -crf 23 -preset medium \ -c:a aac -b:a 128k \ output/${filename}.mp4 done这个脚本的关键点scale1280:-2保证高度是偶数overlayW-w-10:H-h-10把水印放右下角-preset medium平衡速度和质量。你可以让 Claude Code 解释每一行的作用确认无误后再运行。注意批量处理前先用一两个文件测试确认输出效果和性能符合预期。尤其是滤镜图复杂时处理速度可能比预期慢很多。5.3 用 Claude Code 搭建 Remotion 项目Remotion 项目的初始化可以用npx create-videolatest但生成的模板可能不完全符合你的需求。让 Claude Code 帮你调整项目结构和组件代码更快。比如你想做一个数据驱动的柱状图动画数据从 JSON 文件读取柱子高度随数据变化同时有标题和坐标轴。你可以把需求描述给 Claude Code它会生成对应的 React 组件、数据读取逻辑和 Remotion 配置。关键是要给 Claude Code 足够的上下文Remotion 的版本号、你用的前端框架如果有、数据格式、期望的动画效果。上下文越具体生成的代码越可用。如果生成的代码报错把报错信息贴回去让它修复。Remotion 的预览命令是npx remotion studio会在浏览器里打开一个预览界面可以实时调整参数看效果。正式渲染用npx remotion render MyComposition out/video.mp4。如果渲染出来的视频有问题比如字体不对、布局错位检查 Chrome 的版本和系统字体配置。5.4 用 Claude Code 调试 Manim 报错Manim 的报错有时候很让人头疼尤其是涉及 LaTeX 的时候。比如LatexError可能是因为公式语法错误也可能是因为系统缺少 LaTeX 包。把完整的报错信息贴给 Claude Code它能帮你定位问题。常见的 Manim 问题包括LaTeX 没安装或版本不兼容、Python 依赖缺失、渲染分辨率设置不当导致内存不足、动画对象没有正确添加到场景。Claude Code 可以根据报错给出具体的修复步骤比如安装某个 LaTeX 包、调整config.pixel_width和config.pixel_height、检查self.add()和self.play()的调用顺序。我自己的经验是Manim 的调试最好从小片段开始。先渲染一个只有几秒的简单场景确认环境没问题再逐步加复杂度。这样出问题时容易定位是哪个环节导致的。6. 常见问题与排查技巧实录6.1 ffmpeg 报错速查表报错信息可能原因解决方法Unknown encoder libx264编译时未启用 libx264换用包含该库的版本或改用-c:v mpeg4Invalid argument滤镜图语法错误检查-vf和-filter_complex的使用是否正确No such filter: drawtext编译时未启用 libfreetype换用完整版 ffmpegConversion failed输出路径无权限或磁盘满检查路径和磁盘空间moov atom not found输入文件损坏或不完整用ffmpeg -i检查文件是否可读height not divisible by 2H.264 要求宽高为偶数用scale1280:-2自动取偶数这张表里的问题我基本都遇到过其中Invalid argument是最常见的九成以上是滤镜图写错了。排查方法是把滤镜图拆开一步一步加看哪一步开始报错。6.2 Remotion 渲染失败的排查思路Remotion 渲染失败通常有几个方向Chrome 没装或版本不兼容、ffmpeg 不在 PATH、composition ID 写错、组件里有运行时错误。排查顺序建议是先跑npx remotion studio看预览是否正常如果预览正常但渲染失败多半是环境问题如果预览就报错那是组件代码问题。环境问题里Chrome 和 ffmpeg 是最常见的两个坑。Remotion 需要 Chrome 的无头模式如果系统里没有 Chrome可以装 Chromium 或让 Remotion 自动下载。组件代码问题里最常见的是在渲染时访问了浏览器才有的 API比如window、document、localStorage。Remotion 的渲染环境是 Node.js没有这些 API。如果必须用要用useEffect或delayRender做兼容处理。6.3 Manim 渲染慢的优化技巧Manim 渲染慢是常态尤其是高质量模式。优化方向有几个降低预览质量、减少同时显示的对象数量、避免过于复杂的 LaTeX 公式、用-ql调试用-qh正式输出。还有一个技巧是把复杂场景拆成多个小场景分别渲染后再用 ffmpeg 拼接。这样单个场景的渲染时间短出问题也容易定位。另外Manim 的缓存机制可以利用重复渲染同一个场景时未变化的部分会复用缓存速度会快很多。提示如果 Manim 渲染时内存占用过高可以降低config.pixel_width和config.pixel_height或者减少config.frame_rate。这些参数在manim.cfg文件里配置也可以在命令行用--resolution和--fps覆盖。6.4 Claude Code 生成代码的验证习惯Claude Code 生成的代码不能直接信尤其是涉及文件操作和批量处理的。我的习惯是先生成再让它解释关键行然后小样本测试最后全量运行。小样本测试很重要。比如批量转码脚本先拿一个文件跑确认输出格式、分辨率、水印位置都正确再跑全部。Remotion 组件先渲染几秒的片段确认动画效果和性能再渲染完整视频。Manim 场景先用低质量模式跑一遍确认逻辑没问题再用高质量输出。这个习惯看起来多花了几分钟但能避免跑了一半发现参数错了要重来的尴尬。尤其是视频渲染这种耗时操作提前验证的收益很高。7. 一些个人体会这套video-use的工作流我断断续续用了几个月最大的感受是视频处理的瓶颈往往不在工具本身而在需求拆解和流程设计。ffmpeg、Remotion、Manim 各自的能力边界比较清晰难的是判断一个需求应该用哪个工具以及怎么把它们串起来。Claude Code 的价值在于降低了试错成本。以前遇到不熟悉的 ffmpeg 滤镜或 Remotion API要翻文档、搜示例、调半天。现在可以直接描述需求让它生成再基于生成的代码调整。但前提是你得能判断生成的代码对不对所以基础概念还是要懂一些。另外视频处理很吃机器资源尤其是高分辨率渲染。如果经常做这类工作建议把内存和 CPU 配足或者考虑用云端的渲染服务。本地机器跑 4K 渲染风扇狂转是常态。最后分享一个小技巧把常用的 ffmpeg 命令、Remotion 组件模板、Manim 场景模板整理成一个代码片段库用 Claude Code 生成新代码时可以参考这些模板保持风格一致减少重复解释。这个库不需要多复杂一个 Markdown 文件或者一个代码片段管理工具就够用。