M-JPEG、MPEG4、H.264都有何区别

    M-JPEG、MPEG4、H.264都有何区别;压缩方式是网络视频服务器和网络摄像机的核心技术,;随着多媒体技术的发展,相继推出了许多压缩编码标准;1、JPEG/M-JPEG;①、JPEG是一种静止图像的压缩标准,它是一种标;当硬件处理速度足够快时,JPEG能用于实时动图像;②、M-JPEG源于JPEG压缩技术,是一种简单;2、H.261/H.263;

    

M-JPEG、MPEG4、H.264都有何区别

压缩方式是网络视频服务器和网络摄像机的核心技术,压缩方式很大程度上决定着图像的质量、压缩比、传输效率、传输速度等性能,它是评价网络视频服务器和网络摄像机性能优劣的重要一环。

随着多媒体技术的发展,相继推出了许多压缩编码标准,目前主要有 JPEG/M-JPEG、H.261/H.263和MPEG等标准。

1、JPEG/M-JPEG

①、JPEG是一种静止图像的压缩标准,它是一种标准的帧内压缩编码方式。

当硬件处理速度足够快时,JPEG能用于实时动图像的视频压缩。在画面变动较小的情况下能提供相当不错的图像质量,传输速度快,使用相当安全,缺点是数据量较大。

②、M-JPEG源于JPEG压缩技术,是一种简单的帧内JPEG压缩,压缩图像质量较好,在画面变动情况下无马赛克,但是由于这种压缩本身技术限制,无法做到大比例压缩,录像时每小时约1-2GB空间,网络传输时需要2M带宽,所以无论录像或网络发送传输,都将耗费大量的硬盘容量和带宽,不适合长时间连续录像的需求,不大实用于视频图像的网络传输。

2、H.261/H.263

①、H.261标准通常称为 P*64,H.261对全色彩、实时传输动图像可以达到较高的压缩比,算法由帧内压缩加前后帧间压缩编码组合而成,以提供视频压缩和解压缩的快速处理。

由于在帧间压缩算法中只预测到后1帧,所以在延续时间上比较有优势,但图像质量难以做到很高的清晰度,无法实现大压缩比和变速率录像等。

②、 H.263的基本编码方法与H.261是相同的,均为混合编码方法,但H.263为适应极低码率的传输,在编码的各个环节上作了改进,如以省码字来提高编码图像的质量,此外,H.263还吸取了MPEG的双向运动预测等措施,进一步提高帧间编码的预测精度,一般说,在低码率时,采用H.263只要一半的速率可获得和H.261相当的图像质量。 3、MPEG

MPEG是压缩运动图像及其伴音的视音频编码标准,它采用了帧间压缩,仅存储连续帧之间有差别的地方 ,从而达到较大的压缩比。

MPEG现有MPEG—1、MPEG—2和MPEG—4三个版本,以适应于不同带宽和图像质量的要求。

①、MPEG—1的视频压缩算法依赖于两个基本技术,一是基于16*16(像素*行)块的运动补偿,二是基于变换域的压缩技术来减少空域冗余度,压缩比相比M-JPEG要高,对运动不激烈的视频信号可获得较好的图像质量,但当运动激烈时,图像会产生马赛克现象。

MPEG-1以1.5Mbps的数据率传输视音频信号,MPEG-1在视频图像质量方面相当于VHS录像机的图像质量,视频录像的清晰度的彩色模式 ≥240TVL,两路立体声伴音的质量接近CD的声音质量。

MPEG-1是前后帧多帧预测的压缩算法,具有很大的压缩灵活性,能变速率压缩视频,可视不同的录像环境,设置不同的压缩质量,从每小时80MB至 400MB不等,但数据量和带宽还是比较大。

②、MPEG-2它是获得更高分辨率(720*572)提供广播级的视音频编码标准。

MPEG-2作为MPEG-1的兼容扩展,它支持隔行扫描的视频格式和许多高级性能包括支持多层次的可调视频编码,适合多种质量如多种速率和多种分辨率的场合。它适用于运动变化较大,要求图像质量很高的实时图像。对每秒30帧、720*572分辨率的视频信号进行压缩,数据率可达3-10Mbps。由于数据量太大,不适合长时间连续录像的需求。

③、MPEG-4是为移动通信设备在Internet网实时传输视音频信号而制定的低速率、高压缩比的视音频编码标准。

