¿Cómo desenvolver el ojo de pez y superponer la lente ojo de pez con ffmpeg?

¿Cómo desenvolver el ojo de pez y superponer la lente ojo de pez con ffmpeg?

Estoy usando una insta 360 x3 y me gustaría automatizar la exportación de videos sin usar sus herramientas de estudio en Linux.

Aquí hay una captura de pantalla de un formato de video en la cámara (captura de pantalla de la cámara Insta360 x3):

Captura de pantalla de la cámara Insta360 x3


Estoy usando ffmpeg para desenvolver el video con el siguiente comando: (tomado de esta respuesta de 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

El comando funciona y hace un trabajo decente, pero una de las lentes tiene un campo de visión más alto con un contorno borroso. Esto da como resultado la siguiente imagen:

Imagen de la captura de pantalla de la cámara Insta360 x3 después del comando ffmpeg: Imagen de la captura de pantalla de la cámara Insta360 x3 después del comando ffmpeg


¿Hay alguna manera de cambiar el comando ffmpeg para superponer ambas lentes un par de píxeles para eliminar la pelusa o recortar el campo de visión superpuesto?

Respuesta1

El comando que estás utilizando utiliza parámetros predeterminados, lo que significa que asume que tus cámaras tienen FOV=180 y están perfectamente horizontales.

Después de algunos experimentos coneste sitioDescubrí que el campo de visión real es de 193°; pero eso no es suficiente: por supuesto, es imposible mantener la cámara perfectamente horizontal, por lo que hay que compensar el cabeceo y el balanceo.

El comando final que obtuve es:

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

O, usando su sintaxis:

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

La imagen que me sale es:

ingrese la descripción de la imagen aquí

Presta atención para no confundirih_fovconh_fovyiv_fovconv_fov.

Tenga en cuenta que una vez que encuentre el FOV adecuado para su cámara, seguirá siendo el mismo para todas sus fotos, pero PICTH y ROLL serán diferentes para cada foto; Considere que una foto perfectamente horizontal encajaría en dicha cuadrícula:

rejilla equirecta

Tu imagen sin compensar el cabeceo y el balanceo:

crudo

Respuesta2

Esta secuencia de comandos no corregirá el viñeteado de lentes en el borde de puntada oscurecido. Cambiar el archivo de salida NEW.mp4a la extensión de foto NEW.jpgno pasará la foto sin eliminarla libx264 -preset ultrafast.

El valor H es la altura del vídeo. Debe configurar la altura del video de entrada. El FOV debe configurarse según el FOV de su cámara.

El valor C es el número de píxeles de fusión entre las dos imágenes donde se superponen.

@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

información relacionada