Как сплюснуть VR-видео для отображения на обычном экране?

Вопрос или проблема

Я не совсем уверен в терминологии, но у меня есть VR-видео, которое предназначено для отображения с использованием гарнитуры с отдельными экранами для каждого глаза. Это не 3D в том смысле, что, когда вы поворачиваете голову, вы видите что-то другое, это просто “2,5D”, чтобы у вас было чувство глубины, когда вы смотрите на это. Есть два видеоканала, которые более или менее идентичны, они просто записаны под немного разным углом, аналогично тому, как человеческие глаза видят мир. Надеюсь, это проясняет, какой тип видео у меня есть, иначе, пожалуйста, задайте уточняющий вопрос в комментарии (и если есть специальная терминология для этого типа видео, пожалуйста, дайте мне знать).

Больше деталей: оригинальное видео имеет разрешение 4320×2160, фактически это 2 квадратных канала по 2160 x 2160.

Я хочу показать это видео без искажений на обычном экране.

Я прочитал следующие вопросы здесь на SO:

  1. https://stackoverflow.com/questions/75165610/how-to-reproject-and-join-these-two-clips-with-ffmpeg

  2. https://stackoverflow.com/questions/61348681/flatten-360-fisheye-video

  3. https://stackoverflow.com/questions/62238714/how-to-de-warp-180-degree-or-360-degree-fisheye-video-with-ffmpeg

  4. https://stackoverflow.com/questions/61348681/flatten-360-fisheye-video

  5. https://stackoverflow.com/questions/66960003/unwarping-180-vr-footage-with-ffmpeg-v360-filter

(и, вероятно, еще несколько).

Я думаю, что хочу извлечь два видеоканала (обратите внимание, что они находятся в одном видеопотоке, а не как в фильме, где могут быть несколько отдельных звуковых дорожек для разных языков) в отдельные файлы, а затем “исправить” их.

(3) дал мне команду для разделения видео на два файла:

ffmpeg -i -myclip.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left];[0]crop=iw/2:ih:ow:0[right]" -map "[left]" -map 0:a /tmp/left.mp4 -map "[right]" -map 0:a /tmp/right.mp4

Это, похоже, сработало, как и ожидалось, но затем мне также нужно “исправить” содержимое, потому что оно было снято с помощью какого-то рыбий глаз или что-то вроде этого (прямые линии не в абсолютном центре изображения более или менее круглые).

(5) предложил эту команду:

ffmpeg -i left.mp4 -vf "v360=input=hequirect:output=flat:h_fov=100:v_fov=67.5:w=1280:h=720" leftfixed.mp4

но это дало выходное изображение размером 4320×2160 (очевидно, только из одного канала, поскольку вход был всего лишь одним каналом), но только центр оригинального изображения, я оцениваю содержимое как 500×250 пикселей (увеличенное до 4320×2160, так что очень мозаичное) от средней точки оригинального изображения.

Как я могу “исправить” это видео, чтобы оно выглядело хорошо на 2D-экране при сохранении размера?

Вы описываете ваше оригинальное видео как формат 2.5D (https://en.wikipedia.org/wiki/2.5D).

Вам нужно выбрать одно из изображений и вывести его в новый файл. Я согласен с вашим скриптом для разделения видео.

Вам нужно исправить искажения от рыбий глаз. Использование V360 – это один из подходов. Команда ‘hequirect’ не поддерживается ‘h_fov’ и ‘v_fov’. Команда ‘equisolid’ поддерживается ‘h_fov’ и ‘v_fov’.

Ссылка https://ffmpeg.org/ffmpeg-filters.html#toc-v360

Ответ или решение

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

Понимание исходного контента

Ваше видео в формате 2,5D состоит из двух идентичных каналов, записанных с незначительным смещением,что создает эффект глубины. Размер видео — 4320×2160, то есть два канала по 2160×2160 пикселей. Исходно, вы планируете разделить видео на два отдельных файла, а затем "развернуть" для правильного отображения на двухмерном экране.

Шаг 1: Разделение видео на два канала

Чтобы извлечь два видеоканала, используйте следующую команду ffmpeg:

ffmpeg -i myclip.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left];[0]crop=iw/2:ih:iw/2:0[right]" -map "[left]" -map 0:a left.mp4 -map "[right]" -map 0:a right.mp4

Шаг 2: Коррекция искажений

После того как вы получили два отдельных видеофайла, необходимо выполнить коррекцию искажения для каждого из них. Используйте фильтр v360 в ffmpeg для преобразования каналов. Важно отметить, что для этого видео используйте режим equisolid, так как hequirect не поддерживает указанные параметры поля зрения.

Пример команды для коррекции искажений:

ffmpeg -i left.mp4 -vf "v360=input=equidistant:output=flat:h_fov=110:v_fov=67.5:w=2160:h=2160" left_fixed.mp4

Здесь:

  • input=equidistant определяет тип входного видео.
  • output=flat указывает, что результат должен быть двухмерным.
  • h_fov и v_fov задают горизонтальное и вертикальное поле зрения соответственно, изменяйте их в зависимости от вашего контента.
  • w и h задают ширину и высоту результирующего видео.

Аналогично выполните команду для правого канала:

ffmpeg -i right.mp4 -vf "v360=input=equidistant:output=flat:h_fov=110:v_fov=67.5:w=2160:h=2160" right_fixed.mp4

Шаг 3: Проверка и окончательные корректировки

После выполнения вышеуказанных действий вы получите видеофайлы left_fixed.mp4 и right_fixed.mp4, которые должны отображаться корректно на обычном экране. Рекомендуется просмотреть их и внести дополнительные настройки, если это необходимо — возможно, корректировать параметры h_fov и v_fov для достижения лучшего результата визуализации.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...