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 中文网、掘金/知乎的音视频技术专栏
相关推荐
xmRao4 小时前
Qt+FFmpeg 实现 PCM 音频转 AAC 编码
qt·ffmpeg·pcm
xmRao4 小时前
Qt+FFmpeg 实现录音程序(pcm转wav)
qt·ffmpeg
阿里巴啦1 天前
python+yt-dlp开源项目,支持 YouTube, Bilibili, TikTok/抖音,快手 等多个平台的视频/音频/字幕下载/ai摘要等功能
python·ffmpeg·whisper·音视频·视频处理·ai摘要·音视频转录
来鸟 鸣间2 天前
linux下ffmpeg源码编译
linux·运维·ffmpeg
Echo_NGC22372 天前
【FFmpeg使用指南】Part 2:滤镜图架构与信号处理
架构·ffmpeg·音视频·信号处理
Echo_NGC22372 天前
【FFmpeg使用指南】Part 1:核心架构与媒体流处理
ffmpeg·音视频·媒体·视频
ssxueyi2 天前
用 Claude Code 从零开发自己的Direct3D 硬件加速播放器
ffmpeg·ai编程·directx·视频播放器·从零开始·claude code·csdn征文活动
Yan_uuu2 天前
ubuntu18.04 安装 x264、ffmpeg、nv-codec-hearers 支持GPU硬件加速
c++·图像处理·ubuntu·ffmpeg
runner365.git3 天前
做一个基于ffmpeg的AI Agent智能体
人工智能·ffmpeg·大模型
彷徨而立3 天前
【FFmpeg】理解 av_packet_from_data 和 av_packet_unref 接口
ffmpeg