现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

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

2013-01-07 06:55 工业·编程 ⁄ 共 3380字 ⁄ 字号 暂无评论

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

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

给我留言

留言无头像?