FFmpeg介绍
音视频的广泛应用
- 直播类:音视频会议(腾讯会议、Zoom)、娱乐直播(斗鱼、虎牙)
- 音视频通话:QQ、微信
- 网络视频:腾讯视频、爱奇艺
- 短视频:抖音、快手
- 视频监控:海康
- 人工智能:人脸识别、智能音箱
概念
FFMPEG全称为fast forward moving picture expert group,是领先的多媒体框架,提供了音视频的编码、解码、转码、封装、解封装、流、滤镜、播放等功能。几乎支持所有的音视频格式,高度可移植,跨平台:Linux、Mac、Windows等,采用LGPL\GPL发布。
影响范围
作为内核的播放器:暴风影音、QQ影音等
作为内核的转码工具:格式工厂等
提供的应用程序
- ffmpeg:音视频转码、编解码工具
- ffplay:音视频播放器
- ffprobe:多媒体分析器(查看码流信息、帧率)
- ffserver:多媒体实时广播流服务器
内部构成
- AVCodec:编解码模块
- AVFormat:封装模块
- AVFilter:滤镜模块
- AVUtil:基本工具模块
- AVDevice:采集与渲染输入输出模块
- swscale:视频图像转换模块
- swresample:音频转换计算模块
环境安装
- 前期准备
安装有Ubuntu系统的主机或者设备
一些相关软件包,已打包整理好。如需最新版可根据文中提示到官网下载。
- 编译安装
创建安装目录
sudo mkdir -p /usr/local/ffmpeg/lib
解压源码
tar -jxf ffmpeg-4.3.2.tar.bz2
到指定ffmpeg目录进行配置
cd ffmpeg-4.3.2/
配置:会报错很多次,过程中需反复执行此步,下述皆简称 配置,注意这步要在
ffmpeg-4.3.2
下运行
./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
如果报错:C compiler test failed.
解决:
sudo apt install g++
sudo apt install gcc
报错
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
解决: `sudo apt-get install yasm`
再配置
报错
ERROR: libfdk_aac not found
解决:
①官⽹下载fdk-aac源码:https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/
②解压fdk-aac:
tar -zxf fdk-aac-2.0.1.tar.gz
并到指定目录:
cd fdk-aac-2.0.1
③进行配置
./configure --prefix=/usr/local/ffmpeg --enable-shared
④源码编译再安装
make -j8
sudo make install
添加环境变量:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig/
再配置
如果依旧是 ERROR: libfdk_aac not found
可能是缺少pkg-config
解决方案:sudo apt install pkg-config
报错
ERROR: libmp3lame >= 3.98.3 not found
解决:
①官⽹下载mp3lame源码:https://sourceforge.net/projects/lame/
②解压lame文件并到指定目录下
tar -zxf lame-3.100.tar.gz
cd lame-3.100/
③进行配置
./configure --prefix=/usr/local/ffmpeg --enable-shared
④编译及安装
make -j8
sudo make install
再配置
报错
ERROR: speex not found using pkg-config
解决:
https://www.speex.org/downloads/ 下载Speex Source Code
tar -zxf speex-1.2.0.tar.gz
cd speex-1.2.0/
./configure --prefix=/usr/local/ffmpeg
make -j8
sudo make install
再配置
报错
ERROR: libx264 not found
解决:
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
tar jxf x264-master.tar.bz2
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --disable-asm
make -j8
sudo make install
再配置
报错
ERROR: x265 not found using pkg-config
解决:
http://ftp.videolan.org/pub/videolan/x265/
tar -zxf x265_3.2.tar.gz
cd x265_3.2/build/linux
sudo apt-get install cmake
./make-Makefiles.bash
make -j8
sudo make install
再配置
如果没有报错再执行(ffmpeg目录下)
make -j8
sudo make install
============================================================
安装完成后,发现/usr/local/ffmpeg/bin目录下,没有ffplay等应用程序,需要安装SDL
解决:
tar -zxf SDL2-2.0.12.tar.gz
cd SDL2-2.0.12/
./configure --prefix=/usr/local/ffmpeg/ --enable-shared
make -j8
sudo make install
再重新运行"ffmpeg配置命令",重新编译安装ffmpeg,并
make -j8
sudo make install
会发现/usr/local/ffmpeg/bin目录下已经有ffmpeg、ffplay、ffprobe等应用程序。
============================================================
执行
ffmpeg
,错误提示:The program ‘ffmpeg’ is currently not installed.You can install it bytyping: sudo apt install ffmpeg
解决方法:
1、修改系统环境变量: sudo vim /etc/profile文件最后加上export PATH="/usr/local/ffmpeg/bin:$PATH"
2、sudo vim /etc/ld.so.conf 文件最后加上 /usr/local/ffmpeg/lib
3、再执行命令 : sudo ldconfig
再运行ffmpeg命令有如下信息∶(还报错尝试重启机器)
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --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
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
============================================================
执行ffplay命令后,提示错误:Could not initialize SDL-No available video device(Did you set theDISPLAY variable?)
1、安装依赖包
sudo apt-get install libasound2-dev
sudo apt-get install libpulse-dev
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
2、重新编译安装SDL(cd SDL2-2.0.12/)
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --enable-video-x11 --enable-x11-shared --enable-video-x11-vm
make -j8
sudo make install
3、重新配置、编译、安装ffmpeg,再运行ffplay命令,即可正常运行输入ffmpeg -version,得到如下信息,说明ffmpeg安装成功。
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --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
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
最后测试一下
ffplay testVideo.mkv
(随便找个视频看是否可以播放成功)
FFmpeg源码目录的介绍
FFmpeg支持的工具:
- FFmpeg编码支持与定制:configure --help
- FFmpeg编码器支持:configure --list-encoders
- FFmpeg解码器支持:configure --list-decoders
- FFmpeg封装支持:configure --list-muxers
- FFmpeg解封装支持:configure --list-demuxers
- FFmpeg通信协议支持:configure --list-protocols
当前环境支持的工具:
- FFmpeg封装格式支持:ffmpeg -muxers / ffmpeg -demuxers / ffmpeg -formats
- FFmpeg编码格式支持:ffmpeg -encoders / ffmpeg -codecs
- FFmpeg解码格式支持:ffmpeg -decoders / ffmpeg -codecs
- FFmpeg滤镜支持:ffmpeg -filters
FFmpeg音视频处理流程
不同的封装格式就是用不同容器将不同排列方式的音频和视频流(帧)进行盛放。
编码的本质——压缩,像H264/H265/AAC这种可以理解为是压缩格式(编码格式)。
视频编码一定是有损的。
FFprobe工具介绍
- 查看帮助信息:
ffprobe --help
命令格式 :
ffprobe [OPTIONS] [INPUT_FILE]
- 查看多媒体数据包:
ffprobe -show_packets -show_data testVideo.flv
- 查看封装格式:
ffprobe -show_format testVideo.flv
- 查看视频文件的帧信息:
ffprobe -show_frames testVideo.flv
- 查看视频文件的流信息:
ffprobe -show_streams testVideo.flv
- 格式化显示:
ffprobe -of json -show_format testVideo.flv``````ffprobe -print_format csv -show_packets out.mp4 > outMp4.csv
FFplay工具介绍
- 查看帮助信息:
ffplay --help
命令格式:
ffplay [options] input_file
- 播放本地流:
ffplay -window_title "Testwindow" testVideo.flv
- 播放网络流:
ffplay http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
版权归原作者 Lu Zelin 所有, 如有侵权,请联系我们删除。