Centos 安装FFmpeg教程记录

系统环境:CentOS 7.6 64位

一、自己制作的安装脚本

ffmpeg最新版本下载地址:http://ffmpeg.org/releases/?C=M;O=D

具体脚本内容见结尾,源码包存在阿里云盘里
wget --no-check-certificate https://www.xxx.com/app/ffmpeg.sh && sh ffmpeg.sh
vi /etc/ld.so.conf
/usr/local/lib/
ldconfig
ffmpeg -version

下面这个可以先不整
vim /etc/profile
添加以下内容
#set ffmpeg environment
PATH=$PATH:/usr/local/ffmpeg/bin
export PATH
#保存退出 #使配置生效
source /etc/profile

然后开始安装宝塔
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

配置好环境,PHP7.0,LNMP默认安装的Nginx1.18有可能不管用,最好等安装完ffmpeg-php组件之后卸载掉重新安装新版的Nginx1.2.0

开始下载FFmpeg-PHP组件:
mkdir app && cd /app
https://github.com/Jan-E/php7-ffmpeg
下载后之后
1、修改ffmpeg_frame.c中所有的RGBA32为RGB32
2、修改php_ffmpeg.h中,将原来av_frame_alloc avcodec_alloc_frame的顺序调换一下,改为avcodec_alloc_frame av_frame_alloc(这一步在实际操作过程中并没有用到)
cd /app/ffmpeg-php
/www/server/php/70/bin/phpize
yum install -y re2c
./configure --with-php-config=/www/server/php/70/bin/php-config
make && make install

报错解决方案:
# make: *** [ffmpeg-php.lo] Error 1
mv ffmpeg-php.loT ffmpeg-php.lo
# make: *** [ffmpeg_movie.lo] Error 1
mv ffmpeg_movie.loT ffmpeg_movie.lo
# make: *** [ffmpeg_frame.lo] Error 1
mv ffmpeg_frame.loT ffmpeg_frame.lo
# make: *** [ffmpeg_errorhandler.lo] Error 1
mv ffmpeg_errorhandler.loT ffmpeg_errorhandler.lo
# make: *** [ffmpeg_tools.lo] Error 1

提示:
Installing shared extensions:/www/server/php/70/lib/php/extensions/no-debug-non-zts-20151012/
表示安装成功,之后执行make test进行测试检查错误,往上翻看错误提示:
/www/server/php/70/bin/php: symbol lookup error: /app/ffmpeg-php/modules/ffmpeg.so: undefined symbol: register_ffmpeg_movie_class

然后
nm /www/server/php/70/lib/php/extensions/no-debug-non-zts-20151012/ffmpeg.so|grep register_ffmpeg_movie_class
 U register_ffmpeg_movie_class
别管了,整不了,死活整不了

然后只需要放开以下PHP函数即可
禁用函数exec、putenv、shell_exec、proc_open


二、纯净环境下手动安装教程:

下面这些程序也不知道该不该安装,反正捣鼓了三四天,系统来回清盘了几次,一遍搜索教程一遍测试,才摸索出来的

因个人习惯,先把创建一个存放安装包的目录(app)吧,备用

cd / && mkdir app

然后开始安装软件

#安装gcc编译器
yum install -y gcc
#安装git:
yum install -y git
#安装yasm:
yum install -y yasm
#安装传输指令 上传下载
yum install -y lrzsz

下面安装安装zlib(还有libpng,但我没有安装)如果不安装这个,加水印的时候会报错

#安装zlib
yum install -y zlib
yum install -y zlib-devel

如果上面的不能用(经过测试是可以用的),用下面这种方式安装zlib

cd /app
wget http://pkgs.fedoraproject.org/repo/pkgs/mingw-zlib/zlib-1.2.7.tar.gz/60df6a37c56e7c1366cca812414f7b85/zlib-1.2.7.tar.gz
tar -xvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure --prefix=/usr/local/zlib && make && make install
#然后
vim /etc/ld.so.conf //增加以下内容
/usr/local/zlib/lib/ //添加库路径,添加完保存退出
ldconfig //使配置生效
#然后
yum install zlib-devel

