先看条转换视频文件的命令
我们的目的是将 源文件 source_1920x1080.mp4 转换成 目标文件 dest_1280x720.flv
ffmpeg -i source_1920x1080.mp4 -acodec copy -vcodec libx264 -s 1280x720 dest_1280x720.flv
-acodec copy 的意思是,目标的 音频格式 使用和 源文件一样的格式。
-vcodec libx264 的意思是,目标的 视频格式 使用 libx264 格式
-s 1280x720 的意思是,目标的视频的大小为 1280x720
dest_1280x720.flv 的意思是,目标文件的名字为 dest_1280x720.flv
按照上述标准,那么我们生成的 目标文件, 声音部分 和 视频部分应该是如下的样式的:
声音部分编码保持不变,还是 AAC 的
视频部分编码 从源文件的视频编码 变成 x264的,由于源文件的视频编码本身也是AVC的(也就是x264的),因此对于用于当前演示的这个文件,实际上也是不变的,但是如果换一个 源文件的视频编码不是x264的,就需要对源文件的编码进行改动。
主要的处理流程
这里要注意的是:如果是音频流的格式没有变化,那么理论上不需要 解码 -- 处理数据帧 -- 编码 这个过程。
请思考:
**如果视频流的格式没有变化,需要这个过程吗?**解码 -- 处理数据帧 -- 编码
如果视频的大小有变化,例如从1920x1080 变成 1280x720 . 应该是需要的
重要概念:
容器(Container)
容器就是一种文件格式,比如flv、mkv、mp4等。包含下面5种流以及文件头信息。
流(Stream)
是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。
包(Packet)
在ffmpeg中包代表已经编码好的一个单位的音频或者视频。
帧(Frame)
在ffmpeg中帧代表一幅静止的图像(yuv数据)或一些数量的音频采样。
编解码器(Codec)
是对视频进行压缩或者解压缩,CODEC =ENCode (编码) +DECode(解码)
复用/解复用(mux/demux)
把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)
为了更好理解以上概念,下面以h264+aac编码的flv文件转码为 h265+mp3编码的mp4文件为例,ffmpeg的处理流程是这样的:
三 学习路线中的问题解答。基础知识-- 解复用基础知识
原文链接:https://blog.csdn.net/weixin_52622200/article/details/136683908
1.什么是解复用?比如mp4格式
把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)
把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)
解复用是指将音视频数据从容器格式中解封装出来,并进行解码操作,得到原始的音频和视频信号的过程。在音视频开发中,容器格式如MP4内部包含了音频轨、视频轨以及其他元数据,解复用过程就是将这些数据提取出来并进行解码,以便播放或者进一步处理。
对于MP4格式,解复用的过程包括以下步骤:
解析文件结构:首先需要读取MP4文件的头部信息,这包括了文件的基本结构、各个数据块的位置和大小等元数据。
定位音视频数据:根据文件结构信息,找到音频轨和视频轨的位置和大小。
音频解复用:将音频数据从MP4格式中提取出来,并进行解码操作,得到原始的音频信号。
视频解复用:将视频数据从MP4格式中提取出来,并进行解码操作,得到原始的视频信号。
在解复用的过程中,需要使用相应的解码器对音频和视频数据进行解码操作,得到原始的音频和视频信号,以便后续的播放或处理
2.为什么需要不同的复用格式 mp4/FLV/TS
主要原因包括以下几点:
容器格式特性:
MP4(MPEG-4 Part 14):MP4是一种通用的多媒体容器格式,支持多种编码格式的音频和视频数据,常用于存储和播放音视频文件。MP4格式具有良好的兼容性和广泛的支持,适用于多种场景。
FLV(Flash Video):FLV是Adobe Flash Player使用的一种视频容器格式,通常用于网络视频播放。FLV格式支持在Web上高效地传输和播放视频内容,适合在线视频流媒体。
TS(Transport Stream):TS是一种用于传输和存储音视频数据的格式,常用于数字电视、广播和视频流媒体。TS格式适合实时传输和广播环境,具有较好的抗干扰性和稳定性。
应用场景:
MP4适用于通用的存储和播放需求,广泛应用于本地视频文件、在线视频平台等场景。
FLV常用于在线视频流媒体服务,如Flash播放器、网络直播等。
TS适用于数字电视、广播、IPTV等需要实时传输和播放的场景,具有优秀的传输性能和稳定性。
编解码支持:
不同的复用格式可能对特定的编码格式有更好的支持,例如某些格式可能更适合H.264编码的视频数据,而另一些则更适合AAC编码的音频数据。
网络传输特性:
不同的复用格式可能对网络传输有不同的优化,如TS格式在传输过程中可以更好地处理丢包和延迟等问题。
3.常见的复用格式 mp4/FLV/TS
当谈及常见的复用格式时,我们通常会提到MP4、FLV和TS这三种格式。下面我将对它们进行更详细的讲解:
MP4(MPEG-4 Part 14)
MP4是一种通用的多媒体容器格式,最初由国际标准化组织制定。它可以存储视频、音频、文本和图形等数据,并且支持多种编码格式的音频和视频数据。MP4文件通常使用H.264(视频编码)和AAC(音频编码)作为默认的编码方式。
特点:
- 广泛兼容性: MP4格式拥有非常好的兼容性,几乎所有的主流设备和播放器都支持MP4格式。
- 网络传输: 由于其压缩效率高,因此在网络上传输中占用较小的带宽。
- 应用领域: 适用于通用的存储和播放需求,如本地视频文件、在线视频平台等
FLV(Flash Video)
FLV是Adobe Flash Player使用的一种视频容器格式,最初被设计用于在Web上高效地传输和播放视频内容。
特点:
网络传输: FLV格式在网络传输中具有优异的表现,它能够提供较好的视频播放体验。
流媒体应用: 常用于在线视频流媒体服务,如Flash播放器、网络直播等。
互动性: FLV格式通常与Flash技术结合使用,支持视频流的交互式操作。
TS(Transport Stream)
TS是一种用于传输和存储音视频数据的格式,最初用于数字电视、广播和视频流媒体等领域。
特点:
实时传输: TS格式非常适合实时传输和广播环境,具有稳定的传输性能。
抗干扰性: TS格式具有较好的抗干扰性,适用于不稳定网络环境下的传输。
应用领域: 主要应用于数字电视、广播、IPTV等需要实时传输和播放的场景。