Обнуление тега ориентации в MP4-видео

Раньше на сайте мы уже публиковали статьи о том, как повернуть видео на 90 градусов или на любой угол и сохранить с помощью медиапроигрывателя VLC. Поворот видео согласно вышеперечисленным инструкциям осуществляется за счет физического поворота (транспонирования) видеоданных и последующего их преобразования в желаемый формат.

Проблема поворота MP4-видео

При транспонировании MP4-видео и последующем конвертировании также в формат MP4 возникает проблема, связанная с тем, что некоторые MP4-файлы, снятые на мобильные устройства, могут содержать информацию об ориентации видео (см. раздел ниже – EXIF-тег "Rotation"). После физического поворота с помощью проигрывателя VLC эта информация остается в MP4-файлах и при проигрывании уже повернутых файлов некоторые плееры учитывают ее и еще раз поворачивают уже физически повернутое видео.

В данной статье мы расскажем, как сбросить информацию об ориентации в физически повернутых MP4-видео.

EXIF-тег "Rotation"

Популярные форматы MP4 и MOV, в которых современные фото/видео устройства (цифровые камеры, телефоны, планшеты и т.п.) сохраняют видео, могут содержать большое количество метаданных: модель камеры, дата съемки, GPS-координаты и др. Также существует специальный метатег "Rotation", который содержит информацию о том, в каком положении находилось устройство во время съемки видео. Во время записи камера считывает данные G-сенсора (при его наличии) о положении устройства и на их основании записывает тег "Rotation" в файле MP4-видео. Значение метатега "Rotation" является целым числом и представляет собой угол наклона в градусах. Всего возможно четыре значения тега "Rotation": 0, 90, 180, 270. На картинке ниже представлены возможные положения устройства и соответсвующие им значения.

Соответствие положения телефона значению метатега Rotation в MP4-видео

Современные плееры "понимают" этот метатег и сами поворачивают видео на нужный угол. Но если Вы используете старый DVD-плеер, например, видео может выводиться неправильно. В таком случае Вам нужно физически повернуть видео и обнулить тег "Rotation", чтобы современные плееры не поворачивали уже повернутое видео.

Бывает еще один распространенный случай, человек включает запись видео, поворачивает телефон и продолжает снимать. В итоге тег ориентации "Rotation" записан неправильно. И при воспроизведении на компьютере или телевизоре, который учитывает тег "Rotation" видео получается неправильно повёрнутым.

Универсальным решением, которое рекомендуется в данной статье, является физический поворот (транспонирование) видео и обнуление тега "Rotation" в MP4-файле, чтобы старые и новые проигрыватели одинаково воспроизводили повернутое видео.

Если важна только поддержка современных плееров, не обязательно конвертировать видео, можно попытаться исправить лишь метаинформацию, отвечающую за ориентацию видео в файле. Но этот способ мы не рекомендуем. Читайте в разделе "Нюансы работы FFmpeg 4.1" ниже.

Обнуление ориентации видео

Для того чтобы обнулить ориентацию видео, нужно сначала узнать присутствует ли метатег "Rotation" в видеофайле и какое у него значение.

Просмотр значения EXIF-тега "Rotation"

Существует много способов узнать, присутствует ли метатег "Rotation" в видеофайле и какое у него значение. В статье для примера показано как это сделать в двух бесплатных программах: MediaInfo и ExifTool.

MediaInfo

Скачайте и установите приложение MediaInfo, затем запустите его, выполните команду меню "Файл > Открыть > Файл" и в открывшемся диалоге выберите видео на компьютере, метаданные которого нужно посмотреть. Выберите команду "Вид > Дерево" для иерархического отображения информации о файле. В ветке "Видео" найдите пункт "Rotation", чтобы узнать его значение. Если пункт "Rotation" отсутствует, считаем что ориентация видео имеет значение "0".

Просмотр значения метатега Rotation в MP4-файле с помощью программы MediaInfo

ExifTool

Как альтернатива, значение метеатега "Rotation" можно также узнать с помощью бесплатного инструмента ExifTool. Кроме видеофайлов ExifTool позволяет просматривать информацию фото-, аудио- и других типов файлов, а также она позволяет изменять метаданные файлов. Программа не имеет графического интерфейса, чтобы просмотреть информацию о файле, перетащите мышкой видеофайл на распакованный исполняемый файл "exiftool(-k).exe" из скачанного архива. Данные отобразятся в окне командной строки Windows.

Просмотр значения метатега Rotation в MP4-файле с помощью программы ExifTool

Инструмент FFmpeg

