您的位置:首页 > 其它

视频编解码原理及如何在VC6.0中运行JM8.6

2015-12-09 11:08 621 查看
视频编解码的思路很简单,具体算法有点复杂,下面用一个例子来类比说明视频编解码的原理:

假设你的工资是20000,你要把这个信息告诉父母,打电话就可以了,为了不说废话,你可以提前(比如春节在一起的时候)跟父母做一个约定,就是将你的实际公司除以10000, 也就是20000/10000,然后打电话的时候直说工资是2, 父母就得到了2,这时候,父母根据提前的约定,就知道你的实际工资是2 * 10000. 这个约定实际上就是一个标准,在视频中,这个标准可以是MPEG2, 也可以是H.264,不同标准的变换方式各不相同, 这就是编解码的原理。当然视频的编解码相对复杂,而且信息有损。

20000 ------> 2 (编码算法是除以10000)

2 (从工作单位)------>2(传递到家里)

2 ------> 20000(解码算法是乘以10000)



下面是H.264编解码运行步骤,真实体验一下编解码:

1.从http://iphome.hhi.de/suehring/tml/download/old_jm/ 下载JM8.6.(H.264的编解码器)

2.解压并用VC6.0打开tml.dsw,工作区有三个工程(本文只关心:lencod files和 ldecod files)

编码:



3.设置lencod files为active, 然后点击工程、设置、调试,在工作目录输入./bin, 在程序变量中输入-d encoder_baseline.cfg

4.编译运行就实现了H.264编码,bin 文件夹中生成几个新文件,其中 test.264即为视频压缩码流文件

结果为:

Parsing Configfile encoder_baseline.cfg.........................................

..................................................

-------------------------------------------------------------------------------

Input YUV file : foreman_part_qcif.yuv

Output H.264 bitstream : test.264

Output YUV file : test_rec.yuv

Output log file : log.dat

Output statistics file : stat.dat

-------------------------------------------------------------------------------

Frame Bit/pic WP QP SnrY SnrU SnrV Time(ms) MET(ms) Frm/Fld I D

-------------------------------------------------------------------------------

0000(NVB) 168

0000(IDR) 21960 0 28 37.387 41.260 42.850 437 0 FRM 99

0001(P) 5352 0 28 36.915 40.996 42.560 843 221 FRM 6

0002(P) 6696 0 28 36.736 40.754 42.192 1203 392 FRM 8

--------------------------------------------------------------------------

Total Frames: 3 (3)

Leaky BucketRateFile does not have valid entries;

using rate calculated from avg. rate

Number Leaky Buckets: 8

Rmin Bmin Fmin

340080 21960 21960

425100 21960 21960

510120 21960 21960

595140 21960 21960

680160 21960 21960

765180 21960 21960

850200 21960 21960

935220 21960 21960

-------------------------------------------------------------------------------

Freq. for encoded bitstream : 30

Hadamard transform : Used

Image format : 176x144

Error robustness : Off

Search range : 16

No of ref. frames used in P pred : 10

Total encoding time for the seq. : 2.483 sec

Total ME time for sequence : 0.613 sec

Sequence type : IPPP (QP: I 28, P 28)

Entropy coding method : CAVLC

Profile/Level IDC : (66,30)

Search range restrictions : none

RD-optimized mode decision : used

Data Partitioning Mode : 1 partition

Output File Format : H.264 Bit Stream File Format

------------------ Average data all frames -----------------------------------

SNR Y(dB) : 37.01

SNR U(dB) : 41.00

SNR V(dB) : 42.53

Total bits : 34176 (I 21960, P 12048, NVB 168)

Bit rate (kbit/s) @ 30.00 Hz : 341.76

Bits to avoid Startcode Emulation : 0

Bits for parameter sets : 168

-------------------------------------------------------------------------------

Exit JM 8 encoder ver 8.6

解码:(编码的逆过程)



5.设置ldecod files为active, 然后点击工程、设置、调试,在工作目录输入./bin, 在程序变量中输入decoder.cfg

6.编译运行就实现了H.264解码,bin 文件夹中生成几个新文件,其中 test_dec.yuv即为解码文件.

结果为:

--------------------------------------------------------------------------

Decoder config file : decoder.cfg

--------------------------------------------------------------------------

Input H.264 bitstream : test.264

Output decoded YUV 4:2:0 : test_dec.yuv

Output status file : log.dec

Input reference file : test_rec.yuv

--------------------------------------------------------------------------

POC must = frame# or field# for SNRs to be correct

Frame POC QP SnrY SnrU SnrV Time(ms)

0(I) 0 28 0.0000 0.0000 0.0000 78

1(P) 2 28 0.0000 0.0000 0.0000 94

2(P) 4 28 0.0000 0.0000 0.0000 78

-------------------- Average SNR all frames ------------------------------

SNR Y(dB) : 0.00

SNR U(dB) : 0.00

SNR V(dB) : 0.00

Total decoding time : 0.250 sec

--------------------------------------------------------------------------

Exit JM 8 decoder, ver 8.6
http://blog.csdn.net/stpeace/article/details/8097438
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: