y4m格式和yuv、bmp格式互转

博主作为视频处理萌新,面对y4m格式视频,先将其转为bmp图片帧用于opencv处理,因不会bmp转y4m命令,用python - opencv的cv2.VideoWriter()函数将图片写成avi格式,再转成YUV最后转成y4m,还提及ffmpeg常见转换用法及avi转gif。

作为一个从来没做过视频处理的萌新,给我y4m格式的视频真是一脸懵逼
后来尝试了一些笨方法。。。终于至少能拿出来处理了,记录一下

y4m 格式介绍:https://wiki.multimedia.cx/index.php/YUV4MPEG2
y4m 与 yuv(yuv420 8bit planar) 互转命令:
    y4mtoyuv: ffmpeg -i xx.y4m -vsync 0 xx.yuv  -y
    yuvtoy4m: ffmpeg -s 1920x1080 -i xx.yuv -vsync 0 xx.y4m -y
y4m 与 png 互转命令:
   y4mtobmp: ffmpeg -i xx.y4m -vsync 0 xx%3d.bmp -y
   bmptoy4m: ffmpeg -i xx%3d.bmp  -pix_fmt yuv420p  -vsync 0 xx.y4m -y
y4m 每25帧抽样命令:
   ffmpeg -i xxx.y4m -vf select='not(mod(n\,25))' -vsync 0  -y xxx_sub25.y4m

为了能拿来给opencv处理,我先把y4m转成了一堆bmp图片帧,用法就是

y4mtobmp: ffmpeg -i xx.y4m -vsync 0 xx%3d.bmp -y

这里的 xx%3d.bmp 中的xx可以省略,出来就是0.bmp 1.bmp这样的文件

然后拿来处理,但是bmp转y4m的命令实在不会用。。。干脆就直接用python-opencv中的
cv2.VideoWriter()函数把图片写成avi格式,然后转成YUV,最后转成y4m。。。。方法很蠢但是有用呀哈哈 注意里面的size 是 宽x高,而图像np数组是写作 高x宽,一定要看清楚,被坑了好久。。。

利用ffmpeg常见转换的的用法就是

ffmpeg -i input.avi output.yuv
ffmpeg -s 1920x1080 -i output.yuv -vsync 0 0.y4m -y

上面的yuv可以换成各种格式

avi转gif

ffmpeg -i input.avi output.gif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值