FFmpeg的入门实践系列一

在这里插入图片描述

欢迎诸位来阅读在下的博文~
在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力!
江山如画,客心如若,欢迎到访,一展风采

文章目录

  • 参考环境
  • 本系列的适用人群
  • FFmpeg的简介
  • FFmpeg的下载与编译
      • 1. 下载FFmpeg
        • 通过官方网站下载:
        • 通过Git克隆仓库:
      • 2. 解压源代码
      • 3. 配置编译环境
        • 在Ubuntu/Debian系统上:
        • 在CentOS/RHEL系统上:
        • 在macOS上:
      • 4. 编译FFmpeg
      • 5. 安装FFmpeg
      • 6. 验证安装

参考环境

  1. VMware Workstation Pro
  2. Ubuntu20.04(运行服务器)

本系列的适用人群

打算从事音视频行业的人士,如:音视频驱动工程师、音视频中间件开发、音视频算法工程师、音视频应用工程师、还有流媒体服务器开发工程师。

FFmpeg的简介

FFmpeg是一个开源项目,同时它也是一个非常流行的多媒体框架。它提供了一个完整的跨平台解决方案来记录、转换数字音视频,以及转换成不同的格式。FFmpeg可以捕捉、编码和转码多种视频和音频格式,它支持大量的音视频格式,包括但不限于H.264、H.265、VP8、VP9、AAC、MP3等。
FFmpeg由多个组件组成,包括:

  1. ffmpeg:用于处理音视频文件的工具,可以进行录制、转换格式、流化等操作。
  2. ffplay:一个简单的播放器,可以播放多媒体内容。
  3. ffserver:一个流媒体服务器,可以用来发布多媒体内容。
  4. libavcodec:包含大量的编解码器,用于处理音视频数据。
  5. libavformat:包含多种多媒体容器格式的支持。
  6. libavutil:包含了一些实用的工具,如随机数生成器、数据结构等。
  7. libavdevice:用于处理不同硬件设备的输入输出。
  8. libavfilter:提供了一系列的音视频过滤器。
  9. libswscale:用于执行图像缩放和颜色空间转换操作。
  10. libswresample:用于执行音频重采样和格式转换。
    FFmpeg因其强大的功能和灵活性,在视频处理领域被广泛使用,包括但不限于视频编辑、转换、流媒体传输和编码。由于其开源的特性,FFmpeg也经常被集成到其他项目中,如视频编辑软件、流媒体服务器和嵌入式设备中。

FFmpeg的下载与编译

FFmpeg的下载、编译与安装过程在不同的操作系统上可能会有所不同,但以下是一个通用的步骤指南:

1. 下载FFmpeg

可以从官方网站或其源代码仓库下载最新的源代码。

通过官方网站下载:

