Linux xxd命令分析视频文件Box教程(box分析box、视频box、分析atom分析)(xdd指令)

news2025/1/21 18:42:02

文章目录

  • Linux xxd命令分析视频文件Box教程
    • 一、理解MP4格式
    • 二、xxd命令简介
    • 三、使用xxd命令分析MP4文件
    • 四、解析MP4文件的疑难点
      • 1. Box的嵌套结构
      • 2. 长度和类型字段的字节序
      • 3. 非文本类型的数据
    • 五、python代码解析box嵌套结构的示例

Linux xxd命令分析视频文件Box教程

本文主要探讨如何使用Linux的xxd命令来分析和解读MP4视频文件中的box(也被称为“atom”)。

我们获取视频文件的16进制数据通常会用到以下命令:

xxd example.mp4 | less

在这里插入图片描述

其中数据位置的单位为字节,一行默认显示16个字节数据。(对于16进制,2个数位为1个字节,可以看到上面实际数据中,一行共有8个xxxx,一个xxxx为2个字节,8个就是16个字节)

一、理解MP4格式

在深入了解xxd命令之前,我们首先需要理解MP4文件的基本构造。MP4文件由一系列“box”组成,每个box都有自己的类型和长度。Box可以嵌套其他box,形成一种层级结构。这些box包含了音频、视频和元数据等信息。

(示例:不同文件实际box排列嵌套方式可能有差别)

MP4文件
|
|--- ftyp box (文件类型)
|
|--- moov box (元数据)
|    |
|    |--- mvhd box (电影头)
|    |
|    |--- trak box (轨道)
|         |
|         |--- tkhd box (轨道头)
|         |
|         |--- mdia box (媒体)
|              |
|              |--- mdhd box (媒体头)
|              |
|              |--- minf box (媒体信息)
|                   |
|                   |--- stbl box (样本表)
|
|--- mdat box (媒体数据)

每个box的前8个字节构成了box的头部,其中包括4个字节的长度字段和4个字节的类型字段。长度字段表示整个box(包括头部和数据)的大小,而类型字段则是一个ASCII字符串,用于标识box的类型。

二、xxd命令简介

xxd命令是一个在Linux下将文件或输入转换为十六进制、二进制或ASCII表示的工具。这个命令对于分析二进制文件非常有用,尤其是当我们需要查看和理解文件内部结构的时候。

以下是一些基本的xxd命令:

  • 将文件转换为十六进制表示:

    xxd filename
    

    在这里插入图片描述

  • 将文件转换为二进制表示:

    xxd -b filename
    

    在这里插入图片描述

  • 将十六进制表示转回到原始数据:

    xxd -r -p
    

    具体参考文章:linux xxd命令(查看文件内容、查看文件信息)(将文件或标准输入转换为hex(十六进制)和ASCII(美国信息交换标准代码)表示,或者从hex dump(十六进制转储)反向到二进制)

三、使用xxd命令分析MP4文件

让我们以一个具体的例子来演示如何使用xxd命令分析MP4文件。

假设我们有一个名为"example.mp4"的视频文件,我们可以使用以下命令查看其十六进制表示:

xxd example.mp4 | less

可能会看到如下的输出:

00000000: 0000 001c 6674 7970 6973 6f6d 0000 0200  ....ftypisom....
00000010: 6973 6f6d 6973 6f32 6176 6331 6d70 3431  isomiso2avc1mp41
00000020: 0000 0080 6d6f 6f76 0000 006c 6d76 6864  ....moov....mvhd

这里的每一行都表示了一个box。例如,第一行表示了一个ftyp box,它的大小为28字节("0000001c"转换为十进制),类型为’ftyp’("66747970"转换为ASCII)。接下来的12个字节是该box的数据。

四、解析MP4文件的疑难点

尽管xxd命令能够帮助我们查看MP4文件的内部结构,但理解这些数据并不总是直截了当的。以下是几个可能遇到的挑战:

1. Box的嵌套结构

像’moov’和’trak’这样的box可以包含其他的box。这就意味着我们需要跟踪当前的嵌套级别,并在读取新的box时更新当前的位置。

2. 长度和类型字段的字节序

MP4文件使用大端字节序,这就意味着我们需要将从文件中读取的字节反转过来。例如,如果我们读取了四个字节 “00 00 01 c”, 我们需要将其反转为 “1c 00 00 00”,然后再转换为十进制。