#安装MP3解码器libmp3lame

#默认安装方法  多次测试本方法行不通
yum install -y lame
yum install -y lame-libs

#事实证明这个版本太低了

如果上面的不能用,用下面这个,如果安装包下载不下来,就去阿里云盘有备份

cd /app
wget https://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xvf lame-3.99.5.tar.gz
cd lame-3.99.5
#这个测试可行,直接默认安装
./configure
#指定目录安装 测试多次,偶尔出问题
./configure --prefix=/usr/local/lame

#总是出:ERROR: libmp3lame >= 3.98.3 not found
#可以尝试这个
./configure --prefix=/usr/local/lame --includedir=/usr/local/include --libdir=/usr/local/lib --enable-shared

make && sudo make install
然后
vim /etc/ld.so.conf //增加以下内容
/usr/local/lame/lib/ //添加库路径,添加完保存退出
ldconfig //使配置生效


下面这句不知道有没有用,看着用吧,环境变量,我个人还是比较喜欢环境变量

vim /etc/profile
添加以下内容
export PATH=/usr/local/lame/bin:$PATH
export PATH=/usr/local/lame/include:$PATH
export PATH=/usr/local/lame/lib:$PATH
保存退出 #使配置生效
source /etc/profile


下面安装nasm,因为安装x264需要用到

#安装nasm:
yum install -y nasm

上面这种方式安装可能会版本太低,直接用下面的方法安装nasm吧

wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.xz
xz -d nasm-2.13.03.tar.xz && tar -xvf nasm-2.13.03.tar
cd nasm-2.13.03
./configure  --prefix=/usr/local/nasm
make &&sudo make install

开始安装x264

cd /app
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix=/usr/local/x264 --enable-shared --enable-static --disable-asm
make &&sudo make install

然后

vim /etc/ld.so.conf //增加以下内容
/usr/local/x264/lib //添加x264库路径,添加完保存退出
ldconfig //使配置生效

开始安装ffmpeg

cd /app
wget http://ffmpeg.org/releases/ffmpeg-4.4.tar.xz
xz -d ffmpeg-4.4.tar.xz && tar -xvf ffmpeg-4.4.tar
cd ffmpeg-4.4
cd /app/ffmpeg-4.4
export PKG_CONFIG_PATH=/usr/local/x264/lib/pkgconfig:$PKG_CONFIG_PATH
#下面这句正常,如果前面的安装都用方案一,且不需要处理MP3,则测试本条命令正常,【首推方案一】
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-libx264 --enable-zlib
#下面这句带有MP3解码器 lame默认安装时用这个
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-libx264 --enable-zlib --enable-libmp3lame
#下面这句带有MP3解码器  lame指定目录安装时用这个
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-libx264 --enable-zlib --enable-libmp3lame --extra-ldflags=-L/usr/local/lame/lib --extra-cflags=-I/usr/local/lame/include
make && sudo make install

然后

