ffmpeg 安装 h264(x264)encoder

 #下载并安装x264

# 切换root用户
sudo -i
# 输入密码cd ~
mkdir FFmpeg7#下载并安装x264
git clone https://code.videolan.org/videolan/x264.git
cd x264
mkdir build./configure --help
# 报缺少asm 时 可加入--disable-asm
# --prefix=/home/llh/ffmpeg/build/ 指定安装目录
./configure --prefix=/root/FFmpeg7/x264/build --enable-shared --enable-static --disable-asmmake# x264将会安装到 :/root/FFmpeg7/x264/build 目录下
make install

# 下载并安装 ffmpeg  

https://ffmpeg.org/releases/

wget https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.bz2 --no-check-certificate
tar xjf ffmpeg-7.0.1.tar.bz2 
cd ffmpeg-7.0.1./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/root/FFmpeg7/x264/build/include --extra-ldflags=-L/root/FFmpeg7/x264/build/lib --disable-x86asm
# 重要参数含义
# --prefix=/usr/local/ffmpeg  :指定 ffmpeg 安装路径 
# --extra-cflags=-I/root/FFmpeg7/x264/build/include
# --extra-ldflags=-L/root/FFmpeg7/x264/build/lib #问题:ERROR: x264 not found using pkg-config 解决
vi /etc/profile#末尾加入下面内容,具体看各位自己x264的安装路径
export PKG_CONFIG_PATH=/root/FFmpeg7/x264/build/lib/pkgconfigsource /etc/profile#重新执行 ./configure
./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/root/FFmpeg7/x264/build/include --extra-ldflags=-L/root/FFmpeg7/x264/build/lib --disable-x86asmmake
make installls /usr/local/ffmpeg -l
# 可以看到 /usr/local/ffmpeg 路径下已经有文件了

#更新系统动态链接库配置

vi /etc/ld.so.conf  
# 将下面两行添加到 /etc/ld.so.conf  的最后
/usr/local/ffmpeg/lib/
/usr/local/lib/sudo ldconfig 

# 追加环境变量

cd /etc/profile.d/
touch ffmpeg.sh
vi ffmpeg.sh# 具体路径看自己的安装路径在哪里
export PATH="/usr/local/ffmpeg/bin:$PATH"source /etc/profile


# 验证 FFmpeg 是否已添加到 PATH

ffmpeg -version

# 验证 h264 编码格式是否可以正常使用


# output 的 video 是 h264的 就OK了
# Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 976x544, q=2-31, 30 fps, 15360 tbn (default)
ffmpeg -i input.mov -vcodec h264  -r 30 output.mp4

命令解析

./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/usr/local/x264/include --extra-ldflags=-L/usr/local/x264/lib

这个命令是用于配置FFmpeg编译环境的,特别是在安装FFmpeg时,通过./configure脚本自定义编译选项。下面是该命令中各个部分的详细解析:

  1. ./configure
    • 这是一个脚本文件,通常位于FFmpeg源代码的根目录下。它的作用是检查你的系统环境,准备编译FFmpeg所需的配置文件(主要是Makefile),以便后续使用make命令进行编译。
  2. --prefix=/usr/local/ffmpeg
    • 这个选项指定了FFmpeg安装后的根目录。在这个例子中,FFmpeg的所有文件(包括可执行文件、库文件、配置文件等)都将被安装到/usr/local/ffmpeg目录下。这有助于管理多个版本的FFmpeg或避免与系统自带的版本冲突。
  3. --enable-shared
    • 启用共享库(动态链接库)的编译。这意味着FFmpeg的库将被编译为动态链接库(.so文件),而不是静态库(.a文件)。动态链接库可以减小程序的大小,因为它们可以被多个程序共享。
  4. --enable-yasm
    • 启用YASM汇编器的支持。YASM是一个现代的汇编器,用于编译FFmpeg源代码中某些对性能要求较高的部分。启用此选项可以提高FFmpeg的性能。
  5. --enable-libx264
    • 启用对libx264编码器的支持。libx264是一个开源的H.264/AVC视频编码器,被广泛认为是非常高效的。通过启用此选项,FFmpeg将能够使用libx264来编码视频。
  6. --enable-gpl
    • 启用GPL(GNU General Public License)许可的编解码器和其他组件。这意味着你可以使用那些受GPL许可保护的FFmpeg组件。
  7. --enable-pthreads
    • 启用POSIX线程(pthread)的支持。这允许FFmpeg在多线程环境中运行,从而可以利用多核处理器的优势来加速处理过程。
  8. --extra-cflags=-I/usr/local/x264/include
    • 为编译器添加额外的C标志(cflags)。-I选项用于指定额外的头文件搜索路径。在这个例子中,它告诉编译器在/usr/local/x264/include目录下查找头文件,这对于编译需要libx264支持的FFmpeg部分非常重要。
  9. --extra-ldflags=-L/usr/local/x264/lib
    • 为链接器添加额外的标志(ldflags)。-L选项用于指定额外的库文件搜索路径。这里指定了/usr/local/x264/lib,确保链接器在链接FFmpeg时能够找到libx264的库文件。

