Я использую Insta 360 x3 и хотел бы автоматизировать экспорт видео без использования их студийных инструментов на Linux.
Вот скриншот видеоформата в камере (скриншот камеры 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:
Есть ли способ изменить команду 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