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

news2024/12/27 12:49:56

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工具】笔记软件测评(简单)

介绍 笔记软件测评 印象笔记 ── ❌开源、❌markdown(不好用)、❌本地存储 臭名昭著,被资本搞烂的理想。 notion ── ❌开源、❌本地存储、✔️数据导出:PDF、HTML、Markdown & CSV (include subpages&#xf…

重回利润增长,涪陵榨菜为何能跑赢周期?

2022年消费市场持续低迷,疫情寒冬之下,不少食品快消企业均遭遇严重的业绩下滑,但一年里不断遭遇利空打击的“榨菜茅”涪陵榨菜,不仅安然躲过“酸菜劫”、走出“钠”争议,而且顺利将产品价格提起来,并在寒冬…

C++基础篇(一)-- 简单入门

C 语言是在优化 C 语言的基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言。在后来的持续研究中,C 增加了许多新概念,例如虚函数、重载、继承、标准模板库、异常处理、命名空间等。 C 语言的特点主要表现在两个方面:全面兼…

CSS的背景版块知识

😊博主页面:鱿年年 👉博主推荐专栏:《WEB前端》👈 ​💓博主格言:追风赶月莫停留,平芜尽处是春山❤️ 目录 前言 一、背景颜色 二、背景图片 三、背景平铺 四、背景图片位置…

ATTCK v10版本战术介绍—持久化(二)

一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术(一)知识,本期我们为大家介绍ATT&CK 14项战术中持久化战术(二)涉及的6项子技术,后续会陆续介绍其他战术…

魔兽世界335 自动加入公会教程

最近遇到新人进游戏不能自动加入公会的问题,论坛找了好久也没有找到解决办法。自己摸索后发现是核心的问题,下面教程开始1.利用GM账号进游戏,分别创建LM、BL角色,利用GM命令创建公会举例 LM角色名字:暴风 BL角色名字&a…

开发手册——一、编程规约_4.OOP规约

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访…

聚观早报 |支付宝与阿里合作推出支付芯;多多视频DAU峰值破1.5亿

今日要闻:支付宝与阿里合作推出支付芯;保时捷中国召回Panamera系列汽车;「多多视频」DAU峰值破1.5亿;苏州立法禁止大数据“杀熟”;特斯拉投资者日首次开幕支付宝与阿里合作推出支付芯 3 月 2 日消息,支付宝…

taobao.item.sku.update( 更新SKU信息 )

¥开放平台免费API必须用户授权 *更新一个sku的数据 *需要更新的sku通过属性properties进行匹配查找 *商品的数量和价格必须大于等于0 *sku记录会更新到指定的num_iid对应的商品中 *num_iid对应的商品必须属于当前的会话用户 公共参数 请求地址: HTTP地址 http://gw.…

【C++修炼之路】23.哈希封装unordered系列

每一个不曾起舞的日子都是对生命的辜负 哈希封装unordered系列前言一.封装的迭代器二.改良后的HashTable.h三.封装的UnorderedSet.h四.封装的UnorderedMap.h五.Test.cpp及测试结果前言 unordered_map、unordered_set与map、set的区别是unoedered系列无序,除此之外功…

MD(消息摘要)、MAC(消息认证码)、数字签名的区别

MD(消息摘要)、MAC(消息认证码)、数字签名的区别 1.MD(消息摘要)-散列算法 摘要是哈希值,我们通过散列算法⽐如MD5算法就可以得到这个哈希值。摘要只是⽤于验证数据完整性和唯⼀性的哈希值,不管原始数据是什么样的&a…

【json代码diff效果展示】vue项目 手动实现高仿github的内容diff效果

文章目录1-1 vue-code-diff业务需求 : 思考: 对比两个json字符串,维护增删改的三个数组 遍历,进行三四五次if判断进入不同数组,渲染页面不对呀,数据展示,怎么根据json对应键展示字段呢&#xf…

Linux基础命令-gdisk使用GPT类型创建分区

文章目录 一 命令介绍 二 MBR和GPT的区别 MBR GPT 三 命令语法 四 基本参数 1 常用参数 2 操作菜单说明 五 参考实例 1 对磁盘设备进行分区 2 查看磁盘的所有分区表 命令总结 一 命令介绍 NAME gdisk - Interactive GUID partition table (GPT) manipulato…

VAE--part1

Variational Auto-Encoder, VAE__part1分布变换VAE慢谈VAE 初现分布标准化重参数技巧VAE的本质是什么?VAE的本质结构正态分布?变分在哪里参考博客仅做学习记录,侵删分布变换 VAE和GAN都是生成式模型,它们俩的目标基本一致&#x…

如何在 3dMax 中制作游戏中的战斧模型?

继续给大家分享3dMax教程:如何在3dsMax中制作战斧教程。 介绍 大家好!今天想和大家分享的是用3ds Max制作一把战斧,分享一下制作过程中用到的一些技巧和技巧。这是一个比较基础的教程,包括建模、雕刻、pbr贴图。 概念 这把战斧…

如何利用站内推广和站外推广提高转化率?

在如今的网络时代,拥有一个好的网站是非常重要的。但是,光有一个好的网站是不够的,为了达到我们的目标,需要不断地提高网站的转化率。而在实现这个目标的过程中,站内推广和站外推广是两个非常关键的因素。 站内推广是…

【企业服务器LNMP环境搭建】mysql安装

MySQL安装步骤: 1、相关说明 1.1、编译参数的说明 -DCMAKE_INSTALL_PREFIX安装到的软件目录-DMYSQL_DATADIR数据文件存储的路径-DSYSCONFDIR配置文件路径 (my.cnf)-DENABLED_LOCAL_INFILE1使用localmysql客户端的配置-DWITH_PARTITION_STORAGE_ENGINE使mysql支持…

Web3中文|值得了解:Web3的成功离不开什么?

即使受到负面新闻和部门监管的打击,区块链仍然是Web3应用程序开发、生态发展和主流采用的关键。围绕区块链技术的潜在用例及应用有很多争论,而最近相关讨论似乎已经进入了白热化的阶段。随着监管机构打击质押服务、禁止稳定币交易,以及对NFT支…

Delphi 中 FireDAC 数据库连接(多线程)

参见:Delphi 中 FireDAC 数据库连接(总览)本主题描述了如何在多线程环境下使用FireDAC。一、概述如果满足以下条件,FireDAC是线程安全的。一个连接对象和所有与之相关的对象(如TFDQuery、TFDTransaction等)…

CSS实现动画效果的菜单收起展开图标,html实现动画效果的箭头

效果 实现代码 此处JS代码引入了jquery <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>.menu-icon{position: absolute;left: 20%;top: 30%;transition: all .3s;}.menu-icon:before, .menu…