Видео, снятое с iphone, поворачивается при преобразовании в .mp4 с помощью ffmpeg - программирование
Подтвердить что ты не робот

Видео, снятое с iphone, поворачивается при преобразовании в .mp4 с помощью ffmpeg

Когда я пытаюсь загружать видео, снятые с моего iPhone в своем приложении, сервер выполняет преобразование с .mov в .mp4, чтобы его можно было воспроизводить на других платформах. Однако проблема заключается в том, что когда я снимаю видео (в портретной ориентации) и преобразуется (используя ffmpeg), а затем воспроизводится с сервера, он, кажется, вращается. Любая идея?

4b9b3361

Ответ 1

В зависимости от того, какая версия ffmpeg у вас есть и как она скомпилирована, одно из следующих должно работать...

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

... или...

ffmpeg -vf "transpose=1" -i input.mov output.mp4

Ответ 2

FFMPEG недавно изменил поведение по умолчанию для автоматического поворота входных видеоисточников с помощью метаданных "rotate".

Таким образом, новым решением этой проблемы будет обновление FFMPEG до версии 2.7 или git.

Однако. Если вы уже внедрили одно из этих решений и обновили это плохие новости. FFMPEG будет вращать ваше видео до того, как ваши фильтры снова будут вращаться, в результате чего исходная проблема снова появится. Если вы не хотите обновлять до 2.7, но хотите убедиться, что у вас есть будущее, есть возможность отключить авторотацию с помощью -noautorotate.

ffmpeg -noautorotate -i input.mp4...

Это будет работать как в версии 2.7, так и в более поздних версиях (ваши шансы хороши, если вы обновляетесь до последней версии патчей ветвей, которые поддерживались в то время).

Ответ 3

То, что вы также можете сделать, - удалить метаданные QuickTime, когда вы вращаете .mov. Это позволит убедиться, что видео вращается одинаково в VLC и QuickTime

ffmpeg -i in.mov -vf "transpose=1" -metadata:s:v:0 rotate=0 out.mov

Здесь документация по опции -metadata (от http://ffmpeg.org/ffmpeg.html):

-metadata[:metadata_specifier] key=value (output,per-metadata)

Установить пару/ключ для метаданных.

Необязательный metadata_specifier может быть задан для установки метаданных в потоках или главах. Подробнее см. Документацию -map_metadata.

Эта опция переопределяет метаданные, заданные с помощью -map_metadata. Также можно удалить метаданные, используя пустое значение.

Например, для установки заголовка в выходном файле:

 ffmpeg -i in.avi -metadata title="my title" out.flv 

Чтобы установить язык первого аудиопотока:

 ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT

Ответ 4

Для полноты, причина, по которой это происходит, заключается в том, что iPhone действительно захватывает видео только в одной фиксированной ориентации. Затем измеренная ориентация записывается в метаданных Apple.

Эффект заключается в том, что Quicktime Player считывает метаданные и поворачивает видео в правильную ориентацию во время воспроизведения, но другое программное обеспечение (например, VLC) не показывает и показывает его как ориентированное в фактических данных кодека.

Вот почему rotate=90 (или vflip, или transpose или т.д.) будут работать для некоторых людей, но не для других. В зависимости от того, как камера удерживается во время записи, необходимое вращение может быть 90, 180 или даже 270 градусов. Без чтения метаданных вы просто догадываетесь о том, сколько вращений необходимо, и изменение, которое исправляет одно видео, потерпит неудачу для другого.

Ответ 5

Используйте фильтр vflip

ffmpeg -i input.mov -vf "vflip" output.mp4

Поворот не работал у меня, а transpose = 1 вращался на 90 градусов

Ответ 6

Итак - я тоже столкнулся с этой проблемой, и здесь мои $0,02 на ней:

1.) В некоторых видеороликах есть метаданные Orientation/Rotation, некоторые - нет:   MTS (sony AVHCD) или AVI, которые у меня есть - НЕ имеют указатель ориентации.   MOVs и MP4s (ipad/iphone или samsung galaxy note2) ДОЛЖНЫ ИМЕТЬ.

you can check the setting via 'exiftool -Rotation file'.
My videos often have 90 or 180 as the rotation.

