Dựng video bằng Claude Code với video-use
Cài video-use, nối ffmpeg và khoá API ElevenLabs để agent tự cắt, chỉnh màu, làm phụ đề và xuất video từ footage thô.
Bài này giới thiệu video-use, cách cài nó vào agent của bạn và cách dùng để biến footage thô thành video hoàn chỉnh chỉ bằng trò chuyện.
video-use giúp bạn dựng video bằng Claude Code, 100% mã nguồn mở (open source). Bạn thả footage thô vào một thư mục, trò chuyện với Claude Code và nhận lại final.mp4. Nó dùng được cho mọi loại nội dung (người nói trước camera, montage, hướng dẫn, du lịch, phỏng vấn) mà không cần preset hay menu.
video-use làm được gì
- Cắt bỏ từ đệm (
umm,uh, câu nói hỏng) và khoảng chết giữa các lần quay. - Tự chỉnh màu từng đoạn (warm cinematic, neutral punch, hoặc bất kỳ chuỗi ffmpeg tùy chỉnh nào).
- Fade âm thanh 30ms ở mỗi điểm cắt để bạn không bao giờ nghe tiếng "bụp".
- In phụ đề theo phong cách của bạn: mặc định là cụm 2 từ VIẾT HOA, tùy chỉnh được hoàn toàn.
- Tạo lớp hoạt hình phủ qua HyperFrames, Remotion, Manim hoặc PIL, chạy song song trong các sub-agent, mỗi hoạt hình một sub-agent.
- Tự đánh giá output đã render tại mọi ranh giới cắt trước khi cho bạn xem.
- Lưu bộ nhớ phiên trong
project.mdđể phiên tuần sau tiếp tục từ chỗ bạn dừng.
Cài bằng prompt
Dán đoạn sau vào Claude Code, Codex, Hermes, Openclaw hoặc bất kỳ agent nào có quyền chạy shell:
Set up https://github.com/browser-use/video-use for me.
Read install.md first to install this repo, wire up ffmpeg, register the skill with whichever agent you're running under, and set up the ElevenLabs API key — ask me to paste it when you need it. Then read SKILL.md for daily usage, and always read helpers/ because that's where the editing scripts live. After install, don't transcribe anything on your own — just tell me it's ready and wait for me to drop footage into a folder.
Agent sẽ lo việc clone, cài dependency, đăng ký skill và hỏi bạn một lần để lấy khoá API ElevenLabs (lấy tại elevenlabs.io/app/settings/api-keys).
Sau đó chỉ agent tới một thư mục chứa các cảnh quay thô:
cd /path/to/your/videos
claude # or codex, hermes, etc.
Muốn dựng liên tục từ VPS riêng hoặc Telegram, bạn chạy agent qua Browser Use Box.
Trong phiên làm việc, bạn nói:
edit these into a launch video
Agent kiểm kê các nguồn, đề xuất chiến lược, chờ bạn đồng ý, rồi tạo edit/final.mp4 cạnh các file nguồn. Mọi output nằm trong <videos_dir>/edit/, thư mục skill luôn sạch.
Cài thủ công
Nếu bạn muốn tự làm:
# 1. Clone and symlink into your agent's skills directory
git clone https://github.com/browser-use/video-use ~/Developer/video-use
ln -sfn ~/Developer/video-use ~/.claude/skills/video-use # Claude Code
# ln -sfn ~/Developer/video-use ~/.codex/skills/video-use # Codex
# 2. Install deps
cd ~/Developer/video-use
uv sync # or: pip install -e .
brew install ffmpeg # required
brew install yt-dlp # optional, for downloading online sources
# 3. Add your ElevenLabs API key
cp .env.example .env
$EDITOR .env # ELEVENLABS_API_KEY=...
Cách hoạt động
LLM không bao giờ xem video. Nó đọc video qua hai lớp, đủ để cắt chính xác tới ranh giới từng từ.
Lớp 1: bản chép lời âm thanh (luôn được nạp). Mỗi nguồn gọi ElevenLabs Scribe một lần, cho timestamp theo từng từ, phân tách người nói (speaker diarization) và sự kiện âm thanh ((laughter), (applause), (sigh)). Mọi cảnh quay được gói vào một file takes_packed.md khoảng 12KB, là góc nhìn chính để LLM đọc.
## C0103 (duration: 43.0s, 8 phrases)
[002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
[006.08-006.74] S0 We fixed this.
Lớp 2: ảnh ghép hình ảnh (khi cần). timeline_view tạo một ảnh PNG gồm dải khung hình, dạng sóng và nhãn từ cho bất kỳ khoảng thời gian nào. Nó chỉ được gọi ở các điểm cần quyết định: khoảng ngừng mơ hồ, so sánh các lần quay lại, kiểm tra điểm cắt.
Cách ngây thơ: 30.000 khung hình × 1.500 token = 45 triệu token nhiễu. Video Use: 12KB văn bản + vài ảnh PNG.
Cùng ý tưởng với việc browser-use đưa cho LLM một DOM có cấu trúc thay vì ảnh chụp màn hình, nhưng áp dụng cho video.
Pipeline
Transcribe ──> Pack ──> LLM Reasons ──> EDL ──> Render ──> Self-Eval
│
└─ issue? fix + re-render (max 3)
Vòng tự đánh giá chạy timeline_view trên output đã render tại mọi ranh giới cắt, bắt các lỗi nhảy hình, tiếng "bụp" và phụ đề bị che. Bạn chỉ thấy bản xem trước sau khi nó qua được bước này.
Nguyên tắc thiết kế
- Văn bản + hình ảnh khi cần. Không đổ khung hình hàng loạt. Bản chép lời là bề mặt làm việc.
- Âm thanh là chính, hình ảnh theo sau. Điểm cắt lấy từ ranh giới lời nói và khoảng lặng.
- Hỏi → xác nhận → thực thi → tự đánh giá → lưu lại. Không bao giờ đụng tới bản dựng khi chiến lược chưa được duyệt.
- Không giả định gì về loại nội dung. Xem, hỏi, rồi mới dựng.
- 12 quy tắc cứng, còn lại tự do sáng tạo. Độ chính xác khi sản xuất là bắt buộc. Gu thẩm mỹ thì không.
Xem SKILL.md để biết đầy đủ quy tắc sản xuất và kỹ thuật dựng.
Agent cài đặt như thế nào
Phần này dịch từ install.md, file mà agent đọc khi cài lần đầu hoặc kết nối lại. Khi dựng hằng ngày, agent đọc SKILL.md, và luôn đọc helpers/ vì các script nằm ở đó.
Sau khi cài, bạn thả footage thô vào một thư mục bất kỳ, chạy agent (claude, codex…) ở đó và nói "edit these into a launch video". Agent làm phần còn lại bằng cách đọc SKILL.md.
Trên máy cần có ba thứ:
- Repo
video-useđược clone vào một chỗ cố định. ffmpegtrên$PATH(thêmyt-dlpnếu muốn lấy nguồn online).- Khoá API ElevenLabs trong
.envở thư mục gốc repo (cho phần chép lời Scribe).
Và agent hiện tại phải tìm được SKILL.md, qua thư mục skill toàn cục (~/.claude/skills/, ~/.codex/skills/) hoặc qua import trong CLAUDE.md / system prompt.
Quy ước khi cài
- Agent tự làm mọi thứ. Chỉ hỏi bạn những gì nó không tự tạo được: khoá API ElevenLabs, và xác nhận trước khi chạy
brew install. - Ưu tiên đường dẫn clone cố định như
~/Developer/video-use(không phải/tmp, không phải~/Downloads). - Skill gọi helper bằng tên trần (
transcribe.py,render.py). Cách này chạy được vì SKILL.md vàhelpers/đi cùng nhau, nên khi đăng ký skill phải giữ chúng nằm cạnh nhau. - Sau khi cài, kiểm tra bằng một lệnh thật trên một file thật. Không kết luận thành công chỉ vì file tồn tại.
1. Clone vào đường dẫn cố định
test -d ~/Developer/video-use || git clone https://github.com/browser-use/video-use ~/Developer/video-use
cd ~/Developer/video-use
Nếu repo đã có, chạy git pull --ff-only rồi làm tiếp.
2. Cài dependency Python
# Prefer uv if available; fall back to pip.
command -v uv >/dev/null && uv sync || pip install -e .
pyproject.toml liệt kê requests, librosa, matplotlib, pillow, numpy. Không có console script: helper được gọi trực tiếp bằng python helpers/<name>.py.
3. Cài ffmpeg (và yt-dlp nếu cần)
ffmpeg và ffprobe là bắt buộc. yt-dlp chỉ cần khi bạn muốn lấy nguồn từ URL. Các engine hoạt hình như HyperFrames, Remotion và Manim chỉ được cài khi một dự án thực sự cần lần đầu.
# macOS
command -v ffmpeg >/dev/null || brew install ffmpeg
command -v yt-dlp >/dev/null || brew install yt-dlp # optional
# Debian / Ubuntu
# sudo apt-get update && sudo apt-get install -y ffmpeg
# pip install yt-dlp
# Arch
# sudo pacman -S ffmpeg yt-dlp
Nếu brew / apt / pacman đòi mật khẩu sudo, agent phải đưa bạn lệnh chính xác và chờ. Không được bịa mật khẩu.
4. Đăng ký skill với agent hiện tại
Agent xác định nó đang chạy dưới agent nào và đăng ký một lần. Symlink cả thư mục repo là cách đúng, vì helpers/ phải nằm cạnh SKILL.md.
-
Claude Code (có
~/.claude/):bashmkdir -p ~/.claude/skills ln -sfn ~/Developer/video-use ~/.claude/skills/video-use -
Codex (có
$CODEX_HOMEhoặc~/.codex/):bashmkdir -p "${CODEX_HOME:-$HOME/.codex}/skills" ln -sfn ~/Developer/video-use "${CODEX_HOME:-$HOME/.codex}/skills/video-use" -
Hermes / Openclaw / agent khác có thư mục skill: symlink
~/Developer/video-usevào thư mục skill của agent đó với tênvideo-use. Nếu agent không có thư mục skill, thêm một dòng vào system prompt / cấu hình trỏ tới~/Developer/video-use/SKILL.md(ví dụ import@~/Developer/video-use/SKILL.mdtrong file tương đươngCLAUDE.md).
Nếu không xác định được, agent hỏi bạn một lần: "which agent am I running under — Claude Code, Codex, or something else?" rồi chọn đích phù hợp.
5. Khoá API ElevenLabs
Scribe (ElevenLabs) làm toàn bộ phần chép lời. Không có khoá thì không chép lời được.
-
Kiểm tra trạng thái hiện có theo thứ tự, dừng ở kết quả đầu tiên:
bash# a) env var already exported [ -n "$ELEVENLABS_API_KEY" ] && echo "env" # b) .env at repo root already has it grep -q '^ELEVENLABS_API_KEY=..' ~/Developer/video-use/.env 2>/dev/null && echo "dotenv" -
Nếu cả hai đều chưa có, agent hỏi bạn đúng một lần:
I need an ElevenLabs API key for transcription (word-level timestamps, speaker diarization, filler tagging). Grab one at https://elevenlabs.io/app/settings/api-keys and paste it here — I'll write it to
~/Developer/video-use/.env. Or if you already have it exported asELEVENLABS_API_KEY, say "use env" and I'll skip.Khi bạn dán khoá, agent ghi nó vào
~/Developer/video-use/.env:bashprintf 'ELEVENLABS_API_KEY=%s\n' "$KEY" > ~/Developer/video-use/.env chmod 600 ~/Developer/video-use/.envKhông bao giờ in lại khoá trong output của tool. Không bao giờ commit
.env. -
Kiểm tra nhanh bằng một lời gọi rẻ, không tốn quota:
bashcurl -s -o /dev/null -w '%{http_code}\n' \ -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' ~/Developer/video-use/.env)" \ https://api.elevenlabs.io/v1/user200nghĩa là khoá dùng được.401nghĩa là khoá sai hoặc hết hạn: hỏi lại một lần rồi dừng. Các kết quả khác (lỗi mạng, 5xx) thì bỏ qua và kiểm tra ở lần chép lời thật đầu tiên.
6. Kiểm tra đầu cuối
Chạy một thứ thật, ưu tiên cách kiểm tra nhẹ nhất mà vẫn chứng minh pipeline đã được nối:
python ~/Developer/video-use/helpers/timeline_view.py --help >/dev/null && echo "helpers OK"
ffprobe -version | head -1
Thử chép lời đầy đủ lúc cài là tùy chọn, vì nó tốn credit Scribe. Tốt hơn là chờ tới khi bạn đưa clip đầu tiên.
7. Bàn giao
Agent báo bạn trong một tin nhắn ngắn:
- Skill được cài ở đâu (
~/Developer/video-use). - Bạn nên
cdvào thư mục footage và khởi động agent ở đó (ví dụclaude). - Tin nhắn đầu tiên nên là "edit these into a launch video" hoặc "inventory these takes and propose a strategy."
- Mọi output nằm trong
<videos_dir>/edit/, repo luôn sạch.
Cập nhật skill
cd ~/Developer/video-use && git pull --ff-onlylấy code mới nhất. Symlink tự nhận bản mới ở lần chạy sau.- Nếu
pyproject.tomlđổi dependency, chạy lạiuv sync/pip install -e .sau khi pull.
Lưu ý khi cài từ đầu
- Symlink cả thư mục, không chỉ
SKILL.md. Các helper phải nằm cạnh nó. - Nếu
.envcó nhưng khoá rỗng, coi như chưa có. Có file không có nghĩa là khoá hợp lệ. ffmpegbản static build chạy tốt. Bản hiện đại bất kỳ (từ 4.x trở lên) là đủ.yt-dlplà tùy chọn. Đừng chặn việc cài vì nó; chỉ cài khi bạn lần đầu yêu cầu lấy nguồn từ URL.- Node.js/npm chỉ cần cho slot HyperFrames hoặc Remotion. HyperFrames hiện yêu cầu Node.js 22 trở lên.
- HyperFrames, Remotion và Manim là các engine hoạt hình tùy chọn. Không cài hay ưu tiên engine nào trên toàn máy lúc thiết lập; chọn engine cho từng slot hoạt hình theo
SKILL.md. HyperFrames chạy được quanpx --yes hyperframes ...trong thư mục slot. Remotion có thể dựng khung bằngnpx create-video@latesthoặc cài trong slot trước khi render. - Không bao giờ chạy chép lời trong bước kiểm tra cài đặt trừ khi bạn yêu cầu rõ, vì Scribe tốn tiền thật.
- Nếu bạn dùng Linux mà không có trình quản lý gói Claude nhận ra, agent in URL cài
ffmpegthủ công và chờ, thay vì đoán.
Nguồn
- Dịch và biên tập từ https://raw.githubusercontent.com/browser-use/video-use/main/README.md, giấy phép MIT.
- Dịch và biên tập từ https://raw.githubusercontent.com/browser-use/video-use/main/install.md, giấy phép MIT.