在ffmpeg中,即支持png格式文件,也支持apng格式文件,下面就这两种区别做一描述:
PNG(Portable Network Graphics)是一种无损压缩的位图图形格式。其设计目的是试图替代GIF和过于复杂的TIFF文件格式,同时增加一些GIF文件不具备的特性。
MNG图形文件格式用来表现动画。以下是PNG、MNG、APNG的历史:
1996年6月提出PNF(Portable Network Frame)草案,当年8月改名为MNG(Multiple-image Network Graphics)。
PNG的1.0版本规范于1996年7月1日发布,后来被称为RFC 2083标准,并在1996年10月1日成为W3C建议。
PNG的1.1版本进行了部分小幅修改并增加了三个新的数据块定义,于1998年12月31日发布。
PNG的1.2版本增加了另外一个数据块,于1999年8月11日发布。
PNG现行版本是国际标准(ISO/IEC 15948:2003),并在2003年11月10日作为W3C建议发布。这个版本与1.2版仅有细微差别。
2004年末,PNG的动画扩展——APNG,被提出来。这是一个相对于MNG更简单的动画实现方案,不识别APNG格式的PNG解码器至少能够正常回放第一幅普通PNG画面。
在libavcodec/allcodecs.c中 定义了png和apng的encoder和decoder.
REGISTER_ENCDEC (PNG, png); # ff_png_encoder in libavcodec/pngenc.c ff_png_decoder in libavcodec/pngdec.c
REGISTER_ENCDEC (APNG, apng); # ff_apng_encoder in libavcodec/pngenc.c ff_png_decoder in libavcodec/pngdec.c
REGISTER_PARSER(PNG, png); # ff_png_parser in libavcodec/png_parser.c
PNG文件结构:
PNG文件由一个8字节的PNG文件署名(PNG File Signature)和按照特定结构组织的3个以上的数据块(chunk)组成。
文件署名部分: