x264 重新编码实时视频 (视频压缩的一个思路)

     本人视频监控行业的码农一枚,将平时快速学习的内容进行记录和分享,因水平有限,没学过音视频的高深理论和技术,所写内容多侧重开源库的使用,比较肤浅,如果文中有什么不足,希望大家多多指点。

     接上篇博客,解码后的视频可以用x264 重新编码,使用x264 编码时可以通过一系列参数调整编码后的视频效果。比如比原视频大小更小等。受限于水平,本文只说一下本人为了达到这个目的,如果使用了x264。另外我想说,x264可以设置很多种参数····总有一种组合是适合你的·····

    上篇博客说了如果接受实时流并解码,解码成yuv后可以用x264重新编码···如果想压缩原视频,只要编码后的比原来小就行(可能这是最水的视频压缩了)。其实用x264库能做的编码,ffmpeg也可以,秉着多用一个开源库,多学习一点的态度就用下x264吧。我的x264是下载的最新版本,在windows 下自己编译的,主要参考了http://www.cnblogs.com/ark-zhang/archive/2012/11/28/2793154.html 这篇文章.

    从ffmpeg 解码后的yuv存在了AVFrame *frame 中,把其中对应的y,u,v赋值给x264 ,用x264进行编码 .

  

                               {
				pic_in.img.plane[0]=frame->data[0];
				pic_in.img.i_stride[0] = frame->linesize[0];
				pic_in.img.plane[1]=frame->data[1];
				pic_in.img.i_stride[1] = frame->linesize[1];
				pic_in.img.plane[2]=frame->data[2];
				pic_in.img.i_stride[2] = frame->linesize[2];
				//pic_in.i_pts = i_pts++;
				x264_encoder_encode(encoder, &nals, &nnal, &pic_in, &pic_out);
				av_frame_free(&frame);
				//x264_nal_t *nal;
				for ( int i=0; i<nnal; i++) {
					fwrite(nals[i].p_payload,1,nals[i].i_payload,fp_write);//写编码后的视频
					printf("encode size=%d\n",nals[i].i_payload);

				}
				
			}

nals[i].p_payload中就是编码后的一帧。

点击打开链接

对应该文,上传一份完整的测试代码,用了live555接收实时视频,ffmpeg 解码, x264编码 。代码比较乱,测试用,不过文中所述内容在代码中都有体现。上传的代码因为平时测试用所以有些地方有比较粗暴的修改,比如H264VideoFileSink中删除了一些函数,还有FileSink种的一些修改

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值