我正在使用 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和视野和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