当前位置: 首页 > article >正文

ffmpeg基础知识入门

文章目录

    • 📦 1. **容器(Container)**
      • ✅ 定义:
      • ✅ 举例:
      • ✅ 功能:
    • 📶 2. **媒体流(Stream)**
      • ✅ 定义:
      • ✅ 举例:
      • ✅ 流和容器关系:
    • 🧱 3. **数据帧(Frame / Packet)**
      • ✅ 定义:
      • ✅ 举例:
    • 🎞️ 4. **编解码器(Codec)**
      • ✅ 定义:
      • ✅ 功能:
      • ✅ 举例:
      • ✅ 说明:
    • 🔄 5. **复用器(Muxer)**
      • ✅ 定义:
      • ✅ 举例:
    • 🔍 6. **解复用器(Demuxer)**
      • ✅ 定义:
      • ✅ 举例:
    • 🧠 它们的关系图(理解路径):
    • 💬 举个生活类比:


这是音视频领域中非常核心的一些基础概念,它们是构建媒体播放、推流、编解码、直播系统等的基础。下面我给你分条清晰地讲一下这些术语之间的含义和联系:


📦 1. 容器(Container)

✅ 定义:

容器是一种媒体封装格式,用来将音频流、视频流、字幕流等打包在一个文件中。

✅ 举例:

  • 常见的容器格式有:
    • .mp4.mkv.avi.mov.flv.ts
  • 容器 ≠ 编码方式,它只是“装”编码后的数据的一个壳子。

✅ 功能:

  • 封装多个媒体流(视频、音频、字幕)
  • 提供时序信息(比如音视频同步)
  • 支持索引、元数据等

📶 2. 媒体流(Stream)

✅ 定义:

媒体流是指某一类连续的媒体数据,通常是视频流、音频流或字幕流。

✅ 举例:

  • 一个 .mp4 文件中可能有:
    • 一条视频流(例如 H.264 编码)
    • 一条音频流(例如 AAC 编码)
    • 一条字幕流(例如 SRT)

✅ 流和容器关系:

  • 容器中可以有多条流(Stream),每条流是独立的数据序列。
  • 解码和播放的时候,需要对每条流单独处理。

🧱 3. 数据帧(Frame / Packet)

✅ 定义:

  • Frame(帧):解码后的数据单位(未压缩)
    • 视频帧是一张图片
    • 音频帧是一段 PCM 采样点
  • Packet(包):压缩后的数据单位(经过编码器压缩后,准备写入容器的)

✅ 举例:

  • 视频:
    • 解码前:H.264 压缩包(packet)
    • 解码后:YUV 图像(frame)
  • 音频:
    • 解码前:AAC 压缩包(packet)
    • 解码后:PCM 数据(frame)

🚨 注意:frame 通常指未压缩的图像/音频数据,而 packet 是压缩后的小块数据。


🎞️ 4. 编解码器(Codec)

✅ 定义:

Codec = COder + DECoder,即“编码器/解码器”。

✅ 功能:

  • 编码器:将原始媒体数据压缩成占用更少空间的数据
  • 解码器:将压缩数据还原成可播放的原始数据

✅ 举例:

媒体类型编码器解码器
视频H.264、H.265、VP9、AV1对应解码器
音频AAC、MP3、FLAC、Opus对应解码器

✅ 说明:

  • 媒体播放器(如 VLC)必须支持容器格式和其内部使用的编解码器,才能正常播放。

🔄 5. 复用器(Muxer)

✅ 定义:

复用器(Muxer)把多条媒体流(音频、视频)打包进容器,形成一个完整的媒体文件或媒体流。

✅ 举例:

  • 把 H.264 视频、AAC 音频合成一个 .mp4 文件,就需要复用器。
  • ffmpeg 就是常用的复用工具:
    ffmpeg -i video.h264 -i audio.aac -c copy output.mp4
    

🔍 6. 解复用器(Demuxer)

✅ 定义:

解复用器(Demuxer)从容器中提取出音视频流,再送到对应的解码器中处理。

