Подтвердить что ты не робот

Как удалить или отредактировать Exif из видео mp4?

Я записал видео Full HD с Samsung Galaxy II, когда я загрузил его на YouTube, я обнаружил, что он повернулся на 90 градусов, как портретная макет 1080x1920 НЕ 1920x1080. Я нашел причину проблемы:

YouTube просматривает видео метаданные и поворачивает видеозапись Exif ориентация перед кодированием

Это отчет ExifTool (см. последний тег "Rotation" ):


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 или просто изменить свойство Rotation?

4b9b3361

Ответ 1

Файлы Mp4 (и многие другие) используют стандарт MPEG-4, который упорядочивает данные внутри него в маленькие ящики, называемые атомами. Вы можете найти отличное описание атомов в этой Страница. Короче говоря, атомы организованы в древовидной структуре, где атом может быть либо родителем других атомов, либо контейнером данных, но не обоими (хотя некоторые нарушают это правило)

В частности, атом, который вы ищете, называется "tkhd" (Track Header). Вы можете найти список атомов здесь.

Внутри этого атома вы найдете метаданные видео. Структура атома "tkhd" указана здесь

Наконец, фрагмент метаданных, который вам нужен (который не является атомом), называется "Матричная структура". Из developer.apple.com:

Все значения в матрице представляют собой 32-разрядные номера фиксированной точки, разделенные как 16.16, за исключением столбца {u, v, w}, который содержит 32-битные номера с фиксированной точкой, разделенные на 2.30.

Это показано на следующем изображении:

"Matrix Structure" a transformation matrix

9-байтовая матрица начинается с байта 48 атома "tkhd" . Примером "матричной структуры" для ориентации 0 ° будет 1 0 0 0 1 0 0 0 1 (единичная матрица)

SO!

В конце концов, вам нужно изменить эту матрицу. Следующий паранграф взят из developer.apple.com:

Матрица преобразования определяет, как сопоставить точки из одной координаты пространство в другое координатное пространство. Изменяя содержание матрицы преобразования, вы можете выполнить несколько стандартных графиков операции отображения, включая перевод, поворот и масштабирование. матрица, используемая для выполнения двумерных преобразований математически с помощью матрицы 3 на 3.

Это означает, что матрица преобразования определяет функцию, которая отображает каждую координату в новую.

Поскольку вам нужно только поворачивать изображение, просто измените самую левую матрицу размером 2 x 3, которая определяется байтами 0, 1, 3, 4, 6 и 7.

Вот 2 x 3 матрицы, которые я использую для представления каждой ориентации (значения 0, 1, 3, 4, 6 и 7 матрицы 3x3):

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

90 °: (x ', y') = (высота - y, x)
0 1
-1 0
высота 0

180 °: (x ', y') = (widht - x, height - y)
-1 0
0 -1
ширина высота

270 °: (x ', y') = (y, width - x)
0 -1
1 0
0 ширина

Если у вас их нет, ширина и высота могут быть получены сразу после структуры матрицы. Они также являются номерами фиксированной точки 4 байта (16.16).

Вполне вероятно, что ваши метаданные видео содержат матрицу 90 °

(Спасибо Филу Харви, создателю Exiftool за его помощь и замечательное программное обеспечение)

Ответ 2

В моем случае изменение exif-данных не решило проблему, потому что это, по сути, правильно. Проблема в том, что большинство игроков игнорируют это (то есть считают, что это 0).

Если вы хотите играть с тегом Rotation exif, вы можете управлять им через MediaRecorder.setOrientationHint(). Это намного проще, чем изменить его после факта. Если загрузчик YouTube уважает тег, тогда все, что вам нужно.

Но единственным решением, которое я нашел, является поворот самого видео или использование подсказок пользовательского интерфейса, чтобы помочь пользователям записывать видео в естественной ориентации камеры.

Нет встроенного механизма для вращения видео в Android.