FFmpeg 零基础入门教程

FFmpeg 零基础入门教程

FFmpeg 是一款跨平台的开源音视频处理工具,支持音视频的编解码、转码、剪辑、合并、流媒体推流等多种操作,是音视频开发、运维及内容处理领域的必备工具。本教程从基础安装到实战操作,帮助快速上手。

一、FFmpeg 安装

1. Windows 系统

  1. 访问 FFmpeg 官网,下载 Windows 版本的压缩包(推荐 Full Build 完整版)。
  2. 解压压缩包到指定目录(如 D:\ffmpeg)。
  3. 配置系统环境变量:
    • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」。
    • 在「系统变量」的 Path 中添加 ffmpeg\bin 路径(如 D:\ffmpeg\bin)。
  4. 验证安装:打开 CMD,输入 ffmpeg -version,若显示版本信息则安装成功。

2. Linux 系统(以 Ubuntu/Debian 为例)

使用 apt 包管理器直接安装:

bash 复制代码
sudo apt update
sudo apt install ffmpeg

验证:ffmpeg -version

3. MacOS 系统

使用 Homebrew 安装:

bash 复制代码
brew install ffmpeg

验证:ffmpeg -version

二、FFmpeg 核心概念

  1. 编解码器(Codec) :用于音视频压缩/解压缩的算法,常见的有:
    • 视频:H.264、H.265(HEVC)、VP9、AV1
    • 音频:AAC、MP3、Opus
  2. 容器格式(Format) :音视频流的封装格式,常见的有:
    • MP4、MKV、FLV、AVI、TS
  3. 流(Stream) :一个视频文件通常包含 视频流(v:0)音频流(a:0)字幕流(s:0) 等。

三、FFmpeg 基础命令格式

FFmpeg 命令的通用结构:

bash 复制代码
ffmpeg [全局参数] [输入文件参数] -i [输入文件路径] [输出文件参数] [输出文件路径]
  • -i:指定输入文件,必须放在输入参数之后、输出参数之前
  • 若不指定编解码器,FFmpeg 会根据输出格式自动选择默认编码器。

四、常用实战命令

1. 音视频转码

转码是 FFmpeg 最常用的功能,可实现格式转换、压缩等需求。

示例 1:将 AVI 转为 MP4(H.264+AAC 编码)
bash 复制代码
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4

参数说明:

  • -c:v libx264:指定视频编码器为 H.264
  • -c:a aac:指定音频编码器为 AAC
示例 2:压缩视频(降低分辨率+调整码率)
bash 复制代码
ffmpeg -i input.mp4 -s 1280x720 -b:v 1500k -c:v libx265 -c:a copy output_compress.mp4

参数说明:

  • -s 1280x720:设置输出分辨率为 720P
  • -b:v 1500k:设置视频码率为 1500kbps
  • -c:a copy:直接复制音频流,不重新编码(节省时间)

2. 音视频剪辑(截取片段)

无需完整转码,快速截取指定时间段的内容。

bash 复制代码
ffmpeg -ss 00:01:30 -i input.mp4 -to 00:03:15 -c copy output_cut.mp4

参数说明:

  • -ss 00:01:30:指定开始时间(时:分:秒),放在 -i 前可加速截取
  • -to 00:03:15:指定结束时间
  • -c copy:直接复制流,无质量损失,速度极快

3. 提取音频/视频

示例 1:提取视频中的音频(保存为 MP3)
bash 复制代码
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

参数说明:

  • -vn:禁用视频流
  • -q:a 2:设置音频质量(0-9,数值越小质量越高)
示例 2:提取视频流(无音频)
bash 复制代码
ffmpeg -i input.mp4 -an -c:v copy output_video_only.mp4

参数说明:

  • -an:禁用音频流

4. 音视频合并

方式 1:同格式文件合并(如多个 MP4 片段)
  1. 创建 filelist.txt,写入待合并的文件路径:

    txt 复制代码
    file 'part1.mp4'
    file 'part2.mp4'
    file 'part3.mp4'
  2. 执行合并命令:

    bash 复制代码
    ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged.mp4

参数说明:

  • -f concat:使用 concat 分离器
  • -safe 0:允许使用绝对路径
方式 2:不同格式文件合并(需重新编码)
bash 复制代码
ffmpeg -i input1.mp4 -i input2.avi -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" merged.mp4

5. 推流与拉流(流媒体应用)

FFmpeg 可用于向 RTMP/RTSP 服务器推流,或从服务器拉流保存。

示例 1:本地视频推送到 RTMP 服务器(如直播)
bash 复制代码
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your_server_ip:1935/live/stream_key

参数说明:

  • -re:按视频帧率读取,模拟实时流
示例 2:拉取 RTSP 摄像头流并保存
bash 复制代码
ffmpeg -i rtsp://camera_ip/stream -c copy camera_record.mp4

五、高级功能:滤镜(Filter)

FFmpeg 滤镜可实现视频裁剪、缩放、加水印、音频混音等复杂操作,通过 -vf(视频滤镜)、-af(音频滤镜)调用。

1. 视频加水印

bash 复制代码
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output_watermark.mp4

参数说明:

  • overlay=10:10:水印位置为左上角(x:10, y:10)

2. 音频音量调整

bash 复制代码
ffmpeg -i input.mp4 -af "volume=2.0" output_loud.mp4

参数说明:

  • volume=2.0:音量放大 2 倍

六、常见问题排查

  1. "找不到编码器" :安装完整版 FFmpeg,或通过 ffmpeg -encoders 查看支持的编码器。
  2. 转码速度慢
    • 使用 -c copy 跳过编码(仅适合同格式操作);
    • 降低分辨率或码率;
    • 启用硬件加速(如 -c:v h264_nvenc 调用 NVIDIA GPU 编码)。
  3. 音视频不同步 :检查输入文件的时间戳,或通过 -async 1 参数调整音频同步。

七、学习资源拓展

  1. 官方文档FFmpeg Documentation
  2. 滤镜手册FFmpeg Filters
  3. 中文社区:FFmpeg 中文网、掘金/知乎的音视频技术专栏
相关推荐
小Tomkk1 天前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
aqi002 天前
FFmpeg开发笔记(九十八)基于FFmpeg的跨平台图形用户界面LosslessCut
android·ffmpeg·kotlin·音视频·直播·流媒体
带土13 天前
2. Linux下FFmpeg C++音视频解码+推流开发
linux·c++·ffmpeg
aqi003 天前
FFmpeg开发笔记(九十七)国产的开源视频剪辑工具AndroidVideoEditor
android·ffmpeg·音视频·直播·流媒体
Sleepless_斑马3 天前
RTMP/RTSP流媒体服务器搭建、ffmpeg推流桌面、vlc拉流
ffmpeg·rtmp·rtsp
炼金术3 天前
SkyPlayer v1.1.0 - 在线视频播放功能更新
android·ffmpeg
喜欢吃豆3 天前
深度解析:FFmpeg 远程流式解复用原理与工程实践
人工智能·架构·ffmpeg·大模型·音视频·多模态
带土13 天前
1. FFmpeg入门
ffmpeg
Lueeee.3 天前
1.广告机项目-----ffmpeg播放准备
ffmpeg