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

问题描述 投票:0回答:3

我用 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 数据或仅编辑旋转属性?

youtube orientation quicktime mp4 exif
3个回答
43
投票

Mp4 文件(以及许多其他文件)使用 MPEG-4 标准,该标准将其中的数据排列在称为原子的小盒子中。您可以在此Page中找到有关原子的精彩描述。简而言之,原子被组织成树状结构,其中一个原子可以是其他原子的父级,也可以是数据容器,但不能两者兼而有之(尽管有些人打破了这个规则)

特别是您正在寻找的原子称为“tkhd”(轨道头)。您可以在here找到原子列表。

在此原子中,您将找到视频的元数据。 “tkhd”原子的结构在here

指定

最后,您需要的元数据块(不是原子)称为“矩阵结构”。来自developer.apple.com

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

如下图所示:

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

那么!

毕竟,你需要修改这个矩阵。下一段摘自developer.apple.com

变换矩阵定义了如何从一个坐标映射点 空间到另一个坐标空间。通过修改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 宽度

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

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

(感谢 Exiftool 的创建者 Phil Harvey 的帮助和出色的软件)


1
投票

就我而言,更改 exif 数据并没有解决问题,因为它实际上是正确的。问题是大多数玩家都会忽略它(即他们假设它是 0)。

如果您确实想使用 Rotation exif 标签,您可以通过 MediaRecorder.setOrientationHint() 控制它。这比事后修改要容易得多。如果 YouTube 上传者尊重该标签,那么这就是您所需要的。

但我找到的唯一解决方案是旋转视频本身,或者使用 UI 提示来引导用户以相机的自然 0 方向录制视频。

Android 中没有用于旋转视频的内置机制。


0
投票

我的猜测是 ExifTool 在 2011 年还没有这个功能。 因此,对于未来的时间旅行者(撰写本文时为 2024 年),这就是我完成同样事情的方法。

在安装了 ExifTool 的计算机上(在 Mac 上只需

brew install exiftool
),通过文件进入终端并调用:

exiftool -Rotation=0 your_file.mp4

请参阅有关 修改标签的更多文档。

在本例中,我们使用

-TAG=VALUE
语法写入新的旋转标签值 0。

我通过采用正常格式的 mp4 文件并使用相同的方法设置 Rotation=90 来验证这一点,并注意到 Finder 预览、QuickTime 和 IINA 都遵循旋转。然后我设置 Rotation=0 并注意到旋转未完成。

© www.soinside.com 2019 - 2024. All rights reserved.