3. 非文本类型的数据

像’mdat’这样的box包含音频或视频数据,这些数据通常不是文本类型的,因此不能直接转换为ASCII字符。我们需要使用其他工具或者技术来解析这些数据。

五、python代码解析box嵌套结构的示例

以下是一个基于Python的简单示例,用于解析MP4文件中box的嵌套结构。这个脚本会打开一个MP4文件,并读取每个box的大小和类型。

import struct

def read_box(file):
    data = file.read(8)
    if data:
        size, type = struct.unpack('>I4s', data)
        return size, type.decode('utf-8')
    else:
        return None, None

def parse_boxes(file, level=0):
    while True:
        size, type = read_box(file)
        if not size or not type:
            break

        print(f"{'  ' * level} {type} {size}")
        if type in ['moov', 'trak', 'mdia']:
            # 这是一个可以包含其他box的容器,所以我们递归地解析它
            start = file.tell()
            parse_boxes(file, level + 1)
            file.seek(start + size)  # 跳到当前box之后的位置
        else:
            # 这不是一个容器,所以我们直接跳过它的内容
            file.seek(size - 8, 1)

with open('example.mp4', 'rb') as f:
    parse_boxes(f)

在这个脚本中,我们使用struct模块来读取二进制数据,并将其解析为具体的值。'>I4s'参数表示我们要读取一个大端字节序的无符号整数(即box的大小)和一个4字节长的字符串(即box的类型)。

注意,由于MP4文件的嵌套结构,我们需要使用递归来解析每个容器box。当我们遇到一个容器box时(如’moov’、‘trak’或’mdia’),我们会保存当前的位置,然后递归地解析该容器,最后再返回到原来的位置。

此外,由于box的大小包括了它自身的头部,所以在跳过box的内容时,我们需要减去8字节(即头部的大小)。

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

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

相关文章

静物摄影在UE5里运用几点记要

被摄体,相机与光源的关系,要增强立体感,摄像机与光源的位置关系要错开;b的立体感要更强 漫反射与点光源,UE5太阳光属于漫反射,整体比较柔和,但是阴影处比较黑;摄影棚会用反光板来增亮…

计算机网络技术概述 习题答案及解析

1-1 因特网的前身是 1969 年创建的第一个分组交换网( D )。 A. internet B. Internet C. NSFNET D. ARPANET 【答案】D 1-2 因特网上的数据交换方式是( C )。 A. 电路交换 B. 报文交换 C. 分组交换 D…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式,通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5,副本分片为1的ES结构。ES本身是一种noschema的结构,但是可以通过指定mapping编程schema的…

Unity关于动画混合树(Blend Tree)的使用

在动画与动画的切换过程中,常因为两个动画之间的差距过大,而显得动画的切换很不自然。 这时候就需要动画混合树Blend Tree这个功能。使用混合树可以将多个动画混合在一起,例如在处理角色的移动中,走动画与跑动画切换的时候&#x…

Vue2 - Vue.observable 介绍

目录 1,介绍2,使用场景和 Vue 实例的区别 1,介绍 官网参考 可以让一个对象变成响应式数据。在 Vue 内部就是用它来处理传递给 Vue 的 data 对象,或是在单文件组件中 data() 返回的对象。 var vm new Vue({data: {count: 0} })…

qs.stringify 使用arrayFormat属性 + allowDots的数据处理 - 附示例

qs:将url中的参数转为对象;将对象转为url参数形式 一、介绍 1、官方文档: https://github.com/ljharb/qs https://github.com/ljharb/qshttps://github.com/ljharb/qs 二、准备工作 1、安装依赖包 npm install qs --save 2、示例版本 &…

Java循环高级(无限循环,break,continue,Random,逢七过,平方根,判断是否是质数,猜数字小游戏)

文章目录 1.无限循环概念:for格式:while格式:do...while格式:无限循环的注意事项: 2.条件控制语句break:continue: 3. Random使用步骤: 4. 逢七过5. 平方根6.判断是否为质数7. 猜数字小游戏 1.无限循环 概…

【开源项目】智慧交通~超经典开源项目实景三维数字孪生高速

数字孪生高速运营管理平台,以提升高速公路管理水平和方便出行为主要目标,充分利用云计算、AI、大数据等,实现对高速公路控制、指挥、运营的智能化。飞渡科技以实景三维数据为基础,基于大数据、高分遥感、数据分析以及数据融合等前…

