三、FFmpeg安装

article/2025/9/26 4:53:29

1. FFmpeg介绍

FFmpeg是一个完整的、跨平台的解决方案,用于记录、转换和流化音/视频。
FFmpeg 采用 LGPL 或 GPL 许可证,提供了录制、转换及流化音/视频的完整解决方案。其包含了非常先进的音/视频编解码库 libavcodec。
FFmpeg 是在 Linux 平台下开发的 但是它同样也可以在其他操作系统环境中编译运行,包扩Windows、Mac OS 等系统。这个项目最早是由Fabrice Bellard 发起的,在 2004 年至 2015年由Michael Niedermayer 主要负责维护。许多 FFmpeg 的开发人员都来自 MPlayer 项目组,而
且当前FFmpeg也是被放在 MPlayer 项目组的服务器上的。其名称来自MPEG视频编码标准,“FF” 代表 “Fast Forward”。

2. FFmpeg组件

FFmpeg的组件包括libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale和libswresample(这些都是可以应用与应用程序),以及ffmpeg、ffplay和ffprobe(可以被终端用户进行编码和播放)。如下图所示。
在这里插入图片描述

  • libavutil是一个包含简化编程功能的库,包括随机数生成器、数学例程、核心多媒体使用程序等。
  • libavcodec是一个包含解码和编码器的音/视频编解码器的库。
  • libavformat是一个包含用于多媒体容器格式的demuxers和muxers的库。
  • libavdevice是一个包含输入和输出设备的库,用于抓取和呈现许多常见的多媒体输入/输出软件框架,包括Video4Linux、Video4Linux2、VFW和ALSA。
  • libavfilter是一个包含媒体过滤器的库。
  • libswscale是一个执行高度优化的音频重采样、rematrixing个实例格式转换操作的库。
  • libpostproc是一个用于后期效果处理的库。

3. 所支持的协议

FFmpeg锁支持的协议包括:HTTP、RTP、RTSP、RealMedia RTSP/RDT、TCP、UDP、Gopher、RTMP、RTMPE、RTMPTE、RTMPS、SDP、MMS over TCP。

4. 安装

1. 下载

先下载ffmpeg-x.x.x.tar.bz2(这里使用的版本为4.1.8版本)或通过wget命令在LInux系统中直接下载。
ffmpeg下载地址:https://ffmpeg.org/releases/ffmpeg-4.1.8.tar.bz2

2. 通过xftp将文件上传至服务器

在这里插入图片描述

3. 解压

[root@localhost download]# tar -jxvf ffmpeg-4.1.8.tar.bz2 

4. 配置与安装

执行安装命令:

[root@localhost download]# cd ./ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg
[root@localhost ffmpeg-4.1.8]# make && make install

在这里插入图片描述
如果出现以上问题请看这一步,如果没有问题则可以跳过这一步。

4.1 问题原因

以上报错原因为没有NASM/YASM或其版本太旧导致的问题。

  • YASM是一个完全重写的NASM汇编。目前,它支持x86和AMD64命令集。
  • NASM是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

4.2 安装YASM

下载yasm的解压文件包,然后上传至服务器并配置选项、编译与安装。
这里使用的是1.3.0版本
YASM下载地址:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
将文件上传至服务器,和前面几步上传一样都是使用xftp,这里就不贴图了。
安装过程如下:

[root@localhost download]# tar -zxvf yasm-1.3.0.tar.gz 
[root@localhost yasm-1.3.0]# cd ./yasm-1.3.0/
[root@localhost yasm-1.3.0]# ./configure --prefix=/usr/local/yasm
[root@localhost yasm-1.3.0]# make && make install

将YASM添加到环境变量中:

[root@localhost yasm-1.3.0]# vim /etc/profile
# 文件输入一下内容
export YASM=/usr/local/yasm/
export PATH=$PATH:$YASM/bin

刷新一下配置文件:

[root@localhost yasm-1.3.0]# source /etc/profile

YASM安装完毕,再次执行ffmpeg安装命令:

