视频解码学习备忘

news2024/11/15 12:00:40

媒体文件知识

日常都是播放器直接播,其实这里面还有不少内容的。

首先是视频容器,就是所谓的.mp4 .mkv 这类文件,其目的主要就是用来存放音频视频字幕等内容,所以叫做容器。这些都有一定规范,比如mp4,叫ISO 14496-12,也即是mpeg-4 part12。这类规范可以直接百度或者google。

bm6j80:~/桌面$ file 4k烤鸭.mp4
4k烤鸭.mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]

其次是存放在容器里的视频文件,已H264视频为例,有2层,NAL(网络抽象层),VCL(视频编码层)。从mp4里面把视频抽取出来得到的文件就是NAL序列,这个过程就是demux,解复用。

file stream/*
stream/avc:                            directory
stream/avc_main10:                     directory
stream/avc_uhd_cavlc_8b_04.cfg_0.264:  JVT NAL sequence, H.264 video @ L 52
stream/hevc:                           directory
stream/hevc_fhd_inter_8b_11.cfg_0.265: data
stream/hevc_main10:                    directory
stream/inter_8b_11.cfg.265:            data

这个里面 stream/avc_uhd_cavlc_8b_04.cfg_0.264:  JVT NAL sequence, H.264 video @ L 52  这一行的avc_uhd_cavlc_8b_04.cfg_0.264 就是抽取出来的视频,用file看就是NAL序列。这个序列也是可以直接用播放器播放的,只不过没声音而已。

ffmpeg -i 4k烤鸭.mp4 -vcodec copy -vbsf h264_mp4toannexb -an 4k.h264

我实际播放这个4k烤鸭提取的文件会报错,应该是某些信息提取过程被丢失。(暂不深入,目前已理解原理为主要目标)

再然后就是解码出来的裸数据了,一般都是yuv格式,关于yuv格式的知识,可以参考

YUV 格式详解,只看这一篇就够了(转) - 知乎介绍 音视频领域的人恐怕没有人不知道 YUV,但是 YUV 本身有好多种变种,名称也各种各样,本文就位大家总结一下YUV 的各种格式。 在开始之前,先向大家介绍一款 YUV 图像的查看工具---YUV Eye,大家可以使用这个工…https://zhuanlan.zhihu.com/p/384455058这一篇就够了,为啥不用RGB,我简单查了下,主要还是节省了大量空间,毕竟RGB单个像素需要24bit来存放一个像素。YUV存储亮度蓝色红色分量,按存储大小大概分为YUV420 422 444三种,再细分就只是存储Y和UV的顺序不同了。看参考文档就行。

How to find out resolution and count of frames in YUV 4:2:0 file? - Stack Overflowhttps://stackoverflow.com/questions/19677747/how-to-find-out-resolution-and-count-of-frames-in-yuv-420-file

所谓的视频解码也基本是h264编码的数据解码城yuv裸数据的过程,解码器主要工作也是这一步。

解压出来的yuv裸数据,可以通过

ffplay -f rawvideo -video_size 1920x1080 /tmp/hevc_fhd_inter_8b_11.cfg_0.yuv

这样的命令来播放,也可以通过yuv查看软件来查看,我自己查看的

nullicon-default.png?t=MBR7https://github.com/gbaruffa/pyuv-player这个是pyuv,能播放,但是貌似不能一帧一帧查看。

国内有大佬出了个YUVEye,非常好用,能一帧一帧的看,但需要免费注册一下。

YUVEye官方下载-ZigZagSinYUVEye是一款免费好用的YUV图像分析软件,你可以用他来查看 YUV 图像数据,验证数据准确性,对比原始图像质量,查看图像直方图等操作。https://www.zzsin.com/YUVEye.html以上就是整个视频播放器的播放视频涉及的几个阶段。

Linux媒体播放框架

前面的媒体文件播放,基本上靠ffmpeg这个框架就能完全搞定(除了播放,ffmpeg当然支持编码了),它还支持了很多的硬件加速编解码器。

同时,linux上还有个gstreamer,也是一个媒体框架,基于插件机制的,他可以让ffmpeg作为一个插件使用。

关于ffmpeg gstreamer的区别,参考

gstreamer(一)入门和概述_江海细流的博客-CSDN博客_gstreamer一.概述在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库二.Gstreamer 的特点:gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。跟ffmpeg一样,也是有命令行工具进行测试验证。同时还可以通过代码框架直接封装命令来做工程开发,这一点ffmhttps://blog.csdn.net/fengliang191/article/details/108436699这两个框架本身也带了一些命令行工具,功能都已经很强大了。

其他问题,想到了再记录。目前就是为了扫个盲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/130959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流程图+BPMN+脑图 JointJS++ 3.6.3 Crack

一个库,‍ 无限的UI选择,直接在您的应用程序中享受交互式流程图、BPMN 和其他图表工作室。利用我们的模板化应用程序,将开发时间缩短至几天。 经过十多年和数百万行代码的编写,我们推出了一组随时可用的功能,以帮助您创…

数据结构进阶 二叉树OJ题二

作者:小萌新 专栏:数据结构进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍几道二叉树的oj题 题目一 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表…

帆软—图表专题

饼图 优点:能很直观的看到每一个部分在整体中所占的比例。 缺点:不适合较大的数据集(分类)展现,数据项中不能有负值,当比例接近时,人眼很难准确判别。 变形饼图 柱形图 特点 优点&#xff…

SpringBoot HandlerMethodArgumentResolver接口自定义参数解析器

参考资料 【SpringBoot】HandlerMethodArgumentResolver的简单使用HandlerMethodArgumentResolver(参数解析器)的作用使用小案例HandlerMethodArgumentResolver用于统一获取当前登录用户 目录一. 需求二. 前期准备三. 实现HandlerMethodArgumentResolver接口四. 将自定义的方法…

一套javassf门户网站管理系统源码分享

淘源码:国内专业的免费源码下载平台 JAVA SSF项目框架源码 后台管理系统源码 一套以SpringMVCSpringHibernateFreemarkerShiroLuceneHtml5jQuery为技术核心架构的门户网站管理系统源码。 源码免费分享,需要源码学习可私信我。 主要功能: 内…

笑对过往、活在当下、期盼未来

哈喽大家好,我是阿Q。 去年今日,也是安静的午后,拿起铅笔在纸上寥寥草草的写下几个年终关键词,思索良久,迟迟未能下笔。 时至今日,年末将至,再次执笔已时隔一年,再不拿笔记录这转瞬…

Python制作粒子烟花,程序员的跨年姿势

跨年倒计时还有半天?我已经开始整烟花了,虽然不是很好看吧,但是也能将就看看 😥 这个的背景图,音乐,还有文字都是可以自己修改的哦 效果展示 依次导入本次需要使用到的模块 import random import pygame…

免费的JPEG 恢复软件 - 照片删除了怎么恢复?

照片删除了怎么恢复? 照片在我们的生活中起着至关重要的作用,因为它们可以承载我们的快乐回忆,记录我们的日常生活,分享我们的快乐等。我们将在智能手机、相机或计算机上拍摄并存储大量 JPEG 图片。但是,无论我们多么小心地保留它…

Python和MySQL对比(2):用Pandas 实现MySQL的 union 和 join 语法效果

文章目录一、前言二、语法对比数据表unionjoin1、两表 inner join2、两表 left join3、两表 right join4、两表 outer join5、多表 join三、小结一、前言 环境: windows11 64位 Python3.9 MySQL8 pandas1.4.2 本文主要介绍 MySQL 中的union和join如何使用pandas实现…

Spring 核心概念 IOC/DI IOC容器 Bean

目录 一:代码书写现状 二:核心思想 一:代码书写现状 常规操作如上,但存在着问题,将项目上线后,需要将数据层进行更换,更换如下: 数据层更换后,业务层也需要进行更换,更换如下: 数据…

NLP学习笔记(五) 注意力机制

大家好,我是半虹,这篇文章来讲注意力机制 (Attention Mechanism) 在序列到序列模型中的应用 在上一篇文章中,我们介绍了序列到序列模型,其工作流程可以概括为以下两个步骤 首先,用编码器将输入序列编码成上下文向量&a…

费控产品之易快报洞察解析

1.费控行业洞察 1.1 概念及管理范畴界定 费控业务的本质是企业支出的管理,因此分析费控要从企业支出管理的宏观范畴来看,企业支出主要包括两方面,一个是企业成本,一个是期间费用。期间费用就是我们常说的管理费用、销售费用和财务…

Centos7的安装与模板机的制作

Centos7的安装与模板机的制作 1.安装环境准备 1.VMware Workstation 2.centos7镜像 本文用的VMware版本为16.2.1 build-18811642 2.开始安装 话不多说,直接上图 3.模板机制作 1.查看防火墙的运行状态 firewall-cmd --state防火墙目前正在启动中 2.关闭防火墙…

STM32——STM32简介与创建工程

文章目录一、stm32简介stm32MCU:ARM:命名规则:片上资源/外设:系统结构:引脚的定义功能引脚介绍:最小系统引脚介绍:电源引脚介绍:启动配置最小系统电路二、软件安装三、新建工程固件库…

2022年专业408的算法题

文章目录0 结果1 题目2 思路3 实现3.1 思路13.2 思路二0 结果 1 题目 2 思路 1,首先明确二叉搜索树的定义:任何一个节点大于其左子树中的全部结点,小于其右子树中的全部结点。中序遍历二叉搜索树得到一个升序序列。2,明确题目中给…

【微信小程序入门到精通】— 微信小程序实现多页面切换(tabBar)

目录前言一、tabBar 介绍二、实操(创建 tabBar )2.1 基本配置2.2 详细配置总结前言 对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的…

mysql索引机制实现及自适应hash索引

一、介绍   哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如Oracle中的哈希连接(hash join)。 InnoDB存储…

canopen11-sdo-40读取命令

源码 参考文件 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服…

Linux多进程编程之exec函数族使用

Linux多进程编程之exec函数族使用1.exec函数族是什么2.execl函数具体使用3.execlp4.exec后面不同字母所代表的含义1.exec函数族是什么 顾名思义,它并不只是一个函数,而是以exec开头的六个函数,并且是没有exec这个函数的(就像TCP/…

几行代码演示linux kernel、libc、userSpace app的关系

问一:编译出来的Linux内核镜像(".\build\arch\arm64\boot\Image"),可以单独运行吗?答案是能,但是加载完就提示panic,然后死掉了。 原因是: 内核代码加载完后,一定要切换到低权限模式…