因为业务需求,python文件生成的视频为MP4格式,无法在前端浏览器正常播放,需切换m3u8格式,但因为服务器是没有网络的,因袭需要在离线状态下进行完成。
1.离线安装ffmpeg
看网上许多教程,ffmpeg可完成视频格式的转换,首先进行离线安装。
参考博文:https://blog.csdn.net/weixin_45181398/article/details/126590902
因为ffmpeg的安装,需要用到yasm安装包,因此没有安装yasm的需要先进行安装。
离线安装yasm
[yasm-release]
下载安装包,传到服务器上进行解压安装
# 解压安装
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix=/usr/local/yasm
# 编译安装
make && make install
# 配置环境变量
export PATH=$PATH:/usr/local/yasm/bin
# 执行配置文件,让环境变量生效
source /etc/profile
source ~/.bashrc
安装ffmpeg
安装包下载路径,传到服务器进行加压安装。
#1. 解压
tar -zxvf ffmpeg-4.4.tar.gz
# 2.安装
cd ffmpeg-4.4
./configure --enable-share --prefix=/usr/local/ffmpeg
# 编译安装
make && make install
# 完成安装之后检查运行
cd /usr/local/ffmpeg/bin
ldd ffmpeg
#如果出现not found,需要进行环境变量的配置
# 修改环境变量,首先修改ffmpeg的环境变量,将如下内容加到export PATH=$PATH:/usr/local/yasm/bin后面
export PATH=$PATH:/usr/local/yasm/bin:/usr/local/ffmpeg/bin
# 修改lib的环境变量,将如下内容加到/etc/profile以及/root/.bashrc中去
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib/:$LD_LIBRARY_PATH
# 执行配置文件使环境变量生效即可,再检查运行结果即可
ldd ffmpeg
./ffmpeg
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
configuration: --enable-shared --prefix=/usr/local/ffmpeg
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
以上步骤,ffmpeg安装完成,也可输入ffmpeg -version进行测试
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-shared --prefix=/usr/local/ffmpeg
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
2.使用ffmpeg进行格式转换
命令行使用:
ffmpeg -i ./res.mp4 -c:v h264 -flags +cgop -g 30 -hls_time 5 -hls_list_size 0 -hls_segment_filename index%3d.ts res.m3u8
也可写在python文件中
ffmpeg ='ffmpeg -i {} -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls {}'.format(vedio_name, to_path)
f = os.popen(ffmpeg)
ffmpeg2 = 'ffmpeg -i {} -vcodec copy -acodec copy -absf aac_adtstoasc {}'.format(to_path, vedio_name)
f2 = os.popen(ffmpeg2)
但是出现报错:Unknown encoder ‘h264’
使用下述命令运行,报错为 Unknown encoder ‘libx264’
ffmpeg -i res.mp4 -c:v libx264 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
看到解决方法是,需要安装x264。
3.离线安装x264
参考链接:https://blog.csdn.net/djrm11/article/details/106258763
git clone git://git.videolan.org/x264.git
cd x264
#查看帮助信息
./configure --help
./configure --enable-shared --enable-static --disable-asm
make
make install
./configure --help
出现报错 :/bin/sh^M: 坏的解释器: 没有那个文件或目录,找到解决方案:在终端使用命令:sed -i ‘s/\r$//’ echo.sh (将echo.sh替换为自己的脚本文件名) 报这个错的文件 都执行以下这条命令
参考链接:https://www.cnblogs.com/sakura404/p/6824936.html
make 编译报错:x264.c: 在函数‘help’中:x264.c:506:21: 错误:‘X264_VERSION’未声明(在此函数内第一次使用) X264_BUILD, X264_VERSION
解决方案:
运行 ./version.sh
./version.sh
#define X264_REV 3106
#define X264_REV_DIFF 0
#define X264_VERSION " r3106 eaa68fa"
#define X264_POINTVER "0.164.3106 eaa68fa"
#!/bin/sh
如果还不行的可以使用下面参数配置
./configure --enable-shared --enable-static --disable-opencl --enable-pic --disable-asm
又出现一个问题
./ffmpeg: error while loading shared libraries: libx264.so.164: cannot open shared object file: No such file or directory
是因为找不到libx264.so.164
解决方案:
vim /etc/ld.so.conf
#加上x264的lib路径,我的是/usr/local/lib 保存退出
/usr/local/lib
#刷新配置
ldconfig
# 执行不出错啦!
若出现: ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
vim /etc/ld.so.conf
/usr/local/ffmpeg/lib
终于终于解决了!!!
每次重启后,执行ffmpeg找不到,需要重新配置环境变量。
问题解决:
将/usr/local/ffmpeg/bin文件夹下的ffmpeg文件复制到/usr/local/bin文件夹下。
然后执行chmod -R 777 /usr/local/bin授权即可。
其他参考 https://blog.csdn.net/Dontla/article/details/122318332