H.264几大开源编码器简介

1 JM

德国hhi研究所负责开发的H.264的官方测试源码,对于264的学术研究和比较都必须基于JM。JM完全实现了H.264的全部内容,JM8.6之前的版本实现了H.264_200503标准,8.6之后的版本开始开始支持H.264附加案的高保真技术。但JM程序结构非常复杂,编码复杂度极高,只考虑对所有技术的完整实现,而忽视了实用性。JM包括了编码和解码。


2 X264
网上自由组织联合开发的兼容264标准码流的编码器,创始人是一个法国人。X264最大的特点在于其出发点是为了H.264的实用性。与JM相比,X264并没有完整的对H.264标准给与实现,而是舍去了一些对编码性能贡献很小但计算复杂度极高的新特性,如多参考帧、帧间预测中不必要的块模式等技术。从而计算复杂度降低,编码效率却并没有明显降低。码流兼容H.264。在实用的系统中,比如比较普遍的在DSP芯片上实现H.264,大多是移植X264代码。X264只有编码端没有解码端。
Note:H.264,X264。不存在H264或X.264。。。

3 T264
国产货,已然沦落。我不得不说这东西很恶心。原因一:编码码流不兼容H.264,也就是说用T264编的码流只能用T264解码。。。原因二:T264已经停止开发了,人人都知道不进则退的道理。

4 P264
网上一个叫李世平(一个很牛的人物,啥时候能到他水平就好了)的人编写的。对P264具体情况不是很熟悉,但是由于开发者只有一人,所以猜测成熟程度比不上JM和X264。但是不管怎样,Lee先生的态度和责任心确实值得称道的。


总而言之,对于H.264的学习,看代码就是基本功。如果是想纯学术角度的学习,那么JM就是不二之选。如果有项目要求,要软件或硬件做一个H.264的实现,还是看X264吧,毕竟JM的速度实在是。。。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
H.264是一种视频编码标准,其中的帧内预测是其中一种压缩技术。在MATLAB中实现H.264编码可以使用一些库和工具,例如JM、x264等。以下是一个示例代码,实现了H.264帧内预测编码: ```matlab % Read input video vidObj = VideoReader('input_video.mp4'); % Create output video object outputVideo = VideoWriter('output_video.mp4','MPEG-4'); outputVideo.FrameRate = vidObj.FrameRate; open(outputVideo); % Set H.264 encoder parameters params = struct('Profile','High','Level','4.0','BitRate',5000000,'FrameRate',vidObj.FrameRate); % Loop through each video frame while hasFrame(vidObj) % Read current frame frame = readFrame(vidObj); % Convert to YCbCr color space YCbCr = rgb2ycbcr(frame); % Split YCbCr into separate components Y = YCbCr(:,:,1); Cb = YCbCr(:,:,2); Cr = YCbCr(:,:,3); % Perform frame intra prediction on Y component Y_pred = intra_prediction(Y); % Combine YCbCr components YCbCr_pred = cat(3,Y_pred,Cb,Cr); % Convert back to RGB color space frame_pred = ycbcr2rgb(YCbCr_pred); % Write encoded frame to output video writeVideo(outputVideo,frame_pred); end % Close output video object close(outputVideo); function Y_pred = intra_prediction(Y) % Block size (8x8) block_size = 8; % Pad input image [rows,cols] = size(Y); Y_pad = padarray(Y,[block_size-1 block_size-1],'replicate','post'); % Perform intra prediction on each block for r = 1:block_size:rows for c = 1:block_size:cols % Get current block block = Y_pad(r:r+block_size-1,c:c+block_size-1); % Calculate prediction mode mode = calculate_mode(block); % Perform prediction switch mode case 0 % DC mode pred = mean(block(:)); case 1 % Horizontal mode pred = repmat(block(1,:),[block_size 1]); case 2 % Vertical mode pred = repmat(block(:,1),[1 block_size]); case 3 % Diagonal mode pred = diag(block); pred = repmat(pred(:),[1 block_size]) + repmat(pred(:)',[block_size 1]); pred = pred/(block_size+1); otherwise error('Invalid prediction mode'); end % Subtract prediction from current block Y_pred(r:r+block_size-1,c:c+block_size-1) = block - pred; end end end function mode = calculate_mode(block) % Calculate sum of absolute differences (SAD) for each mode SAD = zeros(4,1); SAD(1) = sum(abs(block(:)-mean(block(:)))); SAD(2) = sum(abs(block(1,:)-mean(block(:)))); SAD(3) = sum(abs(block(:,1)-mean(block(:)))); SAD(4) = sum(abs(diag(block)-mean(block(:)))); % Find mode with minimum SAD [~,mode] = min(SAD); mode = mode-1; end ``` 这段代码实现了一个简单的帧内预测编码器,基于直接模式选择方法(mode selection),并且使用直流、水平、垂直和对角线预测模式进行预测。在实际应用中,需要使用更复杂的编码器和预测算法,以达到更好的压缩效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值