【视频】视频文件格式和视频编码

article/2025/10/15 20:40:53

我们经常在电脑、电视、手机或者其他终端产品看视频,我们对视频有个大概了解,比如清晰度、大小、视频类型等,但是对于视频内部结构我们应该一无所知,现在我们来一步一步解开视频的神秘面纱。
首先大家要清楚两个概念,视频文件格式和视频编码方式。
平常我们所看的视频文件后缀都有诸如mp4、rmvb、mkv、avi等等,这些是文件的扩展名,也就是视频文件格式,这些格式又叫做容器格式(container format),顾名思义就是用来装东西的,你可以把它想象成为一个便当盒,或者野餐篮。通常我们从网上下载的电影都是有声音的,所以容器格式中一般至少包含有两个数据流(stream)(有时还包括字幕),一个视频流,一个音频流,就好比是一个便当盒里装着的配菜和米饭。以下是通过ffmpeg获取的视频详细信息:

{'streams': [{'index': 0, 'codec_name': 'h264', 'codec_long_name': 'H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10', 'profile': 'High', 'codec_type': 'video', 'codec_time_base': '9007/531600', 'codec_tag_string': 'avc1', 'codec_tag': '0x31637661', 'width': 540, 'height': 960, 'coded_width': 544, 'coded_height': 960, 'has_b_frames': 1, 'pix_fmt': 'yuv420p', 'level': 31, 'color_range': 'tv', 'color_space': 'bt709', 'color_transfer': 'bt709', 'color_primaries': 'bt709', 'chroma_location': 'left', 'refs': 1, 'is_avc': 'true', 'nal_length_size': '4', 'r_frame_rate': '30000/1001', 'avg_frame_rate': '265800/9007', 'time_base': '1/600', 'start_pts': 0, 'start_time': '0.000000', 'duration_ts': 9007, 'duration': '15.011667', 'bit_rate': '1219445', 'bits_per_raw_sample': '8', 'nb_frames': '443', 'disposition': {'default': 1, 'dub': 0, 'original': 0, 'comment': 0, 'lyrics': 0, 'karaoke': 0, 'forced': 0, 'hearing_impaired': 0, 'visual_impaired': 0, 'clean_effects': 0, 'attached_pic': 0, 'timed_thumbnails': 0}, 'tags': {'creation_time': '2019-06-12T09:23:40.000000Z', 'language': 'und', 'handler_name': 'Core Media Video'}}, {'index': 1, 'codec_name': 'aac', 'codec_long_name': 'AAC (Advanced Audio Coding)', 'profile': 'LC', 'codec_type': 'audio', 'codec_time_base': '1/44100', 'codec_tag_string': 'mp4a', 'codec_tag': '0x6134706d', 'sample_fmt': 'fltp', 'sample_rate': '44100', 'channels': 1, 'channel_layout': 'mono', 'bits_per_sample': 0, 'r_frame_rate': '0/0', 'avg_frame_rate': '0/0', 'time_base': '1/44100', 'start_pts': 0, 'start_time': '0.000000', 'duration_ts': 661427, 'duration': '14.998345', 'bit_rate': '48711', 'max_bit_rate': '48000', 'nb_frames': '648', 'disposition': {'default': 1, 'dub': 0, 'original': 0, 'comment': 0, 'lyrics': 0, 'karaoke': 0, 'forced': 0, 'hearing_impaired': 0, 'visual_impaired': 0, 'clean_effects': 0, 'attached_pic': 0, 'timed_thumbnails': 0}, 'tags': {'creation_time': '2019-06-12T09:23:40.000000Z', 'language': 'und', 'handler_name': 'Core Media Audio'}}], 'format': {'filename': 'F:\\PythonProject\\PythonLession\\RecordModule\\ffmpeg\\1.mp4', 'nb_streams': 2, 'nb_programs': 0, 'format_name': 'mov,mp4,m4a,3gp,3g2,mj2', 'format_long_name': 'QuickTime / MOV', 'start_time': '0.000000', 'duration': '15.011678', 'size': '2390314', 'bit_rate': '1273842', 'probe_score': 100, 'tags': {'major_brand': 'mp42', 'minor_version': '1', 'compatible_brands': 'mp41mp42isom', 'creation_time': '2019-06-12T09:23:40.000000Z'}}} 


