MENU

FFmpeg 从入门到熟练:玩转视频剪辑、压缩与滤镜的神级工具

August 6, 2025 • 浏览量: 38 • 字数: 8857 • 阅读时长: 4分钟 • 脚本

适合人群:剪辑视频、压缩清晰度、搞图搞音、做自媒体的你,全都能用上!不需要编程经验,会复制命令行就行。

👉 在线体验 FFmpeg

你是否经常遇到这种情况?
  • 想把 .mov 转成 .mp4,结果文件暴涨 2 倍?
  • 用某宝压缩视频,画质一塌糊涂?
  • 剪视频软件动辄 2G,加载还卡顿?
  • 手里有几十个视频要统一转码,不想手动点鼠标?

只需一个命令就能搞定这些事的神奇工具,就是——FFmpeg

🛠️ 第 1 节:安装 FFmpeg

各平台安装方式

Windows 安装

  1. FFmpeg 官网下载页 → 选择 Windows 版本
  2. 推荐下载 gyaan/ffmpeg-release 或 gyan.dev 提供的 zip 包(含完整二进制)
  3. 解压后,将 bin 目录加入系统环境变量 Path
  4. 打开 CMD,输入 ffmpeg -version 检查是否安装成功
🎯 不想设置环境变量?可以用绿色版,直接进入 bin 目录运行。

macOS 安装

推荐使用 Homebrew:

brew install ffmpeg

如需支持更多格式(如 x264、fdk-aac):

brew install ffmpeg --with-fdk-aac --with-libvpx --with-x265

Linux 安装

Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg

CentOS/Fedora:

sudo dnf install ffmpeg

安装完成后,用这个命令验证版本:

ffmpeg -version

📐 第 2 节:命令结构快速理解

我们来看一条最基础的 FFmpeg 命令:

ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 output.mp4

命令逐项解析

  • -i input.mp4:输入文件
  • -vf scale=1280:720:缩放
  • -c:v libx264:使用 H.264 编码器
  • output.mp4:输出文件名

📌 小技巧:最小命令也能用!
你甚至可以不写任何参数:

ffmpeg -i input.mp4 output.avi

它会自动根据扩展名判断格式,非常适合小白。

🔁 第 3 节:常用操作速查

本节适合「剪一点」、「转一下」、「压一压」的视频需求,全是能立即拿来用的命令。

🎞️ 格式转换(转码)

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -c:v gif output.gif
  • fps=10:控制帧率,越低越小巧
  • scale=480:-1:宽 480,自动等比缩放
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset fast output.mp4
  • -crf 数值越低画质越好(0~51,推荐 18~28)

✂️ 视频剪辑

ffmpeg -ss 00:00:30 -i input.mp4 -t 10 -c copy output.mp4
  • -ss:开始时间
  • -t:持续时长
  • -c copy:不重新编码,超快!
ffmpeg -i input.mp4 -vf "crop=640:360" output.mp4
# 1. 创建文件列表.txt
echo "file '1.mp4'" > list.txt
echo "file '2.mp4'" >> list.txt

# 2. 合并
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

视频必须使用同一编码格式,否则拼接会失败。

🔊 音视频操作

ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest output.mp4
ffmpeg -i input.mp4 -an output.mp4

📏 视频参数调整

ffmpeg -i input.mp4 -vf "scale=640:-1" output.mp4
  • -1 表示自动等比例缩放
ffmpeg -i input.mp4 -r 24 output.mp4
ffmpeg -i input.mp4 -b:v 1000k -b:a 128k output.mp4
  • -b:v:视频比特率(越小越模糊)
  • -b:a:音频比特率

🖼 添加水印和字幕

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
  • overlay=10:10 表示左上角(x=10, y=10)
ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4

字幕文件必须是 .srt 格式,且 UTF-8 编码。

🧙 第 4 节:FFmpeg 滤镜魔法

滤镜 = 滤镜表达式 + 视频滤镜选项 -vf(Video Filter)。是 FFmpeg 视频处理的灵魂核心。

📋 滤镜的基本格式

ffmpeg -i input.mp4 -vf "滤镜1=参数,滤镜2=参数" output.mp4
  • -vf:指定视频滤镜(Video Filter)
  • , 分隔多个滤镜,按顺序处理(滤镜链)
  • filter_complex:用于更复杂的滤镜图(后面讲)

🎯 常见滤镜实战

我们一个个来,不多讲,直接用。

scale:视频缩放

ffmpeg -i input.mp4 -vf "scale=720:-1" output.mp4
  • 把视频宽度缩放为 720,高度按比例自动调整

crop:裁剪画面

ffmpeg -i input.mp4 -vf "crop=640:360:100:50" output.mp4
  • crop=w:h:x:y

    • 宽 640、高 360
    • 从位置 (100, 50) 开始裁剪

fade:淡入/淡出特效
淡入前 30 帧:

ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=1" output.mp4

淡出最后 1 秒:

ffmpeg -i input.mp4 -vf "fade=t=out:st=9:d=1" output.mp4
  • t=in/out:类型
  • st:开始时间(秒)
  • d:持续时间(秒)

hue:调色滤镜

调节色相、饱和度等:

ffmpeg -i input.mp4 -vf "hue=s=0" output.mp4
  • s=0:去饱和度,效果类似黑白

更多玩法:

ffmpeg -i input.mp4 -vf "hue=h=60:s=2" output.mp4

drawtext:添加文字(内置字幕)