Так как метатег "Rotation" является композитным, ExifTool не может его редактировать. Поэтому воспользуемся другим инструментом – популярной библиотекой FFmpeg. Это мощный инструмент по обработке видео, он умеет как изменять метаинформацию в видеофайлах, так и физически изменять (конвертировать) видео- и аудиоданные.

Перед тем как приступить отметим, что FFmpeg, также как и ExifTool, не имеет графического интерфейса, т.е. с программой необходимо работать через командную строку Windows.

Скачивание FFmpeg

Скачайте вариант FFmpeg для Вашей операционной системы. Для Windows перейдите в раздел "Download" на официальном сайте ffmpeg.org, в разделе "Get the packages", нажмите по ссылке "Windows builds". Вы будете перенаправлены на страницу билдов (сборок) программы. В списках настроек сконфигурируйте билд для скачивания и нажмите кнопку "Download". Для примера, мы скачивали стабильную сборку на момент написания статьи (Version: 4.1), для 64-разрядной архетиктуры процессора (Architecture: Windows 64-bit) с зависимыми библиотеками в едином файле (Linking: Static).

Выбор сборки FFmpeg для скачивания

Обнуление значения EXIF-тега "Rotation" с помощью FFmpeg

Распакуйте исполняемый файл "ffmpeg.exe", который находится в подпапке "ffmpeg-X.X-XXXXX-XXXXXX\bin" скачанного архива (часть имени X.X-XXXXX-XXXXXX зависит от скачанной сборки) в папку с видеофайлами, ориентацию которых нужно обнулить.

Запустите окно командной строки в этой папке. До Windows 10 с обновлением 1703 это можно было сделать, нажав правой кнопкой мыши в свободном месте проводника в открытой папке с зажатой клавишей "Shift" и выбрав контекстную команду меню "Открыть окно команд". Начиная с обновления 1703 в Windows 10, эта команда исчезла из контекстного меню, но запустить командную строку можно другим способом: наберите в строке пути команду "cmd" и нажмите клавишу "Enter".

Откроется окно командной строки Windows с путем, указывающим на папку с файлом "ffmpeg.exe" и видеофайлами, ориентацию которых нужно обнулить. Наберите команду ниже и нажмите Enter ("input.mp4" измените на имя и видеофайла, ориентацию которого нужно обнулить).

ffmpeg -i input.mp4 -codec copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4

Давайте разберем, что обозначают записи в данной команде:

ffmpeg – вызов исполняемого файла "ffmpeg.exe" (должен присутствовать в папке вместе с видеофайлами)

-i input.mp4 – имя файла-источника (например, "input.mp4")

-codec copy – не конвертировать видео, а просто скопировать содержимое

-map_metadata 0 – скопировать метаинформацию с источника в конечный файл

-metadata:s:v:0 rotate=0 – установить угол вращения видео в 0 градусов

output.mp4 – задайте желаемое имя конечного файла. В реальном примере команда будет выглядеть примерно так как на скриншоте ниже.

Команда обнуления метатега Rotation в MP4-файле с помощью программы FFmpeg

После выполнения данной команды видео с обнуленным тегом "Rotation" будет скопировано в новый файл с именем, которое Вы задали последним параметром команды.

Нюансы работы FFmpeg 4.1

Наверное, Вы уже догадались, что если в команде выше установить параметру "rotate" одно из возможных значений тега "Rotation" (0, 90, 180, 270), то можно изменить ориентацию видео без необходимости конвертирования и теоретически все современные плееры должны повернуть видео, прочитав этот параметр из файла. Но мы не рекомендуем этого делать (по крайней мере с помощью FFmpeg версии 4.1), так как на практике на момент написания статьи получалось не все так как ожидалось. Было обнаружено два бага.

Баг №1

При установке параметра "rotate" в одно из значений 90, 180 или 270 в файлах с отсутствующим до этого тегом (т.е. Rotation = 0) в MP4-файле, тег поворота не учитывался встроенными плеерами (Windows Media Player, Кино и ТВ) и Проводником Windows 10 (в тестах в macOS 10.12 и Android 6.0.1 измененная ориентация видео учитывалась корректно).

Баг №2

При установке параметра "rotate" в значение 90 метатег "Rotation" принимал значение 270, а при значении 270 наоборот – 90.

Предлагаем Вам поиграться с параметром "rotate" в последних версиях FFmpeg, и написать в комментариях к статье, исправлены ли вышеперечисленные баги.

Оцените статью: Ужасная!ПлохаяТак себеХорошаяОтличная! 5,00 из 5 (голосов: 1)
Опубликовано в Windows

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

* Представьтесь, пожалуйста! Авторизуйтесь через:

Facebook

ВКонтакте