视频编码方式则是指容器格式中视频流数据的压缩编码方式,而视频数据采用了何种编码方式是无法单单从文件格式的后缀上看出来的。就是说你无法从一个盖着盖子的便当盒外面看出里面装了什么配菜。
H.264就是视频编码,aaC、mp3等是音频编码,我们把用H.264视频编码和MP3音频编码按照mkv的封装标准封装起来,这样我们看到的就是mkv格式的视频文件。封装格式并不影响画质,它只负责把内部的视频轨和音频轨集成在一起,并不对内容造成影响。不过值得一提的是,封装标准虽然不影响视频质量,不过不同的封装标准依然有不同的特点,比较早的avi格式只能封装一条视频和一条音频,而且不支持流媒体播放,未来avi格式可能会慢慢被淘汰。而MP4是MPEG官方指定的封装格式,可以封装多种多条编码的视频和音频,也可以封装字幕。而mkv除了具有mp4的特点外,还支持流媒体播放功能,因此受到市场的广泛欢迎。
视频编码可以说是一个视频文件的核心所在,而这也是我们大多数用户通常并不关注的。视频编码主流上有两个标准,一个是H.26X系列。另一个是MPEG系列。H.26X包括H.261、H.262、H.263、H.264、H.265。H.261、H.262主要用在视频会议和视频电话中,而H.264编码则是被广泛使用在视频的录制与压缩。H.265则是在H.264的基础上进一步提升了图像质量,并且在压缩率上是H.264的两倍,被普遍认为是下一代编码标准。


而MPEG则包括MPEG-1第二部分、MPEG-2第二部分、MPEG-4第二部分、MPEG-4第十部分,MPEG-1第二部分主要用在VCD,而MPEG-2第二部分一般在数字电视和广播系统中应用的比较多,MPEG-4第二部分则可以用在网络传输上,在压缩性能上也比前两代高。这里面MPEG-4第十部分和H.264的标准十分接近,两个编码组织甚至合作,为这个标准命名为H.264/AVC,这也是目前主流的编码格式,我们所看的很多视频都是采用H.264编码。


如果你想播放一个视频文件,第一步你的播放器(不论是软件的还是硬件的)要能够解析相应的容器格式,这一步也叫做解复用(demux),第二步你的播放器要能够解码其中所包含视频流和音频流。这样影片才能播放出来。
打个不太恰当的比方,播放器好比你雇用的一个试菜员,由他来品尝便当(视频文件),然后告诉你便当里装了什么东西。
所以试菜员首先要懂得如何打开便当盒,还要知道吃的出来便当盒里装了什么配菜,这样你才能获得你想要的信息。


编码器MPEG-4、MPEG-4/AVC、H.264之间的联系与区别 
在视频编解码技术定义方面有两大标准机构。一个是国际电信联盟 (ITU) 致力于电信应用,已经开发了用于低比特率视频电话的 H.26x 标准,其中包括 H.261、H.262、H.263 与 H.264;另一个是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义了 MPEG 标准。MPEG 标准包括 MPEG1、MPEG2 与 MPEG4。
1、关于MPEG4
MPEG1、MPEG2技术当初制定时,它们定位的标准均为高层媒体表示与结构,但随着计算机软件及网络技术的快速发展,MPEG1、MPEG2技术的弊端就显示出来了:交互性及灵活性较低,压缩的多媒体文件体积过于庞大,难以实现网络的实时传播。
而MPEG4技术的标准是对运动图像中的内容进行编码,其具体的编码对象就是图像中的音频和视频,术语称为"AV对象",高效率地编码、组织、存储、传输AV对象是MPEG4标准的基本内容。在视频编码方面,MPEG4支持对自然和合成的视觉对象的编码。(合成的视觉对象包括2D、3D动画和人面部表情动画等)。在音频编码上,MPEG4可以在一组编码工具支持下,对语音、音乐等自然声音对象和具有回响、空间方位感的合成声音对象进行音频编码。 MPEG4的技术规范如下表所示:
2、关于H.264
以制订国际通讯标准为主的国际电信联盟ITU-T,在完成H.263(针对视频会议之用的串流视频标准)后,与ISO/IEC机构连手合作,由两机构共同成立一个名为JVT(Joint Video Team)的联合工作小组,以MPEG-4技术为基础进行更适于视频会议(Video Conference)运用的衍生发展,联合制订了一个新的标准。
这个标准,ITU-T方面称之为H.264。但ISO/IEC的则将这个新标准归纳于MPEG系列,称为MPEG-4 Part 10(第10部分,也叫ISO/IEC 14496-10),MPEG-4 Part 10的另一个代称是MPEG-4 AVC(Advanced Video Coding,先进视频编码)。
从这里可以看出,所谓的H.264其实与MPEG-4/AVC就是同一回事,即H.264=MPEG-4 Part 10=ISO/IEC 14496-10=MPEG-4 AVC。
3、H.264与MPEG-4的区别
既然有了MPEG-4 Part 2,为什么ISO/IEC还要与ITU-T一起H.264呢?H.264到底与MPEG-4有何差别?或者说MPEG-4 Part 10与MPEG-4 Part 2有何差别?
虽然MPEG-4已针对Internet传送而设计,提供比MPEG-2更高的视频压缩效率,更灵活与弹性变化的播放取样率,但就视频会议而言总希望有更进一步的压缩,所以才需要出现了H.264。
H.264最具价值的部分无疑是更高的数据压缩比。在同等的图像质量条件下,H.264的数据压缩比能比当前DVD系统中使用的MPEG-2高2-3倍,比MPEG-4高1.5-2倍。
正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。在 MPEG-2需要6Mbps的传输速率匹配时,H.264只需要1Mbps-2Mbps的传输速率。
要知道H.264好在哪?我们可以将MPEG-2、MPEG-4(MPEG-4 Part 2)、H.264(MPEG-4 AVC、MPEG-4 Part10)三者进行分辨率表现与所用带宽的比较,
无论MPEG-2、MPEG-4、H.264,三者都能达1920×1080i(非交错)的高清晰度(HighDefinition,HD)、24fps(每秒更新24张画面)的影像画质,但传输带宽上MPEG-2需要12~20Mbps,相对的H.264只要7~8Mbps,而MPEG-4则介于两者间,更直接地说,若把MPEG-2的带宽用作基准的100%,MPEG-4要达相同效果只需要60%带宽,H.264更是低至40%,约为原MPEG-2的1/2~1/3。


http://chatgpt.dhexx.cn/article/VUfc7tYG.shtml

相关文章

H.265视频编码原理总结

H.265视频编码原理总结 转载地址 1 概述 H.265(HEVC High Efficiency Video Coding)是现行H.264标准于2003年实现标准化以来时隔10年推出的新标准,将成为支撑未来十年的影像服务和产品的视频压缩技术。其特点是,支持1080p以上的…

视频编码流程详解

1、视频编码整体流程 2、FFmpeg视频编码详细流程 从本地读取YUV数据编码为H264格式的数据,然后再存入到本地,编码后的数据有带startcode。 与FFmpeg示例音频编码的流程基本一致。 3、关键函数说明 (1)avcodec_find_encoder_by_n…

视频编码知识

记录一下学习视频编码的过程和自己的理解 视频 数字图像在计算机中的表示:二维矩阵,或三维矩阵(彩色)。 矩阵中的每个点为像素,数值的大小反应色彩的强度,颜色深度需要使用一定数据空间存储,每…

视频的专业基础知识(一)常用的编码格式和参数

1. 常用的编码格式 编码格式:一个视频文件本身,通常由音频和视频两部分组成。例如视频文件,就是由avc视频编码AAC音频编码组成的,常见的视频编码格式有Xvid,AVC/H.264,MPEG1,MPEG2 等&#xff…

常见视频编码格式解析

常见视频编码格式解析 文章目录 常见视频编码格式解析1、MPEG2-TS编码技术1.1. MPEG-TS简介1.2. 基本概念及TS流概述1.3. 基本流程1.4. TS流传输包(简称TS包)结构分析1.4.1. TS包包头1.4.2. TS包净荷部分1.5. PS节目流2、MPEG-4编码技术2.1. MPEG-4概述2.2. MPEG-4各部分2.3.…

视频编码全流程

