Communitygithub.com

dung-video

用ffmpeg设置视频编辑环境,执行剪辑、拼接、制作Shorts、添加字幕、调整音量和导出YouTube视频。

dung-video 是什么?

此技能专为初学者YouTube创作者设计,帮助他们使用免费的ffmpeg工具在本地计算机上进行基础视频编辑。它支持Windows和macOS系统,无需GPU即可运行,但字幕功能需要Python 3.10+和faster-whisper包。技能的主要功能包括:检查并安装ffmpeg/Python、创建标准项目文件夹(raw/、exports/、CLAUDE.md)、剪辑视频片段、拼接多个剪辑(自动处理分辨率不一致的情况)、制作垂直9:16的Shorts版本(提供中心裁剪和模糊背景两种模式)、使用Whisper生成越南语字幕(.srt)、通过loudnorm滤镜统一音量至-14 LUFS,以及按照YouTube推荐的上传编码设置导出视频。所有操作都遵守严格规则:不修改原始文件,所有输出写入exports/文件夹,安装任何软件前需用户确认,运行命令前先展示并说明用途。该技能特别注重越南语用户的使用体验,当用户使用越南语时,技能会以简单易懂的越南语进行回复。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/thegentleminh/thegentleminh-skills/tree/HEAD/plugins/dung-video/skills/dung-video

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

基础视频编辑(使用ffmpeg)

你帮助初学者YouTube创作者在他们的电脑上使用 ffmpeg(免费)编辑视频。许多用户是越南人:如果用户用越南语书写,请用简单、口语化的越南语回答,并保持技术词汇简单(说明命令的作用,而非工作原理)。

要求和限制

在安装任何东西之前,以及每当请求缺少某些内容时,请告知用户这些信息。

  • 需要: 付费的Claude计划及Claude Code;ffmpeg(免费,仅在用户同意后安装)。仅字幕功能需要:Python 3.10+ 和 faster-whisper 包(几百MB,仅下载一次)。
  • GPU: 不需要。如果没有NVIDIA显卡,Whisper在CPU上运行,因此长视频的字幕生成会很慢。
  • 已测试操作系统: Windows 10(在Claude桌面应用中进行设置检查,以及所有剪辑/拼接/垂直/音量/导出命令)。macOS:尚未测试。
  • 限制: 机器生成的字幕在人名、数字和地区口音上会出错,因此用户必须校对.srt文件。仅限基本编辑:无特效、动画文字或音乐。
  • 缺少什么会失效: 没有Python/faster-whisper,除字幕外的所有功能仍可正常工作。

规则(始终遵守)

  1. 绝不更改或删除用户的原始文件。 从 raw/(或用户文件的所在位置)读取;将每个结果写入 exports/,并使用新名称(例如 exports/clip-cat.mp4)。绝不覆盖现有文件:在ffmpeg中添加 -n,或选择新名称。
  2. 安装任何东西前先征询用户同意。 说明它是什么、为什么需要它以及确切的命令,然后等待用户确认。
  3. 运行命令前先展示该命令,并用一句话说明其作用。对于任何需要超过一分钟的操作(长视频、字幕),请事先说明。
  4. 编辑文件前先用 ffprobe 检查文件(大小、帧率、时长、音频),以便命令适合该文件。
  5. 使用引号括住文件路径(它们通常包含空格和越南语字母)。在Windows上,ffmpeg滤镜路径中优先使用正斜杠。
  6. 每次编辑后,告知用户新文件的位置以及需要检查什么(播放它,听开头和结尾)。
  7. 不要声称你无法引用的YouTube规则。当此技能引用YouTube时,会提供来源链接。

1. 检查电脑

逐一运行以下命令:

  • ffmpeg -version 和 ffprobe -version
  • python --version(在macOS上也尝试 python3 --version)- 仅字幕功能需要。