综上所述,这个命令是为了在编译FFmpeg时,启用一系列高级特性和依赖项(如共享库、libx264编码器支持等),并指定安装路径和额外的编译/链接选项,以确保FFmpeg能够正确地找到并使用这些依赖项。

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

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

相关文章

linux-虚拟内存-虚拟cpu

1、进程: 计算机中的程序关于某数据集合上的一次运行活动。 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定独立功能的程序关于某个…

Let‘s Encrypt 申请免费 SSL 证书(每隔60天自动更新证书)

文章目录 官网文档简介安装 Nginxacme.sh生成证书智能化生成证书 安装证书查看已安装证书更新证书 官网 https://letsencrypt.org/zh-cn/ 文档 https://letsencrypt.org/zh-cn/docs/ 简介 Let’s Encrypt 是一个非营利组织提供的免费SSL/TLS证书颁发机构,旨在促…

iOS开发-Xcode

iOS开发主要使用两种编程语言:Objective-C 和 Swift。下面分别介绍这两种语言的基础: Objective-C Objective-C 是一种面向对象的编程语言,它是C语言的超集,意味着你可以直接在Objective-C代码中使用C语言的语句。Objective-C在…

2024世界人工智能大会,神仙打架

B站:啥都会一点的研究生公众号:啥都会一点的研究生 AI圈最近又发生了啥新鲜事? 该栏目以周更频率总结国内外前沿AI动态,感兴趣的可以点击订阅合集以及时收到最新推送 B站首秀世界人工智能大会,展示自研AI技术与AIGC…

人工智能在病理切片虚拟染色及染色标准化领域的系统进展分析|文献速递·24-07-07

小罗碎碎念 本期文献主题:人工智能在病理切片虚拟染色及染色标准化领域的系统进展分析 这一期文献的速递,是有史以来数量最大的一次,足足有十一篇,本来打算分两期写,但是为了知识的系统性,我决定咬咬牙&…

Partisia Blockchain 现已完成第一阶段空投,即将在DeFi领域发力

Partisia Blockchain 是以 MPC 方案为基础的 Layer1 生态,其具备可审计的隐私特性,同时还能保持链的可拓展、高迸发、可互操作以及安全等系列特性,Partisia Blockchain 被认为是目前最具潜力的企业级公链,并且估值高达 16 亿美元。…

远心镜头简介

一、远心镜头 大家都有这种印象,一个物体在人眼看来,会有近大远小的现象。这是因为物体近的时候,在视网膜上投影大,小的时候,投影小。镜头也是一样,因为近大远小的原因,会产生误差。特别是在做尺…

java项目总结8

1.方法引用 1.方法引用概述 注意注意: 1.引用出必须是函数式接口 2.被引用的方法必须已经存在 3.被引用方法的型参和返回值需要跟抽象方法保持一致 4.被引方法的功能要满足当前需求 Arrays.sort(arr,Main::subtraction); Main是该类的名称,&#xff1a…

C++20中的基于范围的for循环(range-based for loop)

