Wie entpacke ich Fischaugenobjektive und überlappe sie mit ffmpeg?

Wie entpacke ich Fischaugenobjektive und überlappe sie mit ffmpeg?

Ich verwende eine Insta 360 x3 und möchte den Export von Videos automatisieren, ohne die Studio-Tools unter Linux zu verwenden.

Hier ist ein Screenshot eines Videoformats in der Kamera (Screenshot der Insta360 x3-Kamera):

Screenshot der Insta360 x3-Kamera


Ich verwende ffmpeg, um den Video-Feed mit dem folgenden Befehl auszupacken: (entnommen aus dieser Stackoverflow-Antwort)

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

Der Befehl funktioniert und macht einen ordentlichen Job, aber eine der Linsen hat ein größeres Sichtfeld mit einem unscharfen Umriss. Daraus ergibt sich das folgende Bild:

Bild des Screenshots der Insta360 x3-Kamera nach dem ffmpeg-Befehl: Bild des Screenshots der Insta360 x3-Kamera nach dem ffmpeg-Befehl


Gibt es eine Möglichkeit, den ffmpeg-Befehl so zu ändern, dass entweder beide Linsen um ein paar Pixel überlappen, um die Unschärfe zu entfernen, oder das überlappende Sichtfeld ausgeschnitten wird?

Antwort1

Der von Ihnen verwendete Befehl verwendet Standardparameter. Dies bedeutet, dass davon ausgegangen wird, dass Ihre Kamera ein Sichtfeld von 180 Grad hat und perfekt horizontal ist.

Nach einigen Experimenten mitDiese SeiteIch habe festgestellt, dass das tatsächliche Sichtfeld 193° beträgt. Aber das reicht nicht: Natürlich ist es unmöglich, die Kamera perfekt horizontal zu halten, daher muss man Nick- und Rollbewegungen ausgleichen.

Der letzte Befehl, den ich erhalten habe, ist:

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

Oder mit Ihrer Syntax:

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

Das Bild, das ich erhalte, ist:

Bildbeschreibung hier eingeben

Achten Sie darauf, nicht zu verwechselnih_fovmith_fovUndiv_fovmitv_fov.

Bitte beachten Sie, dass das richtige Sichtfeld für Ihre Kamera für alle Ihre Fotos gleich bleibt, BILD und ROLLE jedoch bei jedem Foto unterschiedlich sind. Bedenken Sie, dass ein perfekt horizontales Foto in ein solches Raster passen würde:

äquidistantes Gitter

Ihr Bild ohne Nick- und Rollkompensation:

roh

Antwort2

Dieses Skript korrigiert keine durch die Linse hervorgerufene Vignettierung und verdunkelt die Stichkante. Wenn Sie die Ausgabedatei NEW.mp4in die Erweiterung „photo“ ändern NEW.jpg, wird „photo“ nicht weitergeleitet, ohne dass die Datei gelöscht wird libx264 -preset ultrafast.

Der Wert H ist die Höhe des Videos. Sie müssen die Höhe Ihres Eingangsvideos einstellen. Das Sichtfeld sollte auf das Sichtfeld Ihrer Kamera eingestellt werden.

Der C-Wert ist die Anzahl der Pixel der Überblendung zwischen den beiden Bildern an der Überlappungsstelle.

@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

verwandte Informationen