访问FFmpeg的官方网站(https://ffmpeg.org/download.html),选择合适的版本下载。通常会有一个.tar.bz2格式的压缩包。

通过Git克隆仓库:

获取最新的开发版本,可以通过Git克隆FFmpeg的源代码仓库:

git clone https://github.com/FFmpeg/FFmpeg.git

如果访问github的网络不良好,可以试试使用下面这个工具。使用方法很简单,直接解压,然后运行fastgithub.exe即可,注意在访问github期间要保持该进程运行。
链接
提取码:y8s7

2. 解压源代码

tar -xvjf ffmpeg-版本号.tar.bz2

3. 配置编译环境

在编译之前,需要安装一些依赖库和工具。

在Ubuntu/Debian系统上:
sudo apt-get update
sudo apt-get install -y build-essential libtool automake autoconf libfaac-dev libmp3lame-dev libopus-dev
在CentOS/RHEL系统上:
sudo yum install -y gcc make autoconf automake libtool
在macOS上:
brew install automake libtool

4. 编译FFmpeg

进入解压后的FFmpeg目录,执行以下命令来配置编译选项:

./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libx264 --enable-libx265
./configure --prefix=/usr/local \--enable-gpl \--enable-version3 \--enable-nonfree \--enable-shared \--enable-libfdk-aac \--enable-libmp3lame \--enable-libopus \--enable-libvorbis \--enable-libvpx \--enable-libx264 \--enable-libx265 \--enable-libspeex \--enable-libass \--enable-libfreetype \--enable-libtheora \--enable-libopenjpeg \--enable-libxvid \--enable-libvidstab \--enable-libvmaf \--enable-libzimg \--enable-librtmp \--enable-libssh \--enable-libdrm \--enable-libaom

参数说明

  • --prefix=/usr/local: 安装路径,选择 /usr/local 以便系统和其他用户可以全局访问 FFmpeg。
  • --enable-gpl: 启用 GPL 许可证代码,这对于大部分自由和开源的音视频处理是必须的。
  • --enable-version3: 启用 LGPL 版本3的代码,这通常和 GPL 一起使用。
  • --enable-nonfree: 启用非自由的库,比如 libfdk-aac,这些库有一些使用限制,但功能强大。
  • --enable-shared: 构建动态链接库(.so 文件),便于在其他程序中共享和使用 FFmpeg。
  • --enable-libfdk-aac: 启用 libfdk-aac 库,提供高质量的 AAC 编码。
  • --enable-libmp3lame: 启用 MP3 编码支持。
  • --enable-libopus: 启用 Opus 音频编解码支持,适用于实时音频应用。
  • --enable-libvorbis: 启用 Vorbis 编解码支持,适用于开源音频格式。
  • --enable-libvpx: 启用 VP8/VP9 编解码支持,适用于 WebM 格式。
  • --enable-libx264: 启用 H.264 编码支持,广泛应用于视频压缩。
  • --enable-libx265: 启用 H.265 编码支持,提供更高效的视频压缩。
  • --enable-libspeex: 启用 Speex 编解码支持,适用于低比特率语音编码。
  • --enable-libass: 启用 ASS 字幕支持,适用于高级字幕渲染。
  • --enable-libfreetype: 启用 FreeType 字体库,用于渲染文本和字幕。
  • --enable-libtheora: 启用 Theora 视频编解码支持,适用于开源视频格式。
  • --enable-libopenjpeg: 启用 OpenJPEG 支持,用于 JPEG 2000 编解码。
  • --enable-libxvid: 启用 Xvid 编解码支持,适用于 MPEG-4 视频编码。
  • --enable-libvidstab: 启用视频稳定库 libvidstab,适用于去除视频抖动。
  • --enable-libvmaf: 启用 VMAF 质量评估模型,用于视频质量测量。
  • --enable-libzimg: 启用 libzimg,提供高质量的图像缩放和转换。
  • --enable-librtmp: 启用 RTMP 支持,适用于实时流媒体传输。
  • --enable-libssh: 启用 SSH 协议支持,用于通过 SSH 传输文件或流媒体。
  • --enable-libdrm: 启用 DRM (Direct Rendering Manager) 支持,用于硬件加速。
  • --enable-libaom: 启用 AV1 视频编码支持,适用于新一代视频格式。
    其他注意事项
  • 依赖库安装: 确保你已经安装了上述库的开发版本,例如 libx264-devlibx265-dev 等。可以使用 apt-get 命令安装所需的库。
    sudo apt-get install -y libfdk-aac-dev libmp3lame-dev libopus-dev libvorbis-dev libvpx-dev libx264-dev libx265-dev libspeex-dev libass-dev libfreetype6-dev libtheora-dev libopenjpeg-dev libxvidcore-dev libvidstab-dev libvmaf-dev libzimg-dev librtmp-dev libssh-dev libdrm-dev libaom-dev
    
  • FFmpeg 版本: 确保你使用的是 FFmpeg 的最新版本,以避免遇到兼容性问题或已知的错误。
  • 定制化需求: 如果你有特别的开发需求(例如只需要音频处理,或者只关注特定的编解码器),可以根据实际需要启用或禁用相关功能。
    通过上述配置,你可以构建一个功能全面的 FFmpeg,用于音视频开发的各种需求。

如果./configure报错文件不存在,可以这样解决:
这个错误通常是因为脚本文件使用了 Windows 风格的换行符(即 \r\n),而 Linux 系统期望的是 Unix 风格的换行符(即 \n)。Windows 和 Unix/Linux 系统在文本文件的换行符处理上存在差异,这就导致了这个问题。
解决办法:

  1. 安装 dos2unix 工具(如果系统中没有安装):
    sudo apt-get install dos2unix
    
  2. 转换脚本文件
    dos2unix configure
    
  3. 再次尝试运行 ./configure 命令

接下来,编译FFmpeg:

make

5. 安装FFmpeg

编译完成后,安装FFmpeg:

sudo make install

这将在/usr/local目录下安装FFmpeg及其相关工具。

6. 验证安装

安装完成后,你可以通过以下命令来验证FFmpeg是否正确安装:

ffmpeg -version

如果安装成功,这个命令将显示FFmpeg的版本信息。
请注意,这些步骤可能需要根据你的操作系统和FFmpeg版本进行调整。如果在编译或安装过程中遇到问题,请参考FFmpeg的官方文档或错误信息进行解决。

至此,结束~
在这里插入图片描述
望诸位不忘三连支持一下~

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

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

相关文章

win11安装python及pycharm与webots联合仿真

1、查看Windows系统 是否已安装Python及版本 【冰糖Python】Windows系统 查看已安装的Python版本_怎么确定windows上成功安装python-CSDN博客 好,确认没装下面装python37 2、安装python3.7.9 参考教程Python 3.82安装教程(Windows11、超详细版&#x…

C语言基础(六)

一维数组: C语言中的数组是一种基本的数据结构,用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引(或下标)来访问,索引通常是从0开始的。 数组的大小在声明时确定,并且之后不能改…

ansible搭建+ansible常用模块

ansible搭建 管理机安装ansible,被管理节点必须打开ssh服务 1.管理机安装ansible yum -y install ansible 2.查看版本 ansible --version ansible 2.9.27 3.查找配置文件 find /etc/ -name "*ansible*" /etc/ansible /etc/ansible/ansible.cfg 4.三台被管理机…

【中项第三版】系统集成项目管理工程师 | 第 15 章 组织保障

前言 本章的知识点预计上午会考1-2分,下午可能会考,一般与其他管理领域进行结合考查。学习要以教材为主。 目录 15.1 信息和文档管理 15.1.1 信息和文档 15.1.2 信息(文档)管理规则和方法 15.2 配置管理 15.2.1 基本概念 …

背包问题有前提

前言&#xff1a;这个有大前提的背包感觉不能用二进制拆分&#xff0c;不然搞不清楚 注意三维的顺便&#xff0c;第一维度是枚举物品&#xff0c;第二维度是倒序枚举空间&#xff0c;第三维度是枚举数量 题目地址 #include<bits/stdc.h> using namespace std;#define …

数据库:数据更新和视图

1 实验目的 &#xff08;1&#xff09;掌握SQL语言的数据更新功能&#xff1a; update 语句用于对表进行更新 delete 语句用于对表进行删除 insert 语句用于对表进行插入 &#xff08;2&#xff09;掌握对视图的操作&#xff1a; 视图的定义 视图的更新 基于视图的查询 …

基于推荐算法的景点攻略网站的设计与实现---附源码130855

摘 要 21世纪时信息化的时代&#xff0c;几乎任何一个行业都离不开计算机&#xff0c;将计算机运用于旅游景点分享也是十分常见的。过去使用传统广告方式对旅游景点进行推荐分享&#xff0c;造成了流程繁琐、难以维护&#xff0c;难于进准推荐给适合需求的人群等问题&#xff0…

详细扒一扒css的背景渐变(通俗易懂)

前言&#xff1a; CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。 CSS 定义了两种渐变类型&#xff1a; 线性渐变&#xff08;向下/向上/向左/向右/对角线&#xff09;径向渐变&#xff08;由其中心定义&#xff09; 下面来详细看看吧~ &#x1f308;&#x1f308;文…

qdma IP内部对于GT位置的约束

https://support.xilinx.com/s/question/0D52E00006hpphySAA/%E6%80%8E%E6%A0%B7%E7%AE%A1%E7%90%86pcie%E7%AD%89ip%E7%94%9F%E6%88%90%E7%9A%84xdc%E6%96%87%E4%BB%B6%E6%AF%94%E8%BE%83%E5%A5%BD?languageen_US GT约束的建议 qdma ip 对于GT的约束 # qdma ip 对于GT的约…

Gadmin极速开发平台,几分钟给你整一个OA系统出来

Gadmin极速开发平台 在企业信息化的大潮中&#xff0c;Gadmin极速开发平台以其独特的低代码开发模式&#xff0c;为企业提供了一套高效、灵活的解决方案。本文将介绍Gadmin平台的基本信息、核心特点&#xff0c;以及它如何帮助企业快速实现信息化建设。 软件简介 Gadmin是一个…

《黑神话·悟空》提高了多少游戏人的热情

《黑神话&#xff1a;悟空》的发布极大地提振了游戏人的热情&#xff0c;不管是国内游戏的带动&#xff0c;还是全球国产游戏的崛起&#xff0c;开启了国产3A游戏元年&#xff0c;下面我从主要两个大点来分析下。 玩家层面&#xff1a; 高度热情加强力追捧&#xff1a;从 202…

linux下搭建MySQL8.0.25单机

一、环境的前提与说明 VM虚拟机&#xff1a; cat /etc/redhat-releasecat /proc/version查看防火墙状态&#xff1a; systemctl status firewalld.service关闭命令&#xff1a; systemctl stop firewalld.service开机禁用防火墙自启命令 : systemctl disable firewalld.ser…

Veritas NBU8.3.0.2 安装部署环境备份实施介绍(篇一)

1、本次有两台NBU服务器&#xff0c;都是Windows Server 2016 Standard 2、一台作为Master Server角色&#xff0c;另外一台则作为Media Server角色 3、两台服务器均已加入域并关闭防火墙 4、后期备份客户端会有Linux和Windows系统&#xff0c;也会对接VCenter无代理备份虚拟…

FMS 2024:多家厂商CXL技术方案总览

CXL&#xff08;Compute Express Link&#xff09;联盟自成立以来一直是FMS闪存峰会的常客。在2022年的峰会上&#xff0c;CXL联盟宣布了CXL 3.0版本规范&#xff0c;随后在2023年的超级计算大会上推出了CXL 3.1版本。起初&#xff0c;CXL作为一种主机到设备的互联标准&#xf…

在CUDA中优化矩阵转置

https://dmacssite.github.io/materials/MatrixTranspose.pdfhttps://dmacssite.github.io/materials/MatrixTranspose.pdf Chapter 1. Introduction 矩阵转置优化CUDA内存管理 本文档讨论了CUDA应用程序性能的各个方面&#xff0c;这些方面与有效使用GPU内存和应用于矩阵转…

C++ TinyWebServer项目总结(1. 配置安装)

语雀文档 项目记录会先更新在我的语雀文档 &#xff1a;Webserver 然后再同步发送到CSDN上&#xff0c;有些格式问题实在是懒得改了&#xff0c;可能会导致大家看的不舒服&#xff0c;建议有需要的大家可以看看我的原文。 安装环境 Ubuntu 20.04 mysql Ver 8.0.39-0ubuntu0…

Ajax-3

一.图片上传 1.获取图片文件对象 2.使用FormData携带图片文件 const fd new FormData() fd.append(参数名, 值) 3.提交表单数据到服务器&#xff0c;使用图片url网址 二.AJAX原理—XMLHttpRequest 定义&#xff1a;XMLHttpReques&#xff08;XHR&#xff09;对象用于与服务器…

SM2前后端加密和解密

一&#xff1a;前端vue 二&#xff1a;后端解密 三&#xff1a;后端详解 3.1maven文件 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.66</version> </dependency&g…

Linux命令学习 -- tar指令

功能&#xff1a;对文件和目录进行打包 格式&#xff1a;tar [参数] [压缩文件名] [要压缩的目录或者文件的名字]常用参数如下&#xff1a; -c &#xff1a;创建一个新的打包文件&#xff1b; -x :对打包文件进行解压缩&#xff1b; -z :gzip 格式进行压缩或者解压&#xff0c;…

Cookie Session Token

什么是会话技术&#xff1f; Cookie 以登录为例&#xff0c;用户在浏览器中将账号密码输入并勾选自动登录&#xff0c;浏览器发送请求&#xff0c;请求头中设置Cookie&#xff1a;userName:张三 ,password:1234aa &#xff0c;若登录成功&#xff0c;服务器将这个cookie保存…