Можно ли задать поле вращения для видеопотока с помощью FFmpeg?

У меня есть видеофайл. Я открываю его с помощью утилиты MediaInfo, и я вижу видеопоток в этом файле с атрибутом Rotation 90 (наряду с другими атрибутами, такими как CodecID, bitrate и т.д.).

Теперь у меня есть еще один видеофайл, который не имеет этого атрибута Rotation 90, он вообще не имеет атрибута Rotation.

Можно ли использовать ffmpeg.exe, чтобы он создавал выходной файл с атрибутом Rotation 90 и без каких-либо изменений? Я не хочу делать какие-либо преобразования, просто хочу установить атрибут Rotation.

Я пробовал вариант -metadata безрезультатно.

Ответ 1

Это работает с недавним FFmpeg:

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

Это будет поток копировать потоки битов, поэтому никакая кодировка не выполняется. Здесь меняются только метаданные первого видеопотока (v:0), и проигрыватель будет показывать видеоролик. (Не все игроки поддержат это.)

Дополнительные примечания:

  • Если вы хотите "физически" повернуть видео, вы должны использовать фильтр transpose. Фильтрация потребует повторного кодирования, поэтому вам нужно будет удалить -c copy.

  • Если вы опускаете -c copy и хотите кодировать вместо повторного мультиплексирования, тогда ffmpeg будет автоматически поворачивать видео, если есть какие-либо существующие метаданные вращения. Вы можете отключить это поведение с помощью -noautorotate.