字节笔记本

2026年3月22日

FFmpeg 开发者文档中文版

音视频开发是后端与客户端开发中技术壁垒较高的领域之一,而 FFmpeg 作为全球最流行的开源多媒体处理框架,几乎是每个音视频开发者必须掌握的核心工具。然而,FFmpeg 学习曲线陡峭,文档分散,初学者往往难以系统性地入门和进阶。ffmpeg_develop_doc 是一个由 0voice 团队维护的 GitHub 仓库,收录了全网优质的 FFmpeg 学习资料,涵盖开源项目、典藏文档、系列文章、面试题、教学视频以及学术论文,堪称 FFmpeg 学习的一站式资源库。

项目简介

ffmpeg_develop_doc 是一个面向音视频开发者的综合性资料整理仓库,由 0voice 团队发起并持续维护。仓库以中文为主,汇集了从入门到进阶的各类 FFmpeg 学习资源,所有资料来源于互联网,遵循"取之于互联网,用之于互联网"的理念。该项目目前在 GitHub 上获得了超过 2100 颗 Star,600 余次 Fork,是中文社区中最受欢迎的 FFmpeg 学习资料合集之一。

仓库内容按照类别进行了清晰的组织,共分为七大板块:开源项目、典藏文档、系列文章、面试题、教学视频、学术论文和资料下载。无论你是刚接触 FFmpeg 的初学者,还是准备音视频岗位面试的求职者,亦或是需要参考学术论文的研究者,都能在这里找到有价值的资料。

核心特性

全方位的资料覆盖

仓库最突出的特点是资料的全面性。从基础的环境搭建到高级的编解码原理,从命令行使用到 API 编程,从 Android/iOS 移动端开发到 Web 端播放器实现,几乎涵盖了 FFmpeg 开发的所有方向。

实战导向的开源项目集

收录了超过 25 个优质的 FFmpeg 相关开源项目,这些项目均可在本地调试运行,涵盖视频播放器、视频处理框架、直播推流等多个应用场景。例如 bilibili/ijkplayer(B站开源的播放器)、GSYVideoPlayer(功能丰富的视频播放器)、RxFFmpeg(Android 音视频处理框架)等,都是工业界广泛使用的项目。

系统化的学习文章

精心整理了从 FFmpeg 简介到核心模块分析的系列学习文章,共计 15 篇以上。文章按照由浅入深的顺序编排,包括 FFmpeg 的安装、API 介绍、编解码分析、结构体学习等核心主题,特别适合作为系统学习的路线图。

面试题大全

整理了 60 道音视频开发面试高频题目,覆盖视频编码原理、直播技术、流媒体协议、播放器优化等多个维度。这些题目不仅适合面试准备,也是检验自身知识体系完整度的重要参考。

学术论文集合

收录了近 30 篇基于 FFmpeg 相关技术的学术论文,涉及 H.264/H.265 编解码、RTMP/RTSP 协议、流媒体系统设计等研究方向,适合需要深入了解底层原理的开发者和研究者。

技术栈

该项目作为一个资料整理仓库,本身不涉及特定技术栈的代码开发,但其收录的资源覆盖了以下主要技术领域:

  • FFmpeg 核心库:libavformat、libavcodec、libavfilter、libswscale、libavutil
  • 编程语言:C/C++、Java、Python、Go、JavaScript
  • 移动端开发:Android(NDK/JNI)、iOS(Objective-C/Swift)
  • 前端技术:WebAssembly、Canvas、AudioContext
  • 流媒体协议:RTMP、RTSP、HLS、WebRTC、HTTP-FLV
  • 视频编码标准:H.264/AVC、H.265/HEVC
  • 音频编码标准:AAC、PCM、MP3、AMR
  • 相关框架:Qt、SDL、GStreamer、MediaCodec、VideoToolbox
  • 跨平台方案:Flutter、React Native

安装指南

ffmpeg_develop_doc 是一个纯文档仓库,无需安装任何依赖。获取方式如下:

克隆仓库

