FFmpeg на iPhone - изменение ориентации видео - PullRequest
5 голосов
/ 05 февраля 2010

Я возился с видео h264, загруженным с помощью FFmpeg на iPhone 3GS. Проблема в том, что к любым видео, записанным в «книжной» ориентации, применена матрица преобразования, заставляющая их отображать повернутые на 90 градусов против часовой стрелки.

Из того, что я понимаю до сих пор, мне просто нужно изменить матрицу преобразования в атоме "tkhd". Проблема в том, что у меня проблемы с доступом или изменением этих данных. Я проверил реализацию FFmpeg для:

static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)

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

Любая помощь будет принята с благодарностью.

Спасибо, Matt.

Ответы [ 4 ]

12 голосов
/ 24 ноября 2010

Для тех, кто не может включить опцию v filter, после некоторого поиска я нашел альтернативную опцию, которая работает для моей сборки:

ffmpeg -i in.avi -vf "transpose=1" out.avi

это переворачивает видео на 90 градусов по часовой стрелке. надеюсь, это поможет всем тем, кто на Ubuntu борется, как и я! :)

3 голосов
/ 25 января 2012

Я только что принял исправление в ветке git master FFMPEG, которое должно помочь всем нам в настройке ориентации iPhone и последующем преобразовании, примененном к отправляемому им файлу .mov. FFMPEG теперь отправит обратно в метаданных:

'rotate' = 90,180 или 270 в зависимости от того, на сколько градусов вам нужно повернуть изображение по часовой стрелке, чтобы получить истинное вращение.

2 голосов
/ 08 сентября 2011

фильм записывается непосредственно с ориентацией аппаратной камеры. при включении камера продолжает записывать с той же ориентацией и той же прямой записью в файл.

Что определяет ориентацию видео: Матрица преобразования

Матрица устанавливается в зависимости от ориентации iphone. И это то, что будет определять, если вы должны повернуть видео. И это вращение может быть 90 градусов, и это может быть 180 градусов. Это зависит от ориентации телефона.

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

2 голосов
/ 24 февраля 2010

Портретное видео, записанное в iPhone 3GS, странным образом поворачивается в альбомной ориентации, и только быстрое время воспроизводит его правильно, проигрыватели, такие как VLC и т. Д., Воспроизводят видео в портретном режиме в альбомной ориентации, поскольку оно закодировано таким образом!Возможно, Apple установил некоторый бит, чтобы quicktime правильно идентифицировал и установил ориентацию.

Вы можете использовать опцию -vfilters в ffmpeg, чтобы вращать видео.Он доступен в версии r21242.Вы должны исправить это в вашей версии ffmpeg.

настроить сборку с помощью --enable-vfilters

, и вы можете использовать параметр:

ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4

дляповерните входной фильм.

...