原文作者:一叶知秋0830

链接:https://www.jianshu.com/p/1b715966af50

FFmpeg处理音视频完整流程包括5个阶段(输入文件—>编码数据包—>解码后数据帧—>编码数据包—>输出文件),如下图所示。

1.解封(demuxer)

输入文件就是我们常见的mp4、flv等格式的文件,这些文件称为具有封装格式的文件(封装格式也叫容器,就是将已经编码压缩好的视频数据、音频数据、字幕数据等按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者可以当成一个存放各种数据的文件夹)。
视音频分离器(Demuxer)将封装格式数据中的视频压缩数据、音频压缩数据、字母数据等分离开,这个过程就是解封。解封后得到的数据是编码数据,这些数据是压缩后的数据。

2.解码和加工(decoder)

解封后得到的编码数据是压缩后的数据,通过解码得到解码后的数据(也就是原始数据,不过这个原始数据和音视频设备采集的元素数据还是有区别的,设备采集的数据先要去除一些冗余数据,这些删掉的冗余数据是没法还原的)。
然后按照实际需求对原始数据进行加工处理,比如原始数据是720P格式的视频帧,需要缩小成480P。

3.重新编码(encoder)

将加工处理后的数据重新进行编码成编码数据。

4.重新封装(muxer)

将重新编码的数据按照自己的需求再次封装输出称为封装格式的文件。


并不是所有的视频处理都要经过这几个流程,根据实际需求来。比如只是转换一下格式的话只需要解封后重新封装成自己想要的格式,并不需要进行解码和重新编码操作。

比如MP4文件转换成flv文件,只需要解封后重新封装;

比如1080p的MP4转成480p的MP4,就需要全部的流程。

FFmpeg处理音视频流程学习笔记的更多相关文章

  1. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频

    一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...

  2. FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据

    如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...

  3. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

    通过"javaCV入门指南:序章 "大家知道了处理音视频流媒体的前置基本知识,基本知识包含了像素格式.编解码格式.封装格式.网络协议以及一些音视频专业名词,专业名词不会赘述,自行搜 ...

  4. FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据

    如何使用FFmpeg抽取音视频的视频数据,代码如下: // FFmpegTest.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include ...

  5. C#进程调用FFmpeg操作音视频

    项目背景 因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂 ...

  6. Android 音视频开发学习思路

    Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...

  7. ffmpeg解码音视频过程(附代码)

    0. 引言 最近一直在使用和学习ffmpeg. 工作中需要拉流解码, 获取音频和视频数据. 这些都是使用ffmpeg处理. 因为对ffmpeg接触不多, 用的不深, 在使用的过程中经常遇到不太懂的地方 ...

  8. ffmpeg实战-音视频合成案例

    转发自白狼栈:查看原文 很多小伙伴私下里留言说,之前没接触过音视频,对于ffmpeg可以做什么还是有些懵. 今天我们一起看下我们究竟可以用 ffmpeg 做什么? 很多小伙伴应该都玩过抖音,你在&qu ...

  9. FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息

    在之前使用FFmpeg命令行的时候,我们经常看到FFmpeg命令行在输出音视频文件的会打印一下文件的Meta信息,类似如图: 那么我们如何通过代码的方式输出这些Meta信息呢? FFmpeg提供了一个 ...

随机推荐

  1. 【Docker】:使用docker安装mysql,挂载外部配置和数据

    普通安装 1.下载镜像,mysql 5.7 docker pull mysql:5.7 2.创建mysql容器,并后台启动 docker run -d -p 3306:3306 -e MYSQL_US ...

  2. 用Python获取计算机网卡信息

    目录 0. 前言 1. 测试环境及关键代码解释 1.1 测试环境 1.1.1 系统: 1.1.2 开发工具: 2. 模块介绍及演示 2.1 platform模块使用示例 2.2 netifaces模块 ...

  3. Python学习笔记——Python 函数

    1. 函数定义与调用 def MyFirstFunction(): print('这是我创建的第一个函数') #调用 MyFirstFunction() 这是我创建的第一个函数 2. 函数文档 def ...

  4. 跳转语句 break;continue; return; goto 区别用法

    C语言是按顺序执行语句的语言——一个接一个.即使它有条件语句或循环语句,程序的流程也是自上而下的.没有顺序流的随机跳转或跳转.但我们的程序是为了满足任何现实世界的需求,一个接一个地执行永远不会很直接. ...

  5. react项目中canvas之画形状(圆形,椭圆形,方形)

    组件DrawShape.jsx如下: import React, { Component } from 'react' // import ClassNames from 'classnames' i ...

  6. 创建新表,自动授权trigger

    需求 一个用户下三个表,开发人员不定时进行rename表名称,create原表名称 as old_table 插入少量数据,另一个业务用户需要访问该表,由于表名称rename导致经常需要手工授权. 需 ...

  7. C#获取客户端Ip工具类

    string pcname = Dns.GetHostName(); string ip = Dns.GetHostAddresses(pcname).First().ToString(); usin ...

  8. 音视频入门-01-认识RGB

    * 音视频入门文章目录 * RGB 简介 RGB 色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红 ...

  9. 轻松搭建CAS 5.x系列(4)-Java客户端程序接入CAS单点登录,Hello World版

    概述说明 按照本系列的前3篇文章描述的步骤,我们已经搭建好cas sso server.那应用程序怎么接入到实现sso呢? (如果您还没有搭建cas server,可以到<轻松搭建CAS 5.x ...

  10. C#强制回收垃圾

    [DllImport("psapi.dll")] private static extern int EmptyWorkingSet(int hProcess); public v ...