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

来源:互联网 发布:百度大数据研究中心 编辑:程序博客网 时间:2024/04/29 06:30

       视频编解码的思路很简单,具体算法有点复杂,下面用一个例子来类比说明视频编解码的原理:

       假设你的工资是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

原创粉丝点击