基础视频编辑(使用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,除字幕外的所有功能仍可正常工作。
规则(始终遵守)
- 绝不更改或删除用户的原始文件。 从
raw/(或用户文件的所在位置)读取;将每个结果写入exports/,并使用新名称(例如exports/clip-cat.mp4)。绝不覆盖现有文件:在ffmpeg中添加-n,或选择新名称。 - 安装任何东西前先征询用户同意。 说明它是什么、为什么需要它以及确切的命令,然后等待用户确认。
- 运行命令前先展示该命令,并用一句话说明其作用。对于任何需要超过一分钟的操作(长视频、字幕),请事先说明。
- 编辑文件前先用
ffprobe检查文件(大小、帧率、时长、音频),以便命令适合该文件。 - 使用引号括住文件路径(它们通常包含空格和越南语字母)。在Windows上,ffmpeg滤镜路径中优先使用正斜杠。
- 每次编辑后,告知用户新文件的位置以及需要检查什么(播放它,听开头和结尾)。
- 不要声称你无法引用的YouTube规则。当此技能引用YouTube时,会提供来源链接。
1. 检查电脑
逐一运行以下命令:
ffmpeg -version和ffprobe -versionpython --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)
- 使用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个剪辑调整为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文档):
- 测量:
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。 - 使用这些数值应用:
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编写,因此可能存在错误,且每台电脑都不相同。当某一步骤失败,或用户表示技能执行有误时:
- 用越南语简单说明: 用一两句话解释失败原因。除非用户要求,否则不要显示原始堆栈跟踪。
- 重新阅读此技能和已运行的命令。 找出原因(下面列出了常见原因)。
- 修复并重新运行,在
exports/中写入新文件。修复过程中绝不触及或覆盖用户的原始文件。 - 如果原因出自此技能本身(命令错误或遗漏步骤),请说明,并建议报告以便为所有人修复:https://github.com/thegentleminh/thegentleminh-skills/issues
常见故障
'ffmpeg' 不是内部或外部命令/command not found:ffmpeg未安装或终端在安装前已打开;打开新终端并再次检查。No such file or directory:检查路径和引号;列出文件夹以查找确切名称。already exists. Exiting.:输出名称已被占用;选择新名称(绝不覆盖)。Unknown encoder 'libx264':ffmpeg构建版本缺少该编码器;使用上述命令重新安装。- 剪辑后音画不同步:重新运行剪辑并启用重新编码(上面的命令已经启用了重新编码)。