# ffmpeg-java **Repository Path**: reywong/ffmpeg-java ## Basic Information - **Project Name**: ffmpeg-java - **Description**: Java 调用ffmpege 开发视频处理功能 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-19 - **Last Updated**: 2025-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目内容 - 使用文档和代码示例的方式介绍如何开发视频剪辑功能 ## 系统目录 - docs : 存放简易文档 - books : 存放详细文档 - examples : 存放代码示例 - tools : 存放第三方工具 ## 思路 - FFMPEG开发实战:开发自己的剪映 - 学习如何使用ffmpeg - 一步一步实现类似剪映的功能 ``` 第 1 章 FFmpeg环境搭建 1 1.1 FFmpeg简介 1 1.1.1 FFmpeg是什么 1 1.1.2 FFmpeg的用途 1 1.1.3 FFmpeg的发展历程 2 1.2 Linux系统安装FFmpeg 2 1.2.1 Linux开发机配置要求 2 1.2.2 安装已编译的FFmpeg及其SO库 3 1.2.3 自行编译与安装FFmpeg 5 1.3 在Windows系统下安装FFmpeg 10 1.3.1 Windows开发机配置要求 10 1.3.2 安装依赖的Windows软件 10 1.3.3 安装已编译的FFmpeg及其DLL库 15 1.4 FFmpeg的开发框架 17 1.4.1 可执行程序 18 1.4.2 动态链接库 21 1.4.3 第一个FFmpeg程序 23 1.5 小结 26 - 第 2 章 FFmpeg开发基础 27 2.1 音视频的编码标准 27 2.1.1 音视频编码的发展历程 27 2.1.2 音视频文件的封装格式 29 2.1.3 国家数字音视频标准AVS 31 2.2 FFmpeg的主要数据结构 34 2.2.1 FFmpeg的编码与封装 35 2.2.2 FFmpeg的数据包样式 37 2.2.3 FFmpeg的过滤器类型 39 2.3 FFmpeg查看音视频信息 41 2.3.1 打开与关闭音视频文件 41 2.3.2 查看音视频的信息 42 2.3.3 查看编解码器的参数 45 2.4 FFmpeg常见的处理流程 47 2.4.1 复制编解码器的参数 47 2.4.2 创建并写入音视频文件 51 2.4.3 使用滤镜加工音视频 54 2.5 小结 58 第 3 章 FFmpeg的编解码 59 3.1 音视频时间 59 3.1.1 帧率和采样率 59 3.1.2 时间基准的设定 62 3.1.3 时间戳的计算 64 3.2 分离音视频 67 3.2.1 原样复制视频文件 67 3.2.2 从视频文件剥离音频流 70 3.2.3 切割视频文件 72 3.3 合并音视频 74 3.3.1 合并视频流和音频流 74 3.3.2 对视频流重新编码 76 3.3.3 合并两个视频文件 82 3.4 视频浏览与格式分析 85 3.4.1 通用音视频播放器 86 3.4.2 视频格式分析工具 88 3.4.3 把原始的H264文件封装为MP4格式 90 3.5 小结 92 - 第 4 章 FFmpeg处理图像 93 4.1 YUV图像 93 4.1.1 为什么要用YUV格式 93 4.1.2 把视频帧保存为YUV文件 98 4.1.3 YUV图像浏览工具 100 4.2 JPEG图像 106 4.2.1 为什么要用JPEG格式 106 4.2.2 把视频帧保存为JPEG图片 107 4.2.3 图像转换器 110 4.3 其他图像格式 112 4.3.1 把视频帧保存为PNG图片 113 4.3.2 把视频帧保存为BMP图片 116 4.3.3 把视频保存为GIF动画 119 4.4 实战项目:图片转视频 124 4.5 小结 131 第 5 章 FFmpeg处理音频 132 5.1 PCM音频 132 5.1.1 为什么要用PCM格式 132 5.1.2 把音频流保存为PCM文件 135 5.1.3 PCM波形查看工具 139 5.2 MP3音频 142 5.2.1 为什么要用MP3格式 142 5.2.2 Linux环境集成mp3lame 144 5.2.3 把音频流保存为MP3文件 145 5.3 其他音频格式 148 5.3.1 把音频流保存为WAV文件 148 5.3.2 把音频流保存为AAC文件 152 5.3.3 音频重采样 158 5.4 实战项目:拼接两段音频 163 5.5 小结 168 - 第 6 章 FFmpeg加工视频 169 6.1 滤波加工 169 6.1.1 简单的视频滤镜 169 6.1.2 简单的音频滤镜 176 6.1.3 利用滤镜切割视频 182 6.1.4 给视频添加方格 185 6.2 添加特效 188 6.2.1 转换图像色度坐标 188 6.2.2 添加色彩转换特效 192 6.2.3 调整明暗对比效果 195 6.2.4 添加淡入淡出特效 197 6.3 变换方位 199 6.3.1 翻转视频的方向 199 6.3.2 缩放和旋转视频 200 6.3.3 裁剪和填充视频 202 6.4 实战项目:老电影怀旧风 204 6.5 小结 206 - 第 7 章 FFmpeg添加图文 207 7.1 添加图标 207 7.1.1 添加图片标志 207 7.1.2 清除图标区域 209 7.1.3 利用调色板生成GIF动画 211 7.2 添加文本 214 7.2.1 Linux环境安装FreeType 214 7.2.2 添加英文文本 216 7.2.3 添加中文文本 218 7.3 添加字幕 221 7.3.1 Linux环境安装libass 221 7.3.2 Linux安装中文字体 225 7.3.3 添加中文字幕 226 7.4 实战项目:卡拉OK音乐短片 229 7.4.1 视频字幕制作工具 229 7.4.2 制作卡拉OK字幕 233 7.5 小结 237 - 第 8 章 FFmpeg自定义滤镜 238 8.1 Windows环境编译FFmpeg 238 8.1.1 给FFmpeg集成x264 238 8.1.2 给FFmpeg集成avs2 241 8.1.3 给FFmpeg集成mp3lame 243 8.1.4 给FFmpeg集成FreeType 245 8.1.5 给FFmpeg集成x265 248 8.2 优化FFmpeg源码 255 8.2.1 读写音视频文件的元数据 255 8.2.2 元数据的中文乱码问题处理 258 8.2.3 修改FFmpeg源码解决乱码 262 8.3 自定义视频滤镜 265 8.3.1 添加模糊和锐化特效 265 8.3.2 视频滤镜的代码分析 267 8.3.3 自定义视频翻转滤镜 269 8.4 实战项目:侧边模糊滤镜 271 8.4.1 实现两侧模糊逻辑 271 8.4.2 集成侧边模糊滤镜 275 8.5 小结 277 - 第 9 章 FFmpeg混合音视频 278 9.1 多路音频 278 9.1.1 同时过滤视频和音频 278 9.1.2 利用多通道实现混音 281 9.1.3 给视频添加背景音乐 289 9.2 多路视频 293 9.2.1 通过叠加视频实现画中画 293 9.2.2 多路视频实现四宫格效果 302 9.2.3 透视两路视频的混合画面 307 9.3 转场动画 311 9.3.1 给视频添加转场动画 311 9.3.2 转场动画的代码分析 314 9.3.3 自定义斜边转场动画 317 9.4 实战项目:翻书转场动画 322 9.4.1 贝塞尔曲线实现翻页特效 322 9.4.2 集成翻书转场动画效果 326 9.5 小结 329 - 第 10 章 FFmpeg播放音视频 330 10.1 通过SDL播放音视频 330 10.1.1 FFmpeg集成SDL 330 10.1.2 利用SDL播放视频 335 10.1.3 利用SDL播放音频 342 10.2 FFmpeg推流和拉流 346 10.2.1 什么是推拉流 346 10.2.2 FFmpeg向网络推流 350 10.2.3 FFmpeg从网络拉流 353 10.3 SDL处理线程间同步 355 10.3.1 SDL的线程 355 10.3.2 SDL的互斥锁 357 10.3.3 SDL的信号量 360 10.4 实战项目:同步播放音视频 367 10.4.1 同步音视频的播放时钟 367 10.4.2 优化音视频的同步播放 371 10.5 小结 376 - 第 11 章 FFmpeg的桌面开发 377 11.1 搭建Qt开发环境 377 11.1.1 安装桌面开发工具Qt 377 11.1.2 创建一个基于C++的Qt项目 381 11.1.3 把Qt项目打包成可执行文件 383 11.2 桌面程序播放音频 385 11.2.1 给Qt工程集成FFmpeg 385 11.2.2 Qt工程使用SDL播放音频 387 11.2.3 通过QAudioSink播放音频 392 11.3 桌面程序播放视频 396 11.3.1 通过QImage播放视频 396 11.3.2 OpenGL的着色器小程序 404 11.3.3 使用OpenGL播放视频 407 11.4 实战项目:桌面影音播放器 411 11.5 小结 415 - 第 12 章 FFmpeg的移动开发 416 12.1 搭建Android开发环境 416 12.1.1 搭建Android的NDK开发环境 416 12.1.2 交叉编译Android需要的SO库 420 12.1.3 App工程调用FFmpeg的SO库 421 12.2 App通过FFmpeg播放音频 427 12.2.1 交叉编译时集成mp3lame 427 12.2.2 通过AudioTrack播放音频 429 12.2.3 使用OpenSL ES播放音频 432 12.3 App通过FFmpeg播放视频 439 12.3.1 交叉编译时集成x264和FreeType 439 12.3.2 通过ANativeWindow播放视频 443 12.3.3 使用OpenGL ES播放视频 449 12.4 实战项目:仿剪映的视频剪辑 455 12.5 小结 461 ```