名称: ffmpeg-master
版本: 1.0.0
描述: 适用于使用 FFmpeg 进行视频/音频处理任务,包括转码、过滤、流处理、元数据操作或复杂滤镜图操作。
触发器:
- ffmpeg
- ffprobe
- video processing
- audio conversion
- codec
- transcoding
- filter_complex
- h264
- h265
- mp4
- mkv
- hardware acceleration
role: specialist
scope: implementation
output-format: shell-command
使用 FFmpeg 和 FFprobe 进行专业音视频处理的综合指南。
FFmpeg 是领先的多媒体框架,能够解码、编码、转码、复用、解复用、流式传输、过滤和播放几乎所有人类和机器创建的内容。它是一个命令行工具,通过解复用器、解码器、过滤器、编码器和复用器组成的复杂管道来处理流。
# 基础转码 (MP4 转 MKV)
ffmpeg -i input.mp4 output.mkv
# 更改视频编码器 (转为 H.265/HEVC)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a copy output.mp4
# 提取音频 (无视频)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
# 调整视频尺寸/缩放
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
# 剪切视频 (从第10秒开始,持续30秒)
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
# 快速精确剪切 (仅对剪切点重新编码较为复杂,因此标准重新编码对于精度更安全)
ffmpeg -ss 00:00:10 -i input.mp4 -to 00:00:40 -c:v libx264 -crf 23 -c:a aac output.mp4
# 合并文件 (使用解复用器)
# 创建 filelist.txt: file 'part1.mp4' \n file 'part2.mp4'
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
# 视频加速/减速 (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
| 选项 | 应用场景 |
|---|---|
-c:v libx264 |
标准 H.264 编码 (最佳兼容性) |
-c:v libx265 |
H.265/HEVC 编码 (最佳压缩/质量) |
-crf [0-51] |
恒定速率因子 (数值越低质量越高,推荐 18-28) |
-preset |
编码速度与压缩率权衡 (ultrafast, medium, veryslow) |
-c:a copy |
音频直通,无需重新编码 (节省时间/保持质量) |
| 过滤器 | 应用场景 |
|---|---|
scale |
更改分辨率 (例如,scale=1920:-1 表示宽度为1080p) |
crop |
裁剪边缘 (例如,crop=w:h:x:y) |
transpose |
旋转视频 (1=顺时针90度,2=逆时针90度) |
fps |
更改帧率 (例如,fps=30) |
drawtext |
添加文字叠加/水印 |
overlay |
画中画或添加图片水印 |
fade |
添加淡入/淡出效果 (例如,fade=in:0:30 表示前30帧淡入) |
volume |
调整音频音量 (例如,volume=1.5 表示150%音量) |
setpts |
更改视频速度 (例如,setpts=0.5*PTS 表示2倍速) |
atempo |
更改音频速度而不改变音高 (范围 0.5 到 2.0) |
| 工具/选项 | 应用场景 |
|---|---|
ffprobe -v error -show_format -show_streams |
获取文件的详细技术信息 |
-metadata title="名称" |
设置全局元数据标签 |
-map |
选择特定流 (例如,-map 0:v:0 -map 0:a:1) |
当需要处理多个输入或创建非线性滤镜链时,使用 filter_complex。
# 示例:在右下角添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=main_w-overlay_w-10:main_h-overlay_h-10" output.mp4
# 示例:垂直堆叠 (2个视频)
ffmpeg -i top.mp4 -i bottom.mp4 -filter_complex "vstack=inputs=2" output.mp4
# 示例:并排 (2个视频)
ffmpeg -i left.mp4 -i right.mp4 -filter_complex "hstack=inputs=2" output.mp4
# 示例:网格 (4个视频 2x2)
ffmpeg -i v1.mp4 -i v2.mp4 -i v3.mp4 -i v4.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[top];[2:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2" output.mp4
# 示例:淡入淡出过渡 (两个片段间的简单交叉淡入淡出)
# 需要手动计算偏移,使用 xfade 滤镜更好
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "xfade=transition=fade:duration=1:offset=9" output.mp4
| 平台 | 编码器 | 命令 |
|---|---|---|
| NVIDIA (NVENC) | H.264 | -c:v h264_nvenc |
| Intel (QSV) | H.264 | -c:v h264_qsv |
| Apple (VideoToolbox) | H.265 | -c:v hevc_videotoolbox |
-map 以确保获取正确的音频/字幕轨道。-ss 放在 -i 之前 用于快速定位 (输入定位),或放在 -i 之后 用于精确定位 (输出定位)。