MPEG-4标准是面向对象的压缩方式,不是像MPEG-1和MPEG-2那样简单地将图像分为一些像块,而是根据图像的内容,其中的对象(物体、人物、背景)分离出来,分别进行帧内、帧间编码,并允许在不同的对象之间灵活分配码率,对重要的对象分配较多的字节,对次要的对象分配较少的字节,从而大大提高了压缩比,在较低的码率下获得较好的效果, MPEG-4支持MPEG-1、MPEG-2中大多数功能,提供不同的视频标准源格式、码率、帧频下矩形图形图像的有效编码。

总之,MPEG-4有三个方面的优势: ①、具有很好的兼容性;

②、MPEG-4比其他算法提供更好的压缩比,最高达 200:1; ③、MPEG-4在提供高压缩比的同时,对数据的损失很小。

所以,MPEG-4的应用能大幅度的降低录像存储容量,获得较高的录像清晰度,特别适用于长时间实时录像的需求,同时具备在低带宽上优良的网络传输能力。

4、H.264是 ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个新的数字视频编码标准,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10 部分。

1998年1月份开始草案征集,1999年9月,完成第一个草案,2001年5月制定了其测试模式TML-8,2002年6月的 JVT第5次会议通过了H.264的FCD板。

目前该标准还在开发之中,预计明年上半年可正式通过。

H.264和以前的标准一样,也是 DPCM加变换编码的混合编码模式。 但它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263++好得多的压缩性能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求;它的基本系统是开放的,使用无需版权。

在技术上,H.264标准中有多个闪光之处,如统一的VLC符号编码,高精度、多模式的位移估计,基于4×4 块的整数变换、分层的编码语法等。

这些措施使得H.264算法具有很的高编码效率,在相同的重建图像质量下,能够比H.263节约50%左右的码率。

H.264的码流结构网络适应性强,增加了差错恢复能力,能够很好地适应IP和无线网络的应用。 其实现在多数的什么H.264都是 H.263++通过改进后的算法,是压缩率变的小了点!如果是从单个画面清晰度比较,MPEG4有优势;从动作连贯性上的清晰度,H.264有优势。

MPEG到目前为止已经制定并正在制定以下和视频相关的标准:

* MPEG-1:第一个官方的视讯音频压缩标准,随后在Video CD中被采用,其 中的音频压缩的第三级(MPEG-1 Layer 3)简称MP3,成为比较流行的音频压缩格 式。

* MPEG-2:广播质量的视讯、音频和传输协议。被用于无线数字电视-ATSC、DVB以及ISDB、数字卫星电视(例如DirecTV)、数字有线电视信号,以及DVD视频光盘技术中。

* MPEG-3:原本目标是为高分辨率电视(HDTV)设计,随后发现MPEG-2已足够HDTV应用,故 MPEG-3的研发便中止。

* MPEG-4:2003 年发布的视讯压缩标准,主要是扩展MPEG-1、MPEG-2等标准以支持视频/音频对象(video/audio \)的编码、3D内容、低比特率编码(low bitrate encoding)和数字版权管理(Digital Rights Management),其中第10部分由ISO/IEC和ITU-T联合发布,称为H.264 /MPEG-4 Part 10。参见H.264。

* MPEG-7:MPEG-7并不是一个视讯压缩标准,它是一个多媒体内容的描述标准。

* MPEG-21:MPEG- 21是一个正在制定中的标准,它的目标是为未来多媒体的应用提供一个完整的平台

項目

H.264

MPEG4

MJPEG

同碼率畫質 優 中 差

複雜度 高 中 低

網路傳輸速度 快 中 慢

成本 高 中 低

PSNR - Bitrate圖

註:PSNR[dB]值越高代表畫質越清晰

由上圖可知,在同樣的Bitrate下,H.264的畫質是最好的,例如在Bitrate 100kbps時,H.264大約比MPEG4好3dB(約2倍),更比MJPEG好約10dB(約10倍),換句話說,同樣容量的硬碟,在儲存畫質及速率一樣的情況之前,H.264可以比MPEG4多儲存2倍的時間,比MJPEG多儲存10倍的時間。

同碼率(Bitrate)時H.264的畫質最佳

同碼率(Bitrate)時MPEG4的畫質字邊緣有雜點

同碼率(Bitrate)時MJPEG的畫質最差

JPEG与M-JPEG的区别

