ffmpeg-video-processing

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

FFmpeg 视频处理技能 · 实用场景示例

FFmpeg 视频处理技能 · 实用场景示例

目标:提供最常用、最实用的 FFmpeg 视频处理命令,覆盖 90% 的日常需求。所有示例均经过验证,可直接复制使用。
目标:提供最常用、最实用的 FFmpeg 视频处理命令,覆盖 90% 的日常需求。所有示例均经过验证,可直接复制使用。

查看视频信息

查看视频信息

bash
undefined
bash
undefined

查看基本信息(推荐,日常用这个就够了)

查看基本信息(推荐,日常用这个就够了)

ffmpeg -i input.mp4
undefined
ffmpeg -i input.mp4
undefined

视频转码与压缩

视频转码与压缩

bash
undefined
bash
undefined

MKV/AVI/WebM/MOV 转 MP4(H.264 + AAC,所有设备都能播放)

MKV/AVI/WebM/MOV 转 MP4(H.264 + AAC,所有设备都能播放)

ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4

1080p 视频压缩(质量优先,适合邮件/微信发送)

1080p 视频压缩(质量优先,适合邮件/微信发送)

ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium output.mp4
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium output.mp4

720p 视频压缩(平衡大小和质量)

720p 视频压缩(平衡大小和质量)

ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 -crf 26 -preset medium output_720p.mp4
ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 -crf 26 -preset medium output_720p.mp4

H.265 编码,文件比 H.264 小 30-50%

H.265 编码,文件比 H.264 小 30-50%

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium output_h265.mp4
undefined
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium output_h265.mp4
undefined

视频裁剪与分割

视频裁剪与分割

bash
undefined
bash
undefined

从第 5 秒开始,截取 30 秒

从第 5 秒开始,截取 30 秒

ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:30 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:00:05 -t 00:00:30 -c copy output.mp4

从开始到第 2 分钟

从开始到第 2 分钟

ffmpeg -i input.mp4 -to 00:02:00 -c copy output.mp4
ffmpeg -i input.mp4 -to 00:02:00 -c copy output.mp4

从第 1 分 30 秒到结束

从第 1 分 30 秒到结束

ffmpeg -i input.mp4 -ss 00:01:30 -c copy output.mp4
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
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:40 -c:v libx264 -crf 18 -c:a aac output.mp4

将视频分割成多个 10 分钟的片段

将视频分割成多个 10 分钟的片段

ffmpeg -i input.mp4 -c copy -segment_time 00:10:00 -f segment -reset_timestamps 1 output_%03d.mp4
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
undefined
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
undefined

视频速度控制

视频速度控制

bash
undefined
bash
undefined

2倍速播放(音频同时变速)

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
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倍速播放(慢动作)

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]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
ffmpeg -i input.mp4 -filter_complex "[0:v]reverse[v];[0:a]areverse[a]" -map "[v]" -map "[a]" output_reversed.mp4

视频定格(提取某一帧,循环 3 秒,然后拼接)

