关于视频画面裁切功能

想要将大的h264画面裁切为里面小的某一部分当做新的视频,大部分人的想法是先将h264解码,然后yuv拷贝为小画面,然后再重新编码。
然后解码和编码都非常耗资源,即便是可以使用GPU硬件加速,但有时候项目使用的是vm虚拟机,这时候硬件加速也用不上了。那怎么办呢?
这里有个好的办法。首先h264里面sps有以下变量

 bool frame_cropping_flag;

          int frame_crop_left_offset;

          int frame_crop_right_offset;

          int frame_crop_top_offset;

          int frame_crop_bottom_offset;


那么修改这些变量是否有效呢?
通过代码先解析原视频h264sps各个变量,然后重新生成新的sps
这里要注意的是sps的分辨率计算
width = ((pic_width_in_mbs_minus1 +1)*16) - frame_crop_left_offset*2 - frame_crop_right_offset*2;
height= ((2 - frame_mbs_only_flag)* (pic_height_in_map_units_minus1 +1) * 16) - \
(frame_crop_top_offset * 2) - (frame_crop_bottom_offset * 2); 
第二注意的是解析和编码sps时的指数哥伦布编码

修改后结果是window media player 和vlc,QQ播放器,potplayer都是正常播放的,但是浏览器(chrome)等等播放的画面是原图像左上角的,也就是
frame_crop_left_offset无效,可以看看附件的dd.mp4,浏览器播放明显不正常,这应该是chrome没处理好crop信息  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值