Как развернуть и наложить линзу «рыбий глаз» с помощью ffmpeg?

Как развернуть и наложить линзу «рыбий глаз» с помощью ffmpeg?

Я использую Insta 360 x3 и хотел бы автоматизировать экспорт видео без использования их студийных инструментов на Linux.

Вот скриншот видеоформата в камере (скриншот камеры Insta360 x3):

Скриншот камеры Insta360 x3


Я использую ffmpeg для распаковки видеопотока с помощью следующей команды: (взято из этого ответа stackoverflow)

ffmpeg -y -i input.lrv -vf v360=dfisheye:e:yaw=-90 -c:v libx265 -b:v 40000k -bufsize 5000k -preset ultrafast -c:a copy -t 10 test.mkv

Команда работает и делает свою работу достойно, но одна из линз имеет более высокое поле зрения с нечетким контуром. Это приводит к следующему изображению:

Изображение снимка экрана камеры Insta360 x3 после команды ffmpeg: Изображение снимка экрана камеры Insta360 x3 после команды ffmpeg


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

решение1

Команда, которую вы используете, использует параметры по умолчанию, то есть предполагается, что ваши камеры имеют FOV=180 и расположены строго горизонтально.

После некоторых экспериментов сэтот сайтЯ обнаружил, что фактический угол обзора составляет 193°, но этого недостаточно: конечно, невозможно удерживать камеру идеально горизонтально, поэтому приходится компенсировать крен и тангаж.

Последняя команда, которую я получил, была:

ffmpeg -i dfisheye.jpg -filter_complex "[0:v]v360=input=dfisheye:output=equirect:pitch=-22:roll=-20:ih_fov=193:iv_fov=193[out_v]" -map "[out_v]" out.gif

Или, используя ваш синтаксис:

ffmpeg -y -i input.lrv -vf v360=dfisheye:e:pitch=-22:roll=-20:ih_fov=193:iv_fov=193 -c:v libx265 -b:v 40000k -bufsize 5000k -preset ultrafast -c:a copy -t 10 test.mkv

Изображение, которое я получаю:

введите описание изображения здесь

Обратите внимание, чтобы не перепутатьih_fovсh_fovиiv_fovсv_fov.

Обратите внимание, что как только вы найдете правильное поле зрения для своей камеры, оно останется неизменным для всех ваших фотографий, но PICTH и ROLL будут разными для каждой фотографии; учтите, что идеально горизонтальная фотография поместится в такую ​​сетку:

равноугольная сетка

Ваше изображение без компенсации крена и тангажа:

сырой

решение2

Этот скрипт не исправит затемненный край стежка из-за виньетирования объектива. Изменение NEW.mp4расширения выходного файла на фото NEW.jpgне передаст фото без удаления libx264 -preset ultrafast.

Значение H — это высота видео. Вам нужно установить высоту входного видео. FOV должен быть установлен в соответствии с FOV вашей камеры.

Значение C — это количество пикселей смешения двух изображений в местах их перекрытия.

@echo off

REM split the input and pitch one to level them - hstack the two streams to the output

set "FOV=189.1"       :: Horizontal and vertical field of view of the fisheye lenses in degrees, normal 189.1
set "H=1920"    ::Height of video
set "C=2"   :: Width of interpolation band in degrees, must be smaller or equal than (FOV-180 ), normal is 2
set "RL=0"  ::Roll (neg cockwise/counter clockwise pos) angle to change perspective in Left Equirectangular image
set "PL=0"  ::Pitch (pos down/up neg) angle degrees to boundary to change perspective in Left Equirectangular image
set "YL=0"  ::Yaw (pos left/right neg) angle degrees to change perspective in Left Equirectangular image, normal is -1
set "RR=0"  ::Roll (neg cockwise/counter clockwise pos) angle to change perspective in Right Equirectangular imag, normal 1
set "PR=0"  ::Pitch (pos down/up neg) angle degrees to boundary to change perspective in Right Equirectangular image
set "YR=0"  ::Yaw (pos left/right neg) angle degrees to change perspective in Right Equirectangular image MUST NOT BE POSITIVE AS GREATER THAN 180 NOT POSSIBLE

REM  Create the mergemap file

ffmpeg -f lavfi -i nullsrc=size=%H%x%H% -vf "format=gray8,geq='clip(128-128/%C%*(180-%FOV%/(%H%/2)*hypot(X-%H%/2,Y-%H%/2)),0,255)',v360=input=fisheye:output=e:ih_fov=%FOV%:iv_fov=%FOV%" -frames:v 1 -y mergemap.png

REM Convert file Dual_Feye to equirectangular projection

ffmpeg -i %1 -i %FF%mergemap.png -lavfi "[0]format=rgb24,split[a][b];[a]crop=ih:iw/2:0:0,v360=input=fisheye:output=e:ih_fov=%FOV%:iv_fov=%FOV%:yaw=%YL%:pitch=%PL%:roll=%RL%[c];[b]crop=ih:iw/2:iw/2:0,v360=input=fisheye:output=e:yaw=180+%YR%:pitch=%PR%:roll=%RR%:ih_fov=%FOV%:iv_fov=%FOV%[d];[1]format=gbrp[e];[c][d][e]maskedmerge" -c:v libx264 -preset ultrafast -q:v 1 -y NEW.mp4

Связанный контент