✅ 举例:

  • 播放器播放一个 .mp4 文件,首先通过解复用器提取音频流和视频流:
    • 音频流送到 AAC 解码器
    • 视频流送到 H.264 解码器

🧠 它们的关系图(理解路径):

[摄像头/麦克风采集原始数据]↓[原始帧]↓ 编码器(Codec)[压缩帧]↓ 复用器(Muxer)[封装到容器 - MP4文件]↓
-----------------------------↓播放阶段:↓ 解复用器(Demuxer)[音视频流分离]↓ 解码器(Codec)[原始帧]↓ 渲染[画面 + 声音 输出]

💬 举个生活类比:

  • 容器:像打包好的快递盒(比如顺丰箱子)
  • :快递盒里放的东西(音频、视频、字幕)
  • Packet:每个流中的一小块数据,像一个个文件袋
  • Codec:像压缩和解压缩的算法,压缩快递体积
  • Muxer:像打包员,把所有内容封装进盒子
  • Demuxer:像拆包员,把盒子打开、分拣内容

相关文章:

ffmpeg基础知识入门

文章目录 📦 1. **容器(Container)**✅ 定义:✅ 举例:✅ 功能: 📶 2. **媒体流(Stream)**✅ 定义:✅ 举例:✅ 流和容器关系: &#x1…...

c++项目 网络聊天服务器 实现;QPS测试

源码 https://github.com/DBWGLX/SZU_system_programming 文章目录 技术设计编码JSON的替换Protobuf 网络线程池更高效率网络字节序的考虑send可能无法一次性发送全部数据!EPOLLHUP , EPOLLERR 的正确处理 IO数据库操作的更高性能 开发日志2025.3a.粘包问题 2025.4b…...

rnn的音频降噪背后技术原理

rnniose: 这个演示展示了 RNNoise 项目,说明了如何将深度学习应用于噪声抑制。其核心理念是将经典的信号处理方法与深度学习结合,打造一个小巧、快速的实时噪声抑制算法。它不需要昂贵的 GPU —— 在树莓派上就能轻松运行。 相比传统的噪声抑制系统&…...

Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案

前言 前段时间做一个内网开发的需求,要求将selenium程序打包成.exe放在内网的win7上运行,在掘金搜了一圈也没有发现相关文章,因此将过程中踩到的坑记录分享一下。 本文涵盖了具体打包操作、不同模块和依赖项的兼容性解决方案,以…...

【题解】AtCoder AT_abc400_c 2^a b^2

题目大意 我们定义满足下面条件的整数 X X X 为“好整数”: 存在一个 正整数 对 ( a , b ) (a,b) (a,b) 使得 X 2 a ⋅ b 2 X2^a\cdot b^2 X2a⋅b2。 给定一个正整数 N N N( 1 ≤ N ≤ 1 0 18 1\le N\le 10^{18} 1≤N≤1018)&#xff…...

ubuntu 配置固定ip

