現(xiàn)了一個(gè)新思路:用 Remotion + Claude Code 像寫(xiě)代碼一樣自動(dòng)化生成短視頻)
1. 從剪輯時(shí)間線到 React 組件短視頻批量生產(chǎn)的真實(shí)痛點(diǎn)如果你做過(guò)短視頻大概率經(jīng)歷過(guò)這種循環(huán)打開(kāi)剪輯軟件拖素材、對(duì)時(shí)間軸、調(diào)關(guān)鍵幀、導(dǎo)出然后第二天老板說(shuō)“把品牌色換成新的再出 20 條不同文案的版本”。這時(shí)候你會(huì)發(fā)現(xiàn)傳統(tǒng)剪輯軟件里那些鼠標(biāo)拖拽出來(lái)的效果根本沒(méi)法批量復(fù)用。每換一個(gè)文案就得重新對(duì)齊一遍時(shí)間線純體力活。Remotion 這個(gè)開(kāi)源工具給出的思路很直接視頻就是 React 組件時(shí)間軸就是幀數(shù)動(dòng)畫(huà)就是 CSS 和 JS 的函數(shù)。你用寫(xiě)網(wǎng)頁(yè)的方式寫(xiě)視頻每一幀畫(huà)面由代碼決定那么“批量生成 100 條不同文案的視頻”就變成了“循環(huán) 100 次、每次換一個(gè) props 渲染”。像素級(jí)精準(zhǔn)控制、組件復(fù)用、自動(dòng)化批量產(chǎn)出這些在剪輯軟件里要靠插件和腳本勉強(qiáng)實(shí)現(xiàn)的能力在代碼世界里是天然存在的。但問(wèn)題也在這里。Remotion 要求你懂 React、會(huì)寫(xiě) CSS 布局、理解useCurrentFrame和interpolate這些 API。對(duì)于前端開(kāi)發(fā)者來(lái)說(shuō)不算難對(duì)于內(nèi)容創(chuàng)作者來(lái)說(shuō)門(mén)檻就高了。最近 Remotion 推出了 Agent Skills配合 Claude Code 這類(lèi)編碼助手可以把“寫(xiě) Remotion 組件”這件事交給 AI 來(lái)輔助完成。你只需要用自然語(yǔ)言描述場(chǎng)景Claude Code 幫你生成組件代碼你在本地用npx remotion studio預(yù)覽滿(mǎn)意后npx remotion render導(dǎo)出成片。這篇文章聚焦一個(gè)具體場(chǎng)景用 React/CSS 組件化思維替代傳統(tǒng)剪輯軟件以 Remotion 為渲染引擎、Claude Code 輔助生成場(chǎng)景代碼實(shí)現(xiàn)短視頻批量產(chǎn)出。我會(huì)交付可復(fù)制的 Remotion 工程結(jié)構(gòu)、npx初始化命令、Claude Code 的接入配置以及從組件到成片的完整驗(yàn)證流程。適合誰(shuí)有基礎(chǔ)前端知識(shí)、想做自動(dòng)化視頻產(chǎn)出的開(kāi)發(fā)者或者愿意讓 AI 幫你寫(xiě)代碼的內(nèi)容創(chuàng)作者。2. 前置準(zhǔn)備TaoToken 接入 Claude Code 與 Remotion 環(huán)境搭建在開(kāi)始寫(xiě) Remotion 組件之前需要先把兩件事準(zhǔn)備好一個(gè)是 Remotion 的本地工程環(huán)境另一個(gè)是 Claude Code 的模型接入。Remotion 本身是 npm 包用npx就能初始化Claude Code 需要配置一個(gè)可用的模型服務(wù)端點(diǎn)這里我用 TaoToken 來(lái)做接入因?yàn)樗峁┝思嫒?Anthropic 的 API 格式配置起來(lái)比較直接。先確認(rèn)本地環(huán)境。你需要 Node.js 18 以上版本npm 或 pnpm 都行。打開(kāi)終端執(zhí)行node -v npm -v如果版本太低去 Node.js 官網(wǎng)下載 LTS 版本安裝。然后創(chuàng)建一個(gè) Remotion 工程。Remotion 官方提供了腳手架命令直接運(yùn)行npx create-videolatest my-video-project這個(gè)命令會(huì)問(wèn)你幾個(gè)問(wèn)題選擇模板我選 Blank 空白模板、是否使用 TypeScript選 Yes、包管理器選 npm。等待依賴(lài)安裝完成后進(jìn)入目錄cd my-video-project npm run dev瀏覽器會(huì)自動(dòng)打開(kāi)http://localhost:3000你會(huì)看到一個(gè) Remotion Studio 的界面左邊是組件列表右邊是預(yù)覽窗口。默認(rèn)模板里有一個(gè)Composition定義了視頻的寬高、幀率、時(shí)長(zhǎng)。到這里Remotion 環(huán)境就緒。接下來(lái)配置 Claude Code 的模型接入。Claude Code 是 Anthropic 推出的終端編碼助手默認(rèn)走官方 API。如果你已經(jīng)有可用的 API Key可以直接在終端里設(shè)置環(huán)境變量。TaoToken 的 API 地址是https://taotoken.net/api兼容 Anthropic 的 Messages API 格式。在終端里執(zhí)行export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的TaoToken API KeyAPI Key 可以在 TaoToken 控制臺(tái)的 API Keys 頁(yè)面創(chuàng)建地址是https://taotoken.net/console/api-keys。創(chuàng)建后復(fù)制出來(lái)替換上面的占位符。如果你用的是 Windows PowerShell把export換成$env:語(yǔ)法$env:ANTHROPIC_BASE_URLhttps://taotoken.net/api $env:ANTHROPIC_API_KEY你的TaoToken API Key配置完成后在終端里運(yùn)行claude命令如果能看到 Claude Code 的交互界面說(shuō)明接入成功。你可以先問(wèn)一句“幫我寫(xiě)一個(gè) Remotion 的 Hello World 組件”測(cè)試模型是否能正常返回代碼。這里有一個(gè)細(xì)節(jié)需要注意Remotion 的 Agent Skills 需要單獨(dú)安裝。在項(xiàng)目根目錄執(zhí)行npx skills add remotion-dev/skills這個(gè)命令會(huì)把 Remotion 相關(guān)的技能描述文件下載到本地Claude Code 在生成代碼時(shí)會(huì)參考這些技能定義輸出的組件更符合 Remotion 的 API 規(guī)范。安裝完成后你的工程目錄里會(huì)多出一個(gè).skills文件夾里面包含 Remotion 的組件模板、動(dòng)畫(huà)函數(shù)說(shuō)明、渲染配置示例。環(huán)境準(zhǔn)備好之后整個(gè)工作流就清晰了你在終端里用自然語(yǔ)言描述視頻場(chǎng)景Claude Code 生成 Remotion 組件代碼你在 Remotion Studio 里預(yù)覽效果調(diào)整滿(mǎn)意后用npx remotion render導(dǎo)出 MP4。下一節(jié)我會(huì)給出具體的配置文件和可復(fù)制的組件代碼。3. 可復(fù)制配置Remotion 工程結(jié)構(gòu)、Claude Code settings 與組件代碼這一節(jié)直接給可復(fù)制的內(nèi)容。先看 Remotion 工程的核心結(jié)構(gòu)。用npx create-videolatest初始化后目錄大概是這樣my-video-project/ ├── src/ │ ├── Root.tsx # 注冊(cè)所有 Composition │ ├── Composition.tsx # 默認(rèn)視頻組件 │ └── index.ts # 入口文件 ├── remotion.config.ts # Remotion 渲染配置 ├── package.json ├── tsconfig.json └── .skills/ # Agent Skills 技能文件Root.tsx是注冊(cè)視頻的地方每個(gè)Composition定義一條視頻的寬高、幀率、時(shí)長(zhǎng)和對(duì)應(yīng)的 React 組件。我把它改成一個(gè)批量生成的例子// src/Root.tsx import { Composition } from remotion; import { ProductPromo } from ./ProductPromo; export const RemotionRoot: React.FC () { return ( Composition idProductPromo component{ProductPromo} durationInFrames{300} fps{30} width{1080} height{1920} defaultProps{{ title: 新品上市, subtitle: 限時(shí)優(yōu)惠, brandColor: #FF6B35, }} / / ); };這里durationInFrames{300}表示 10 秒視頻30fps × 10swidth和height是豎屏 1080×1920適合短視頻平臺(tái)。defaultProps是傳給組件的參數(shù)后面批量生成時(shí)只需要換這些 props。接下來(lái)是ProductPromo.tsx組件用 React 和 CSS 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的產(chǎn)品宣傳動(dòng)畫(huà)// src/ProductPromo.tsx import { AbsoluteFill, interpolate, useCurrentFrame, useVideoConfig, spring, } from remotion; type Props { title: string; subtitle: string; brandColor: string; }; export const ProductPromo: React.FCProps ({ title, subtitle, brandColor, }) { const frame useCurrentFrame(); const { fps } useVideoConfig(); const titleOpacity interpolate(frame, [0, 30], [0, 1], { extrapolateRight: clamp, }); const titleScale spring({ frame, fps, config: { damping: 12 }, }); const subtitleY interpolate(frame, [30, 60], [50, 0], { extrapolateRight: clamp, }); return ( AbsoluteFill style{{ backgroundColor: #0A0A0A, justifyContent: center, alignItems: center, fontFamily: sans-serif, }} h1 style{{ color: brandColor, fontSize: 120, opacity: titleOpacity, transform: scale(${titleScale}), margin: 0, }} {title} /h1 p style{{ color: #FFFFFF, fontSize: 48, opacity: interpolate(frame, [30, 60], [0, 1], { extrapolateRight: clamp, }), transform: translateY(${subtitleY}px), marginTop: 40, }} {subtitle} /p /AbsoluteFill ); };這段代碼里useCurrentFrame拿到當(dāng)前幀號(hào)interpolate把幀號(hào)映射成透明度或位移spring生成彈性動(dòng)畫(huà)。所有動(dòng)畫(huà)都是幀驅(qū)動(dòng)的渲染時(shí)每一幀都會(huì)重新計(jì)算樣式所以導(dǎo)出結(jié)果和預(yù)覽完全一致。然后是 Claude Code 的配置文件。在項(xiàng)目根目錄創(chuàng)建.claude/settings.json內(nèi)容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken API Key }, permissions: { allow: [ Read, Write, Bash(npx remotion:*), Bash(npm run:*) ] } }這個(gè)文件讓 Claude Code 在項(xiàng)目?jī)?nèi)自動(dòng)使用 TaoToken 的端點(diǎn)并且允許它執(zhí)行 Remotion 相關(guān)的命令。注意ANTHROPIC_API_KEY要替換成你在 TaoToken 控制臺(tái)創(chuàng)建的真實(shí) Key。如果你不想把 Key 寫(xiě)進(jìn)文件也可以用環(huán)境變量方式Claude Code 會(huì)優(yōu)先讀取系統(tǒng)環(huán)境變量。三件套對(duì)照表配置項(xiàng)值說(shuō)明Base URLhttps://taotoken.net/apiTaoToken 的 Anthropic 兼容端點(diǎn)API Key控制臺(tái)創(chuàng)建在https://taotoken.net/console/api-keys生成Model IDclaude-sonnet-4-20250514Claude Code 默認(rèn)模型可在 settings 里指定如果你用的是 Cline 或者 CC Switch 這類(lèi)工具配置邏輯一樣Base URL 填https://taotoken.net/apiAPI Key 填 TaoToken 的 KeyModel ID 填 Claude 的模型標(biāo)識(shí)。Cline 的 MCP 配置里把a(bǔ)nthropic的 baseURL 指向 TaoToken 即可。配置完成后在終端里運(yùn)行claude進(jìn)入交互模式輸入幫我在 src/ProductPromo.tsx 里加一個(gè)背景漸變動(dòng)畫(huà)從深藍(lán)到紫色持續(xù) 2 秒。Claude Code 會(huì)讀取現(xiàn)有組件生成修改后的代碼你確認(rèn)后它會(huì)直接寫(xiě)入文件。Remotion Studio 會(huì)熱更新你立刻能看到效果。4. 驗(yàn)證請(qǐng)求從組件到成片的完整渲染流程配置寫(xiě)好了接下來(lái)驗(yàn)證整條鏈路能不能跑通。我分三步走先在 Remotion Studio 里預(yù)覽組件再用 Claude Code 生成一個(gè)新場(chǎng)景最后用npx remotion render導(dǎo)出 MP4。第一步啟動(dòng) Remotion Studio。在項(xiàng)目根目錄執(zhí)行npm run dev瀏覽器打開(kāi)http://localhost:3000左側(cè)邊欄會(huì)列出ProductPromo這個(gè) Composition。點(diǎn)擊它右側(cè)預(yù)覽窗口會(huì)播放 10 秒的動(dòng)畫(huà)標(biāo)題從透明變清晰并帶彈性縮放副標(biāo)題從下方滑入。如果你看到這個(gè)效果說(shuō)明組件代碼沒(méi)問(wèn)題。第二步用 Claude Code 生成一個(gè)新場(chǎng)景。在終端里運(yùn)行claude輸入提示詞在 src 目錄下新建一個(gè) DataChart.tsx 組件用 Remotion 實(shí)現(xiàn)一個(gè)柱狀圖動(dòng)畫(huà)。 要求5 根柱子高度從 0 增長(zhǎng)到目標(biāo)值每根柱子延遲 5 幀啟動(dòng) 顏色用 #4A90D9背景白色時(shí)長(zhǎng) 150 幀30fps。 然后在 Root.tsx 里注冊(cè)一個(gè) id 為 DataChart 的 Composition。Claude Code 會(huì)生成DataChart.tsx并修改Root.tsx。你回到 Remotion Studio刷新頁(yè)面左側(cè)會(huì)多出DataChart這個(gè) Composition。點(diǎn)擊預(yù)覽應(yīng)該能看到柱子依次生長(zhǎng)的動(dòng)畫(huà)。如果動(dòng)畫(huà)不對(duì)你可以繼續(xù)在 Claude Code 里說(shuō)“第二根柱子的延遲改成 10 幀”它會(huì)精準(zhǔn)修改對(duì)應(yīng)代碼。第三步導(dǎo)出成片。在終端里執(zhí)行npx remotion render ProductPromo out/product-promo.mp4這個(gè)命令會(huì)把ProductPromo這個(gè) Composition 渲染成 MP4 文件輸出到out/product-promo.mp4。渲染過(guò)程中終端會(huì)顯示進(jìn)度條完成后你會(huì)看到文件大小和耗時(shí)。我實(shí)測(cè)下來(lái)10 秒的 1080×1920 視頻在 M1 Mac 上大約 20 秒渲染完成。如果畫(huà)面復(fù)雜、圖層多時(shí)間會(huì)相應(yīng)增加。批量生成怎么做Remotion 提供了--props參數(shù)可以從 JSON 文件讀取參數(shù)。創(chuàng)建一個(gè)props.json{ title: 春季大促, subtitle: 全場(chǎng)五折, brandColor: #E91E63 }然后渲染時(shí)指定npx remotion render ProductPromo out/spring-sale.mp4 --propsprops.json如果你想批量生成 100 條不同文案的視頻寫(xiě)一個(gè) Node.js 腳本循環(huán)讀取 CSV 或 JSON 數(shù)據(jù)每次調(diào)用npx remotion render并傳入不同的 props 文件。這就是代碼化視頻生產(chǎn)的核心優(yōu)勢(shì)渲染引擎是確定性的輸入相同 props 就輸出相同視頻批量任務(wù)可以并行調(diào)度。驗(yàn)證成功的標(biāo)志out/目錄下出現(xiàn) MP4 文件用播放器打開(kāi)畫(huà)面、動(dòng)畫(huà)、文字都符合預(yù)期。如果渲染失敗終端會(huì)報(bào)錯(cuò)下一節(jié)我會(huì)列出常見(jiàn)錯(cuò)誤和排查方法。5. 常見(jiàn)報(bào)錯(cuò)排查401、local proxy failed、reading choices 與 OAuth 問(wèn)題這一節(jié)整理我在配置和渲染過(guò)程中真實(shí)遇到的報(bào)錯(cuò)以及對(duì)應(yīng)的解決方法。你如果卡在某一步可以先對(duì)照這里排查。報(bào)錯(cuò)一401 UnauthorizedError: 401 Unauthorized {error:{type:authentication_error,message:invalid x-api-key}}這個(gè)錯(cuò)誤說(shuō)明 Claude Code 請(qǐng)求 TaoToken 時(shí) API Key 無(wú)效。檢查三個(gè)地方第一ANTHROPIC_API_KEY環(huán)境變量是否設(shè)置正確有沒(méi)有多余空格第二Key 是否在 TaoToken 控制臺(tái)被刪除或過(guò)期第三ANTHROPIC_BASE_URL是否寫(xiě)成了https://taotoken.net/api注意末尾不要加/v1TaoToken 的兼容層會(huì)自動(dòng)處理路徑。如果你用的是.claude/settings.json確認(rèn) JSON 格式?jīng)]有語(yǔ)法錯(cuò)誤可以用cat .claude/settings.json | python -m json.tool驗(yàn)證。報(bào)錯(cuò)二local proxy failedError: local proxy failed: connect ECONNREFUSED 127.0.0.1:7890這個(gè)錯(cuò)誤通常是因?yàn)橄到y(tǒng)里設(shè)置了本地代理但代理服務(wù)沒(méi)有運(yùn)行。Claude Code 會(huì)讀取HTTP_PROXY或HTTPS_PROXY環(huán)境變量。如果你之前配置過(guò)代理現(xiàn)在代理關(guān)了就會(huì)報(bào)這個(gè)錯(cuò)。解決方法在終端里執(zhí)行unset HTTP_PROXY HTTPS_PROXY或者在.claude/settings.json里顯式設(shè)置HTTP_PROXY: 和HTTPS_PROXY: 。注意這里只是清理本地環(huán)境變量不涉及任何網(wǎng)絡(luò)工具的使用。報(bào)錯(cuò)三reading choices 相關(guān)錯(cuò)誤Error: reading choices of undefined這個(gè)報(bào)錯(cuò)一般出現(xiàn)在用 OpenAI 兼容格式請(qǐng)求 TaoToken 時(shí)。TaoToken 的/api端點(diǎn)兼容 Anthropic Messages API返回格式是content數(shù)組不是 OpenAI 的choices。如果你用的工具默認(rèn)走 OpenAI 格式需要把請(qǐng)求路徑改成 Anthropic 格式或者把 Base URL 指向 TaoToken 的對(duì)應(yīng)端點(diǎn)。Claude Code 本身走 Anthropic 格式不會(huì)出現(xiàn)這個(gè)問(wèn)題如果你用 Cline 或其他工具檢查它的 API 提供商設(shè)置是否為 Anthropic。報(bào)錯(cuò)四OAuth 相關(guān)錯(cuò)誤Error: OAuth token expired or invalidClaude Code 在某些版本里會(huì)嘗試 OAuth 登錄。如果你已經(jīng)用 API Key 方式配置不需要 OAuth。出現(xiàn)這個(gè)報(bào)錯(cuò)時(shí)檢查是否同時(shí)設(shè)置了ANTHROPIC_API_KEY和 OAuth 憑證兩者沖突。解決方法刪除~/.claude/下的 OAuth 緩存文件只保留 API Key 配置。具體路徑是~/.claude/credentials.json刪掉后重新運(yùn)行claude。報(bào)錯(cuò)五Remotion 渲染時(shí)內(nèi)存不足Error: JavaScript heap out of memoryRemotion 渲染是把每一幀截屏合成復(fù)雜畫(huà)面會(huì)吃?xún)?nèi)存。解決方法在remotion.config.ts里設(shè)置Config.setConcurrency(2)降低并發(fā)幀數(shù)或者用--concurrency1參數(shù)。另外把視頻分辨率從 4K 降到 1080P 也能顯著減少內(nèi)存占用。如果還是不夠在package.json的渲染腳本里加NODE_OPTIONS--max-old-space-size4096。報(bào)錯(cuò)六Composition 找不到Error: No composition with id ProductPromo found檢查Root.tsx里Composition的id屬性是否和渲染命令里的一致。Remotion 的 id 區(qū)分大小寫(xiě)ProductPromo和productpromo是兩個(gè)不同的 id。另外如果你在Root.tsx里用了條件渲染或動(dòng)態(tài)注冊(cè)確保組件在渲染時(shí)已經(jīng)掛載。排查完這些基本能覆蓋 90% 的配置和渲染問(wèn)題。如果遇到其他報(bào)錯(cuò)把終端完整輸出復(fù)制給 Claude Code讓它幫你分析通常幾輪對(duì)話就能定位。6. 語(yǔ)義一致 CTA從單條視頻到批量生產(chǎn)線的下一步走到這里你已經(jīng)有了一個(gè)可運(yùn)行的 Remotion 工程能用 Claude Code 生成組件代碼能渲染出第一條 MP4。接下來(lái)如果想把它變成真正的批量生產(chǎn)線有幾個(gè)方向可以繼續(xù)。第一把 props 數(shù)據(jù)源接到外部。比如從 Google Sheets、Airtable 或者本地 CSV 讀取文案和品牌色用 Node.js 腳本循環(huán)調(diào)用npx remotion render每次傳入不同的 props。這樣你只需要維護(hù)一張表格就能生成成百上千條視頻。第二用 Remotion 的Series和Sequence組件組合多場(chǎng)景。一條 30 秒的視頻可以拆成開(kāi)場(chǎng)、產(chǎn)品展示、價(jià)格、CTA 四個(gè)場(chǎng)景每個(gè)場(chǎng)景是一個(gè)獨(dú)立組件用Series串聯(lián)。Claude Code 可以幫你生成每個(gè)場(chǎng)景的骨架你只需要調(diào)整文案和配色。第三把渲染任務(wù)放到 CI/CD 里。Remotion 官方提供了 GitHub Actions 模板你 push 代碼后自動(dòng)渲染并上傳到對(duì)象存儲(chǔ)。這樣團(tuán)隊(duì)里非技術(shù)成員只需要改表格視頻自動(dòng)產(chǎn)出。如果你在配置 Claude Code 接入時(shí)遇到問(wèn)題或者想換一個(gè)更穩(wěn)定的模型端點(diǎn)可以試試 TaoToken 的 API 服務(wù)。它的 Anthropic 兼容端點(diǎn)配置簡(jiǎn)單適合用來(lái)驅(qū)動(dòng) Claude Code 做代碼生成。API Key 在控制臺(tái)創(chuàng)建文檔里有詳細(xì)的接入說(shuō)明。對(duì)于長(zhǎng)期做視頻自動(dòng)化、需要頻繁調(diào)用模型生成組件的場(chǎng)景Coding Plan 提供了更劃算的額度方案適合把這條生產(chǎn)線跑成日常流程。模型對(duì)話頁(yè)面可以快速測(cè)試模型響應(yīng)接入文檔里有完整的 Base URL 和參數(shù)說(shuō)明。如果你只是想先驗(yàn)證 Remotion 和 Claude Code 的配合效果從 API Keys 創(chuàng)建一個(gè) Key按本文的配置跑通第一條視頻再?zèng)Q定要不要擴(kuò)大規(guī)模。最后分享一個(gè)我踩過(guò)的坑Remotion 的interpolate函數(shù)默認(rèn)會(huì)在輸入范圍外繼續(xù)外推導(dǎo)致動(dòng)畫(huà)在結(jié)束后出現(xiàn)異常值。記得加extrapolateRight: clamp和extrapolateLeft: clamp讓動(dòng)畫(huà)在邊界處停住。這個(gè)細(xì)節(jié)在官方文檔里不太顯眼但實(shí)際渲染時(shí)經(jīng)常遇到。