FFmeg格式封装libavformat


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】


封装格式简介

    封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳,将编码后的数据存储于此封装格式的文件之内。


    封装又称容器,容器的称法更为形象,所谓容器,就是存放内容的器具,饮料是内容,那么装饮料的瓶子就是容器。


    不同封装格式适用于不同的场合,支持的编码格式不一样,几个常用的封装格式如下:

image.png



格式封装

转封装是将一种封装格式转换为另一种封装格式,不涉及编解码操作,转换速度非常快。

image.png





FFmpeg中的封装格式

    FFmpeg关于封装格式的处理涉及打开输入文件、打开输出文件、从输入文件读取编码帧、往输出文件写入编码帧这几个步骤,这些都不涉及编码解码层面。


    在FFmpeg中,mux指复用,是multiplex的缩写,表示将多路流(视频、音频、字幕等)混入一路输出中(普通文件、流等)。

    demux指解复用,是mux的反操作,表示从一路输入中分离出多路流(视频、音频、字幕等)。


    mux处理的是输入格式,demux处理的输出格式

    输入/输出媒体格式涉及文件格式封装格式两个概念。

    文件格式由文件扩展名标识,主要起提示作用,通过扩展名提示文件类型(或封装格式)信息。

    封装格式则是存储媒体内容的实际容器格式,不同的封装格式对应不同的文件扩展名,很多时候也用文件格式代指封装格式,例如常用ts格式(文件格式)代指mpegts格式(封装格式)。


    例如,我们把test.ts改名为test.mkv,mkv扩展名提示了此文件封装格式为Matroska,但文件内容并无任何变化,使用ffprobe工具仍能正确探测出封装格式为mpegts。


查看FFmpeg支持的封装格式

使用ffmpeg -formats命令可以查看FFmpeg支持的封装格式。

FFmpeg支持的封装非常多,下面仅列出最常用的几种:

ffmpeg -formats



文件扩展名与封装格式

在FFmpeg命令行中,输入文件扩展名是错的也没有关系,因为FFmpeg会读取一小段文件来探测出真正的封装格式;但是如果未显式的指定输出封装格式,就只能通过输出文件扩展名来确定封装格式,就必须确保扩展名是正确的。



实验1:将flv封装格式转换为mpegts封装格式

使用转封装指令将flv封装格式转换为mpegts封装格式,在SHELL中依次运行如下两条命令:

ffmpeg -i tnhaoxc.flv  -c copy tnhaoxc.ts

ffmpeg -i tnhaoxc.flv  -c copy tnhaoxc.m2t




好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***