视频编解码用到的一些算法: 正反傅里叶变换、fft算法 dct变换、快速dct变换 如何自己实现一个视频编解码器: (1)取一帧作为I帧,类似jpeg压缩编码,也就是 rgb转yuv,然后dct去除高频信息。因为这种压缩会造成边界bloc…

视频编码技术详解

1、引言 如今我们所处的时代,是移动互联网时代,也可以说是视频时代。从快播到抖音,从“三生三世”到“延禧攻略”,我们的生活,被越来越多的视频元素所影响。 而这一切,离不开视频拍摄技术的不断升级&#x…

FIO源码解读测试

在磁盘测试中,fio是最常用的测试的工具,其下载网址为https://github.com/axboe/fio; 对于fio,其测试命令有许多,这个大家很容易就可以查到,此处不讲解具体的测试命令, 而是讲一下大概的源码框架。 Fio的入口函数在fio.…

fio引发的一些问题

fio引发的一些问题 奇怪的255扇区在nvme驱动中插入打印语句直接编译模块加载源码编译内核 查找内核源码 奇怪的255扇区 由于块设备驱动项目需要测试读写速度,故使用fio工具,没想着深入了解,简单测个速就可以 使用tldr命令得到测试磁盘读写的…

【fio】关于磁盘性能测试

一、关于磁盘 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。 第一类,机械磁盘,也称为硬盘驱动器(Hard Disk Driver),通常缩写为 HDD。…

【测试】 FIO:ceph/磁盘IO测试工具 fio(iodepth深度)

目录 随看随用 NAS文件系统测试 块系统测试 FIO用法 FIO介绍 FIO 工具常用参数: FIO结果说明 I/O 的重放(录下实际工况的IO,用fio重放) fio工作参数可以写入配置文件 fio的iodepth参数说明 IO状态监控: Ios…

FIO详解

fio - Flexible IO Tester 一、服务器配置: 由于我们想通过fio得到SSD真实的参数信息,因此我们需要服务器BIOS一些参数的配合,以便能更好的体现硬盘的性能。 以华为1288HV5为例: 二、fio 1.安装 a.下载地址:htt…

FIO 存储性能压测

一、 FIO简介 FIO 是一个多线程IO生成工具,可以生成多种IO模式(随机、顺序、读、写四大类),用来测试磁盘设备的性能。GFIO是FIO的图形监测工具,它提供了图形界面的参数配置,和性能监测图像。 在github上的…

磁盘性能测试工具-FIO的安装及使用

文章目录 FIO介绍FIO安装在线安装离线安装 磁盘测试命令行方式测试结果说明命令参数说明配置文件方式 dd命令介绍使用方法 FIO介绍 FIO是一款测试IOPS的工具,用于对磁盘进行压力测试和验证,磁盘I/O是检查磁盘性能的重要指标,可以按照负载情况…

NuGet学习笔记(1)——初识NuGet及快速安装使用

http://kb.cnblogs.com/page/143190/ 1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework. This topic lists documentation t…

Nuget路径问题

VS NetGet包管理器 问题场景: 装了两遍VS2019,第一次装D盘卸载了,然后装C盘,结果生成 .netCore项目时就悲剧了,报错:error MSB4018: “ResolvePackageAssets”任务意外失败。Microsoft.PackageDependencyResolution.t…

使用nuget 打包并上传 nuget.org

使用nuget 打包并上传 nuget.org 一、准备工作二、打包你的项目三、上传 nug.org 服务器 前言:今天又玩了个新东西,那就是 使用nuget 打包并上传 nuget.org,在这里即时记录一下,废话不多说,直接上教程。 一、准备工作…

nuget 的生成、发布、使用和更新

nuget 的生成、发布、使用和更新 一、nuget 的生成1.生成.dll1.1创建.net项目(类库)1.2 打包生成 .dll 2.打包成.nupkg文件2.1安装 [NuGetPackageExplorer.exe](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer)程序2.2打开软件,完成打包…

修改NuGet包默认存放位置

默认情况下,NuGet下载的包存放在系统盘(C盘中),这样一来,时间长了下载的包越多,C盘占用的空间也就越多。 1、问题描述 默认情况下,NuGet下载的包存放在系统盘(C盘中,一般在路径C:\Users\用户\.nuget\packag…

Nuget使用简介

1.什么是Nuget Nuget是 ASP .NET Gallery 的一员。NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。 当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到…