Loading...
Loading...
基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例
npx skill4agent add chunpu/ffmpeg-skills ffmpeg-video-processing目标:提供最常用、最实用的 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| 参数 | 说明 |
|---|---|
| H.264 视频编码(兼容性最好) |
| H.265/HEVC 视频编码(文件更小) |
| AAC 音频编码 |
| 恒定质量因子(18=最好,28=较小) |
| 编码速度预设 |
| 直接复制流,不重新编码 |
| 滤镜 | 说明 |
|---|---|
| 调整分辨率 |
| 裁剪画面 |
| 旋转视频 |
| 水平/垂直翻转 |
| 添加文字 |
| 叠加图片/视频 |
| 视频变速 |
| 音频变速 |
| 视频倒放 |
| 音频倒放 |
| 添加字幕 |
| 调色 |
| 曲线调色 |
| 模糊效果 |
| 锐化效果 |
| 黑白效果 |
| 淡入淡出 |
| 转场效果 |
| 缩放聚焦 |
| 画面稳定 |
| 提取关键帧 |