ffmpeg-patterns
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseFFmpeg Patterns
FFmpeg 常用处理方案
Best practices for video and audio processing with FFmpeg.
FFmpeg音视频处理的最佳实践。
Basic Operations
基础操作
Transcode Video
视频转码
bash
undefinedbash
undefinedConvert to MP4 (H.264 + AAC)
转换为MP4格式(H.264 + AAC编码)
ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23
-c:a aac -b:a 128k output.mp4
-c:a aac -b:a 128k output.mp4
ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23
-c:a aac -b:a 128k output.mp4
-c:a aac -b:a 128k output.mp4
Convert to WebM (VP9 + Opus)
转换为WebM格式(VP9 + Opus编码)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0
-c:a libopus -b:a 128k output.webm
-c:a libopus -b:a 128k output.webm
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0
-c:a libopus -b:a 128k output.webm
-c:a libopus -b:a 128k output.webm
Convert to HLS for streaming
转换为HLS流媒体格式
ffmpeg -i input.mp4 -codec: copy -start_number 0
-hls_time 10 -hls_list_size 0 -f hls output.m3u8
-hls_time 10 -hls_list_size 0 -f hls output.m3u8
undefinedffmpeg -i input.mp4 -codec: copy -start_number 0
-hls_time 10 -hls_list_size 0 -f hls output.m3u8
-hls_time 10 -hls_list_size 0 -f hls output.m3u8
undefinedExtract Audio
提取音频
bash
undefinedbash
undefinedExtract audio to MP3
提取音频为MP3格式
ffmpeg -i video.mp4 -vn -acodec mp3 -ab 192k audio.mp3
ffmpeg -i video.mp4 -vn -acodec mp3 -ab 192k audio.mp3
Extract audio to WAV (uncompressed)
提取音频为WAV格式(无压缩)
ffmpeg -i video.mp4 -vn -acodec pcm_s16le audio.wav
ffmpeg -i video.mp4 -vn -acodec pcm_s16le audio.wav
Extract audio from specific time range
从指定时间段提取音频
ffmpeg -i video.mp4 -ss 00:01:00 -t 00:00:30 -vn audio.mp3
undefinedffmpeg -i video.mp4 -ss 00:01:00 -t 00:00:30 -vn audio.mp3
undefinedTrim and Cut
剪辑与裁剪
bash
undefinedbash
undefinedCut from timestamp to duration
从指定时间点开始裁剪指定时长
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:02:00 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:02:00 -c copy output.mp4
Cut from start to end timestamp
从起始时间点裁剪到结束时间点
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:30 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:30 -c copy output.mp4
Fast seek (put -ss before -i for large files)
快速定位(处理大文件时将-ss放在-i前)
ffmpeg -ss 00:10:00 -i large_video.mp4 -t 00:05:00 -c copy clip.mp4
undefinedffmpeg -ss 00:10:00 -i large_video.mp4 -t 00:05:00 -c copy clip.mp4
undefinedVideo Filters
视频滤镜
Resize and Scale
尺寸调整
bash
undefinedbash
undefinedScale to specific dimensions
缩放至指定分辨率
ffmpeg -i input.mp4 -vf "scale=1920:1080" output.mp4
ffmpeg -i input.mp4 -vf "scale=1920:1080" output.mp4
Scale preserving aspect ratio (fit within)
按原比例缩放(适配目标尺寸)
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease" output.mp4
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease" output.mp4
Scale with padding (letterbox/pillarbox)
缩放后添加黑边( letterbox/pillarbox 模式)
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
Scale to 50%
缩放至原尺寸的50%
ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4
undefinedffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4
undefinedSpeed Adjustment
速度调节
bash
undefinedbash
undefinedSpeed up video 2x (with audio pitch correction)
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.mp4
-map "[v]" -map "[a]" output.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.mp4
-map "[v]" -map "[a]" output.mp4
Slow down video 0.5x
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.mp4
-map "[v]" -map "[a]" output.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.mp4
-map "[v]" -map "[a]" output.mp4
Extreme slow motion (0.25x) - chain atempo filters
极慢动作(0.25倍速)- 串联atempo滤镜
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=4.0*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]"
-map "[v]" -map "[a]" output.mp4
-map "[v]" -map "[a]" output.mp4
undefinedffmpeg -i input.mp4 -filter_complex "[0:v]setpts=4.0*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]"
-map "[v]" -map "[a]" output.mp4
-map "[v]" -map "[a]" output.mp4
undefinedCrop and Overlay
裁剪与叠加
bash
undefinedbash
undefinedCrop video (width:height:x:y)
裁剪视频(参数:宽度:高度:起始X坐标:起始Y坐标)
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" output.mp4
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" output.mp4
Crop center to 16:9
裁剪中心区域为16:9比例
ffmpeg -i input.mp4 -vf "crop=ih*16/9:ih" output.mp4
ffmpeg -i input.mp4 -vf "crop=ih*16/9:ih" output.mp4
Add watermark
添加水印
ffmpeg -i video.mp4 -i watermark.png
-filter_complex "overlay=W-w-10:H-h-10" output.mp4
-filter_complex "overlay=W-w-10:H-h-10" output.mp4
ffmpeg -i video.mp4 -i watermark.png
-filter_complex "overlay=W-w-10:H-h-10" output.mp4
-filter_complex "overlay=W-w-10:H-h-10" output.mp4
Add text overlay
添加文字叠加层
ffmpeg -i input.mp4 -vf "drawtext=text='Hello World':fontsize=24:fontcolor=white:x=10:y=10" output.mp4
undefinedffmpeg -i input.mp4 -vf "drawtext=text='Hello World':fontsize=24:fontcolor=white:x=10:y=10" output.mp4
undefinedColor and Effects
色彩与特效
bash
undefinedbash
undefinedAdjust brightness, contrast, saturation
调整亮度、对比度、饱和度
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3" output.mp4
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.3" output.mp4
Convert to grayscale
转换为灰度视频
ffmpeg -i input.mp4 -vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3" output.mp4
ffmpeg -i input.mp4 -vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3" output.mp4
Add fade in/out
添加淡入淡出效果
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=2,fade=t=out:st=8:d=2" output.mp4
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=2,fade=t=out:st=8:d=2" output.mp4
Blur video
添加模糊效果
ffmpeg -i input.mp4 -vf "boxblur=5:1" output.mp4
undefinedffmpeg -i input.mp4 -vf "boxblur=5:1" output.mp4
undefinedAudio Processing
音频处理
Volume and Normalization
音量与标准化
bash
undefinedbash
undefinedAdjust volume
调整音量
ffmpeg -i input.mp4 -af "volume=1.5" output.mp4
ffmpeg -i input.mp4 -af "volume=1.5" output.mp4
Normalize audio (loudnorm)
音频标准化(loudnorm滤镜)
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" output.mp4
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" output.mp4
Detect silence
检测静音片段
ffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.5" -f null -
undefinedffmpeg -i input.mp4 -af "silencedetect=noise=-30dB:d=0.5" -f null -
undefinedAudio Filters
音频滤镜
bash
undefinedbash
undefinedRemove background noise
去除背景噪音
ffmpeg -i input.mp4 -af "afftdn=nf=-25" output.mp4
ffmpeg -i input.mp4 -af "afftdn=nf=-25" output.mp4
Add echo
添加回声效果
ffmpeg -i input.mp4 -af "aecho=0.8:0.88:60:0.4" output.mp4
ffmpeg -i input.mp4 -af "aecho=0.8:0.88:60:0.4" output.mp4
High-pass filter (remove low frequencies)
高通滤波(移除低频)
ffmpeg -i input.mp4 -af "highpass=f=200" output.mp4
ffmpeg -i input.mp4 -af "highpass=f=200" output.mp4
Low-pass filter (remove high frequencies)
低通滤波(移除高频)
ffmpeg -i input.mp4 -af "lowpass=f=3000" output.mp4
undefinedffmpeg -i input.mp4 -af "lowpass=f=3000" output.mp4
undefinedCombining Media
媒体合并
Concatenate Videos
视频拼接
bash
undefinedbash
undefinedCreate file list
创建文件列表
cat > files.txt << EOF
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
EOF
cat > files.txt << EOF
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
EOF
Concatenate (same codec)
拼接视频(编码格式相同)
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
Concatenate (different codecs - re-encode)
拼接视频(编码格式不同 - 需重新编码)
ffmpeg -f concat -safe 0 -i files.txt -c:v libx264 -c:a aac output.mp4
undefinedffmpeg -f concat -safe 0 -i files.txt -c:v libx264 -c:a aac output.mp4
undefinedMerge Audio and Video
音视频合并
bash
undefinedbash
undefinedReplace audio track
替换视频音轨
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
Mix audio tracks
混合音轨
ffmpeg -i video.mp4 -i background.mp3
-filter_complex "[0:a][1:a]amerge=inputs=2[a]"
-map 0:v -map "[a]" -c:v copy -ac 2 output.mp4
-filter_complex "[0:a][1:a]amerge=inputs=2[a]"
-map 0:v -map "[a]" -c:v copy -ac 2 output.mp4
ffmpeg -i video.mp4 -i background.mp3
-filter_complex "[0:a][1:a]amerge=inputs=2[a]"
-map 0:v -map "[a]" -c:v copy -ac 2 output.mp4
-filter_complex "[0:a][1:a]amerge=inputs=2[a]"
-map 0:v -map "[a]" -c:v copy -ac 2 output.mp4
Add audio to silent video
为无声视频添加音频
ffmpeg -i silent_video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
undefinedffmpeg -i silent_video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
undefinedPicture-in-Picture
画中画效果
bash
undefinedbash
undefinedOverlay smaller video
叠加小尺寸视频
ffmpeg -i main.mp4 -i overlay.mp4
-filter_complex "[1:v]scale=320:-1[pip];[0:v][pip]overlay=W-w-10:H-h-10"
output.mp4
-filter_complex "[1:v]scale=320:-1[pip];[0:v][pip]overlay=W-w-10:H-h-10"
output.mp4
ffmpeg -i main.mp4 -i overlay.mp4
-filter_complex "[1:v]scale=320:-1[pip];[0:v][pip]overlay=W-w-10:H-h-10"
output.mp4
-filter_complex "[1:v]scale=320:-1[pip];[0:v][pip]overlay=W-w-10:H-h-10"
output.mp4
Side by side
左右分屏显示
ffmpeg -i left.mp4 -i right.mp4
-filter_complex "[0:v]scale=640:-1[l];[1:v]scale=640:-1[r];[l][r]hstack"
output.mp4
-filter_complex "[0:v]scale=640:-1[l];[1:v]scale=640:-1[r];[l][r]hstack"
output.mp4
undefinedffmpeg -i left.mp4 -i right.mp4
-filter_complex "[0:v]scale=640:-1[l];[1:v]scale=640:-1[r];[l][r]hstack"
output.mp4
-filter_complex "[0:v]scale=640:-1[l];[1:v]scale=640:-1[r];[l][r]hstack"
output.mp4
undefinedThumbnails and Screenshots
缩略图与截图
bash
undefinedbash
undefinedSingle screenshot at timestamp
在指定时间点截取单张截图
ffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 thumbnail.jpg
ffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 thumbnail.jpg
Generate thumbnails every N seconds
每N秒生成一张缩略图
ffmpeg -i video.mp4 -vf "fps=1/10" thumbnails_%03d.jpg
ffmpeg -i video.mp4 -vf "fps=1/10" thumbnails_%03d.jpg
Generate thumbnail sheet/sprite
生成缩略图拼贴/雪碧图
ffmpeg -i video.mp4 -vf "fps=1/5,scale=160:-1,tile=5x5" sprite.jpg
ffmpeg -i video.mp4 -vf "fps=1/5,scale=160:-1,tile=5x5" sprite.jpg
Best quality thumbnail
生成高质量缩略图
ffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 -q:v 2 thumbnail.jpg
undefinedffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 -q:v 2 thumbnail.jpg
undefinedStreaming Formats
流媒体格式
HLS (HTTP Live Streaming)
HLS(HTTP直播流)
bash
undefinedbash
undefinedBasic HLS
基础HLS流
ffmpeg -i input.mp4 -c:v libx264 -c:a aac
-hls_time 10 -hls_playlist_type vod
-hls_segment_filename "segment_%03d.ts"
playlist.m3u8
-hls_time 10 -hls_playlist_type vod
-hls_segment_filename "segment_%03d.ts"
playlist.m3u8
ffmpeg -i input.mp4 -c:v libx264 -c:a aac
-hls_time 10 -hls_playlist_type vod
-hls_segment_filename "segment_%03d.ts"
playlist.m3u8
-hls_time 10 -hls_playlist_type vod
-hls_segment_filename "segment_%03d.ts"
playlist.m3u8
Multi-bitrate HLS
多码率HLS流
ffmpeg -i input.mp4
-filter_complex "[0:v]split=3[v1][v2][v3];
[v1]scale=1920:1080[v1out];
[v2]scale=1280:720[v2out];
[v3]scale=854:480[v3out]"
-map "[v1out]" -map 0:a -c:v libx264 -b:v 5M -c:a aac -b:a 192k
-hls_time 10 -hls_playlist_type vod 1080p.m3u8
-map "[v2out]" -map 0:a -c:v libx264 -b:v 2M -c:a aac -b:a 128k
-hls_time 10 -hls_playlist_type vod 720p.m3u8
-map "[v3out]" -map 0:a -c:v libx264 -b:v 1M -c:a aac -b:a 96k
-hls_time 10 -hls_playlist_type vod 480p.m3u8
-filter_complex "[0:v]split=3[v1][v2][v3];
[v1]scale=1920:1080[v1out];
[v2]scale=1280:720[v2out];
[v3]scale=854:480[v3out]"
-map "[v1out]" -map 0:a -c:v libx264 -b:v 5M -c:a aac -b:a 192k
-hls_time 10 -hls_playlist_type vod 1080p.m3u8
-map "[v2out]" -map 0:a -c:v libx264 -b:v 2M -c:a aac -b:a 128k
-hls_time 10 -hls_playlist_type vod 720p.m3u8
-map "[v3out]" -map 0:a -c:v libx264 -b:v 1M -c:a aac -b:a 96k
-hls_time 10 -hls_playlist_type vod 480p.m3u8
undefinedffmpeg -i input.mp4
-filter_complex "[0:v]split=3[v1][v2][v3];
[v1]scale=1920:1080[v1out];
[v2]scale=1280:720[v2out];
[v3]scale=854:480[v3out]"
-map "[v1out]" -map 0:a -c:v libx264 -b:v 5M -c:a aac -b:a 192k
-hls_time 10 -hls_playlist_type vod 1080p.m3u8
-map "[v2out]" -map 0:a -c:v libx264 -b:v 2M -c:a aac -b:a 128k
-hls_time 10 -hls_playlist_type vod 720p.m3u8
-map "[v3out]" -map 0:a -c:v libx264 -b:v 1M -c:a aac -b:a 96k
-hls_time 10 -hls_playlist_type vod 480p.m3u8
-filter_complex "[0:v]split=3[v1][v2][v3];
[v1]scale=1920:1080[v1out];
[v2]scale=1280:720[v2out];
[v3]scale=854:480[v3out]"
-map "[v1out]" -map 0:a -c:v libx264 -b:v 5M -c:a aac -b:a 192k
-hls_time 10 -hls_playlist_type vod 1080p.m3u8
-map "[v2out]" -map 0:a -c:v libx264 -b:v 2M -c:a aac -b:a 128k
-hls_time 10 -hls_playlist_type vod 720p.m3u8
-map "[v3out]" -map 0:a -c:v libx264 -b:v 1M -c:a aac -b:a 96k
-hls_time 10 -hls_playlist_type vod 480p.m3u8
undefinedDASH (Dynamic Adaptive Streaming)
DASH(动态自适应流)
bash
ffmpeg -i input.mp4 -c:v libx264 -c:a aac \
-f dash -seg_duration 10 \
-use_template 1 -use_timeline 1 \
manifest.mpdbash
ffmpeg -i input.mp4 -c:v libx264 -c:a aac \
-f dash -seg_duration 10 \
-use_template 1 -use_timeline 1 \
manifest.mpdBatch Processing
批量处理
bash
undefinedbash
undefinedConvert all MP4s to WebM
将所有MP4文件转换为WebM格式
for f in *.mp4; do
ffmpeg -i "$f" -c:v libvpx-vp9 -crf 30 -c:a libopus "${f%.mp4}.webm"
done
for f in *.mp4; do
ffmpeg -i "$f" -c:v libvpx-vp9 -crf 30 -c:a libopus "${f%.mp4}.webm"
done
Resize all images in directory
调整目录中所有图片尺寸
for f in *.jpg; do
ffmpeg -i "$f" -vf "scale=1280:-1" "resized_$f"
done
for f in *.jpg; do
ffmpeg -i "$f" -vf "scale=1280:-1" "resized_$f"
done
Extract audio from multiple videos
从多个视频中提取音频
for f in *.mp4; do
ffmpeg -i "$f" -vn -c:a mp3 -b:a 192k "${f%.mp4}.mp3"
done
undefinedfor f in *.mp4; do
ffmpeg -i "$f" -vn -c:a mp3 -b:a 192k "${f%.mp4}.mp3"
done
undefinedHardware Acceleration
硬件加速
bash
undefinedbash
undefinedNVIDIA NVENC (encoding)
NVIDIA NVENC(编码加速)
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast output.mp4
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast output.mp4
NVIDIA NVDEC (decoding) + NVENC
NVIDIA NVDEC(解码加速) + NVENC(编码加速)
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
macOS VideoToolbox
macOS VideoToolbox加速
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5M output.mp4
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5M output.mp4
Intel QuickSync
Intel QuickSync加速
ffmpeg -i input.mp4 -c:v h264_qsv output.mp4
undefinedffmpeg -i input.mp4 -c:v h264_qsv output.mp4
undefinedUseful Probing Commands
实用探测命令
bash
undefinedbash
undefinedGet video info
获取视频信息
ffprobe -v quiet -print_format json -show_format -show_streams video.mp4
ffprobe -v quiet -print_format json -show_format -show_streams video.mp4
Get duration
获取视频时长
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
Get resolution
获取视频分辨率
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 video.mp4
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 video.mp4
Get codec
获取视频编码格式
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 video.mp4
undefinedffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 video.mp4
undefined