视频定格(提取某一帧,循环 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
undefined
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
undefined

视频拼接与转场

视频拼接与转场

bash
undefined
bash
undefined

快速拼接(不重新编码,格式必须一致)

快速拼接(不重新编码,格式必须一致)

首先创建 filelist.txt:

首先创建 filelist.txt:

file 'video1.mp4'

file 'video1.mp4'

file 'video2.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 copy output.mp4

重新编码拼接(格式不同时使用)

重新编码拼接(格式不同时使用)

ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -crf 18 -c:a aac output.mp4
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -crf 18 -c:a aac output.mp4

淡入淡出转场(1秒转场时间)

淡入淡出转场(1秒转场时间)

ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "xfade=transition=fade:duration=1:offset=4" output_fade.mp4
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

其他转场效果: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
undefined
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "xfade=transition=wipeleft:duration=1:offset=4" output_wipe.mp4
undefined

音频处理

音频处理

bash
undefined
bash
undefined

提取为 MP3(高质量)

提取为 MP3(高质量)

ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3

提取为 WAV(无损,适合编辑)

提取为 WAV(无损,适合编辑)

ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output.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=2.0" output.mp4

音量减半

音量减半

ffmpeg -i input.mp4 -filter:a "volume=0.5" 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 -filter:a "loudnorm" output.mp4

完全移除音频轨道

完全移除音频轨道

ffmpeg -i input.mp4 -c:v copy -an output_no_audio.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
undefined
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
undefined

添加水印与元素

添加水印与元素

bash
undefined
bash
undefined

右下角添加图片水印

右下角添加图片水印

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=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 "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 -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 -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
undefined
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
undefined

视频特效与调色

视频特效与调色

bash
undefined
bash
undefined

黑白效果

黑白效果

ffmpeg -i input.mp4 -vf "format=gray" output_gray.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 "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 "boxblur=5:1" output_blur.mp4

锐化效果

锐化效果

ffmpeg -i input.mp4 -vf "unsharp=5:5:1.5" output_sharp.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 "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
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3:gamma=1.1" output_color.mp4

曲线调色(模拟 LUT 效果)

曲线调色(模拟 LUT 效果)

ffmpeg -i input.mp4 -vf "curves=preset=strong_contrast" output_curves.mp4
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

其他曲线预设:color_negative, cross_process, darker, increase_contrast, lighter, linear_contrast, medium_contrast, negative, strong_contrast, vintage

动态缩放聚焦(从 1.0 倍缩放到 2.0 倍)

动态缩放聚焦(从 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 "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 "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 "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
undefined
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
undefined

字幕处理

字幕处理

bash
undefined
bash
undefined

添加 SRT 字幕文件到视频(硬编码字幕,所有播放器都能显示)

添加 SRT 字幕文件到视频(硬编码字幕,所有播放器都能显示)

ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output_with_subs.mp4
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output_with_subs.mp4

添加 ASS 字幕文件(支持更丰富的样式)

添加 ASS 字幕文件(支持更丰富的样式)

ffmpeg -i input.mp4 -vf "ass=subtitle.ass" output_with_ass.mp4
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 -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 -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
undefined
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&Hffffff&'" output_styled_subs.mp4
undefined

画面变换

画面变换

bash
undefined
bash
undefined

4K 转 1080p

4K 转 1080p

ffmpeg -i input_4k.mp4 -vf "scale=1920:1080" output_1080p.mp4
ffmpeg -i input_4k.mp4 -vf "scale=1920:1080" output_1080p.mp4

1080p 转 720p

1080p 转 720p

ffmpeg -i input.mp4 -vf "scale=1280:720" output_720p.mp4
ffmpeg -i input.mp4 -vf "scale=1280:720" output_720p.mp4

固定宽度,高度按比例(宽度 1280)

固定宽度,高度按比例(宽度 1280)

ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4

固定高度,宽度按比例(高度 720)

固定高度,宽度按比例(高度 720)

ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4
ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4

改为 30 fps

改为 30 fps

ffmpeg -i input.mp4 -r 30 output.mp4
ffmpeg -i input.mp4 -r 30 output.mp4

改为 60 fps(插帧,更流畅)

改为 60 fps(插帧,更流畅)

ffmpeg -i input.mp4 -vf "minterpolate=fps=60" output_60fps.mp4
ffmpeg -i input.mp4 -vf "minterpolate=fps=60" output_60fps.mp4

顺时针旋转 90 度

顺时针旋转 90 度

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

逆时针旋转 90 度

逆时针旋转 90 度

ffmpeg -i input.mp4 -vf "transpose=2" output.mp4
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4

旋转 180 度

旋转 180 度

ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4
ffmpeg -i input.mp4 -vf "transpose=1,transpose=1" output.mp4

水平镜像翻转

水平镜像翻转

ffmpeg -i input.mp4 -vf "hflip" output.mp4
ffmpeg -i input.mp4 -vf "hflip" output.mp4

垂直镜像翻转

垂直镜像翻转

ffmpeg -i input.mp4 -vf "vflip" 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=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
undefined
ffmpeg -i input.mp4 -vf "fade=out:start_frame=100:nb_frames=30" output_fadeout.mp4
undefined

导出与生成

导出与生成

bash
undefined
bash
undefined

视频转 GIF(简单转换,适合小视频)

视频转 GIF(简单转换,适合小视频)

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -c:v gif output.gif
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -c:v gif output.gif

高质量 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 -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
ffmpeg -i input.mp4 -vframes 1 first_frame.jpg

提取最后一帧(推荐方法)

提取最后一帧(推荐方法)

-sseof -1 从结束前 1 秒开始,-update 1 不断更新最终只保留最后一帧

-sseof -1 从结束前 1 秒开始,-update 1 不断更新最终只保留最后一帧

ffmpeg -sseof -1 -i input.mp4 -update 1 -q:v 1 last_frame.jpg
ffmpeg -sseof -1 -i input.mp4 -update 1 -q:v 1 last_frame.jpg

从第 5 秒获取一帧作为缩略图

从第 5 秒获取一帧作为缩略图

ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg

生成 10 张缩略图(均匀分布)

生成 10 张缩略图(均匀分布)

ffmpeg -i input.mp4 -vf "select='not(mod(n,floor(N/10)))'" -vframes 10 thumbnail_%04d.jpg
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
ffmpeg -i input.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr keyframe_%04d.jpg

图片转视频(单张图片循环 10 秒)

图片转视频(单张图片循环 10 秒)

ffmpeg -loop 1 -i image.jpg -t 10 -c:v libx264 -pix_fmt yuv420p -r 30 output_image_to_video.mp4
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...)

多张图片序列转视频(image_001.jpg, image_002.jpg...)

ffmpeg -framerate 24 -i image_%03d.jpg -c:v libx264 -pix_fmt yuv420p output_sequence.mp4
ffmpeg -framerate 24 -i image_%03d.jpg -c:v libx264 -pix_fmt yuv420p output_sequence.mp4

图片淡入淡出效果(2秒淡入,2秒淡出)

图片淡入淡出效果(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
undefined
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
undefined

批量处理

批量处理

bash
undefined
bash
undefined

批量转换为 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 *.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" -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
undefined
for file in *.mp4; do ffmpeg -i "$file" -ss 00:00:05 -vframes 1 "${file%.mp4}_thumb.jpg" done
undefined

常见问题修复

常见问题修复

bash
undefined
bash
undefined

音视频不同步,重新排序时间戳

音视频不同步,重新排序时间戳

ffmpeg -i input.mp4 -c copy -fflags +genpts output.mp4
ffmpeg -i input.mp4 -c copy -fflags +genpts output.mp4

修复损坏的视频

修复损坏的视频

ffmpeg -i input.mp4 -c copy -avoid_negative_ts 1 output.mp4
undefined
ffmpeg -i input.mp4 -c copy -avoid_negative_ts 1 output.mp4
undefined

参数速查表

参数速查表

常用编码参数

常用编码参数

参数说明
-c:v libx264
H.264 视频编码(兼容性最好)
-c:v libx265
H.265/HEVC 视频编码(文件更小)
-c:a aac
AAC 音频编码
-crf 18-28
恒定质量因子(18=最好,28=较小)
-preset medium
编码速度预设
-c copy
直接复制流,不重新编码
参数说明
-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)'
提取关键帧
滤镜说明
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)'
提取关键帧