目录
环境信息
操作系统:CentOS 7.9
ffmpeg源码编译安装版本:6.0
下面介绍yum和源码编译两种安装方式, 根据情况选择一种即可
安装
yum安装
# 安装依赖
$ yum install -y epel-release
$ yum install -y autoconf \
automake \
bzip2 \
bzip2-devel \
cmake \
freetype-devel \
gcc \
gcc-c++ \
git \
libtool \
make \
pkgconfig \
zlib-devel
$ rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
$ rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# 执行安装
$ yum install -y ffmpeg ffmpeg-devel
# 验证
$ ffmpeg -version
源码编译安装
更新环境变量
echo "PATH=\$PATH:/usr/local/ffmpeg/bin" > /etc/profile.d/ffmpeg.sh
source /etc/profile.d/ffmpeg.sh
安装编译依赖
yum install -y
autoconf \
automake \
bzip2 \
bzip2-devel \
cmake \
freetype-devel \
gcc \
gcc-c++ \
git \
libtool \
make \
pkgconfig \
zlib-devel
cd /usr/local/src
mkdir ffmpeg_sources
安装 nasm
cd /usr/local/src/ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2
tar xjvf nasm-2.15.05.tar.bz2
cd nasm-2.15.05
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin"
make && make install
安装 yasm
cd /usr/local/src/ffmpeg_sources
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin"
make && make install
安装 x264
cd /usr/local/src/ffmpeg_sources
git clone --branch stable --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="/usr/local/ffmpeg/lib/pkgconfig" ./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin" --enable-static
make && make install
安装 x265
cd /usr/local/src/ffmpeg_sources
git clone --branch stable --depth 2 https://bitbucket.org/multicoreware/x265_git
cd x265_git/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/local/ffmpeg" -DENABLE_SHARED:bool=off ../../source
make && make install
安装 libfdk_aac
cd /usr/local/src/ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="/usr/local/ffmpeg" --disable-shared
make && make install
安装 libmp3lame
cd /usr/local/src/ffmpeg_sources
curl -O -L https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin" --disable-shared --enable-nasm
make && make install
安装 libopus
cd /usr/local/src/ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xzvf opus-1.3.1.tar.gz
cd opus-1.3.1
./configure --prefix="/usr/local/ffmpeg" --disable-shared
make && make install
安装 libvpx
cd /usr/local/src/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure --prefix="/usr/local/ffmpeg" \
--disable-examples \
--disable-unit-tests \
--enable-vp9-highbitdepth \
--as=yasm
make && make install
安装 FFmpeg
cd /usr/local/src/ffmpeg_sources
curl -O -L http://ffmpeg.org/releases/ffmpeg-6.0.tar.gz
tar -zxvf ffmpeg-6.0.tar.gz
cd ffmpeg-6.0
PATH="/usr/local/ffmpeg/bin:$PATH" PKG_CONFIG_PATH="/usr/local/ffmpeg/lib/pkgconfig" ./configure \
--prefix="/usr/local/ffmpeg" \
--pkg-config-flags="--static" \
--extra-cflags="-I/usr/local/ffmpeg/include" \
--extra-ldflags="-L/usr/local/ffmpeg/lib" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--bindir="/usr/local/ffmpeg/bin" \
--enable-gpl \
--enable-libfdk_aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
make && make install
hash -d ffmpeg
echo 'PATH=$PATH:/usr/local/ffmpeg/bin' > /etc/profile.d/ffmpeg.sh
source /etc/profile
简单使用
检测视频分辨率
# 检测视频 10S.mp4 的分辨率
$ ffprobe -v error \
-select_streams v:0 \
-show_entries stream=width,height \
-of csv=s=x:p=0 \
10S.mp4
576x1024
生成视频缩略图
# 10S.mp4 为输入的视频,00:00:01 表示从视频第一秒处获取缩略图,10S_thumbnail.jpg 为输出的缩略图
$ ffmpeg -i 10S.mp4 \
-ss 00:00:01 \
-vframes 1 \
10S_thumbnail.jpg
提取视频音频
# 10S.mp4替换成自己的视频文件路径,10S.m4a是生成后的音频文件
$ ffmpeg -i 10S.mp4 -vn -acodec copy 10S.m4a
视频拆分成多张带序号的图片
- 拆分时指定帧速率
# 指定帧速率为5, %03d 3位占位符 001-050
ffmpeg -i 10S.mp4 -vf "fps=5" %03d.png
- 拆分时指定帧速率和分辨率
# 指定分辨率为512x288 (宽x高)
$ ffmpeg -i 10S.mp4 -vf "fps=5,scale=512:288" %03d.png
多张视频带序号的图片合成视频
# %03d.png 为输入的图片, 10S.m4a 为输入的音频,new_10S.mp4为最后合成的视频
ffmpeg -r 5 \
-i %03d.png \
-i 10S.m4a \
-c:v libx264 \
-vf "fps=5" \
-pix_fmt yuv420p \
-c:a aac \
-strict experimental \
-b:a 192k \
-shortest \
new_10S.mp4
2段视频左右拼接
# 10S_1.mp4、10S_2.mp4为两个输入视频,lr_10S.mp4为左右拼接后的视频
$ ffmpeg -i 10S_1.mp4 \
-i 10S_2.mp4 \
-filter_complex [0:v][1:v]hstack \
lr_10S.mp4
2段视频上下拼接
# 10S_1.mp4、10S_2.mp4为两个输入视频,ud_10S.mp4为上下拼接后的视频
$ ffmpeg -i 10S_1.mp4 \
-i 10S_2.mp4 \
-filter_complex [0:v][1:v]vstack \
ud_10S.mp4