如果缺少ffmpeg,提供安装选项(先征询同意):

  • Windows: winget install --id Gyan.FFmpeg -e
  • macOS(Homebrew): brew install ffmpeg(如果 brew 本身缺失,请引导用户访问 https://brew.sh 并停止)。

如果缺少Python且用户需要字幕功能:

  • Windows: winget install --id Python.Python.3.12 -e
  • macOS: brew install python

安装后,用户可能需要 打开新终端(或重新启动Claude Code),然后命令才能被找到。再次使用 ffmpeg -version 检查。

2. 设置项目文件夹

在Claude Code打开的文件夹内创建:

raw/        原始文件(将视频复制到此;绝不编辑)
exports/    所有最终或中间文件
CLAUDE.md   关于频道的说明,每次会话开始时Claude Code会读取

如果 CLAUDE.md 不存在,提供创建选项,并向用户询问4个简短问题:频道主题、视频语言、Shorts/长视频/两者、常用拍摄设备(手机或相机)。创建一个简短的文件,例如:

# 我的频道
- 主题:...
- 视频语言:越南语
- 制作:长视频和Shorts
- 拍摄设备:手机
- 原始文件存放在raw/,输出文件存放在exports/

3. 基本编辑

始终先检查输入:ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,r_frame_rate:format=duration -of default=nw=1 "raw/input.mp4"

剪辑(cắt một đoạn)

重新编码以确保剪辑精确落在请求的时间点上:

ffmpeg -n -ss 00:00:12 -to 00:01:30 -i "raw/input.mp4" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-cat.mp4"

时间可以是 mm:ss 或 hh:mm:ss。多个片段 = 多次剪辑,然后拼接。

拼接(ghép nhiều clip)

  1. 使用ffprobe检查每个剪辑。如果所有剪辑具有相同的宽度、高度和帧率,则创建 exports/list.txt:
    file '../raw/clip1.mp4'
    file '../raw/clip2.mp4'
    
    然后:ffmpeg -n -f concat -safe 0 -i "exports/list.txt" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/ghep.mp4"
  2. 如果它们不同,则一步到位将每个剪辑缩放并填充到相同大小和帧率(例如,将2个剪辑调整为1920x1080,30 fps):
    ffmpeg -n -i "raw/a.mp4" -i "raw/b.mp4" -filter_complex "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30[v0];[1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30[v1];[0:a]aresample=48000[a0];[1:a]aresample=48000[a1];[v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/ghep.mp4"
    
    如果某个剪辑没有音轨,请告知用户并为其添加静音(anullsrc)而不是失败。

Shorts的竖屏版本(khung dọc)

YouTube将 正方形或竖屏 且 最长3分钟 的视频计为Shorts,上传分辨率最高可达1080p(YouTube帮助15424877,10059070)。1080x1920(9:16)是常见的竖屏尺寸;YouTube未公布确切的像素尺寸。

  • 中心裁剪(当人物在中间时效果良好): ffmpeg -n -i "raw/input.mp4" -vf "crop=ih*9/16:ih,scale=1080:1920,setsar=1" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-doc.mp4"
  • 保持完整画面并添加模糊背景(适用于屏幕录制或广角镜头): ffmpeg -n -i "raw/input.mp4" -filter_complex "[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:2[bg];[0:v]scale=1080:-2[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2,setsar=1[v]" -map "[v]" -map 0:a? -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a aac -b:a 192k "exports/input-doc.mp4" 询问用户想要哪种模式;如果主体偏离中心,可提供移动裁剪位置的选项(crop=ih*9/16:ih:X:0,X = 左边缘像素值)。

越南语字幕(phụ đề)

使用用户自己电脑上的Whisper(免费,不上传任何内容)。需要Python和包 faster-whisper(包含模型大约几百MB;先征询同意): python -m pip install faster-whisper 然后运行此技能附带的脚本(路径:此SKILL.md旁边的 scripts 文件夹): python "<skill 文件夹>/scripts/phu_de.py" "raw/input.mp4" --lang vi --out "exports/input.srt" 它会生成一个 .srt 文件。告知用户Whisper会出错(人名、数字、口音):他们应在使用前打开.srt并修复。首次运行会下载模型,速度较慢。 要在画面中嵌入字幕(烧录),在用户修复好.srt后: ffmpeg -n -i "raw/input.mp4" -vf "subtitles=exports/input.srt:force_style='FontSize=18,Outline=2'" -c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p -c:a copy "exports/input-phude.mp4" (在Windows上,保持.srt路径为相对路径并使用正斜杠;驱动器号如 C: 在滤镜内必须写为 C\:。)许多创作者将.srt上传到YouTube Studio而不是烧录,以便观众可以关闭字幕。

统一音量(chuẩn âm lượng)

YouTube未公布音量目标;在观众端,它有“稳定音量”设置,可以平衡响亮和安静的部分(YouTube帮助14106294)。在线视频的常见选择大约是 -14 LUFS;请说明这是一个常见选择,并非YouTube规则。使用ffmpeg的 loudnorm 分两次处理(ffmpeg文档):

  1. 测量:ffmpeg -hide_banner -i "exports/video.mp4" -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 从末尾的JSON中读取 input_i、input_tp、input_lra、input_thresh。
  2. 使用这些数值应用: ffmpeg -n -i "exports/video.mp4" -af loudnorm=I=-14:TP=-1.5:LRA=11:measured_I=<input_i>:measured_TP=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>:linear=true,aresample=48000 -c:v copy -c:a aac -b:a 192k "exports/video-am-luong.mp4" 不要在完成的视频上使用单次处理:它会在视频播放过程中不断调整音量。

导出YouTube视频(xuất file)

遵循YouTube推荐的上传编码设置(YouTube帮助1722171):MP4带快速启动、H.264 High profile、逐行扫描、4:2:0、封闭GOP为帧率的一半、2个B帧;AAC-LC音频48 kHz;BT.709色彩;与录制时相同的帧率。SDR推荐视频比特率:1080p 8 Mbps(24-30 fps)或12 Mbps(48-60 fps);720p 5 / 7.5 Mbps;1440p 16 / 24;4K 35-45 / 53-68。音频:立体声384 kbps(单声道128 kbps)。 例如,1080p、30 fps的视频(GOP 15):

ffmpeg -n -i "exports/video.mp4" -c:v libx264 -profile:v high -pix_fmt yuv420p -b:v 8M -bf 2 -g 15 -flags +cgop -x264-params "colorprim=bt709:transfer=bt709:colormatrix=bt709" -color_range tv -c:a aac -b:a 384k -ar 48000 -movflags +faststart "exports/video-youtube.mp4"

根据视频调整 -b:v 和 -g(帧率的一半);对于60 fps,使用 -b:v 12M -g 30。保持视频录制时的帧率(不要添加 -r)。

缩略图帧(lấy khung hình)

ffmpeg -n -ss 00:00:42 -i "raw/input.mp4" -frames:v 1 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -q:v 2 "exports/khung-0042.jpg" 在不同时间点提供3-4帧供用户选择。YouTube的缩略图规则(尺寸、16:9、JPG/PNG、文件大小)请参考 YouTube帮助72431。

如果出现问题

此技能使用Claude Code编写,因此可能存在错误,且每台电脑都不相同。当某一步骤失败,或用户表示技能执行有误时:

  1. 用越南语简单说明: 用一两句话解释失败原因。除非用户要求,否则不要显示原始堆栈跟踪。
  2. 重新阅读此技能和已运行的命令。 找出原因(下面列出了常见原因)。
  3. 修复并重新运行,在 exports/ 中写入新文件。修复过程中绝不触及或覆盖用户的原始文件。
  4. 如果原因出自此技能本身(命令错误或遗漏步骤),请说明,并建议报告以便为所有人修复:https://github.com/thegentleminh/thegentleminh-skills/issues

常见故障

  • 'ffmpeg' 不是内部或外部命令 / command not found:ffmpeg未安装或终端在安装前已打开;打开新终端并再次检查。
  • No such file or directory:检查路径和引号;列出文件夹以查找确切名称。
  • already exists. Exiting.:输出名称已被占用;选择新名称(绝不覆盖)。
  • Unknown encoder 'libx264':ffmpeg构建版本缺少该编码器;使用上述命令重新安装。
  • 剪辑后音画不同步:重新运行剪辑并启用重新编码(上面的命令已经启用了重新编码)。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

anh-thanh-video

Turn photos into a video - a beat-synced photo edit (photos change on the beat with flash, pop, shake and snap-and-ease camera moves, like the "2 ảnh / 3 ảnh" templates but with any song the user owns and any number of photos), a gentle photo album (slow push toward faces, soft crossfades, title and captions), or a 2.5D "3D zoom" where near things move more than far things. Faces stay in frame, Vietnamese text done right, 9:16 / 16:9 / 1:1 / 4:5. Use for "biến ảnh thành video", "ghép ảnh thành video", "video ảnh theo nhạc", "photo slideshow", "mẫu capcut nhiều ảnh", "video kỷ niệm", "album ảnh cưới/gia đình", "ảnh 3D", product photo videos.

tach-nguoi

Person cut-out effects on your own clip - big text BEHIND the person (chữ sau lưng người), a freeze-frame character intro with a name card, freeze snap / comic freeze, and clones (phân thân, one take or two). Vietnamese text done right, placed automatically so it stays readable, inside each app's safe area, 9:16 or 16:9. Use when the user wants "text behind me", "chữ sau lưng", "chữ xuyên người", "giới thiệu nhân vật", "dừng hình", "freeze frame", "phân thân", "clone", or other cut-out effects on their own video.

video-giai-thich

Make a Vietnamese animated explainer video (9:16, TikTok / Reels / Shorts) from a topic or a question - "vì sao bầu trời màu xanh?", "lãi kép là gì?" - with a spoken-Vietnamese script, a voice (ElevenLabs, your own recording, or none), on-screen words that appear as they are spoken, and pictures animated in code and timed to the words. Five looks (riso print, chalkboard, newsprint, blueprint, poster). Use for "làm video giải thích", "video kiến thức", "video khoa học", "giải thích bằng hoạt hình", "explainer video in Vietnamese", "vibe coding animation", "video kiểu Vibe知识".

相关技能