简介:
ffmpeg工具主要用于音视频编解码,ffmpeg的主要工作流程如下所示:
- 读取输入源
- 进行音视频的解封装
- 解码每一帧音视频数据
- 编码每一帧音视频数据
- 进行音视频的重写封装
- 输出到目标
读取文件-->解封装-->解码-->转换参数-->新编码-->封装-->写入文件
如上述流程
- ffmpeg首先读取输入源,然后通过Demuxer将音视频包进行解封装,这个动作通过调用libavformat中的接口即可实现;
- 接下来通过Decoder进行解码,将音视频通过Decoder解包成为YUV或者PCM这样的数据,Decoder通过libavcodec中的接口即可实现;
- 然后通过Encoder将对应的数据进行编码,编码可以通过libavcodec中的接口来实现;
- 接下来将编码后的音视频数据包通过Muxer进行封装,Muxer封装通过libavformat中的接口即可实现,输出成为输出流;
ffmpeg + vmaf 环境配置
1、安装依赖包,将下述代码保存成test_install.sh脚本,赋予权限chmod 777 test_install.sh,然后执行./test_install.sh,等待依赖包安装完成,如果有安装失败的依赖包,可先忽略
#!/bin/bash
errArra=()
# 安装libva编译环境包
packageArray=(autoconf libtool libdrm-dev xorg xorg-dev openbox libx11-dev libgl1-mesa-glx libgl1-mesa-dev automake-1.15 x11vnc)
a_len=${#packageArray[@]}
for ((i=0; i<$a_len; ++i))
do
echo "****************Start installing ${packageArray[i]}************"
apt-get install ${packageArray[i]} -y
if [[ "$?" -ne "0" ]]; then
echo "Failed to install ${packageArray[i]}"
errArray+=${packageArray[i]}
errArray+=" "
fi
done
# 安装ffmpeg编译环境包
function apt_install_ffmpeg_package()
{
packageArray=(libx265-dev libva-drm2 libx11-dev libvpx-dev libopus-dev libx264-dev libsdl2-dev gnutls-dev ladspa-sdk libass-dev libbs2b-dev caca-utils libdc1394-22-dev libgme-dev
libgsm1-dev libopenjp2-7-dev libopenjp2-tools libopenmpt-dev librsvg2-dev libsnappy-dev libssh-dev libtheora-dev libspeex-dev libtheora-dev libtwolame-dev libwavpack-dev libwebp-dev libxvidcore-dev
libzmq3-dev libopenalpr2 libcdio-dev libfdk-aac-dev libbluray-dev libxml2-dev libmp3lame-dev libsoxr-dev libvorbis-dev nasm yasm libvdpau-dev)
a_len=${#packageArray[@]}
for ((i=0; i<$a_len; ++i))
do
echo "***************Start installing ${packageArray[i]}*************"
apt-get install ${packageArray[i]} -y
if [[ "$?" -ne "0" ]]; then
echo "Failed to install ${packageArray[i]}"
errArray+=${packageArray[i]}
errArray+=" "
fi
done
}
apt_install_ffmpeg_package
# 输出安装错误的软件包
for ((i=0; i<${#errArray[@]}; ++i))
do
echo "***************Failed to install ${errArray[i]}*************"
done
2、首先安装Meson和Ninja:
sudo apt-get install ninja-build meson make
3、获取最新的vmaf:
地址:Releases · Netflix/vmaf · GitHub
由于使用的是ubuntu,我就下载了这个:
然后解压,到当前目录:
tar xvzf vmaf-2.3.1.tar.gz
4、安装libvmaf,以下逐条执行:
cd vmaf-2.3.1/libvmaf
meson build --buildtype release
ninja -vC build
ninja -vC build install
5、安装ffmpeg:
6、构建配置,编译ffmpeg:
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-nonfree --enable-libvmaf --enable-version3
sudo make
sudo make install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
可按照实际需求,添加配置(--enable-gpl --enable-libx264 --enable-libx265 --enable-nonfree --enable-libvmaf --enable-version3 这些就是配置)
7、注意事项
如果走完了整个流程,输入'ffmpeg -version',还是显示'不存在',那就是环境变量没有正确配置,可以采取以下验证方式:
which ffmpeg
/usr/local/bin/ffmpeg -version
如果可以正确运行,说明ffmpeg在'/usr/local/bin'路径下,那就把该路径添加到环境变量中,即可:
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc