如何用 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视野iv_fov垂直视场

请注意,一旦您找到适合您相机的 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

相关内容