多媒体
JM Decoder计算PSNR的一个bug
由 hubdog 于 星期五, 2009-09-25 15:05 发表今天发现JM Decoder的一个bug,对于有I帧全部是IDR帧的码流,由于IDR的帧号是0,IDR之前如果有B帧的时候,B帧的帧号为负值。JM Decoder在查找YUV文件的参考帧来计算PSNR时,由于负值会找不到相应的参考帧,导致算出的PSNR是错误的。解码时它会报类似下面的错误。
Warning: Could not seek to frame number -2 in reference file. Shown PSNR might be wrong.
视频开发中使用有理数进行小数运算
由 hubdog 于 星期二, 2009-07-21 20:04 发表在研究视频解码程序的时候,我们看到的源代码比如FFMpeg中几乎都是使用有理数来进行运算小数运算,原因就是有理数相对浮点运算来说,几乎没有误差,不会产生误差的累积和扩散。
H264的2:3 pulldown的实现
由 hubdog 于 星期二, 2009-06-09 16:13 发表关于pulldown的解释,参见http://en.wikipedia.org/wiki/Telecine#2:3_pulldown
简单的说,就是将电影的流媒体(24fps)转换为NTSC(30fps)或者PAL上可以正常播放的流媒体。
实现的方式就是播放器将4帧图像在播放时扩展为5帧图像。对于编码器来说,需要在编码时写入指定的SEI扩展信息。pulldown实现相关的SEI信息参考H264标准的D.2.1Buffering period SEI message semantics中Pic_Struct这一部分。
常见的2:3 pulldown的实现就是
帧号 0 1 2 3 4 5 6 .. PIC_STRUCT 3 5 4 6 3 ....... 场结构 TB TBT BT BTB TB .......
注意pulldown只对帧模式有效,因为标准中场模式情况下Pic_Struct只能是1(顶场)和2(底场)
除了Pic_Struct之外,相关的
FFMPEG编译相关的wiki
由 hubdog 于 星期日, 2009-05-31 23:50 发表编译ffplay
由 hubdog 于 星期一, 2009-04-06 12:59 发表一个非常好的视频编解码的网站
由 hubdog 于 星期二, 2009-03-10 13:20 发表编译ffmpeg
由 hubdog 于 星期六, 2008-08-30 10:22 发表ffmpeg的编译,主要是参考了http://soenkerohde.com/tutorials/ffmpeg/上面的编译指南。
有几点要注意的是,上面的教程写得时间比较早,对于最新版的ffmpeg不太适用
1.在Vista好像编译有问题,老是报告权限不够,我只好换到xp上编译。
2.用MSYS1.0.10已经无法编译了,必须更新到1.0.11(包括CoreUtils和Make3.81,bash shell)
3.MP3的编译要使用
./configure --enable-memalign-hack --enable-libmp3lame --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib
旧的编译使用--enable-mp3lame,反正编译不过的时候看一下.configure --help就行了。
4.要输出DLL文件,可以使用--enable-shared编译选项