如何从 mp4 视频中删除或编辑 Exif?

2024-02-27

我用 Samsung Galaxy II 录制了一个全高清视频,当我将其上传到 YouTube 时,我发现它变成了 90 度,就像纵向布局 1080x1920 而不是 1920x1080。 我找到了问题的原因:

YouTube 正在读取视频元数据并根据 Exif 旋转视频 编码前的方向

这是 ExifTool 报告(请参阅最后一个标签“旋转”):



ExifTool Version Number         : 8.61
File Name                       : video.mp4
Directory                       : .
File Size                       : 217 MB
File Modification Date/Time     : 2011:08:11 00:47:23+04:00
File Permissions                : rw-rw-rw-
File Type                       : 3GP
MIME Type                       : video/3gpp
Major Brand                     : 3GPP Media (.3GP) Release 4
Minor Version                   : 0.3.0
Compatible Brands               : 3gp4, 3gp6
Movie Data Size                 : 227471371
Movie Header Version            : 0
Create Date                     : 1900:01:00 00:00:00
Modify Date                     : 1900:01:00 00:00:00
Time Scale                      : 1000
Duration                        : 0:01:46
Preferred Rate                  : 1
Preferred Volume                : 100.00%
Preview Time                    : 0 s
Preview Duration                : 0 s
Poster Time                     : 0 s
Selection Time                  : 0 s
Selection Duration              : 0 s
Current Time                    : 0 s
Next Track ID                   : 3
Track Header Version            : 0
Track Create Date               : 1900:01:00 00:00:00
Track Modify Date               : 1900:01:00 00:00:00
Track ID                        : 1
Track Duration                  : 0:01:46
Track Layer                     : 0
Track Volume                    : 0.00%
Image Width                     : 1920
Image Height                    : 1080
Graphics Mode                   : srcCopy
Op Color                        : 0 0 0
Compressor ID                   : avc1
Source Image Width              : 1920
Source Image Height             : 1080
X Resolution                    : 72
Y Resolution                    : 72
Bit Depth                       : 24
Video Frame Rate                : 30.023
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 1900:01:00 00:00:00
Media Modify Date               : 1900:01:00 00:00:00
Media Time Scale                : 16000
Media Duration                  : 0:01:46
Handler Type                    : Audio Track
Handler Description             : SoundHandler
Balance                         : 0
Audio Format                    : mp4a
Audio Channels                  : 1
Audio Bits Per Sample           : 16
Audio Sample Rate               : 16000
Play Mode                       : SEQ_PLAY
Avg Bitrate                     : 17.1 Mbps
Image Size                      : 1920x1080
Rotation                        : 90
  

如何删除整个 Exif 数据或仅编辑旋转属性?


Mp4 文件(以及许多其他文件)使用MPEG-4 http://en.wikipedia.org/wiki/MPEG-4标准,它将内部的数据排列在称为原子的小盒子中。你可以在这找到关于原子的精彩描述Page http://atomicparsley.sourceforge.net/mpeg-4files.html。简而言之,原子被组织成树状结构,其中一个原子可以是其他原子的父级,也可以是数据的容器,但不能同时是两者(尽管有些人打破了这个规则)

特别是您正在寻找的原子称为“tkhd”(轨道头)。你可以找到原子列表here http://www.mp4ra.org/atoms.html.

在这个原子中,您将找到视频的元数据。指定了“tkhd”原子的结构here http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW1

最后,您需要的元数据块(不是原子)称为“矩阵结构”。从开发者.apple.com http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-18737:

矩阵中的所有值都是 32 位定点数,除以 16.16,但 {u, v, w} 列除外,该列包含除以 2.30 的 32 位定点数。

如下图所示:

9 字节矩阵从“tkhd”原子的字节 48 开始。 0° 方向的“矩阵结构”示例为 1 0 0 0 1 0 0 0 1(单位矩阵)

SO!

毕竟,你需要修改这个矩阵。下一段摘自开发者.apple.com http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-18737:

变换矩阵定义如何从一个坐标映射点 空间到另一个坐标空间。通过修改a的内容 变换矩阵,可以进行多种标准图形的变换 显示操作,包括平移、旋转和缩放。这 描述了用于完成二维变换的矩阵 数学上由 3×3 矩阵表示。

这意味着变换矩阵定义了一个函数,将每个坐标映射到一个新坐标。

由于您只需要旋转图像,因此只需修改最左边的 2 x 3 矩阵,该矩阵由字节 0、1、3、4、6 和 7 定义。

以下是我用来表示每个方向的 2 x 3 矩阵(3x3 矩阵的值 0、1、3、4、6 和 7):

0°:(x', y') = (x, y)
1 0
0 1
0 0

90°:(x', y') = (高度 - y, x)
0 1
-1 0
高度 0

180°:(x', y') = (宽度 - x, 高度 - y)
-1 0
0 -1
宽度高度

270°:(x', y') = (y, 宽度 - x)
0 -1
1 0
0 width

如果没有,宽度和高度可以在矩阵结构之后获得。它们也是 4 字节的定点数 (16.16)。

您的视频元数据很可能包含 90° 矩阵

(感谢菲尔·哈维,创造者Exiftool http://www.sno.phy.queensu.ca/~phil/exiftool/感谢他的帮助和出色的软件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 mp4 视频中删除或编辑 Exif? 的相关文章

  • Javascript 随机 YouTube 视频自动播放

    我需要在页面加载时显示所选内容中的随机 YouTube 视频 我发现下面的问题非常有帮助 但我不知道如何让它自动播放 我尝试过添加 自动播放 1 在 videos index 之后 但我无法让它工作 不知道我是否把它放在错误的地方 任何帮助
  • 小米Exif方向标签错误

    我在用着ExifInterface对于通过检测方向标签从图库中选取的旋转图像 它正在工作 最近我在小米9 SE上测试了应用程序 发现相机拍摄的照片有方向标签8 旋转270 但照片方向是正确的 不需要旋转 为什么方向标签错误 如何找到正确的旋
  • YouTube iframe 不响应 postMessage 命令

    我正在尝试使用来自父级的 postMessage 命令来控制 YouTube iframe 但它似乎不起作用 由于多种原因 我没有使用 YouTube API 只是使用带有 YouTube 嵌入视频的普通 iframe 我尝试发送命令的方式
  • 如何使用python将下载的音频文件扩展名重命名为mp3

    目前 我正在尝试根据艺术家姓名和歌曲标题将 YouTube 音乐视频下载为音频文件 下载所有视频后 我尝试将所有音频文件从 webm 或 mp4 扩展名重命名为 mp3 但似乎我在将文件名和扩展名更改为 mp3 时遇到了一些错误 我的代码基
  • 如何在 Android 中嵌入和播放 YouTube 视频

    我们可以在 Android 应用程序中观看 YouTube 视频吗 我的意思是 如果我们有 YouTube 上的视频链接 我们可以在 VideoView 或其他小部件中播放它吗 有什么想法吗 答案很简单 是 请查看以下链接 如何在我的 An
  • 相机图像旋转问题

    我在这里面临一个非常奇怪的问题 当我在纵向模式下单击图像并上传它 然后再次获取它时 它会逆时针旋转 90 度显示 但是当我在相机胶卷中看到它时 它会以正确的方向显示 因为它被拍摄 我已经尝试了几乎所有可能的链接 代码来解决这个问题 但似乎没
  • 在 Java、Android 上从 Youtube 下载视频的代码

    我创建了从 Youtube 下载视频的代码 但此代码不适用于 Wi fi 连接 但适用于移动连接 我哪里有错误 import java io File import java io FileOutputStream import java
  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes
  • Android Youtube API 可用吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有适用于 Android 的 YouTube API 吗 如果不是 除了通过网络浏览器之外 如何从 Yo
  • jQuery:捕获图像加载事件错误404,可以做到吗?

    我基本上是循环播放一堆 YouTube 视频网址来获取每个视频id code 然后 我重申列表中的所有 缩略图 图像 并将源替换为 YouTube 视频缩略图 URL 我当前遇到的问题是 如果视频已从 youtube 中删除 则生成的图像源
  • iPhone AVFoundation 相机方向

    我一直在绞尽脑汁地试图让 AVFoundation 相机以正确的方向 即设备方向 捕获图片 但我无法让它工作 我看过教程 看过 WWDC 演示 还下载了 WWDC 示例程序 但即使这样也没有成功 我的应用程序的代码是 AVCaptureCo
  • 我如何对 youtube 嵌入播放器进行编程,使其在点击时取消静音

    如何设置 YouTube 嵌入式播放器在单击时取消静音 你可以看到我提到的嵌入式播放器http www harvestarmy org http www harvestarmy org主页 右边的那个写着 来自 YouTube 的最新视频
  • 带有 OAuth2 的 YouTube API v3:更新和删除失败并出现“权限不足”错误

    我在尝试着update and delete视频使用YouTube API v3 https developers google com youtube v3 docs videos with OAuth2 用于身份验证 https dev
  • 使用 YouTube Data API v3 的视频元数据

    通过使用搜索示例 我可以获得视频详细信息 例如名称 ID 缩略图 URL 但是我如何使用 YouTube Data API 获取视频总时长 提前致谢 进行搜索调用后 您必须调用 Youtube Data API 视频资源 您最多可以在搜索中
  • [UIScreen mainScreen].bounds.size 在 iOS8 中变得依赖于方向吗?

    我在 iOS 7 和 iOS 8 中运行了以下代码 UIInterfaceOrientation orientation UIApplication sharedApplication statusBarOrientation BOOL l
  • 循环选项在 youtube js api 中不起作用

    我想知道为什么我的代码不循环播放视频 除了循环选项之外 一切正常 我真的需要它 多谢 div You need Flash player 8 and JavaScript enabled to view this video div
  • 手机纵向,平板电脑横向(Android 布局)

    所以我正在为 Android 制作一个应用程序 我想强制平板电脑横向方向和手机纵向方向 然而 似乎我只能根据我所看到的进行方向锁定 这违背了想要设备有两个单独方向的目的 平板电脑 横向 手机 纵向 说得更技术一点 我在 res layout
  • 如果用户没有安装 YouTube 应用,如何在 Android 应用中播放 YouTube 视频?

    我正在尝试在 Android 应用程序中播放 YouTube 视频 我正在使用 YouTubePlayer API 它运行良好 但问题是我想在库中拥有这个播放器 如果没有安装 YouTube 应用程序 那么电影就不会显示 而且我还有另一个问
  • 当我的应用程序最小化时,在 Android 中使用 Youtube API 播放音乐视频中的音频

    我正在开发一个使用 Youtube API 的应用程序 因为我主要集中于MUSIC VIDEOS 来自 Youtube 当我离开应用程序时 我需要在后台播放视频的音频 但每次我导航到另一个应用程序时 视频都会暂停 我该怎么做才能解决这个问题
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f

随机推荐