2.) ffmpeg - независимо от man-страницы с тегом metadata, просто НЕ КАЖДЫЙ кажется, что он установлен в выходной файл. - тэг вращения ВСЕГДА "0". он правильно сообщает об этом на выходе - но он никогда не устанавливал право сообщать exiftool. - Но эй - по крайней мере, там и всегда 0.

3.) углы поворота:   если вы хотите повернуть +/- 90: транспонировать = 1 по часовой стрелке 90, 2 ccw   теперь, если вам нужно 180 градусов - просто добавьте этот фильтр TWICE.   помните - это указанная вами цепочка фильтров.:-) - см. ниже.

4.) поверните затем масштаб:   это сложно - потому что вы быстро попадаете в нарушения формата вывода MP4.   Скажем, у вас есть 1920x1080 MOV.   поворот на 90 дает 1080x1920   затем мы перемасштабируем до -1: 720 → 1080 * (720/1920) = 405   А 405 горизонтальный НЕ делится на 2 - ОШИБКА. исправить это вручную.   ИСПОЛЬЗОВАНИЕ ЭТО автоматически - требуется немного работы оболочки script.

5.) затем поверните:   вы можете сделать это так, но тогда вы получите 720x1280. Тьфу.   Но пример фильтра здесь будет:    "-vf yadif = 1, scale = -1: 720, transpose = 1"   Это просто не то, что я хочу - но может работать вполне нормально.

Объединяя все это: - ПРИМЕЧАНИЕ - "намеренно WRONG Rotation-tag", просто для демонстрации - он не будет отображаться AT ALL на выходе! Это займет вход - и повернет его на 180 градусов, затем RESCALE IT - сбросьте метку вращения. - Обычно iphone/ipad2 может создавать вращающийся материал на 180 градусов. вы просто можете оставить '-metadata Rotation = x' из строки...

/usr/bin/ffmpeg -i input-movie.mov -timestamp 2012-06-23 08:58:10 -map_metadata 0: 0 -metadata Вращение = 270 -sws_flags lanczos -vcodec libx264 -x264opts me = umh - b 2600k -vf yadif = 1, transpose = 1, transpose = 1, scale = 1280: 720 -f mp4 -y output-movie.MP4

У меня есть несколько устройств - например, установочный ящик, ipad2, note2, и я конвертирую ВСЕ мой входной материал (независимо от того, будет ли он mp4, mov, MTS, AVI) до 720p mp4, и до сих пор ВСЕ результирующие видео воспроизводятся правильно (ориентация, звук) для каждого разработчика.

Надеюсь, что это поможет.

Ответ 7

Точка 2: я испытываю то же самое даже с exiftool INPUT -n -Orientation = 2

Альтернативно, как-то у меня лучшие результаты с ffmpeg -rotate = PI/2

Ответ 8

Чтобы включить в веб-страницы мои видеоролики с портретом с iPhone, я только что нашел следующий рецепт получения файлов .mp4 в портретном режиме.

Шаг 1: В QuickTime Player экспортируйте файл в 480p (я предполагаю, что 720p или 1080p тоже будут работать). Вы снова получите файл .mov.

Шаг 2. Возьмите новый файл в QT Player и экспортируйте его в "iPad, iPhone...". Вы получаете файл .m4v.

Шаг 3: Im, использующий Miro Video Converter, но, вероятно, любой легкодоступный конвертер вообще будет работать, чтобы получить ваш файл .mp4.

Работает как (длинный) шарм.

Ответ 9

Я снял видео с Ipad3, и он был направлен вверх дном, что, я полагаю, является распространенной ситуацией на всех устройствах Apple в некоторых версиях. Кроме того, 3-минутный MOV файл (1920x1090) занимал около 500 Мб, что делало его недоступным для совместного использования. Мне пришлось преобразовать его в MP4 и проанализировать все потоки, которые я нашел в stackoverflow, вот последняя строка кода для ffmpeg, которую я использовал (ffmpeg ver. 2.8.4):

ffmpeg -i IN.MOV -s 960x540 -metadata:s:v rotate="0" -acodec libmp3lame OUT.mp4

Я думаю, вы можете просто оставить '-metadata: s: v rotate = "0" ', если вам не требуется изменение размера и аудиокодека. Обратите внимание: если вы измените размер видео, ширина и высота должны полностью разделить на 4.