Ffmpeg基础
ffmpeg 库
avcodec: 编解码 avformat: 封装格式处理 avfilter: 滤镜特效处理 avdevice: 各种设备的输入输出 avutil: 工具库 postProc: 后加工 swresample: 音频采样数据格式转换 swscale: 视频像素数据格式转换
ffmpeg 命令参数
| 参数 | 说明 |
| -h | 帮助 |
| -i | 设定输入流 |
| -f | 设定输出格式 |
| -ss | 开始时间 |
| -vcodec | 指定视频编解码器 |
| -vcodec | 指定视频编解码器. |
| -acodec | 指定音频编解码器. |
| -vn | 表示不处理视频部分,即忽略视频流. |
| -copy | 表示不重新编码音频,而是直接复制原始音视频流 |
| vn | 表示不处理视频部分,即忽略视频流. |
| -vn | 表示不处理视频部分,即忽略视频流. |
ffmpeg.exe 命令
# 视频格式转换
# 将 avi 格式的视频转化为 mp4 格式
ffmpeg -i input.avi output.mp4
# 提取音频
# 视频格式提取音频
ffmpeg -i input.mp4 -acodec aac -vn output.aac
# 视频格式提取音频
ffmpeg -i input.mp4 -acodec copy -vn ouput.aac
# 视频剪切
# 从时间00:00:15开始,截取5秒钟的视频.
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
# 调整视频分辨率
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
ffplay.exe 命令
ubuntu配置音视频开发环境
- 创建 ffmpeg 安装的目标路径
mkdir -p /usr/local/ffmpeg/lib
- 下载 ffmpeg 压缩包(ffmpeg_7.1.1.orig.tar.xz),解压到根目录下的 ffmpeg 目录.
tar -xvf ffmpeg_7.1.1.orig.tar.xz /ffmpeg
- 配置 ffmpeg
./configure --prefix="/usr/local/ffmpeg/" \
--enable-gpl \
--enable-nonfree \
--enable-ffplay \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-libspeex \
--enable-shared \
--enable-pthreads \
--enable-version3 \
--enable-hardcoded-tables
- 解决编译 ffmpeg 遇到的问题
- yasm/nasm not found or too old. Use –disable-yasm
sudo apt-get update
sudo apt-get yasm/
- ERROR: libmp3lame >= 3.98.3 not found
sudo apt-get install libmp3lame-dev
# 配置
./configure --prefix="/usr/local/ffmpeg/" \
--enable-gpl \
--enable-nonfree \
--enable-ffplay \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-libspeex \
--enable-shared \
--enable-pthreads \
--enable-version3 \
--enable-hardcoded-tables --extra-ldflags=-L/usr/local/ffmpeg/lib
- ERROR: speex not found using pkg-config
# 下载 speex
wget http://downloads.xiph.org/releases/speex/speex-1.2.1.tar.gz
- ERROR: x264 not found using pkg-config
# 下载 x264 压缩包
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.gz
# 配置 x264
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --disable-asm
# 编译
make
# 编译
make install
- ERROR: x265 not found using pkg-config
# 下载 x265 压缩包
wget http://ftp.videolan.org/pub/videolan/x265/x265_4.1.tar.gz
# 解压
# 配置 x265
```shell
cd x265_4.1/build/linux/
./make-Makefiles.bash
5.1. cmake: command not found
sudo apt-get install cmake
5.2. ccmake: command not found
sudo apt-get update
sudo apt-get install cmake-curses-gui
- 配置 SDL
# 下载 SDL
wget https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.32.10.tar.gz
tar -xvf release-2.32.10.tar.gz
apt install libxext-dev
./configure --prefix=/usr/local/ffmpeg/ --enable-shared
make
make install
# 编译 ffmpeg
修改系统环境变量
编译
# 编辑配置文件
sudo vim /etc/profile
# 在文件末尾添加以下内容
export PATH="/usr/local/ffmpeg/bin:$PATH"
# 使配置生效
source /etc/profile
# 编辑配置文件
sudo vim /etc/ld.so.conf
# 在文件末尾添加以下内容
/usr/local/ffmpeg/lib
#
sudo ldconfig
windows配置音视频开发环境
- 官网(https://ffmpeg.org/download.html)下载 ffmpeg, 选择 Windows下载中的 Windows builds by BtbN.
- 点击后进入到对应的 gtihub 仓库, 选择 ffmpeg-master-latest-win64-gpl-shared.zip 下载.
Clion 中配置
创建项目
CMakeLists.txt
main.cpp
添加动态库
- 创建 FFmpegTest 文件夹
- FFmpegTest 文件夹下包含 build文件夹, lib文件夹, CMakeLists.txt文件, main.cpp文件. build文件夹: Cmake构建的位置 lib文件夹:用于存放FFmpeg中的 bin文件夹、include文件夹、lib文件夹.
- FFmpegTest 文件夹下的 lib 目录下创建一个 FFmpeg 文件夹, 拷贝解压出来的文件夹中的bin目录 、include目录、 lib目录.
cmake_minimum_required(VERSION 3.16)
project(FFmpegTest VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
# 导入FFmpeg
include_directories("./lib/FFmpeg/include")
link_directories("./lib/FFmpeg/lib")
#define STDC_CONSTANT_MACROS
#include <cstdio>
#include <iostream>
using namespace std;
extern "C" {
#include "lib/FFmpeg/include/libavcodec/avcodec.h"
}
int main() {
printf("%s\n", avcodec_configuration());
std::cout << "当前FFmpeg版本: " << av_version_info() << std::endl;
return 0;
}
- 将 bin目录下的 dll 文件拷贝到可执行文件所在目录.