ffmpeg -i input.mp4 -vf "drawtext=text='你好FFmpeg':fontcolor=white:fontsize=36:x=10:y=20" output.mp4

需安装字体支持库,如 Linux 下需 libfreetype

  • 可用参数:
  • x/y:坐标
  • fontsize:字体大小
  • fontfile:指定字体路径
  • enable='between(t,2,5)':只显示第 2\~5 秒

🔗 滤镜链 vs 滤镜图

进阶概念:filterchain vs filtergraph

✅ 滤镜链(Filterchain)

-vf "scale=640:-1,eq=contrast=1.5"
  • 滤镜按顺序执行,适合线性处理

✅ 滤镜图(Filtergraph)

-filter_complex "[0:v]scale=640:360,fade=t=in:st=0:d=2[out]" -map "[out]"
  • 适合复杂分支、混流、多轨合成

🧪 第 5 节:编码器与压缩优化

编码器是 FFmpeg 的发动机。选得好、调得巧,能压 70% 体积、保 90% 画质。

🎞️ 视频编码器选项速览

编码器优点缺点常见扩展名
libx264兼容性最好,速度快文件偏大.mp4
libx265体积更小,同等画质更强编码更慢,不支持老设备.mp4
libvpx-vp9开源,浏览器支持广压制较慢.webm
aom-av1体积最小,画质极佳压制极慢,硬件支持差.mkv

推荐用 libx264libx265,平衡兼容性与压缩效率。

🎛️ 常用压缩参数组合

我们用 H.264(libx264)为例,来压一个高清 MP4。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

参数解析:

  • -c:v libx264:选择 H.264 编码器
  • -crf 23:质量控制(越小越清晰,范围 051,推荐 1828)
  • -preset medium:编码速度(推荐值:ultrafast → slow)
  • -c:a aac -b:a 128k:音频编码器与码率

📊 CRF 不同数值的效果对比

CRF 值画质文件大小
18几乎无损最大
23兼顾清晰与体积推荐默认
28有轻微模糊更小体积

preset 的效果对比

-preset ultrafast / superfast / veryfast / faster / fast / medium / slow / slower / veryslow
  • 越慢越小,但越耗 CPU
  • 推荐一般用 medium,极限压缩才用 slower

💡 多线程加速压缩(高级用法)

FFmpeg 会自动启用多线程,但你可以手动指定:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast -threads 4 output.mp4
  • -threads 4:限制为 4 核压制(可省略)

🎯 libx265 的压缩优势

对同样一段 1080p 视频,用 H.264 和 H.265 压缩对比如下:

编码器文件大小肉眼清晰度编码耗时
libx264120MB清晰2 分钟
libx26575MB清晰3 分半

使用 libx265 时,音频编码器仍可用 aac,例如:

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k output.mp4

🧨 NVIDIA + hevc_nvenc 兼容性坑

在使用 hevc_nvenc 编码器时,第一帧(尤其是 seek 后重新编码的第一帧)如果不是关键帧或初始化参数未设置完整,会出现以下情况:

  • 首帧画面是绿屏或马赛克
  • ffmpeg 没有报错,但第一秒异常
  • 多发生在精准 seek (-ss + -accurate_seek) + HEVC 编码器时

这是 NVIDIA 硬件编码器的一个“兼容性坑”。

📦 第 6 节:批处理与自动化

当你面对一大堆视频,不想一个个手动操作时,批处理是你的好帮手。

💻 批量转码当前目录下所有 .mp4 文件

macOS / Linux 示例(bash

for f in *.mp4; do
  ffmpeg -i "$f" -c:v libx264 -crf 24 -preset medium -c:a aac -b:a 128k "out_$f"
done

Windows 示例(.bat 文件)

@echo off
for %%f in (*.mp4) do (
  ffmpeg -i "%%f" -c:v libx264 -crf 24 -preset medium -c:a aac -b:a 128k "out_%%f"
)

保存为 batch_compress.bat,放在视频目录下双击运行即可。

🧪 与 Python/Powershell 联动处理

Python 示例(调用 FFmpeg 命令)

import subprocess
from pathlib import Path

for f in Path(".").glob("*.mp4"):
    output = f"compressed_{f.name}"
    subprocess.run([
        "ffmpeg", "-i", str(f),
        "-c:v", "libx264", "-crf", "24", "-preset", "fast",
        "-c:a", "aac", "-b:a", "128k", output
    ])

可以将 FFmpeg 与 Flask、Gradio 等结合做成本地 Web 转码器。


🗃️ 文件名优化/自动重命名

ffmpeg -i input.mp4 -c:v libx264 -crf 24 output_$(date +%Y%m%d_%H%M).mp4
  • 通过 shell 插入时间戳,避免文件覆盖

🔚 结语:你的 FFmpeg 超能力已解锁!

恭喜你,已经掌握 FFmpeg 的核心技能:安装 → 转码 → 剪辑 → 滤镜 → 压缩 → 批处理。

你现在可以:

  • 🚀 批量压缩 20G 视频资料包
  • 🎬 制作带字幕的教学视频
  • 🖼 把视频画面变成 GIF + 淡入淡出 + 水印
  • 🎞 一行命令生成短视频片头片尾

🎁 推荐工具/文档/资源合集

FFmpeg 官网

FFmpeg Filters 文档

FFmpeg Cheat Sheet

Archives QR Code Tip
QR Code for this page
Tipping QR Code