[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg
[root@localhost ffmpeg-4.1.8]# make && make install

这时应该就安装成功了。

5. 添加FFmpeg到环境变量

执行命令:

[root@localhost ffmpeg-4.1.8]# vim /etc/profile

添加以下代码:
在这里插入图片描述
刷新配置文件:

[root@localhost ffmpeg-4.1.8]# source /etc/profile

检查是否配置成功:

[root@localhost ffmpeg-4.1.8]# ffmpeg -version

在这里插入图片描述
安装成功。

5. FFmpeg的配置

FFmpeg可以选择多种音/视频编码器对媒体进行渲染。下面介绍几种常用的视频编码器。

1. libx264

libx264 是当下十分热门的 H264 编码器,有着非常广泛的应用H264 编码器的优势是低码率、具有流畅连续的高清图像、高容错率、强网络适应性和高压缩比。
H.264 的压缩比是 MPEG-2 倍以上,是 MPEG-4的1.5 ~2 倍。举一个例子,如果原始文件的大小为 88GB ,那么用 MPEG-2 压缩标准压缩后变成 3.5GB ,压缩比为 25 : 1;用H.264压缩标准压缩后变为 879MB ,压缩比达到 102 : 1。
在下面的命令中增加了-vcodec和-acodec,这里使用视频编码器libx264,使用音频编码器aac.

[root@localhost ffmpeg-4.1.8]# ffmpeg -i /tmp/ng.mp4 -vcodec libx264 -acodec aad -f flv rtmp://192.168.5.133:1935/mylive/66

2. libx264安装

重新配置及编译安装FFmpeg,将新的libx264配置到FFmpeg中。

[root@localhost ~]# cd /opt/download/ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl

在这里插入图片描述
报错,因为x264会依赖NASM的汇编加速,因此,这里先安装NASM。如果不安装NASM,则会报错:Minimum version is nasm-2.13。

2.1 安装NASM

NASM下载地址:https://www.nasm.us/pub/nasm/releasebuilds/
下载版本不能低于2.13版本,这里使用的是2.14版本,然后通过xftp上传至服务器。

2.2 解压与安装

[root@localhost ffmpeg-4.1.8]# cd /opt/download/
[root@localhost download]# tar -zxvf nasm-2.14.tar.gz 
[root@localhost download]# cd ./nasm-2.14/
[root@localhost nasm-2.14]# ./configure --prefix=/usr/local/nasm
[root@localhost nasm-2.14]# make && make install

安装成功。

2.3 配置环境变量

[root@localhost nasm-2.14]# vim /etc/profile

在这里插入图片描述
刷新配置文件:

[root@localhost nasm-2.14]# source /etc/profile

2.4 安装x264

下载最新版x264:
地址:https://www.videolan.org/developers/x264.html
下载完成使用xftp上传至服务器,或直接使用wget下载都行。
解压并安装:

[root@localhost download]# tar -jxvf x264-master.tar.bz2 
[root@localhost download]# cd ./x264-master/
[root@localhost x264-master]# ./configure --prefix=/usr/local/x264 --enable-shared  # 配置动态库
[root@localhost x264-master]# make && make install
[root@localhost x264-master]# cd /opt/download/ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl

在这里插入图片描述
此时依旧报错找不到x264。
通过命令查看ffmpeg日志信息:

[root@localhost ffmpeg-4.1.8]# tailf -n 500 /opt/download/ffmpeg-4.1.8/ffbuild/config.log 

在这里插入图片描述
报错找不到x264文件目录。因为我们在安装的时候手动选择了安装路径–prefix=/usr/local/x264,因此,x254目录下的lib和include目录中的文件无法被FFmpeg自动发现。
配置ffmpeg pkgconfig默认路径的环境变量:

[root@localhost ffmpeg-4.1.8]# vim /etc/profile

在这里插入图片描述
刷新一下配置文件:

[root@localhost ffmpeg-4.1.8]# source /etc/profile
# 修改ld.so.config文件
[root@localhost ffmpeg-4.1.8]# vim /etc/ld.so.conf
# 文件中加入x264 下的lib路径就行
/usr/local/x264/lib//执行刷新命令
[root@VM-24-16-centos ffmpeg-4.1.8]# sudo ldconfig

在这里插入图片描述
执行命令:

[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl
[root@localhost ffmpeg-4.1.8]# make && make install

到这里就安装成功了。

6. 基础配置信息

无论是rtmp标签,还是server标签,甚至是application标签,都可以算是核心配置信息中的成员。因为他们的存在,影响着整个NRM,必须要配置。

1. rtmp

rtmp是根级标签,并且是配置中最关键的标签。

rtmp{ ... }

2. server

一个rtmp中可以包含多个server标签,每个server标签可以通过端口隔离。

rtmp{ server {listen 1935;}   server {listen 1955;}
}

3. listen

listen只能被放在server中,指定了所在server标签绑定的端口信息。

    server {listen 1935;}  

4. application

application可以被放在server标签中,可以包含多个application并通过applicationName来隔离。

rtmp{ server {listen 1935;application A{}application B{}}   server {listen 1955;application A{}application B{}}
}

5. ping和ping_timeout

ping和ping_timeout可以被放在rtmp和server中,用于主动检查心跳,将各种心跳包发送到客户端。ping_timeout中设置的值为超时回复时间,如果在超时回复时间内没有得到回复,则关闭客户端。ping默认为1分钟,timeout默认为30秒,当ping为0时,关闭此功能。

    ping 15s;ping_timeout 5s;

6. ack_window

ack_window可以被放在rtmp和server中,用于设置rtmp确认窗口大小,默认为5000000字节。

    ack_window 5000000;

7. chunk_size

chunk_size可以被放在rtmp和server中,用于设置流中的块大小,默认时4096字节。这个值越大,CPU开销越低,但是这个值不能小于128字节。

    chunk_size 4096;

8. max_message

max_message可以被放在rtmp和server中,用于设置输入数据保温最大尺寸。所有输入数据都会被分割成报文(然后进一步被分割为块)。报文在处理结束之前会被存放在内存中。从理论上讲,如果接受到的报文很大,则可能会影响服务器的稳定性。报文默认值为1MB,此时可以满足大多数情况。

    max_message 1M;

9. buflen

buflen可以被放在rtmp和server中,用于设置缓冲区长度。

    buflen  5s;

10. rtmp_auto_push

rtmm_auto_push可以设置当多任务时,分发任务到多个进程。

    rtmp_auto_push on;

11. rtmp_auto_push_reconnect

rtmp_auto_push_reconnect用于设置rtmp_auto_push开启并因超时被销毁时,进行重连。

    rtmp_auto_push_reconnect 1s;

12. meta

meta可以被放在rtmp,server和application中,用于将元数据信息发送到客户端,默认为打开。

     meta copy;

13. interleave

interleave可以被放在rtmp,server和application中,用于交叉模式,此模式下音/视频在同一个chunk stream上,默认为关闭。

    interleave on;

14. wait_key

wait_key可以被放在rtmp,server和application中,用于使视频流从一个关键帧开始,默认为关闭。

    wait_key on;

15. wait_video

wait_video可以被放在rtmp,server和application中,用于禁用音频,知道第一个视频帧发送,默认为关闭。可以与wait_key结合,使客户端接受视频关键帧。然而,着通常会增加链接延迟。可以在编码器中调整关键帧间隔以减少延迟。

    wait_video on;

16. sync

sync可以被放在rtmp,server和application中,用于同步音频流和视频流。如果客户端带宽不足以接受到服务器的数据,那么一些帧会被服务器删除。这导致了音频流和视频流不同步。但时间戳差异超过指定为同步参数的值时,则将发送一个绝对帧,默认为300ms。

    sync 10ms;

17. allow,deny

allow,deny可以被放在rtmp,server和application中,用于设置白名单和黑名单。

    # 允许127.0.0.1推流allow publish 127.0.0.1;#阻止所有推流,allow publish中的配置除外deny publish all;# 允许192.168.0.0/24 拉流allow play 192.168.0.0/24;# 阻止所有拉流,allow play的配置除外deny play all;

18. play

play可以被放在rtmp,server和application中,用于播放本地或远程点播文件。

    application vod {play /var/flvs;}application vod_http {play http://myserver.com/vod}application vod_mirror {# 当第一个地址无法播放的时候,会访问第二个地址play /var/local_mirror http://myserver.com/vod;}

19. max_connections

max_connections可以被放在rtmp,server和application中,用于设置最大连接数。

	max_connections 1000;

20. access_log

access_log可以被放在rtmp,server和application中,用于通常来说,rtmp日志是和nginx/logs/access.log文件存放在一起的,通过access_log可以单独存放rtmp_log。

    access_log logs/rtmp_access.log;

21. log_format

log_format: 用于自定义日志格式。

  • connection:连接数
  • remote_addr:客户端地址
  • app_application:名称
  • name:最后一个串流码名称
  • args:最后一个播放的流/推流参数
  • flashver:flash版本
  • swfurl:swf地址
  • tcurl:tc地址
  • pageurl:客户端页面地址
  • command:推/拉流中命令:none,play,publish,play+publish
  • bytes_sent:发送到客户端的字节数
  • bytes_received:接受到客户端的字节数
  • time_local:连接关闭时间
  • session_time:连接持续时间
  • session_readable_time:格式化日期
  • msec:UNIX时间戳

ffmpeg的基础与安装就到这里了,欲知后续如何请看下章博客。


http://chatgpt.dhexx.cn/article/y3CwmqkL.shtml

相关文章

windows ffmpeg安装部署

目录 安装包下载 解压安装包 配置环境变量 总结 安装包下载 作为音视频处理重要软件ffmpeg,是一定要装好的。 windows安装包下在链接:资源包地址 解压安装包 下载安装包后解压到需要的目录。 配置环境变量 找到控制面板 -> 点击系统 -> 点击…

ffmpeg安装及使用

下载 下载地址:https://ffmpeg.org/download.html 然后按照下图点击,找到Release部分下载一个即可。 安装 所谓安装就是解压并配置“path”环境变量 将安装包解压至任意目录,比如我这里是D:\Program\ffmpeg-5.0.1-full_build 按照以下顺…

ffmpeg详细安装教程,亲测有效!

这两天整理好用的录屏软件,发现了Captura这个软件,软件本身的安装很简单,但由于Captura需要依赖ffmpeg(一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序),而ffmpeg在安…

ffmpeg的下载及安装

最近在处理一些音频数据,ffmpeg是一款非常好用处理音视频的工具包。那什么是ffmpeg呢?FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,可以结合Java开发一些处理视频音频的功能。 1.ffmpeg下载…

如何安装ffmpeg,详细安装教程,亲测有效

今天在下载网上视频的时候,发现下载的是ts文件 想要转换mp4 文件需要安装ffmpeg 网上找了很多方法,整理出ffmpeg的安装方法,详细讲解如下。 1、下载ffmpeg 到ffmpeg官网https://ffmpeg.org/download.html,按照箭头点击下载安装包 …

C语言 不使用strcpy 函数实现字符串复制功能

Ⅰ )字符串复制函数 字符串复制是字符串操作中比较常用的操作之一。C语言库函数中提供的字符串复制函数是:strcpy函数。该函数的功能为:把源字符数组中的字符串复制到目的字符数组中,字符串结束标志“\0”也一同复制。下面实例为通…

用c语言实现字符串复制

1.题目来源 作者: C课程组 单位: 浙江大学 时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB 2.问题简述 本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。 函数接口定义: void strmcpy( char *t, int m, ch…

多种方式实现字符串的复制

用字符数组名做函数的参数 #include<stdio.h>//用函数调用实现字符串的复制 int main() { void fgo(char c[],char d[]);char a[]"听我说谢谢你~",b[]"你要结婚啦~";printf("a%s\n",a);printf("b%s\n",b);printf("将a复制…

复制字符串的三种方法

1.通过指针实现 2.通过自定义函数实现 3.通过调用字符串处理库中的复制函数实现 注意字符串结尾的\0

win10 mysql8 my.ini配置文件

郑重说明 网上很多文章写win10系统下的mysql8版本的配置文件位置在哪里&#xff0c;以及如何安装mysql&#xff0c;等等。这些要么将的不够清晰&#xff0c;要么画蛇添足。经过繁琐的查询和测试&#xff0c;终于搞定&#xff0c;现在记录下来&#xff0c;希望能够帮助到诸位。…

在CentOS7下添加MySQL用户并设置相应权限

2019独角兽企业重金招聘Python工程师标准>>> 1.进入mysql命令行&#xff0c;输入root及密码 [rootlocalhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 19 Server version: 5…

MySQL增加默认值

MySQL里面的表同一列里要填的若大多是同一个值&#xff0c;这时候就可以设置默认值了。 方便快捷的填充。 例如 存在jxgl里的students表性别列要填的大多是&#xff1a;男。 则可以使用ALTER命令修改。 详细命令如下。 一个文字占两个空格&#xff0c;所以char()括号里面的…

mysql8设置sql_mode

原文 mysql8报错&#xff0c; 在mysql配置文件下设置 sql_mode‘NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES’ 在mysqlld下添加sql-mode

MySQL的设置

一、MySQL数据库服务的启动和停止 MySQL软件的服务器端必须先启动&#xff0c;客户端才可以连接和使用数据库。 图形化方式 计算机&#xff08;右键鼠标&#xff09;----> 管理&#xff08;点击&#xff09;----> 服务和应用程序&#xff08;点击&#xff09;---->…

MySQL中添加或插入语句(Insert)的几种使用方式

1.各大培训机构&#xff0c;价格10万的视频 Java架构师视频免费送 2.各种电子书籍经典Java书籍免费送 3.关注下方我的公众号进行免费获取 MySQL中添加或插入语句(Insert)的几种使用方式 1.INSERT 简写方式插入数据(不推荐) 1.先看一下表中有那些数据 2.使用Inset into 表名 va…

mysql添加备注信息

前言 这连天有人问我一些mysql的备注信息&#xff0c;不得已还是写一遍博客吧 1、创建表的时候&#xff0c;添加表名备注和字段备注 CREATE TABLE healerjean_comment (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(32) NOT NULL COMMENT 名字备注,email varchar(64)…

关于 Unable to attach to 32-bit process running under WOW64的错误

关于 Unable to attach to 32-bit process running under WOW64的错误 今天在使用IDEA编译的程序的时候&#xff0c;使用jinfo 命令查看的时候出现 然后初步判断自己JDK安装错误&#xff0c;但是后面查看自己的JDK版本没错&#xff0c;然后判断是不是编译的时候用的32位的JDK&a…

Unable to attach to 32-bit process running under WOW64

最近在使用jps及jstack指令时&#xff0c;遇到一个问题。 文章目录 问题描述1. 使用eclipse启动一个死锁的进程2. 打开cmd3. 执行指令 分析过程1. 如何查看进程是多少位的&#xff1f; 修改方法 问题描述 1. 使用eclipse启动一个死锁的进程 public class DeadThread {public…

调试运行在Wow64子系统下的程序----x64版windbg调试win32程序

大家有没有遇到过这种情况&#xff1a;程序崩溃了&#xff0c;windbg分析线程堆栈时&#xff0c;输出了一堆乱七八糟的调用栈。更烦心的是&#xff0c;这堆调用栈中根本找不到跟自己程序相关的信息。来看一个类似的场景&#xff1a;运行C:\Windows\SysWOW64\calc.exe (win32版的…

谈谈Windows Wow64

本文是《深入理解Windows操作系统 (第六版) 》关于64位Windows操心系统有关Wow64部分的读书笔记&#xff0c;因为之前很少有接触到关于Wow64的部分&#xff0c;记录一下。 Wow64是允许在64位Windows上执行32位x86应用程序的软件。它的实现方式是一组用户模式dll&#xff0c;外…