# learnFfmpeg **Repository Path**: wangyxli/learnFfmpeg ## Basic Information - **Project Name**: learnFfmpeg - **Description**: ffmpeg入门 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-24 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 音视频编解码原理与 FFmpeg C++ 实战教程 本教程是一套系统的音视频技术学习资料,包含理论讲解和实战代码两部分。 ## 目录结构 ``` learnffmpeg/ ├── docs/ # 原理讲解文档 │ ├── 01_基础概念.md # 采样率、位深、封装格式 vs 编码格式 │ ├── 02_YUV色彩空间.md # YUV 色彩空间详解 │ ├── 03_视频编码核心.md # I/P/B帧、DCT、量化、熵编码 │ ├── 04_音频编码核心.md # PCM、频域变换、心理声学模型 │ └── 05_FFmpeg架构.md # FFmpeg 数据流转架构 │ ├── examples/ # C++ 代码示例 │ ├── 01_probe_info.cpp # 获取媒体文件信息 │ ├── 02_decode_video.cpp # 视频解码并保存为 YUV/RGB │ ├── 03_decode_audio.cpp # 音频解码并保存为 PCM │ ├── 04_transcode.cpp # 视频转码 H.264 -> H.265 │ ├── 05_video_filter.cpp # 简单的视频滤镜 │ └── 06_av_sync.cpp # 音视频同步播放框架骨架 │ └── README.md # 本文件 ``` ## 环境要求 - **编译器**: 支持 C++17 的编译器 (g++ 7+, clang++ 5+, MSVC 2017+) - **FFmpeg**: 版本 8.x (最新稳定版) - **操作系统**: Linux / macOS / Windows ## 编译说明 每个 `.cpp` 文件头部都包含对应的编译命令。以 Linux 为例: ```bash # 安装 FFmpeg 开发库 (Ubuntu/Debian) sudo apt-get install libavformat-dev libavcodec-dev libswscale-dev libswresample-dev libavutil-dev # 编译示例 g++ -std=c++17 examples/01_probe_info.cpp -o probe_info $(pkg-config --cflags --libs libavformat libavcodec libswscale libavutil) ``` ## 学习路径 1. **理论先行**: 按顺序阅读 `docs/` 目录下的文档,建立完整的知识体系 2. **代码实践**: 对照文档,逐个运行 `examples/` 中的示例程序 3. **深入理解**: 阅读代码中的详细注释,理解 FFmpeg API 的使用方式 4. **动手修改**: 尝试修改示例代码,添加新功能或优化实现 ## 特色 - 🎯 **通俗易懂**: 使用生活化类比解释复杂概念 - 💻 **工业级代码**: RAII 内存管理、完善的错误处理 - 📚 **体系完整**: 从基础概念到高级应用全覆盖 - 🔧 **跨平台**: 支持 Linux/macOS/Windows 三大平台