vim /etc/ld.so.conf
#添加i
include ld.so.conf.d/*.conf
/usr/local/ffmpeg/lib/
#esc接:wq回车保存退出
ldconfig

查看版本

/usr/local/ffmpeg/bin/ffmpeg -version

配置环境变量:

vim /etc/profile
添加以下内容
#set ffmpeg environment
PATH=$PATH:/usr/local/ffmpeg/bin
export PATH
#保存退出 #使配置生效
source /etc/profile

查看版本

ffmpeg -version

如果lame是默认安装路径,可会报错:Estimating duration from bitrate, this may be inaccurate

但生成的文件是正常的

QQ截图20210928155846.png


============测试视频转换==============

准备测试素材

mkdir atest
cd /atest
wget --no-check-certificate https://www.xxx.com/atest/video1.mp4
wget --no-check-certificate https://www.xxx.com/atest/video2.mp4
wget --no-check-certificate https://www.xxx.com/atest/logo.png
wget --no-check-certificate https://www.xxx.com/atest/logo.jpg
wget --no-check-certificate https://www.xxx.com/atest/music1.mp3
wget --no-check-certificate https://www.xxx.com/atest/music2.mp3

测试命令

#视频加水印方式一:
#左上角
ffmpeg -i video1.mp4 -c:v libx264 -b:v 1000k -c:a copy -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" video0.mp4
#右下角
ffmpeg -i video1.mp4 -c:v libx264 -b:v 1000k -c:a copy -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:main_h-overlay_h-10" video0.mp4


# == 参数解析 ==
# -i :一般表示输入
# video1.mp4:这里表示要处理的视频源
# -vf:滤镜相关,视频裁剪,水印等等操作都需要它完成
# wenzi.png: 要添加的水印图片地址
# overlay:水印参数
# main_w-overlay_w-10 : 水印在x轴的位置,也可以写成x=main_w-overlay_w-10
# main_h-overlay_h-10:水印在y轴的位置
# video0.mp4:输出视频

#视频加水印方式二:
#左下角:
ffmpeg -i video1.mp4 -i logo.png -filter_complex 'overlay=x=10:y=main_h-overlay_h-10' video0.mp4

# == 参数解析 ==
# -filter_complex: 相比-vf, filter_complex适合开发复杂的滤镜功能,如同时对视频进行裁剪并旋转。参数之间使用逗号(,)隔开即可
# main_w:视频宽度
# overlay_w: 要添加的图片水印宽度
# main_h : 视频高度
# overlay_h:要添加的图片水印宽度


# == 水印位置的不同写法 ==
# 左上
overlay=10:10
overlay=x=10:y=10
# 左下
overlay=10:main_h-overlay_h-10
overlay=x=10:y=main_h-overlay_h-10
# 右上
overlay=main_w-overlay_w-10:10
overlay=x=main_w-overlay_w-10:y=10
# 右下
overlay=main_w-overlay_w-10:main_h-overlay_h-10
overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
#视频合并
#先转TS,合并后再转MP4,速度快,文件小,几乎无损
ffmpeg -i video0.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb video0.ts
ffmpeg -i video2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb video2.ts
ffmpeg -i "concat:video0.ts|video2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc hebing.mp4
#多合一测试命令,先加水印,再合并,再删除多余的
ffmpeg -i video1.mp4 -c:v libx264 -b:v 1000k -c:a copy -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" video0.mp4 && ffmpeg -i video0.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb video0.ts && ffmpeg -i video2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb video2.ts && ffmpeg -i "concat:video0.ts|video2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc hebing.mp4 && rm -rf video0.ts && rm -rf video2.ts  && rm -rf video0.mp4

音频处理

#拼接两个mp3
ffmpeg -i music1.mp3 -i music2.mp3 -filter_complex '[0:0] [1:0] concat=n=2:v=0:a=1 [a]' -map [a] hebing.mp3



上传、下载、删除

#如果安装过了,这个就不用安装了
yum install -y lrzsz

#下载文件
sz water.mp4
sz hebing.mp4

#上传文件
rz

#删除文件
rm -rf water.mp4
rm -rf hebing.mp4
rm -rf hebing.mp4 && rm -rf video0.ts && rm -rf video2.ts  && rm -rf video0.mp4

#删除测试输出的视频及音频
rm -rf hebing.mp4 && rm -rf video0.ts && rm -rf video1.ts && rm -rf video2.ts  && rm -rf video0.mp4   &&  rm -rf hebing.mp3

============测试视频转换==============

相关报错解决方案:

1、有个很牛的,不知道什么作用,测试没成功

https://blog.csdn.net/wmm3525/article/details/105792620

conda uninstall ffmpeg
conda install ffmpeg

2、FFmpeg&libx264编译安装遇到的各种坑

http://www.juzi89.com/?p=216

3、加水印提示x264报错

https://blog.csdn.net/yuxielea/article/details/103146362

4、contos7系统下ffmpeg 无法加png水印解决方法

https://blog.csdn.net/pangdongh/article/details/93982791

5、加水印提示x264报错

https://blog.csdn.net/yuxielea/article/details/103146362


二、安装ffmpeg-php扩展


cd /app

git clone https://github.com/Jan-E/php7-ffmpeg.git

cd php7-ffmpeg

/www/server/php/70/bin/phpize

./configure --with-php-config=/www/server/php/70/bin/php-config

make && make install


/www/server/php/56/bin/phpize

./configure --with-php-config=/www/server/php/56/bin/php-config


出现错误:configure: error: ffmpeg headers not found.

解决办法:把ffmpeg软件的include路径下的文件复制到/usr/include/

复制命令:cp -r /usr/local/ffmpeg/include/* /usr/include/


出现错误:configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

解决办法:yum install -y re2c


出现错误:configure: error: ffmpeg shared libraries not found.

解决办法:卡到这里走不动了

./configure --with-ffmpeg=/usr/local/ffmpeg --with-php-config=/www/server/php/70/bin/php-config


再报错就按这个教程:修改文件


https://blog.csdn.net/weixin_36329899/article/details/115246446


重启php出现错误:

错误提示:php: symbol lookup error: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so: undefined symbol: register_ffmpeg_frame_class


解决办法http://www.xinze.me/ffmpeg-ffmpeg-php-%E5%AE%89%E8%A3%85%E5%8F%8A%E5%87%BA%E9%94%99%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/


nm /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so|grep register_ffmpeg_frame_class
nm /www/server/php/70/lib/php/extensions/no-debug-non-zts-20151012/ffmpeg.so|grep register_ffmpeg_frame_class
#输出U register_ffmpeg_frame_class

则修改ffmpeg_frame.c,将3处的PIX_FMT_RGBA32 更改为PIX_FMT_RGB32即可。

vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:w
:q!
./configure --with-php-config=/usr/local/php/bin/php-config  --with-ffmpeg=/usr/local
make test
make
make install

再不行换版本吧









ffmpeg.sh

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

runPath="/root"

Install_yasm()
{
	cd ${runPath}
	yum install -y bzip2
	yum install -y unzip
	yum install -y git
	yum install -y gcc
	yum install -y zlib
	yum install -y zlib-devel
	yum install -y lrzsz
	yum install -y yasm
	yum install -y re2c
}
Install_nasm()
{
	cd ${runPath}
	wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz
	xz -d nasm-2.15.05.tar.xz
	tar -xvf nasm-2.15.05.tar
	cd nasm-2.15.05
	./configure
	make
	make install
	cd ..
	rm -rf nasm*
}
Install_lame()
{
	cd ${runPath}
	wget https://nchc.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
	tar -xzvf lame-3.99.5.tar.gz
	cd lame-3.99.5
	./configure
	make
	make install
	cd ..
	rm -rf lame*
}
Install_x264()
{
	cd ${runPath}
	git clone https://code.videolan.org/videolan/x264.git
	cd x264
	./configure --enable-shared
	make
	make install
	cd ..
	rm -rf x264*
}
Install_ffmpeg()
{
	cd ${runPath}
	wget http://ffmpeg.org/releases/ffmpeg-4.4.tar.bz2
	tar -xjvf ffmpeg-4.4.tar.bz2
	cd ffmpeg-4.4
	export PKG_CONFIG_PATH=/usr/local/bin/x264/lib/pkgconfig:$PKG_CONFIG_PATH
	./configure --enable-gpl --enable-libmp3lame --enable-libx264 --enable-zlib --enable-version3 --enable-shared
	make
	make install
	cd ..
	rm -rf ffmpeg*
	ldconfig
}
Install_yasm
Install_nasm
Install_lame
Install_x264
Install_ffmpeg


发表评论:

Powered By Z-BlogPHP 1.7.2

Copyright Www.Niaoseo.Com Rights Reserved.