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

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

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

Это отчет ExifTool (см. Последний тег " вращение"):

Как удалить все данные Exif или просто отредактировать вращение собственность?

2 ответов


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

в частности, атом, который вы ищете, называется "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 (матрица идентичности)

Так!

после всего этого вам нужно изменить эту матрицу. Следующий parragraph берется из 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 за его помощь и замечательное программное обеспечение)


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

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

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

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