昨天发现B站上有裸眼3D, 眼睛平行着观看,可以看到眼珠炸裂的3D效果, 直让人打开新世界的大门。
在熬了一晚上,深入研究之后,我发现除了真3D拍摄的影片之外,还有一类伪3D,效果也相当不错,特别是观看某些适合自己一个人观看的视频时。
经过研究,发现原理是左右两边画面不同步,左边要快30毫秒,从而让眼睛可以看到更多的面,产生立体感。
话不多说,以下为ffmpeg的生成命令。
ffmpeg生成伪3D视频:
#将demo.mp4切去前面30毫秒,输出到demo1.mp4
ffmpeg -ss 00:00:00.030 -i demo.mp4 -vcodec copy -acodec copy demo1.mp4
#合并demo.mp4 demo1.mp4,一左一右生成3D视角
ffmpeg -i demo.mp4 -vf "movie=demo1.mp4 [in1]; [in]pad=iw*2:ih:iw:0[in0]; [in0][in1] overlay=0:0 [out]" -vcodec libx264 -preset medium -b:v 1200k -r:v 25 -f mp4 demo2.mp4
生成结果如下:
伪3D视频说到这里。
下面开始说左右格式的裸眼3D。
观看左右格式的3D视频,有两种办法,1是佩戴VR眼镜,2是手机上使用平行眼观看,第二种则是我们接下来要做的。
平行眼: 放松双眼,或者看向原处,用余光看手机,直到出现重影,红点(视频正下方的图片水印)出现四个,调整聚焦让中间两个红点重叠,变成3个红点3个画面,中间画面就是3D的,随后拉远距离,保证眼睛舒服即可。原理是左眼看左边画面,右眼看右眼画面,也可用手掌隔开左右眼做辅助。
为了方便观看裸眼3D视频,我们需要给原本的伪3D加上一个写轮眼,方便对焦,以及更好的观看,如图。
下面是具体脚本代码:
#写轮眼辅助, 向下填充50像素, 并将写轮眼以水印的形式置入
.\bin\ffmpeg.exe -i demo.mp4 -vf "movie=mark.png [in1],[in]pad=iw:ih+50:iw:0[in0];[in0][in1] overlay=main_w/2-overlay_w/2:main_h-overlay_h-10[out]" mark.mp4
#将demo.mp4切去前面30毫秒, 输出到short.mp4 。短片抽30毫秒合适,3D效果强, 电视剧则适合20毫秒
.\bin\ffmpeg.exe -ss 00:00:00.030 -i mark.mp4 -vcodec copy -acodec copy short.mp4
#.\bin\ffmpeg.exe -ss 00:00:00.020 -i mark.mp4 -vcodec copy -acodec copy short.mp4
# 清理垃圾文件
del out.mp4
#合并demo.mp4 short.mp4,一左一右生成3D视角
.\bin\ffmpeg.exe -i mark.mp4 -vf "movie=short.mp4 [in1]; [in]pad=iw*2:ih:iw:0[in0]; [in0][in1] overlay=0:0 [out]" -vcodec libx264 -preset medium -b:v 1200k -r:v 25 -f mp4 out.mp4
#清理垃圾文件
del mark.mp4
del short.mp4
pause
为了方便使用,我将ffmpeg以及脚本在github上做了傻瓜式整合,直接点击start.cmd即可转换视频,以下是地址:
https://github.com/hailong29/3DFactory