bash
git clone https://github.com/0voice/ffmpeg_develop_doc.git

在线浏览

也可以直接通过 GitHub 页面在线浏览所有资料内容,无需本地克隆。

FFmpeg 本体安装

虽然文档仓库无需安装,但学习 FFmpeg 需要安装 FFmpeg 工具本身:

bash
# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt-get install ffmpeg

# CentOS/RHEL
sudo yum install ffmpeg

# Windows
# 从 https://ffmpeg.org/download.html 下载预编译版本

快速开始

1. 浏览开源项目

从仓库的"开源项目"板块开始,选择一个你感兴趣的项目进行学习和调试。建议从以下入门级项目开始:

  • mpv-player/mpv:命令行视频播放器,代码结构清晰,适合学习播放器基本架构
  • mpenkov/ffmpeg-tutorial:FFmpeg 教程项目,手把手教你编写视频播放器
  • HeZhang1994/video-audio-tools:基于 Python + FFmpeg 的视频音频处理工具,简单实用

2. 阅读学习文章

按照文章编号顺序,系统学习 FFmpeg 的核心概念:

  1. 先阅读 FFmpeg 简介系列(共 7 篇),了解整体架构
  2. 再阅读结构体学习系列(共 8 篇),深入理解核心数据结构
  3. 最后阅读进阶文章,掌握转码原理

3. 刷面试题

在掌握了基础知识后,通过 60 道面试题检验和巩固所学内容,重点理解以下高频考点:

  • 视频编码原理(H.264 vs H.265)
  • 流媒体协议(RTMP、HLS、RTSP 的区别)
  • 音视频同步机制
  • 播放器优化策略
  • GOP、DTS/PTS 等核心概念

使用示例

示例一:视频转码

FFmpeg 最常用的功能之一是视频转码,将一种视频格式转换为另一种格式:

bash
# 将 MP4 转换为 FLV
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv output.flv

# 将视频压缩到指定分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -crf 23 output.mp4

示例二:视频裁剪与合并

bash
# 裁剪视频(从第 10 秒开始,持续 30 秒)
ffmpeg -i input.mp4 -ss 10 -t 30 -c copy output.mp4

# 合并多个视频
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

示例三:添加水印

bash
# 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Hello':fontcolor=white:fontsize=24:x=10:y=10" output.mp4

# 添加图片水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

示例四:提取音频

bash
# 从视频中提取音频
ffmpeg -i input.mp4 -vn -acodec copy output.aac

# 将视频转为 GIF 动图
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" -t 5 output.gif

示例五:直播推流

bash
# 推送本地视频到 RTMP 服务器
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your-server/live/stream_key

# 使用摄像头推流
ffmpeg -f avfoundation -i "0" -vcodec libx264 -f flv rtmp://your-server/live/stream_key

推荐学习路径

对于不同背景的开发者,建议采用以下学习路径:

路径一:零基础入门

  1. 安装 FFmpeg,熟悉命令行基本用法
  2. 阅读"FFmpeg 学习"系列文章(一至七)
  3. 动手实践视频转码、裁剪、合并等操作
  4. 阅读"FFmpeg 结构体学习"系列文章

路径二:移动端开发

  1. 学习 FFmpeg 基础知识
  2. 研究 ijkplayer 或 RxFFmpeg 的源码
  3. 尝试将 FFmpeg 移植到 Android/iOS 平台
  4. 实现一个简单的视频播放器

路径三:面试准备

  1. 系统学习 FFmpeg 核心知识
  2. 逐一攻克 60 道面试题
  3. 研究流媒体协议(RTMP、HLS、WebRTC)
  4. 了解直播和点播的技术架构

社区与贡献

该项目由 0voice 团队维护,欢迎社区开发者通过 Issues 或 Pull Requests 参与贡献。如果发现资料有版权问题,可以通过邮件联系项目维护者进行处理。项目还提供了"零领工作"服务,实时发布各主要城市的 C/C++ 和 Golang 方向招聘岗位信息,对音视频方向的求职者有额外的参考价值。

项目链接

分享: