linux离线状态下将视频mp4格式转换m3u8

因为业务需求,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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值