从零开始:Windows 系统下 FFmpeg 安装与使用完全指南

你是否曾经遇到过这样的情况:下载了一个视频,却发现手机无法播放;或者拍了一段有趣的素材,想要截取其中一段发到朋友圈,却不知道用什么软件?如果你不想安装那些体积庞大、充满广告的视频编辑软件,那么 FFmpeg 绝对是你的救星。

FFmpeg 是一款开源、免费、强大的音视频处理工具,它主要通过命令行操作,但一旦上手,你会发现它比任何图形界面软件都要高效。本文将手把手教你如何在 Windows 系统下安装和使用 FFmpeg。

说点与教程无关的,其实,放在三年前,我不会推荐小白去使用 FFmpeg,但是到变了,AI 时代的到来改变了很多东西,即使你对电脑一无所知,也可以借助 AI 编写命令行代码,譬如我自己,我用了很久的 FFmpeg,几乎从未手写过命令,言归正传,我们接着回到安装教程。

第一部分:FFmpeg 的安装

  1. 访问官网下载页面

    打开浏览器,访问 FFmpeg 的官方下载地址:https://www.gyan.dev/ffmpeg/builds/

  2. 选择合适的版本

    在页面中找到你需要的安装包,带有essentials字样的是精简版,带有full字样的是完整版,理论上精简版足以满足大部分功能,不过我建议下载完整版,毕竟大家电脑应该都不差这一点存储空间。

    如果你打不开网页或者懒得分辨安装包也没事,我给大家准备好了,访问https://pan.quark.cn/s/3f38c878a456即可

  3. 解压并放置

    解压下载的压缩包,然后粘贴到一个你容易找到的位置,例如 **E:\FFmpeg**

第二部分:配置环境变量(让 FFmpeg 随处可用)

  1. 找到 bin 路径

    进入刚才解压的 FFmpeg 文件夹,找到名为 bin 的子文件夹。比兔我的是E:\ffmpeg\bin请复制这个路径

  2. 打开环境变量设置

    • 按住Win键,搜索框输入环境变量

    • 右键点击 "此电脑" 或 "我的电脑",选择 "属性"。

  3. 修改 Path 变量

    • 点击【环境变量(N)】

    • 在 "系统变量" 列表中,找到并双击 Path 变量。

    • 点击右上角的 "新建 ",将刚才复制的 bin 文件夹路径粘贴进去。

    • 一路点击 "确定" 保存。

  4. 验证安装

    按下 Win + R,输入 cmd 打开命令提示符,输入以下命令:

    bash 复制代码
    ffmpeg -version

    如果屏幕上显示出 FFmpeg 的版本信息和配置参数,恭喜你,安装成功了!

第三部分:FFmpeg 基础使用教程

这方面,你需要做的就是将你的需求准确的描述给 AI,你可以先问这个需求可不可以用 FFmpeg 实现,然后让 AI 给你具体代码,不会就问,如果报错就再把错误信息复制粘贴发给 AI,多来几次就熟能生巧了,然后常用的功能可以建一个 txt 文本文件夹,编写一个脚本文件,给大家分享一下我常用的提示词模板。

使用的时候要把 AI 给你的命令复制到命令行窗口中,可以按下 Win + R,输入 cmd 打开命令提示符,粘贴命令;也可以按下Win键,搜索Powershell并打开,这俩有什么区别我就不介绍少了,就当作业吧,大家自己查查或者问问 AI 都行。

markdown 复制代码
[在这里输入需求]
输入参数如下:
1. 输入文件完整路径
2. 输出文件夹
3. 根据要求设计你的输入参数

下面是我烧录字幕设置的提示词

markdown 复制代码
编写 FFmpeg 脚本
实现功能:将字幕烧录到视频中(即硬字幕)
接收参数:
1. 字幕文件路径
2. 视频文件路径
3. 是否使用 GPU 加速
4. 速度
5. 视频质量
6. 编码格式
7. 文件格式
8. 输出文件夹路径
要求:
1. 视频重编码,音频直接复制,如原本有字幕轨道,清空
2. powershell脚本,可直接粘贴运行

能够得到一个这样的脚本

bash 复制代码
# --- 配置区域 (在此修改参数) ---
$VideoPath    = "E:\Videos\英语视频\BranchEducation\GPU 是如何工作的\00.mp4"
$SubtitlePath = "E:\Videos\英语视频\BranchEducation\GPU 是如何工作的\00.ass"
$OutputDir    = ""                       # 留空 "" 则默认输出到原视频文件夹
$UseGPU       = $true                    # $true 为使用 NVIDIA 显卡加速,$false 为使用 CPU
$Speed        = "p7"                     # GPU: p1(最快)-p7(最强) | CPU: ultrafast, medium, veryslow

# ============ 画质控制 ============
$Quality      = 27                       # ← 在此设置画质等级
$EncFormat    = "av1"                    # 编码格式: "av1", "h264" 或 "h265"
$OutContainer = "mp4"                    # 输出文件后缀: mp4, mkv 等

# 1. 路径验证与处理
if (-not (Test-Path -LiteralPath $VideoPath)) {
    Write-Host "错误: 找不到视频文件 -> $VideoPath" -ForegroundColor Red
    Read-Host "按任意键退出"; exit 1
}
if (-not (Test-Path -LiteralPath $SubtitlePath)) {
    Write-Host "错误: 找不到字幕文件 -> $SubtitlePath" -ForegroundColor Red
    Read-Host "按任意键退出"; exit 1
}

