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