При повороте MP4-видео и последующем конвертировании также в формат MP4 возникает проблема, связанная с тем, что некоторые MP4-файлы, снятые на мобильные устройства, могут содержать информацию об ориентации видео, записанную в метатег "Rotation". На момент написания статьи эта информация оставалась в MP4-файлах после физического поворота видео на 90 градусов или на любой угол и сохранения с помощью проигрывателя VLC. При воспроизведении таких файлов некоторые плееры учитывали метатег "Rotation" и еще раз поворачивали уже физически повернутое видео.
В этой статье мы расскажем, как сбросить информацию об ориентации в MP4-видео, чтобы оно одинаково поворачивалось во всех проигрывателях. Также можно физически повернуть видео с одновременным обнулением метатега "Rotation", используя библиотеку FFmpeg.
Метатег "Rotation"
Популярные форматы MP4 и MOV, в которых записывают видео современные устройства (цифровые камеры, телефоны, планшеты и т.п.), могут содержать большое количество метаданных: модель камеры, дата съемки, GPS-координаты и др. Также существует специальный метатег "Rotation", который содержит информацию о том, в каком положении находилось устройство во время съемки видео. Камера считывает данные G-сенсора и на их основании записывает тег "Rotation" в файл с видео. Значение метатега "Rotation" является целым числом и представляет собой угол наклона в градусах. Всего возможно четыре значения тега "Rotation": 0, 90, 180, 270. На картинке ниже представлены возможные положения устройства и соответсвующие им значения.
Современные плееры "понимают" этот метатег и сами поворачивают видео на нужный угол. Но если Вы используете устаревший проигрыватель, видео может отображаться неправильно. В таком случае Вам нужно физически повернуть видео и обнулить тег "Rotation", чтобы все плееры одинаково его показывали.
Бывает еще один распространенный случай: человек включает запись видео, поворачивает телефон и продолжает снимать. В итоге тег ориентации "Rotation" записан некорректно и при просмотре такое видео получается неправильно повернутым.
Универсальным решением, которое рекомендуется в данной статье, является физический поворот видео и обнуление тега "Rotation" в MP4-файле, чтобы старые и новые проигрыватели одинаково воспроизводили повернутое видео.
Если важна только поддержка современных плееров, необязательно конвертировать видео, можно попытаться исправить лишь метаинформацию, отвечающую за ориентацию. Но этот способ мы не рекомендуем. Читайте в разделе ниже "Нюансы работы FFmpeg 4.1".
Обнуление метатега "Rotation" в MP4-видео
Для того чтобы обнулить ориентацию видео, нужно сначала узнать, присутствует ли вообще метатег "Rotation" в видеофайле и какое у него значение.
Просмотр значения метатега "Rotation"
Существует много способов узнать, присутствует ли метатег "Rotation" в видеофайле и какое у него значение. В статье для примера показано, как это сделать в двух бесплатных программах: MediaInfo и ExifTool.
MediaInfo
Скачайте и установите приложение MediaInfo, затем запустите его, выберите команду меню "Файл > Открыть > Файл" вверху окна и в открывшемся проводнике укажите видеофайл на компьютере, метаданные которого нужно посмотреть. Используйте команду меню "Вид > Дерево" для подробного отображения информации о файле в иерархическом виде. В ветке "Видео" найдите элемент "Rotation" и посмотрите его значение. Если пункт "Rotation" отсутствует, считайте, что ориентация видео имеет значение "0".
ExifTool
Значение метеатега "Rotation" можно также узнать с помощью бесплатного инструмента ExifTool. Кроме видеофайлов ExifTool позволяет просматривать метаданные в фото-, аудио- и других файлах, а также изменять некоторую метаинформацию в них. Программа не имеет графического интерфейса, чтобы просмотреть информацию о файле, перетащите мышкой видеофайл на распакованный исполняемый файл "exiftool(-k).exe" из скачанного архива. Данные отобразятся в окне командной строки Windows.
Инструмент FFmpeg
Так как метатег "Rotation" является композитным, ExifTool не может его редактировать. Поэтому воспользуемся другим инструментом – популярной библиотекой FFmpeg. Это мощный инструмент по обработке видео. 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
Распакуйте исполняемый файл "ffmpeg.exe", который находится в подпапке "ffmpeg-X.X-XXXXX-XXXXXX\bin" скачанного архива (часть имени X.X-XXXXX-XXXXXX зависит от скачанной сборки), в папку с видеофайлами, ориентацию которых нужно обнулить.
Обнуление метатега "Rotation" с помощью FFmpeg
Запустите окно командной строки в папке с FFmpeg и видеофайлами. В Windows 10 с обновлением ниже 1703 это можно было сделать, нажав правой кнопкой мыши с одновременно зажатой клавишей "Shift" в свободном месте проводника Windows с открытой папкой и выбрав пункт контекстного меню "Открыть окно команд". Начиная с обновления 1703 этот пункт исчез из контекстного меню, но запустить окно командной строки можно другим способом: наберите в строке пути проводника Windows команду "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 – установить значение метатега "Rotation" в 0 градусов;
- output.mp4 – задайте желаемое имя конечного файла.
В реальном примере команда будет выглядеть примерно так, как на скриншоте ниже.
После выполнения данной команды видео с обнуленным тегом "Rotation" будет скопировано в новый файл с именем, которое Вы указали последним параметром команды.
Нюансы работы FFmpeg 4.1
Наверное, Вы уже догадались, что если в команде выше установить параметру "rotate" одно из возможных значений тега "Rotation" (0, 90, 180, 270), то можно изменить ориентацию видео без необходимости конвертирования и теоретически все современные плееры должны его повернуть на указанное значение. Но мы не рекомендуем этого делать (по крайней мере с помощью FFmpeg версии 4.1), так как на практике на момент написания статьи получалось не все, как ожидалось. Было обнаружено два бага.
Баг №1
При установке параметра "rotate" в одно из значений 90, 180 или 270 для MP4-файлов с отсутствующим до этого метатегом "Rotation" (т.е. "Rotation" = 0), ориентация не учитывалась встроенными плеерами "Windows Media Player", "Кино и ТВ" и проводником Windows 10 (иконки видеофайлов были неправильно повернуты). В тестах с macOS 10.12 и Android 6.0.1 измененная ориентация видео учитывалась корректно.
Баг №2
При установке параметра "rotate" в значение 90 метатег "Rotation" принимал значение 270, а при значении 270 наоборот – 90.
Предлагаем Вам поиграться с параметром "rotate" в последних версиях FFmpeg, и написать в комментариях к статье, исправлены ли вышеперечисленные баги.
Добавить комментарий