FFmpeg编译hevc版本,支持mac、linux系统

相关前置库

openssl

  • 仓库:https://github.com/openssl/openssl.git
  • 编译方式参考INSTALL.md中的步骤
 # Unix / Linux / macOS$ ./config$ make && sudo make install

lame库

  • 如果需要处理mp3相关,依赖lame库, 仓库:https://sourceforge.net/projects/lame/
  • mp3相关操作可以参考《ffmpeg转换mp3的实现》
  • 编译方式
build_lame()
{echo "Build lame"if [ -f "${INSTALL_DIR}/lib/libmp3lame.a" ]; thenecho "Use built static libmp3lame.a"elseif [ -f "${THIRD_PARTY_DIR}/lame-3.100.tar.gz" ]; thenecho "exist lame source in 3rd dir, use it"tar -zxvf ${THIRD_PARTY_DIR}/lame-3.100.tar.gz -C $INSTALL_DIRelseecho "do not have lame source, need download"wget https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz -P ${THIRD_PARTY_DIR}fipushd $INSTALL_DIR/lame*os_type=$(uname)if [[ "$os_type" == "Darwin" ]]; thenXCRUN_SDK=`echo macosx | tr '[:upper:]' '[:lower:]'`CC="xcrun -sdk $XCRUN_SDK clang -arch x86_64"CFLAGS="-arch x86_64 $SIMULATOR"if ! xcodebuild -version | grep "Xcode [1-6]\."thenCFLAGS="$CFLAGS -fembed-bitcode"fiCXXFLAGS="$CFLAGS"LDFLAGS="$CFLAGS"CC=$CC ./configure --disable-shared --disable-frontend --host=x86_64-apple-darwin \--prefix=$INSTALL_DIR CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"elif [[ "$os_type" == "Linux" ]]; thenLDFLAGS="-fPIC" ./configure --prefix=$INSTALL_DIR --build=BUILD --enable-static --enable-nasm --with-picelseecho "Unknown operating system"fimake -jmake installpopdfi
}

x264库

  • 如果需要x264,对应仓库:https://github.com/mirror/x264
build_x264()
{pushd $INSTALL_DIRecho "Build x264"if [ -d x264 ]; then echo "Use exists x264."elsegit clone -b master git@github.com:mirror/x264.gitfipushd x264if [ -f "${INSTALL_DIR}/lib/libx264.a" ]; thenecho "Use built static libx264.a"else./configure --prefix=$INSTALL_DIR \--enable-static \--enable-picfimake -jmake installpopdpopd
}

x265库

  • 如果需要x265,到官网下载https://www.x265.org/downloads/
build_x265()
{pushd $INSTALL_DIRecho "Build x265"if [ -d x265 ]; then echo "Use exists x265."elseif [ -f "${THIRD_PARTY_DIR}/x265_v3.3.tar.gz" ]; thenecho "exist x265 in 3rd dir, use it"tar -zxvf $THIRD_PARTY_DIR/x265_v3.3.tar.gz -C $INSTALL_DIRelseecho "download x265 source code from https://www.x265.org/downloads/ and save it to 3rd dir, for example: 3rd/x265_v3.3.tar.gz"fi fipushd x265_3.3ln -sf $INSTALL_DIR/../scripts/x265_multilib.sh build/linux/x265_multilib.shif [ -f "${INSTALL_DIR}/lib/libx265.a" ]; thenecho "Use built static libx265.a"elsepushd build/linuxsh x265_multilib.sh $INSTALL_DIRpopdfipopdpopd
}

FFmpeg的编译

  • 整理ffmpeg的编译相关build ffmpeg
# for debug, add --enable-debug --disable-stripping
build_ffmpeg()
{if [ -f "${INSTALL_DIR}/lib/libavcodec.so" ]; thenecho "Use built libavcodec.so"elsepushd $ROOT_DIRecho "check ffmpeg source"if [ -d FFmpeg ]; then echo "Use exists ffmpeg."elsegit clone -b feature/support_hevc_base_rc4.4 git@github.com:yagerfgcs/FFmpeg.gitfipushd FFmpeg# configureexport PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$INSTALL_DIR/lib/pkgconfig./configure --pkg-config=$(which pkg-config) \--pkg-config-flags="--static" \--enable-static --enable-pic \--prefix=${INSTALL_DIR} \--enable-openssl --enable-nonfree \--enable-libmp3lame \--disable-encoders --enable-encoder=aac --enable-encoder=libx264 --enable-gpl --enable-libx264 --enable-encoder=libx265  --enable-libx265 \--disable-decoders --enable-decoder=aac --enable-decoder=h264 --enable-decoder=hevc  \--disable-demuxers --enable-demuxer=aac --enable-demuxer=mov --enable-demuxer=mpegts --enable-demuxer=flv --enable-demuxer=h264 --enable-demuxer=hevc --enable-demuxer=hls  \--disable-muxers --enable-muxer=h264  --enable-muxer=flv --enable-muxer=f4v  --enable-muxer=mp4 \--disable-doc --extra-cflags="-I${INSTALL_DIR}/include -fno-stack-check"\--extra-ldflags="-L${INSTALL_DIR}/lib -ldl -lpthread"# makemake -j16make installpopdpopdfi
}

备注

  • 自动编译脚本已经上传到github,参考:https://github.com/yagerfgcs/build_ffmpeg

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

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

相关文章

JVM虚拟机:垃圾回收器之Parallel Old(老年代)

本文重点 本文将学习老年代的另外一种垃圾回收器Parallel Old(PO),这是一种用于老年代的并行化垃圾回收器,它使用标记整理算法进行垃圾回收。 历史 在1.6之前,新生代使用Parallel Scavenge只能搭配老年代的Serial Old收集器,而…