QGIS003:【08选择工具栏】-按范围选择、按属性选择、按位置选择

摘要:QGIS工程工具栏包括按范围选择、按属性选择、按位置选择、取消选择等选项,本文介绍各选项的基本操作。 实验数据: 链接:https://pan.baidu.com/s/15GfuR15CxA2OQzURjmjwaQ?pwd=u8sf 提取码:u8sf 一、按范围选择 有矩形框选、多边形选择、手绘选择以及按半径扩展…

T 检验和 Z 检验之间的区别

在统计学领域,假设检验在从数据中得出有意义的结论方面发挥着至关重要的作用。两种常用的统计检验是 T 检验和 Z 检验。虽然这两种检验都用于评估假设,但它们的应用和假设有所不同。 t 检验和 z 检验都假设数据呈正态分布(或近似正态分布&…

R_handbook_作图专题

ggplot基本作图 1 条形图 library(ggplot2) ggplot(biopics) geom_histogram(aes(x year_release),binwidth1,fill"gray") 2 堆砌柱状图 ggplot(biopics, aes(xyear_release)) geom_bar(aes(fillsubject_sex)) 3 堆砌比例柱状图 ggplot(biopics, aes(xyear_rele…

echarts常见的一些大屏示意图及配置项【好看】

双立体柱状图 示意图: 配置: initData() {let sideData [220, 182, 191, 234, 290, 330]let sideData1 [100, 110, 120, 134, 190, 230]let nameList [结算能力数, 结算金额]let yAxisData [(金额/亿元), (能力数/个)]let xData [1, 2, 3, 4, 5…

三角函数两角和差公式推导

一.几何推理 1.两角和公式 做一斜边为1的直角△ABC,任意旋转非 k Π , k N kΠ,kN kΠ,kN,补充如图,令 ∠ A B C ∠ α , ∠ C B F ∠ β ∠ABC∠α,∠CBF∠β ∠ABC∠α,∠CBF∠β ∴ ∠ D B F ∠ D B A ∠ α ∠ β 90 , ∠ D A …

vue3-13

token可以是后端api的访问依据,一般绝大多数时候,前端要访问后端的api,后端都要求前端请求需要携带一个有效的token,这个token用于用户的身份校验,通过了校验,后端才会向前端返回数据,进行相应的操作,如果没…

自动驾驶学习笔记(二十四)——车辆控制开发

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo开放平台9.0专项技术公开课》免费报名—>传送门 文章目录 前言 控制算法 控制标定 控制协议…

【漏洞复现】企望制造ERP系统 RCE漏洞

漏洞描述 企望制造ERP系统是畅捷通公司开发的一款领先的生产管理系统,它以集成化管理为核心设计理念,通过模块化机制,帮助企业实现生产、采购、库存等方面的高效管理。该系统存在RCE远程命令执行漏洞,恶意攻击者可利用此漏洞进行…

【解决复杂链式任务打造全能助手】大模型思维链 CoT 应用:langchain 大模型 结合 做 AutoGPT

大模型思维链 CoT 应用:langchain 大模型 结合 做 AutoGPT,解决复杂链式任务打造全能助手 思维链 CoTlangchainlangchain 大模型结合打造 AutoGPT 思维链 CoT 最初的语言模型都是基于经验的,只能根据词汇之间的相关性输出答案,根…

Android 接入第三方数数科技平台

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数数科技平台是什么?二、使用步骤1.集成SDK2. 初始化3. 发送事件和设置账号id4. 验证发送事件是否成功 小结 前言 一个成熟的App必然不可缺少对…

FingerprintService启动-Android13

FingerprintService启动-Android13 1、指纹服务启动1.1 rc启动Binder对接指纹厂商TA库1.2 FingerprintService启动1.2.1 SystemServer启动FingerprintService1.2.2 注册Binder服务fingerprint 2、获取底层信息2.1 AIDL 对接TA中获取2.2 指纹类型判断 android13-release 1、指纹…

有限差分场的数值计算:代数、求导、积分

文章目录 前言一、代数运算1.手动计算流程2.ubermag库函数验证 二、求导运算1.手动计算流程2.ubermag库函数验证3.标量场的梯度,矢量场的散度和旋度 三、积分运算1.手动计算流程2.ubermag库函数验证 总结 靡不有初,鲜克有终。——《诗经大雅荡》 前言 …