在装服务器系统的时候,DHCP自动获取ip时,路由可能会重新分配ip,为避免产生影响,可以关闭DHCP将主机设置为静态ip。 系统环境 Ubuntu 22.04-Desktop 配置方式 一、如果是装的Ubuntu图形化(就是可以用鼠标操作点击应用…...

基于Coze平台实现工程项目管理SaaS软件的在线化客户服务

一、引言 在数字化转型浪潮下,SaaS(软件即服务)模式已成为企业级软件的主流交付方式。然而,随着用户规模的增长,传统人工客服模式面临响应速度慢、人力成本高、知识库更新滞后等痛点。如何利用AI技术实现客户服务的智…...

vue3实现markdown工具栏的点击事件监听

这里以监听全屏事件为例 监听 Vditor 编辑器的全屏事件 要监听 Vditor 编辑器的全屏事件,你可以使用 Vditor 提供的 API 和事件系统。以下是几种实现方法: 方法一:使用 Vditor 的 after 钩子函数 const vditor new Vditor(editor, {afte…...

QT ARM开发板调试

QT 应用程序在 ARM 开发板上完全可以进行调试。以下是完整的调试方案和配置方法: 1. 调试方式概览 调试方式适用场景所需工具特点GDB 远程调试代码级调试gdbserver gdb-multiarch最强大的调试方式QT Creator 远程调试集成开发环境调试QT Creator gdbserver开发体…...

OpenCV 图形API(21)逐像素操作

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV的G-API模块中,逐像素操作指的是对图像中的每个像素单独进行处理的操作。这些操作可以通过G-API的计算图(Graph …...

Mysql连接池报错

报错信息如下 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.at com.mysql.cj.jdbc.exceptions.SQ…...

使用git clone的时候部分文件夹克隆不下来

当使用git clone命令克隆一个仓库时,有可能出现部分文件夹没有被克隆下来的情况。这种问题通常有以下几个可能的原因: 权限问题:检查一下你对该仓库的访问权限。如果你没有足够的权限,可能无法克隆某些文件夹。 仓库设置&#xf…...

批量图片文本识别重命名,批量ocr识别图片重命名,基于WPF和腾讯OCR云部署实,现批量对图片局部提取文字后重命名的操作详细步骤

​​1. 项目背景​​ 在日常工作中,我们经常需要处理大量图片文件,这些图片可能包含重要的文字信息。为了提高工作效率,我们需要一种自动化的方式,从图片中提取文字,并根据提取的文字对图片进行重命名。 本项目基于 ​​WPF​​ 框架开发桌面应用程序,结合 ​​腾讯 OCR…...

Linux——冯 • 诺依曼体系结构操作系统初识

目录 1. 冯 • 诺依曼体系结构 1.1 冯•诺依曼体系结构推导 1.2 内存提高冯•诺依曼体系结构效率的方法 1.3 理解数据流动 2. 初步认识操作系统 2.1 操作系统的概念 2.2 设计OS的目的 3. 操作系统的管理精髓 1. 冯 • 诺依曼体系结构 1.1 冯•诺依曼体系结构推导 计算…...

洛谷题单3-P5724 【深基4.习5】求极差 最大跨度值 最大值和最小值的差-python-流程图重构

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​,求这 n n n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。 输入格式 第一行输入一个正整数 n n n,表示整数个数。 第二行输入 n n n 个整数 a 1 , a 2 … a n a_1,…...

Vue3 实现进度条组件

样式如下&#xff0c;代码如下 <script setup> import { computed, defineEmits, defineProps, onMounted, ref, watch } from vue// 定义 props const props defineProps({// 初始百分比initialPercentage: {type: Number,default: 0,}, })// 定义 emits const emits…...

35.[前端开发-JavaScript基础]Day12-for循环中变量-华为商城-商品列表-轮播图

for循环中监听函数中打印变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wi…...

【蓝桥杯】十五届省赛B组c++

目录 前言 握手问题 分析 排列组合写法 枚举 小球反弹 分析 代码 好数 分析 代码 R 格式 分析 代码 宝石组合 分析 代码 数字接龙 分析 代码 拔河 分析 代码 总结 前言 主播这两天做了一套蓝桥杯的省赛题目&#xff08;切实感受到了自己有多菜&#x…...

scala-集合2

可变数组 定义变长数组 val arr01 ArrayBuffer[Any](3, 2, 5) &#xff08;1&#xff09;[Any]存放任意数据类型 &#xff08;2&#xff09;(3, 2, 5)初始化好的三个元素 &#xff08;3&#xff09;ArrayBuffer 需要引入 scala.collection.mutable.ArrayBuffer 案例实操 Arra…...

[Linux系统编程]多线程

多线程 1. 线程1.1 线程的概念1.2 进程与线程对比1.3 轻量级进程 2. Linux线程控制2.1 POSIX 线程&#xff08;pthread&#xff09;2.2 线程ID、pthread_t、和进程地址空间的关系2.2.1 pthread_self2.2.2 pthread_create2.2.3 pthread_join2.2.4 线程终止的三种方式2.2.5 pthre…...

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__下

前言 由于Quartus写代码比较费劲&#xff0c;虽然新版已经有了代码补全&#xff0c;但体验上还有所欠缺。于是使用VS Code开发&#xff0c;效果如下所示&#xff0c;代码样式和基本的代码补全已经可以满足开发&#xff0c;其余工作则交由Quartus完成 但VS Code的自带的git功能&…...

odo18实施——销售-仓库-采购-制造-制造外包-整个流程自动化单据功能的演示教程

安装模块 安装销售 、库存、采购、制造模块 2.开启外包功能 在进入制造应用点击 配置—>设置 勾选外包&#xff0c;点击保存 添加信息 一、添加客户信息 点击到销售应用 点击订单—>客户 点击新建 创建客户1&#xff0c;及其他客户相关信息&#xff0c;点…...

微信小程序生成某个具体页面的二维码

微信小程序&#xff0c;如果要生成某个具体页面&#xff0c;而非首页的二维码&#xff0c;体验和正式的生成方法如下&#xff1a; 1、体验版二维码&#xff1a; 管理---版本管理---修改页面路径&#xff0c;输入具体页面的路径以及参数&#xff0c;生成的是二维码 2、正式小程…...

鸿蒙开发_ARKTS快速入门_语法说明_组件声明_组件手册查看---纯血鸿蒙HarmonyOS5.0工作笔记010

然后我们来看如何使用组件 可以看到组件的组成 可以看到我们使用的组件 然后看一下组件的语法.组件中可以使用子组件. 然后组件中可以有参数,来修改组件的样式等 可以看到{},这种方式可以设置组件参数,当然在下面. 的方式也可以的 然后再来...

利用解析差异SSRF + sqlite注入 + waf逻辑漏洞 -- xyctf 2025 fate WP

本文章附带TP(Thinking Process)! #!/usr/bin/env python3 # 导入所需的库 import flask # Flask web框架 import sqlite3 # SQLite数据库操作 import requests # HTTP请求库 import string # 字符串处理 import json # JSON处理app flask.Flask(__name__) # 创建Flask应…...

接口异常数组基础题

题目描述 设想你正在构建一个智能家居控制系统。这个系统可以连接多种不同类型的智能设备&#xff0c;如智能灯泡、智能空调和智能门锁。每种设备都有其独特的功能&#xff0c;不过它们也有一些通用的操作&#xff0c;像开启、关闭和获取设备状态等。系统需要提供一个方法来控…...

rustdesk折腾手记

背景 我的工作环境&#xff1a;主力电脑是macPro, 另外一台ThinkPad W530作为开发机&#xff0c;装的是LinuxMint&#xff0c;还有一台ThinkPad P15作为服务器。平常显示器接到macPro&#xff0c;在macOS上通过微软的远程桌面连接到另外两台Linux。基本访问比较流畅&#xff0…...

使用el-tab 实现两个tab切换

1、主页面 index.vue 2、tab1&#xff1a;school.vue 3、tab2&#xff1a;parent.vue 具体代码如下&#xff1a; <template><div class"app-container"><!-- 使用el-tabs 实现两个组件的切换 --><el-tabs v-model"activeName" typ…...

JAVA--流(Stream)的使用

一、概念 JDK8新特性&#xff0c;简单方便的对集合和数组进行处理。 Stream&#xff08;流&#xff09;是一个来自数据源的元素队列 数据源&#xff1a;流的来源&#xff0c;指的是集合或数组 元素队列&#xff1a;元素是特定类型的对象&#xff0c;形成一个队列 Stream 并…...

使用ExcelJS实现专业级医疗数据导出功能:从数据到Excel报表的完整指南

在现代医疗信息系统中&#xff0c;数据导出是医护人员和行政人员日常工作中的重要需求。本文将详细介绍如何使用ExcelJS库在前端实现专业级的医疗数据导出功能&#xff0c;特别是针对住院缴费记录这类关键业务数据。 功能概述 这个exportExcel函数实现了以下核心功能&#xf…...