原文作者:一叶知秋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. PHP生成有背景的二维码图片

    Hart QR Code 快速生产带背景的二维码,他为你提供了以下功能 生产原始二维码,可配置url或则text,以及二维码大小 生产带背景带二维码,背景大小是你传入带背景大小,可配置原始二维码大小, ...

  2. Django 关联查询

    查询id=1的XXXXX关联的YYYYY信息 a = XXXXX.objects.get(id=1) a.YYYYY.all() 查询id=1的YYYYY关联的XXXXX信息 b = YYYYY.ob ...

  3. C 循环统计输入的单词个数和字符长度

    C 循环统计输入的单词个数和字符长度 #include <stdio.h> #include <Windows.h> int main(void) { ]; ; ; print ...

  4. diy操作系统 附录:常用命令

    ld -m elf_i386 as --32 gcc -m 16 o

  5. Python enumerate()内置函数

    Python enumerate()内置函数 文章参考 描述 enumerate()函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合成一个索引序列,同时列出数据和数据下标,一般用于for循环 ...

  6. yii2 migrate 数据库迁移的简单分享

    开发中经常会用到的方法小结: 1../yii migrate xxx_xx 在表中插入某字段 : public function up() {$this->addColumn('{{applic ...

  7. SVN操作出现locked错误解决办法

    SVN操作出现locked错误解决办法:在SVN中执行 commit 操作时,在更新过程中,中断过,或者因为其他原因导致SVN 出现 locked 异常. 解决办法:1. 选中出现异常的文件,右键 - ...

  8. redis键的迁移操作

    1.redis单个实例内多库间的数据迁移操作 命令名称:move 语法:move key db 功能:将当前数据库的key移动到给定的数据库db当中.如果当前数据库(源数据库)和给定数据库(目标数据库 ...

  9. MySql数据库 优化

    MySQL数据库优化方案 Mysql的优化,大体可以分为三部分:索引的优化,sql慢查询的优化,表的优化. 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更 ...

  10. 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮

    周五公司事不是很紧,打算好好弄下自己的博客,这是自己学习和记录分享地方, 首先请记得申请js权限,默认不支持的,博主是已经申请通过后的样子 接着先选择cnblogs一个现有的模板,我这个就是在他的模板 ...