**FFmpeg** 是一个视频编辑软件,可用于转换linux中的音频和视频流。之前有一个需求, 采集视频流, 合成MP4文件, 且自动截取指定时间的封面 .这些操作他都能能实现.
安装方法一
# 以下CentOS7 可行
shell > yum -y install epel-release
shell > rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
shell > yum install ffmpeg ffmpeg-devel -y
安装方法二
# 以下CentOS7,8可行
shell > wget https://raw.githubusercontent.com/jnaqsh/ffmpeg_installer/master/ff_installer.sh
shell > chmod a+x ff_installer.sh
shell > ./ff_installer.sh
# 以下CentOS7,8 可行
shell > dnf install epel-release dnf-utils
shell > yum-config-manager --set-enabled PowerTools
shell > yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo
shell > dnf install ffmpeg
shell > ffmpeg -version
# 以下CentOS 9可行9
shell > yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
shell > yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm
shell > yum install http://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/SDL2-2.0.20-2.el9.x86_64.rpm
shell > yum install ffmpeg ffmpeg-devel
安装方法三(编译安装)
yum install -y autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
mkdir -p ~/ffmpeg_sources
cd ~/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
./autogen.sh
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
cd ~/ffmpeg_sources
curl -O -L http://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="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
cd ~/ffmpeg_sources
git clone --branch stable --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
cd ~/ffmpeg_sources
git clone --branch stable --depth 2 https://bitbucket.org/multicoreware/x265_git
cd ~/ffmpeg_sources/x265_git/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
cd ~/ffmpeg_sources
git clone --depth 1 --branch v0.1.6 https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
cd ~/ffmpeg_sources
curl -O -L http://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="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install
cd ~/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="$HOME/ffmpeg_build" --disable-shared
make
make install
cd ~/ffmpeg_sources
curl -O -L http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.gz
tar xzvf libogg-1.3.3.tar.gz
cd libogg-1.3.3
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
cd ~/ffmpeg_sources
curl -O -L http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
tar xzvf libvorbis-1.3.5.tar.gz
cd libvorbis-1.3.5
./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
make
make install
cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/nv-codec-headers.git
cd nv-codec-headers
git checkout sdk/11.0
make PREFIX="$HOME/ffmpeg_build" BINDDIR="$HOME/bin"
make install PREFIX="$HOME/ffmpeg_build" BINDDIR="$HOME/bin"
cd ~/ffmpeg_sources
curl -O -L http://ffmpeg.org/releases/ffmpeg-5.0.1.tar.bz2
tar xjvf ffmpeg-5.0.1.tar.bz2
mv ffmpeg-5.0.1 ffmpeg
cd ~/ffmpeg_sources/ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include -I/usr/local/cuda/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib -L/usr/local/cuda/lib64" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libfdk_aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-cuda \
--enable-cuda-llvm \
--enable-cuda-nvcc \
--enable-cuvid \
--enable-nvenc \
--enable-libnpp \
--enable-openssl
make
make install
hash -r
采集一个m3u8资源, 导出为mp4 . (资源是宫崎骏电影:天空之城,网上随便找的,仅用于技术性研究)
shell > ffmpeg -i https://youku.com-l-youku.com/20181204/256_69121e32/1000k/hls/index.m3u8 Cityofsky.mp4
读取一个视频指定时间的图片 .
shell > ffmpeg -i https://youku.com-l-youku.com/20181204/256_69121e32/1000k/hls/index.m3u8 -ss 00:00:07.000 -vframes 1 thumb2.jpg
读取一个视频的音频资源
shell > ffmpeg -i https://youku.com-l-youku.com/20181204/256_69121e32/1000k/hls/index.m3u8 Cityofsky.MP3
将一个视频加快4倍 .
shell > ffmpeg -i init.mp4 -filter_complex "[0:v]setpts=0.25*PTS[v];[0:a]atempo=2.0,atempo=2.0[a]" -map "[v]" -map "[a]" 1.mp4
将一个视频转成多个清晰度HLS
shell > ffmpeg -i /www/video/h264/20211111/30/index.mp4 \
-c:v:0 libx264 -c:a:0 aac -ac 2 -b:v:0 2000k -b:a:0 128k -maxrate:0 2000k -bufsize:0 4000k -r 24 -ar 44100 -g 48 \
-c:v:1 libx264 -c:a:0 aac -ac 2 -b:v:1 1000k -b:a:1 128k -maxrate:2 1000k -bufsize:2 2000k -r 24 -ar 44100 -g 48 \
-c:v:2 libx264 -c:a:0 aac -ac 2 -b:v:2 600k -b:a:2 128k -maxrate:4 600k -bufsize:4 1000k -r 24 -ar 44100 -g 48 \
-filter:v:0 scale=-2:1080 -filter:v:1 scale=-2:720 -filter:v:2 scale=-2:480 \
-map 0:v -map 0:a -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map 'v:0,a:0 v:1,a:1 v:2,a:2' \
-hls_segment_type mpegts -hls_playlist_type vod \
-hls_start_number_source 1 -start_number 10 -hls_time 5 -hls_list_size 0 \
-master_pl_name index.m3u8 \
-hls_key_info_file /www/video/h264m3u8/20211111/30/enc.conf \
-hls_segment_filename /www/video/h264m3u8/20211111/30/%v/%d.ts \
/www/video/h264m3u8/20211111/30/%v/index.m3u8