ffmpeg-video-processing
基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | ffmpeg-video-processing |
| description | 基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例 |
| license | MIT |
| user-invocable | true |
| tags | ["ffmpeg","video","processing","conversion","compression"] |
目标:提供最常用、最实用的 FFmpeg 视频处理命令,覆盖 90% 的日常需求。所有示例均经过验证,可直接复制使用。
# 查看基本信息(推荐,日常用这个就够了)
ffmpeg -i input.mp4
# MKV/AVI/WebM/MOV 转 MP4(H.264 + AAC,所有设备都能播放)
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4
# 1080p 视频压缩(质量优先,适合邮件/微信发送)
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium output.mp4
# 720p 视频压缩(平衡大小和质量)
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 -crf 26 -preset medium output_720p.mp4
# H.265 编码,文件比 H.264 小 30-50%
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium output_h265.mp4
# 从第 5 秒开始,截取 30 秒
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:30 -c copy output.mp4
# 从开始到第 2 分钟
ffmpeg -i input.mp4 -to 00:02:00 -c copy output.mp4
# 从第 1 分 30 秒到结束
ffmpeg -i input.mp4 -ss 00:01:30 -c copy output.mp4
# 精确裁剪(重新编码,更准确)
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:40 -c:v libx264 -crf 18 -c:a aac output.mp4
# 将视频分割成多个 10 分钟的片段
ffmpeg -i input.mp4 -c copy -segment_time 00:10:00 -f segment -reset_timestamps 1 output_%03d.mp4
# 按场景变化自动分割视频
ffmpeg -i input.mp4 -filter:v "select='gt(scene,0.4)',showinfo" -f null /dev/null 2>&1 | grep "pts_time:" | cut -d':' -f4 > scenes.txt
# 2倍速播放(音频同时变速)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output_2x.mp4
# 0.5倍速播放(慢动作)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output_0.5x.mp4
# 视频和音频都倒放
ffmpeg -i input.mp4 -filter_complex "[0:v]reverse[v];[0:a]areverse[a]" -map "[v]" -map "[a]" output_reversed.mp4
# 视频定格(提取某一帧,循环 3 秒,然后拼接)
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 freeze_frame.jpg
ffmpeg -loop 1 -i freeze_frame.jpg -t 3 -c:v libx264 -pix_fmt yuv420p freeze_part.mp4
ffmpeg -i input.mp4 -to 00:00:10 -c copy before.mp4
ffmpeg -i input.mp4 -ss 00:00:10 -c copy after.mp4
echo "file 'before.mp4'" > list.txt
echo "file 'freeze_part.mp4'" >> list.txt
echo "file 'after.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output_freeze.mp4
# 快速拼接(不重新编码,格式必须一致)
# 首先创建 filelist.txt:
# file 'video1.mp4'
# file 'video2.mp4'
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
# 重新编码拼接(格式不同时使用)
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -crf 18 -c:a aac output.mp4
# 淡入淡出转场(1秒转场时间)
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "xfade=transition=fade:duration=1:offset=4" output_fade.mp4
# 其他转场效果:wipeleft, wiperight, wipeup, wipedown, slideleft, slideright, circlecrop, rectcrop, dissolve
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "xfade=transition=wipeleft:duration=1:offset=4" output_wipe.mp4
# 提取为 MP3(高质量)
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
# 提取为 WAV(无损,适合编辑)
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output.wav
# 音量加倍
ffmpeg -i input.mp4 -filter:a "volume=2.0" output.mp4
# 音量减半
ffmpeg -i input.mp4 -filter:a "volume=0.5" output.mp4
# 自动归一化音量(让声音大小一致)
ffmpeg -i input.mp4 -filter:a "loudnorm" output.mp4
# 完全移除音频轨道
ffmpeg -i input.mp4 -c:v copy -an output_no_audio.mp4
# 用新音频替换原视频的音频
ffmpeg -i input.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 -shortest output.mp4
# 右下角添加图片水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
# 左上角添加图片水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
# 半透明水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[wm];[0:v][wm]overlay=W-w-10:H-h-10" output.mp4
# 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Your Name':x=10:y=10:fontsize=24:fontcolor=white" output.mp4
# 动态移动的图片(从左到右移动)
ffmpeg -i input.mp4 -i moving.png -filter_complex "[1:v]format=rgba[wm];[0:v][wm]overlay=x='if(gte(t,2),-w+(t-2)*200,NAN)':y=100" output_moving_element.mp4
# 黑白效果
ffmpeg -i input.mp4 -vf "format=gray" output_gray.mp4
# 复古/旧电影效果
ffmpeg -i input.mp4 -vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3,eq=gamma=0.8:contrast=1.2" output_vintage.mp4
# 模糊效果
ffmpeg -i input.mp4 -vf "boxblur=5:1" output_blur.mp4
# 锐化效果
ffmpeg -i input.mp4 -vf "unsharp=5:5:1.5" output_sharp.mp4
# 浮雕效果
ffmpeg -i input.mp4 -vf "convolution='-2 -1 0:-1 1 1:0 1 2'" output_emboss.mp4
# 高级调色(亮度、对比度、饱和度、伽马值)
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3:gamma=1.1" output_color.mp4
# 曲线调色(模拟 LUT 效果)
ffmpeg -i input.mp4 -vf "curves=preset=strong_contrast" output_curves.mp4
# 其他曲线预设:color_negative, cross_process, darker, increase_contrast, lighter, linear_contrast, medium_contrast, negative, strong_contrast, vintage
# 动态缩放聚焦(从 1.0 倍缩放到 2.0 倍)
ffmpeg -i input.mp4 -vf "zoompan=z='min(zoom+0.01,2)':d=125" output_zoom.mp4
# 画面稳定(视频防抖)
ffmpeg -i input.mp4 -vf "vidstabdetect=shakiness=10:accuracy=15:result=transforms.trf" -f null /dev/null
ffmpeg -i input.mp4 -vf "vidstabtransform=input=transforms.trf:smoothing=30:optzoom=2" output_stabilized.mp4
# 隐私马赛克(人脸或指定区域打码)
ffmpeg -i input.mp4 -vf "drawbox=x=100:y=100:w=200:h=200:color=black:t=fill" output_box.mp4
# 像素化马赛克效果
ffmpeg -i input.mp4 -vf "crop=200:200:100:100,scale=10:10,scale=200:200:flags=neighbor[mask];[in][mask]overlay=100:100" output_pixelate.mp4
# 添加 SRT 字幕文件到视频(硬编码字幕,所有播放器都能显示)
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output_with_subs.mp4
# 添加 ASS 字幕文件(支持更丰富的样式)
ffmpeg -i input.mp4 -vf "ass=subtitle.ass" output_with_ass.mp4
# 从视频中提取字幕流
ffmpeg -i input.mp4 -map 0:s:0 -c:s copy subtitle.srt
# 内嵌字幕到视频(软字幕,可开关)
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output_with_softsubs.mp4
# 调整字幕样式(字体、大小、颜色)
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&Hffffff&'" output_styled_subs.mp4
# 4K 转 1080p
ffmpeg -i input_4k.mp4 -vf "scale=1920:1080" output_1080p.mp4
# 1080p 转 720p
ffmpeg -i input.mp4 -vf "scale=1280:720" output_720p.mp4
# 固定宽度,高度按比例(宽度 1280)
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4
# 固定高度,宽度按比例(高度 720)
ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4
# 改为 30 fps
ffmpeg -i input.mp4 -r 30 output.mp4
# 改为 60 fps(插帧,更流畅)
ffmpeg -i input.mp4 -vf "minterpolate=fps=60" output_60fps.mp4
# 顺时针旋转 90 度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 逆时针旋转 90 度
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4
# 旋转 180 度
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4
# 水平镜像翻转
ffmpeg -i input.mp4 -vf "hflip" output.mp4
# 垂直镜像翻转
ffmpeg -i input.mp4 -vf "vflip" output.mp4
# 淡入效果
ffmpeg -i input.mp4 -vf "fade=in:start_frame=0:nb_frames=30" output_fadein.mp4
# 淡出效果
ffmpeg -i input.mp4 -vf "fade=out:start_frame=100:nb_frames=30" output_fadeout.mp4
# 视频转 GIF(简单转换,适合小视频)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -c:v gif output.gif
# 高质量 GIF 转换(两步法,推荐)
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
# 提取第一帧
ffmpeg -i input.mp4 -vframes 1 first_frame.jpg
# 提取最后一帧(推荐方法)
# -sseof -1 从结束前 1 秒开始,-update 1 不断更新最终只保留最后一帧
ffmpeg -sseof -1 -i input.mp4 -update 1 -q:v 1 last_frame.jpg
# 从第 5 秒获取一帧作为缩略图
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg
# 生成 10 张缩略图(均匀分布)
ffmpeg -i input.mp4 -vf "select='not(mod(n\,floor(N/10)))'" -vframes 10 thumbnail_%04d.jpg
# 提取所有关键帧
ffmpeg -i input.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr keyframe_%04d.jpg
# 图片转视频(单张图片循环 10 秒)
ffmpeg -loop 1 -i image.jpg -t 10 -c:v libx264 -pix_fmt yuv420p -r 30 output_image_to_video.mp4
# 多张图片序列转视频(image_001.jpg, image_002.jpg...)
ffmpeg -framerate 24 -i image_%03d.jpg -c:v libx264 -pix_fmt yuv420p output_sequence.mp4
# 图片淡入淡出效果(2秒淡入,2秒淡出)
ffmpeg -loop 1 -i image.jpg -t 10 -vf "fade=in:0:60,fade=out:240:60" -c:v libx264 -pix_fmt yuv420p output_fade_image.mp4
# 批量转换为 MP4
for file in *.mkv *.avi *.webm *.mov; do
if [ -f "$file" ]; then
ffmpeg -i "$file" -c:v libx264 -c:a aac "${file%.*}.mp4"
fi
done
# 批量压缩
for file in *.mp4; do
ffmpeg -i "$file" -c:v libx264 -crf 28 -preset medium "compressed_$file"
done
# 批量生成缩略图
for file in *.mp4; do
ffmpeg -i "$file" -ss 00:00:05 -vframes 1 "${file%.mp4}_thumb.jpg"
done
# 音视频不同步,重新排序时间戳
ffmpeg -i input.mp4 -c copy -fflags +genpts output.mp4
# 修复损坏的视频
ffmpeg -i input.mp4 -c copy -avoid_negative_ts 1 output.mp4
| 参数 | 说明 |
|---|---|
-c:v libx264 | H.264 视频编码(兼容性最好) |
-c:v libx265 | H.265/HEVC 视频编码(文件更小) |
-c:a aac | AAC 音频编码 |
-crf 18-28 | 恒定质量因子(18=最好,28=较小) |
-preset medium | 编码速度预设 |
-c copy | 直接复制流,不重新编码 |
| 滤镜 | 说明 |
|---|---|
scale=w:h | 调整分辨率 |
crop=w:h:x:y | 裁剪画面 |
transpose=1/2 | 旋转视频 |
hflip/vflip | 水平/垂直翻转 |
drawtext | 添加文字 |
overlay | 叠加图片/视频 |
setpts=0.5*PTS | 视频变速 |
atempo=2.0 | 音频变速 |
reverse | 视频倒放 |
areverse | 音频倒放 |
subtitles=file.srt | 添加字幕 |
eq=brightness=x:contrast=y | 调色 |
curves=preset=xxx | 曲线调色 |
boxblur=5:1 | 模糊效果 |
unsharp=5:5:1.5 | 锐化效果 |
format=gray | 黑白效果 |
fade=in/out | 淡入淡出 |
xfade=transition=xxx | 转场效果 |
zoompan | 缩放聚焦 |
vidstabdetect/transform | 画面稳定 |
select='eq(pict_type,PICT_TYPE_I)' | 提取关键帧 |
多段视频拼接的后期工艺指南——audio-fadein(消除 Seedance 启动底噪)、crossfade(视频/音频淡变)、loudnorm(音量归一化)。当用户拼完多个 clip 但效果不连贯(音量跳、画面跳、底噪嗡嗡声)时调用,对应 changdu clip-concat 命令。
动漫武打短剧(≤30s)专项 prompt 写作与生成工作流。当需要做日漫/国漫风格的短打戏、追逐戏、对决戏,且要求段间动作与镜头无缝衔接时调用。配套使用 changdu sequential-generate(continuity-mode auto)+ clip-concat(--audio-fadein 消除底噪,crossfade + loudnorm 可选)。
生成服务于叙事与角色内核的角色设计图,16:9横版三视图模式。反模板反套路,让角色有记忆点和辨识度。
Intelligent long text novel reader with smart content filtering and detailed asset extraction. Invoke when user wants to read or analyze long novels. Automatically skips irrelevant content and extracts detailed character/item/scene information.
文学作品到影视视频的自然语言工作流;生成链路统一使用 changdu CLI。支持漫剧和真人剧两种模式。
将文字分镜逐条强化为 Seedance 2.0 视频提示词。已完成文字分镜且需要落地为可执行视频提示词时调用。