C11中引入了对基于范围的for循环(range-based for loop)的支持&#xff1a;该循环对一系列值(例如容器中的所有元素)进行操作。代码段如下&#xff1a; const std::vector<int> vec{ 1,2,3,4,5 }; for (const auto& i : vec)std::cout << i << ", …

【server】nacos 安装

1、本地安装 1.1 nacos官网 Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网 git 下载地址&#xff1a;https://github.com/alibaba/nacos/releases 1.2 解压并修改配置 1.2.1 通过properties 修改配置&#xff0c;添加数据库配置 1.2.2 创建数据库&…

数据库(表)

要求如下&#xff1a; 一&#xff1a;数据库 1&#xff0c;登录数据库 mysql -uroot -p123123 2&#xff0c;创建数据库zoo create database zoo; Query OK, 1 row affected (0.01 sec) 3&#xff0c;修改字符集 mysql> use zoo;---先进入数据库zoo Database changed …

Vue笔记10-其它Composition API

shallowReactive与shallowRef shallow&#xff1a;浅的&#xff0c;和deep相反 shallowReactive&#xff1a;只处理对象最外层属性的响应式 shallowRef&#xff1a;只处理基本数据类型的响应式&#xff0c;不进行对象的响应式处理 如果有一个对象数据&#xff0c;结构比较深&a…

利用docker搭建漏洞环境,使用SSRF+Redis写入centos以及ubuntu的公钥,实现免密登录

一、实验环境 kali:在kali中搭建docker容器环境&#xff0c;这里我主要是使用第一个&#xff1b; redis作为一种数据库&#xff0c;它可以将数据写入内存中去&#xff0c;我们通过利用ssrf请求&#xff0c;实现服务器对自己的公钥写入&#xff0c;从而实验免密登录&#xff1b;…

RK3568 GPU介绍及使用

一、RK3568简介 RK3568四核64位Cortex-A55 处理器&#xff0c;采用全新ARM v8.2-A架构&#xff0c;主频最高可达2.0GHz&#xff0c;效能有大幅提升&#xff1b;采用22nm先进工艺&#xff0c;具有低功耗高性能的特点RK3568集成了双核心架构 GPU&#xff0c;高性能VPU以及高效能…

GraalVM上的多语言混合开发

上篇文件我们介绍了GraalVM强大的静态编译功能,能够让Java应用程序摆脱虚拟机的束缚,像其它本地编译的应用一样直接运行。那么GraalVM的神奇之处仅限于此吗?今天我们再来看看它的另一个重要特性—多语言混合开发 多语言平台 Java并不是唯一运行在JVM上的语言,这个我们都应…

����: �Ҳ������޷��������� javafx.fxml ԭ��: java.lang.ClassNotFoundException解决方法

如果你出现了这个问题&#xff0c;恭喜你&#xff0c;你应该会花很多时间去找解决方法。别问我怎么知道的... 解决方法&#xff1a; 出现乱码的原因&#xff1a;配置vm时 这些配置看似由有空格&#xff0c;换行&#xff0c;实则没有。所以解决办法就是&#xff0c;重新配置你…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时&#xff0c;火势烧到其它区域&#xff0c;使用由防火材料砌的墙。在网络安全中&#xff0c;防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护&#xff0c;即通过安全策略识别流量并做…

前端面试题17(js快速检索方法详解)

在前端JavaScript中&#xff0c;快速检索数据通常涉及到数组或对象的搜索。这里我会介绍几种常见的快速检索方法&#xff0c;并提供相应的代码示例。 1. 数组的find和findIndex方法 find: 返回数组中满足条件的第一个元素的值。findIndex: 返回数组中满足条件的第一个元素的索…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用&#xff08;2&#xff09;ResNet50迁移学习 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的基础数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化…

MongoDB:掌握核心常用命令语句,精通数据操作

标题&#xff1a;MongoDB&#xff1a;掌握核心命令&#xff0c;精通数据操作 前言&#xff1a; MongoDB 是一种非关系型数据库&#xff0c;以文档为中心&#xff0c;使用 JSON 格式的 BSON 来存储数据。它具有高可用性、高性能和易于扩展的特点&#xff0c;被广泛应用于各种规…