M-JPEG是一种基于静态图像压缩技术JPEG发展起来的动态图像压缩技术,可以生成序列化的运动图像。其主要特点是基本不考虑视频流中不同帧之间的变化,只单独对某一帧进行压缩,其压缩倍数为20~80倍,适合静态画面的压缩,分辨率可从352×288到704×576。以往的JPEG压缩技术是直接处理整个画面,所以要等到整个压缩档案传输完成才开始进行解压缩成影像画面,而这样的方式造成传输一个高解析画面时须耗时数十秒甚至数分钟。而新一代的M-JPEG是采取渐层式技术,先传输低解析的图档,然后再补送细部之资料,使画面品质改善;M-JPEG的主要缺点是压缩效率低,M-JPEG;JPEG是应用相当普遍的文件格式,能使图像占用最;如果一幅彩色图片所占空间比较大,则可以将它存成压;MotionJPEG;Motion编码;JPEG(MJPEG,MotionJointPh;Group,FourCC:MJPG)是一种视频压;同样格式的MotionJPEG视频压缩不同于帧间;MJPE面品质改善。M-JPEG压缩技术可以获取清晰度很高的视频图像,而且可以灵活设置每路的视频清晰度和压缩帧数。因期压缩后之格式可读单一画面,所以可以任意剪接。M-JPEG因采用帧内压缩方式也适于视频编辑。

M-JPEG的主要缺点是压缩效率低,M-JPEG算法是根据每一帧图像的内容进行压缩,而不是根据相邻帧图像之间的差异来进行压缩,因此造成了大量冗余信息被重复存储,存储占用的空间大到每帧8~15K字节,最好也只能做到每帧3K字节,但如果因此而采用高压缩比则视频质量会严重降低。

JPEG是应用相当普遍的文件格式,能使图像占用最少的的空间,又能显示极佳的效果,在设计网页时,一般将文件存储为JPEG格式。

如果一幅彩色图片所占空间比较大,则可以将它存成压缩格式,以减小所占空间,如果此格式用于输出或印刷,那就需要解压缩。

Motion JPEG

Motion 编码。

JPEG(MJPEG,Motion Joint Photographic Experts

Group,FourCC:MJPG)是一种视频压缩格式,其中每一帧图像都分别使用JPEG编码

同样格式的Motion JPEG视频压缩不同于帧间压缩,因为压缩比特率比较低,所以编码与解码相对比较容易,并不需要过多的运算能力,也使得软件或者芯片可以十分容易地对Motion JPEG进行编辑。也因为此,一些移动设备,如数码相机使用Motion JPEG来进行短片的编码。

MJPEG(Motion JPEG)是在JPEG基础发展起来的动态图像压缩技术,它只单独的对某一帧进行压缩,而基本不考虑视频流中不同帧之间的变化。使得可获取清晰度很高的视频图像,而且可灵活设置每路的视频清晰度和压缩帧数。其压缩后的画面还可任意剪接。但它的缺陷也非常明显,其一:丢帧现象严重、实时性差,在保证每路都必须是高清晰的前提下,很难完成实时压缩。其二:压缩效率低,存储占用空间较大。 对于QuickTime格式,苹果公司定义了两种类型的编码:MJPEG格式

A和MJPEG格式B。MJPEG格式B不再保留有效的JPEG交汇档案(Interchange Files),没有了头部,它无法把单独帧保存到JPEG文件。

以往的JPEG压缩技术是直接处理整个画面,所以要等到整个压缩档案传输完成才开始进行解压缩成图像画面,而这样的方式造成传输一个高解析画面时须耗时数十秒甚至数分钟。而新一代的M-JPEG是采取渐层式技术,先传输低解析的图档,然后再补送细部之资料,使画面品质改善。M-JPEG压缩技术可以获取清晰度很高的视频图像,而且可以灵活设置每路的视频清晰度和压缩帧数。因期压缩后之格式可读单一画面,所以可以任意剪接。M-JPEG因采用帧内压缩方式也适于视频编辑。 相比其他未压缩格式(比如RGB,压缩比1:1;YCbCr,压缩比1:1.5)和MPEG(1:100),数据率29Mbit/s算是非常高的,带来的结果就是文件尺寸相对较大。