Ubuntu22.04 下 NFS 相关问题与完整配置(客户机 MacOS)

categories: [Linux-Shell] tags: Linux NFS 写在前面 最近折腾一下 NFS, 先白嫖一顿华子云的 1 个月服务器, 2C4G 感觉不错了, 但NFS 配置起来还是有点难度, 主要还是随机分配的端口配置方面比较恶心. server环境: 华为云 2C4G Ubuntu22.04 client环境: MacOS M1 with brew …

小程序多文件上传 Tdesign

众所周知,小程序文件上传还是有点麻烦的,其实主要还是小程序对的接口有诸多的不便,比如说,文件不能批量提交,只能一个个的提交,小程序的上传需要专门的接口。 普通的小程序的页面也比普通的HTML复杂很多 现…

前端学习地址_备忘录(随时更新)

前端基础&&体系: MDN:MDN Web Docs 菜鸟教程:菜鸟教程 - 学的不仅是技术,更是梦想! 印记中文:印记中文 - 深入挖掘国外前端新领域,为中国 Web 前端开发人员提供优质文档 w3cschool:w3cschool官网 - 1000多本编程教程免费学 js中…

Java,多线程,线程安全的懒汉式、死锁、ReentrantLock的使用以及一些知识点补充

关于线程安全地懒汉式有以下几种方式: /*** 实现线程安全的懒汉式*/ public class BankTest {Bank b1 null;Bank b2 null;public static void main(String[] args){BankTest bb new BankTest();Thread t1 new Thread(){Overridepublic void run(){bb.b1 Bank.…

安卓RadioButton设置图片大小

RadioButton都不陌生,一般我们都会设置图片在里面,这就涉及一个问题,图片的大小。如果图片过大,效果很不理想。搜了很多方法,都不理想。无奈只能自己研究了 代码如下: 1,一个简单的 RadioButt…

IBM Qiskit量子机器学习速成(一)

声明:本篇笔记基于IBM Qiskit量子机器学习教程的第一节,中文版译文详见:https://blog.csdn.net/qq_33943772/article/details/129860346?spm1001.2014.3001.5501 概述 首先导入关键的包 from qiskit import QuantumCircuit from qiskit.u…

力扣138:随机链表的复制

力扣138:随机链表的复制 题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff…

《网络协议》02. 物理层 · 数据链路层 · 网络层

title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录:网络协议 excerpt: 物理层(数据通信模型,信道)、数据链路层(封装成帧&#xff0c…

Flink 基础 -- 应用开发(Table API SQL) Table API

Table API是用于流和批处理的统一关系API。表API查询可以在批处理或流输入上运行,而无需修改。Table API是SQL语言的超集,专为与Apache Flink一起工作而设计。Table API是Scala、Java和Python的语言集成API。与将查询指定为SQL中常见的字符串值不同&…

NtripShare Mos地铁自动化监测终端盒子硬件设计

自动化监测产品到目前为止做了接近一年,在软件层面上,控制终端软件、平台软件、网平差算法都已解决,硬件盒子始终是心里过不去的坎,最终还是没有耐住性子自己做了一把。 选型如下: 1、主板:瑞芯微RK3568主板。 2、外…

向量的点积和外积

参考:https://www.cnblogs.com/gxcdream/p/7597865.html 一、向量的内积(点乘) 定义: 两个向量a与b的内积为 ab |a||b|cos∠(a, b),特别地,0a a0 0;若a,b是非零向量,…

【性能测试】服务端中间件docker常用命令解析整理(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、搜索 docker …

Redis底层数据结构:字典

在 Redis 中,字典(Dictionary)是一种常用的底层数据结构,它被用于实现 Redis 的哈希表(Hash Table)数据结构。字典用于存储键值对,它提供了快速的键值查找、插入和删除操作。 Redis 字典的特点&…

HTMLCSS3

HTML&CSS3 语雀HTML&CSS3文档 04-CSS语法与选择器 1、CSS简介 层叠样式表 网页实际上是一个多层的结构,通过CSS可以分别为网页的每一个层来设置样式,类似PS的图层 使用CSS来修饰元素样式的方式大致可以分为3种 内联样式(行内样…

【系统架构设计】架构核心知识: 1 系统工程与信息系统基础

目录 一 系统工程 二 信息系统 三 电子政务 四 企业信息化与电子商务

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项和动量因子

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项 时间版本修改人描述2023年11月8日14:36:36V0.1宋全恒新建文档 简介 最近笔者完成了《图解机器学习》这本书的阅读,由于最近深度学习网络大行其是,所以也想要好好的弄清…

Effective C++ 系列和 C++ Core Guidelines 如何选择?

Effective C 系列和 C Core Guidelines 如何选择? 如果一定要二选一,我会选择C Core Guidelines。因为它是开源的,有300多个贡献者,而且还在不断更新,意味着它归纳总结了最新的C实践经验。最近很多小伙伴找我&#xff…

使用Grafana与MySQL监控监控网络延迟

文章目录 前言python程序使用Grafana步骤1:安装和配置 Grafana步骤2:配置 Grafana 数据源步骤3:创建 Grafana 仪表盘步骤4:将 Grafana 仪表盘嵌入到博客中 前言 在网络应用中,网络延迟是一个重要的指标,它…

基于springboot实现智慧外贸平台系统【项目源码+论文说明】计算机毕业设计

基于springboot实现智慧外贸平台系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合,利用java技术建设智慧外贸平台,实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展,丰富智慧外贸管理经验能…