Skip to main content

ffmpeg-video-processing

基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例

Ir para a instalação

Informações da origem

Repositório
bolecodex/changdu-skills
Última atividade na origem
10 de abril de 2026 às 00:37
Idioma detectado do SKILL.md
chinês
Estrelas
6
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
ffmpeg-video-processing
description
基于 FFmpeg 的视频处理技能,提供最实用的日常视频处理命令示例
license
MIT
user-invocable
true
tags
["ffmpeg","video","processing","conversion","compression"]
# FFmpeg 视频处理技能 · 实用场景示例 > 目标:提供最常用、最实用的 FFmpeg 视频处理命令,覆盖 90% 的日常需求。所有示例均经过验证,可直接复制使用。 ## 查看视频信息 ```bash # 查看基本信息(推荐,日常用这个就够了) ffmpeg -i input.mp4 ``` ## 视频转码与压缩 ```bash # 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 ``` ## 视频裁剪与分割 ```bash # 从第 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 ``` ## 视频速度控制 ```bash # 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 ``` ## 视频拼接与转场 ```bash # 快速拼接(不重新编码,格式必须一致) # 首先创建 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 ``` ## 音频处理 ```bash # 提取为 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 ``` ## 添加水印与元素 ```bash # 右下角添加图片水印 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 ``` ## 视频特效与调色 ```bash # 黑白效果 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 ``` ## 字幕处理 ```bash # 添加 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 ``` ## 画面变换 ```bash # 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 ``` ## 导出与生成 ```bash # 视频转 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 ``` ## 批量处理 ```bash # 批量转换为 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 ``` ## 常见问题修复 ```bash # 音视频不同步,重新排序时间戳 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)'` | 提取关键帧 |
Ver no GitHub