if ([string]::IsNullOrWhiteSpace($OutputDir)) {
    $OutputDir = Split-Path -Parent $VideoPath
} elseif (-not (Test-Path -LiteralPath $OutputDir)) {
    New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
}

$FileName = [System.IO.Path]::GetFileNameWithoutExtension($VideoPath)
$OutputFile = Join-Path $OutputDir ("{0}_hardsub.{1}" -f $FileName, $OutContainer)

# 正确转义含空格的字幕路径
$EscapedSubPath = $SubtitlePath -replace '\\', '/' -replace ':', '\:' -replace "'", "\'"


# ============ 新增: 字幕与字体预检 ============
Write-Host "正在预检字幕文件和字体..." -ForegroundColor Cyan
$PreCheckArgs = @(
    "-hide_banner",
    "-loglevel", "warning",
    "-i", $VideoPath,
    "-vf", "subtitles='$EscapedSubPath'",
    "-frames:v", "1",           # 只测试1帧,速度极快
    "-f", "null",               # 不输出实体文件
    "-"
)

# 捕获预检输出 (合并 stderr 和 stdout)
$PreCheckOutput = & ffmpeg $PreCheckArgs 2>&1

# 检查是否包含指定的 libass 字体报错/回退警告
$FontError = $PreCheckOutput | Where-Object { 
    $_ -match "Using default font" -or 
    $_ -match "fontselect:" -or 
    $_ -match "Glyph .* not found" -or
    $_ -match "Cannot load default config file"
}

if ($FontError) {
    Write-Host "`n[致命错误] 字幕字体预检失败!系统缺失 ASS 中指定的字体,FFmpeg 已强制回退为默认字体。" -ForegroundColor Red
    Write-Host "拦截到的底层报错信息如下:" -ForegroundColor Yellow
    $FontError | ForEach-Object { Write-Host "  $_" }
    Read-Host -Prompt "`n请安装缺失字体,或检查字幕文件配置后再试。按任意键退出"
    exit 1
}
# ==============================================


# 2. 确定编码器参数
$VideoCodec = ""
$QualityArgs = @()

if ($UseGPU) {
    if ($EncFormat -eq "av1") { $VideoCodec = "av1_nvenc" } 
    elseif ($EncFormat -eq "h265") { $VideoCodec = "hevc_nvenc" } 
    else { $VideoCodec = "h264_nvenc" }
    $QualityArgs = @("-cq", "$Quality", "-b:v", "0")
} else {
    if ($EncFormat -eq "av1") { $VideoCodec = "libsvtav1" } 
    elseif ($EncFormat -eq "h265") { $VideoCodec = "libx265" } 
    else { $VideoCodec = "libx264" }
    $QualityArgs = @("-crf", "$Quality")
}

# 3. 构建FFmpeg参数数组 (修复了 PowerShell 数组传递时自带双引号导致路径解析失败的隐患)
$FFmpegArgs = @(
    "-hide_banner",
    "-loglevel", "warning",
    "-stats",
    "-i", $VideoPath,
    "-vf", "subtitles='$EscapedSubPath'",
    "-c:v", $VideoCodec,
    "-preset", $Speed
) + $QualityArgs + @(
    "-c:a", "copy",
    "-sn",
    "-y",
    $OutputFile
)

Write-Host "开始处理: $FileName (编码: $EncFormat | 画质: $Quality)" -ForegroundColor Cyan

# 执行FFmpeg
$StartTime = Get-Date
& ffmpeg $FFmpegArgs
$ExitCode = $LASTEXITCODE
$EndTime = Get-Date

# 结果判断
if ($ExitCode -eq 0) {
    Write-Host "`n[成功] 视频导出完毕,耗时: $(($EndTime - $StartTime).ToString('hh\:mm\:ss'))" -ForegroundColor Green
} else {
    Write-Host "`n[失败] FFmpeg 退出异常 (代码: $ExitCode),请检查上方输出。" -ForegroundColor Red
}

Read-Host -Prompt "`n按任意键关闭窗口"

然后我比较喜欢用 powershell,所以都让写的 powershell 脚本,你也可以让 AI 编写 cmd 脚本,没差儿。

结语

FFmpeg 的魅力在于它的"轻量"与"强大"。虽然刚开始接触命令行可能会让人感到有些陌生,有畏难情绪,但这东西玩着玩着就明白了,甚至上头之后反而可能不喜欢有图形界面的[doge],总之别给自己设限,多尝试一下。

今日互动: 你第一次接触 FFmpeg 是用来解决什么问题的?欢迎分享你的故事。

相关推荐
Geoking.2 小时前
VSCode 安装 Claude Code 插件 + ccswitch 配置 DeepSeek API 完整教程(Windows 新手向)
ide·windows·vscode
潘达斯奈基~3 小时前
Windows 下 Claude Code使用 Agent Teams 配置教程
windows
happymaker06265 小时前
Spring框架学习日记——DAY02(依赖注入的方式)
windows
honder试试6 小时前
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
windows·elasticsearch·jenkins
IT里的交易员7 小时前
【系统】Windows 安装 uv
windows·uv
我不是立达刘宁宇8 小时前
windows密码操作
windows
Royzst8 小时前
一、集合概述(前置基础)
开发语言·windows·python
时光追逐者9 小时前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
liuhuizuikeai9 小时前
菜品抽奖活动MFC+服务端
c++·windows·mfc
小何开发9 小时前
ffmpeg 安装与使用: 将视频分片与组装
ffmpeg·音视频