根据提供的引用内容,您可以使用FFmpeg API在C#中编写程序,以实现将H264关键帧转换为BMP的功能。以下是大致的流程原理: 1.使用FFmpeg API解复用mp4文件,得到一个视频流。 2.将视频流解码为yuv序列。 3.将yuv序列中指定的一帧图片内容转换为rgb。 4.将rgb数据存储为bmp位图。 以下是一个C#的示例代码: ```csharp using System; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; namespace H264ToBmp { class Program { static void Main(string[] args) { // 初始化FFmpeg FFmpeg.av_register_all(); FFmpeg.avcodec_register_all(); // 打开输入文件 string inputFileName = "input.mp4"; AVFormatContext* inputFormatContext = null; if (FFmpeg.avformat_open_input(&inputFormatContext, inputFileName, null, null) != 0) { Console.WriteLine("无法打开输入文件"); return; } // 查找视频流 int videoStreamIndex = -1; for (int i = 0; i < inputFormatContext->nb_streams; i++) { if (inputFormatContext->streams[i]->codecpar->codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; break; } } if (videoStreamIndex == -1) { Console.WriteLine("无法找到视频流"); return; } // 打开视频解码器 AVCodec* videoCodec = FFmpeg.avcodec_find_decoder(inputFormatContext->streams[videoStreamIndex]->codecpar->codec_id); if (videoCodec == null) { Console.WriteLine("无法找到视频解码器"); return; } AVCodecContext* videoCodecContext = FFmpeg.avcodec_alloc_context3(videoCodec); if (FFmpeg.avcodec_parameters_to_context(videoCodecContext, inputFormatContext->streams[videoStreamIndex]->codecpar) < 0) { Console.WriteLine("无法初始化视频解码器上下文"); return; } if (FFmpeg.avcodec_open2(videoCodecContext, videoCodec, null) < 0) { Console.WriteLine("无法打开视频解码器"); return; } // 查找关键帧 AVPacket packet = new AVPacket(); AVFrame* frame = FFmpeg.av_frame_alloc(); int gotPicture = 0; while (FFmpeg.av_read_frame(inputFormatContext, &packet) >= 0) { if (packet.stream_index == videoStreamIndex) { if (FFmpeg.avcodec_decode_video2(videoCodecContext, frame, &gotPicture, &packet) < 0) { Console.WriteLine("无法解码视频帧"); return; } if (gotPicture != 0 && (frame->key_frame != 0 || frame->pict_type == AVPictureType.AV_PICTURE_TYPE_I)) { break; } } FFmpeg.av_packet_unref(&packet); } // 将yuv序列转换为rgb SwsContext* swsContext = FFmpeg.sws_getContext(videoCodecContext->width, videoCodecContext->height, videoCodecContext->pix_fmt, videoCodecContext->width, videoCodecContext->height, AVPixelFormat.AV_PIX_FMT_RGB24, 0, null, null, null); AVFrame* rgbFrame = FFmpeg.av_frame_alloc(); byte_ptrArray4 rgbData = new byte_ptrArray4(); int rgbDataSize = FFmpeg.av_image_alloc(rgbData, null, videoCodecContext->width, videoCodecContext->height, AVPixelFormat.AV_PIX_FMT_RGB24, 1); FFmpeg.sws_scale(swsContext, frame->data, frame->linesize, 0, videoCodecContext->height, rgbData, rgbFrame->linesize); // 将rgb数据存储为bmp位图 Bitmap bmp = new Bitmap(videoCodecContext->width, videoCodecContext->height, videoCodecContext->width * 3, PixelFormat.Format24bppRgb, new IntPtr(rgbData[0])); bmp.Save("output.bmp", ImageFormat.Bmp); // 释放资源 FFmpeg.avformat_close_input(&inputFormatContext); FFmpeg.avcodec_free_context(&videoCodecContext); FFmpeg.av_frame_free(&frame); FFmpeg.sws_freeContext(swsContext); FFmpeg.av_frame_free(&rgbFrame); FFmpeg.av_freep(&rgbData[0]); } } public unsafe static class FFmpeg { private const string DllName = "ffmpeg.dll"; [DllImport(DllName)] public static extern void av_register_all(); [DllImport(DllName)] public static extern void avcodec_register_all(); [DllImport(DllName)] public static extern int avformat_open_input(AVFormatContext** ps, string url, AVInputFormat* fmt, AVDictionary** options); [DllImport(DllName)] public static extern int avcodec_decode_video2(AVCodecContext* avctx, AVFrame* picture, int* got_picture_ptr, AVPacket* avpkt); [DllImport(DllName)] public static extern AVCodec* avcodec_find_decoder(AVCodecID id); [DllImport(DllName)] public static extern AVCodecContext* avcodec_alloc_context3(AVCodec* codec); [DllImport(DllName)] public static extern int avcodec_parameters_to_context(AVCodecContext* codec, AVCodecParameters* par); [DllImport(DllName)] public static extern int avcodec_open2(AVCodecContext* avctx, AVCodec* codec, AVDictionary** options); [DllImport(DllName)] public static extern int av_read_frame(AVFormatContext* s, AVPacket* pkt); [DllImport(DllName)] public static extern void av_packet_unref(AVPacket* pkt); [DllImport(DllName)] public static extern AVFrame* av_frame_alloc(); [DllImport(DllName)] public static extern SwsContext* sws_getContext(int srcW, int srcH, AVPixelFormat srcFormat, int dstW, int dstH, AVPixelFormat dstFormat, int flags, SwsFilter* srcFilter, SwsFilter* dstFilter, double* param); [DllImport(DllName)] public static extern int av_image_alloc(byte_ptrArray4 pointers, int_array4 linesizes, int w, int h, AVPixelFormat pix_fmt, int align); [DllImport(DllName)] public static extern void sws_scale(SwsContext* c, byte_ptrArray4 srcSlice, int_array4 srcStride, int srcSliceY, int srcSliceH, byte_ptrArray4 dst, int_array4 dstStride); [DllImport(DllName)] public static extern void sws_freeContext(SwsContext* swsContext); [DllImport(DllName)] public static extern void av_frame_free(AVFrame** frame); [DllImport(DllName)] public static extern void avcodec_free_context(AVCodecContext** avctx); [DllImport(DllName)] public static extern void avformat_close_input(AVFormatContext** s); [DllImport(DllName)] public static extern void av_freep(void* ptr); } public enum AVMediaType { AVMEDIA_TYPE_UNKNOWN = -1, AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_DATA, AVMEDIA_TYPE_SUBTITLE, AVMEDIA_TYPE_ATTACHMENT, AVMEDIA_TYPE_NB } public enum AVCodecID { AV_CODEC_ID_NONE, /* video codecs */ AV_CODEC_ID_MPEG1VIDEO, AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding AV_CODEC_ID_H261, AV_CODEC_ID_H263, AV_CODEC_ID_RV10, AV_CODEC_ID_RV20, AV_CODEC_ID_MJPEG, AV_CODEC_ID_MJPEGB, AV_CODEC_ID_LJPEG, AV_CODEC_ID_SP5X, AV_CODEC_ID_JPEGLS, AV_CODEC_ID_MPEG4, AV_CODEC_ID_RAWVIDEO, AV_CODEC_ID_MSMPEG4V1, AV_CODEC_ID_MSMPEG4V2, AV_CODEC_ID_MSMPEG4V3, AV_CODEC_ID_WMV1, AV_CODEC_ID_WMV2, AV_CODEC_ID_H263P, AV_CODEC_ID_H263I, AV_CODEC_ID_FLV1, AV_CODEC_ID_SVQ1, AV_CODEC_ID_SVQ3, AV_CODEC_ID_DVVIDEO, AV_CODEC_ID_HUFFYUV, AV_CODEC_ID_CYUV, AV_CODEC_ID_H264, AV_CODEC_ID_INDEO3, AV_CODEC_ID_VP3, AV_CODEC_ID_THEORA, AV_CODEC_ID_ASV1, AV_CODEC_ID_ASV2, AV_CODEC_ID_FFV1, AV_CODEC_ID_4XM, AV_CODEC_ID_VCR1, AV_CODEC_ID_CLJR, AV_CODEC_ID_MDEC, AV_CODEC_ID_ROQ, AV_CODEC_ID_INTERPLAY_VIDEO, AV_CODEC_ID_XAN_WC3, AV_CODEC_ID_XAN_WC4, AV_CODEC_ID_RPZA, AV_CODEC_ID_CINEPAK, AV_CODEC_ID_WS_VQA, AV_CODEC_ID_MSRLE, AV_CODEC_ID_MSVIDEO1, AV_CODEC_ID_IDCIN, AV_CODEC_ID_8BPS, AV_CODEC_ID_SMC, AV_CODEC_ID_FLIC, AV_CODEC_ID_TRUEMOTION1, AV_CODEC_ID_VMDVIDEO, AV_CODEC_ID_MSZH, AV_CODEC_ID_ZLIB, AV_CODEC_ID_QTRLE, AV_CODEC_ID_TSCC, AV_CODEC_ID_ULTI, AV_CODEC_ID_QDRAW, AV_CODEC_ID_VIXL, AV_CODEC_ID_QPEG, AV_CODEC_ID_PNG, AV_CODEC_ID_PPM, AV_CODEC_ID_PBM, AV_CODEC_ID_PGM, AV_CODEC_ID_PGMYUV, AV_CODEC_ID_PAM, AV_CODEC_ID_FFVHUFF, AV_CODEC_ID_RV30, AV_CODEC_ID_RV40, AV_CODEC_ID_VC1, AV_CODEC_ID_WMV3, AV_CODEC_ID_LOCO, AV_CODEC_ID_WNV1, AV_CODEC_ID_AASC, AV_CODEC_ID_INDEO2, AV_CODEC_ID_FRAPS, AV_CODEC_ID_TRUEMOTION2, AV_CODEC_ID_BMP, AV_CODEC_ID_CSCD, AV_CODEC_ID_MMVIDEO, AV_CODEC_ID_ZMBV, AV_CODEC_ID_AVS, AV_CODEC_ID_SMACKVIDEO, AV_CODEC_ID_NUV, AV_CODEC_ID_KMVC, AV_CODEC_ID_FLASHSV, AV_CODEC_ID_CAVS, AV_CODEC_ID_JPEG2000, AV_CODEC_ID_VMNC, AV_CODEC_ID_VP5, AV_CODEC_ID_VP6, AV_CODEC_ID_VP6F, AV_CODEC_ID_TARGA, AV_CODEC_ID_DSICINVIDEO, AV_CODEC_ID_TIERTEXSEQVIDEO, AV_CODEC_ID_TIFF, AV_CODEC_ID_GIF, AV_CODEC_ID_DXA, AV_CODEC_ID_DNXHD, AV_CODEC_ID_THP, AV_CODEC_ID_SGI, AV_CODEC_ID_C93, AV_CODEC_ID_BETHSOFTVID, AV_CODEC_ID_PTX, AV_CODEC_ID_TXD, AV_CODEC_ID_VP6A, AV_CODEC_ID_AMV, AV_CODEC_ID_VB, AV_CODEC_ID_PCX, AV_CODEC_ID_SUNRAST, AV_CODEC_ID_INDEO4, AV_CODEC_ID_INDEO5, AV_CODEC_ID_MIMIC, AV_CODEC_ID_RL2, AV_CODEC_ID_ESCAPE124, AV_CODEC_ID_DIRAC, AV_CODEC_ID_BFI, AV_CODEC_ID_CMV, AV_CODEC_ID_MOTIONPIXELS, AV_CODEC_ID_TGV, AV_CODEC_ID_TGQ, AV_CODEC_ID_TQI, AV_CODEC_ID_AURA, AV_CODEC_ID_AURA2, AV_CODEC_ID_V210X, AV_CODEC_ID_TMV, AV_CODEC_ID_V210, AV_CODEC_ID_DPX, AV_CODEC_ID_MAD, AV_CODEC_ID_FRWU, AV_CODEC_ID_FLASHSV2, AV_CODEC_ID_CDGRAPHICS, AV_CODEC_ID_R210, AV_CODEC_ID_ANM, AV_CODEC_ID_BINKVIDEO, AV_CODEC_ID_IFF_ILBM, AV_CODEC_ID_IFF_BYTERUN1, AV_CODEC_ID_KGV1, AV_CODEC_ID_YOP, AV_CODEC_ID_VP8, AV_CODEC_ID_PICTOR, AV_CODEC_ID_ANSI, AV_CODEC_ID_A64_MULTI, AV_CODEC_ID_A64_MULTI5, AV_CODEC_ID_R10K, AV_CODEC_ID_MXPEG, AV_CODEC_ID_LAGARITH, AV_CODEC_ID_PRORES, AV_CODEC_ID_JV, AV_CODEC_ID_DFA, AV_CODEC_ID_WMV3IMAGE, AV_CODEC_ID_VC1IMAGE, AV_CODEC_ID_UTVIDEO, AV_CODEC_ID_BMV_VIDEO, AV_CODEC_ID_VBLE, AV_CODEC_ID_DXTORY, AV_CODEC_ID_V410, AV_CODEC_ID_XWD, AV_CODEC_ID_CDXL, AV_CODEC_ID_XBM, AV_CODEC_ID_ZEROCODEC,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值