ffmpeg的decoder有哪些?

本文列举了FFmpeg支持的各种解码器,包括音频和视频解码器,如AAC、MP3、H.264等,并介绍了如何通过配置选项禁用不需要的解码器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这么多!

./configure --list-decoders 

可以在编译的时候,将用不到的解码器全部禁用掉。

./configure --disable-decoder=XXX

以下是解码器:

aac cook libopus
aac_latm cscd libschroedinger
aasc cyuv libspeex
ac3 dca libvpx_vp8
adpcm_4xm dfa libvpx_vp9
adpcm_adx dnxhd loco
adpcm_ct dpx mace3
adpcm_ea dsicinaudio mace6
adpcm_ea_maxis_xa dsicinvideo mdec
adpcm_ea_r1 dvbsub mimic
adpcm_ea_r2 dvdsub mjpeg
adpcm_ea_r3 dvvideo mjpegb
adpcm_ea_xas dxa mlp
adpcm_g722 dxtory mmvideo
adpcm_g726 eac3 motionpixels
adpcm_ima_amv eacmv mp1
adpcm_ima_apc eamad mp1float
adpcm_ima_dk3 eatgq mp2
adpcm_ima_dk4 eatgv mp2float
adpcm_ima_ea_eacs eatqi mp3
adpcm_ima_ea_sead eightbps mp3adu
adpcm_ima_iss eightsvx_exp mp3adufloat
adpcm_ima_qt eightsvx_fib mp3float
adpcm_ima_smjpeg escape124 mp3on4
adpcm_ima_wav ffv1 mp3on4float
adpcm_ima_ws ffvhuff mpc7
adpcm_ms flac mpc8
adpcm_sbpro_2 flashsv mpeg1_vdpau
adpcm_sbpro_3 flashsv2 mpeg1video
adpcm_sbpro_4 flic mpeg2video
adpcm_swf flv mpeg4
adpcm_thp fourxm mpeg4_vdpau
adpcm_xa fraps mpeg_vdpau
adpcm_yamaha frwu mpeg_xvmc
alac g723_1 msa1
als gif msmpeg4v1
amrnb gsm msmpeg4v2
amrwb gsm_ms msmpeg4v3
amv h261 msrle
anm h263 mss1
ansi h263i mss2
ape h264 msvideo1
ass h264_vdpau mszh
asv1 huffyuv mts2
asv2 iac mxpeg
atrac1 idcin nellymoser
atrac3 iff_byterun1 nuv
aura iff_ilbm pam
aura2 imc pbm
avs indeo2 pcm_alaw
bethsoftvid indeo3 pcm_bluray
bfi indeo4 pcm_dvd
bink indeo5 pcm_f32be
binkaudio_dct interplay_dpcm pcm_f32le
binkaudio_rdft interplay_video pcm_f64be
bmp jpegls pcm_f64le
bmv_audio jv pcm_lxf
bmv_video kgv1 pcm_mulaw
c93 kmvc pcm_s16be
cavs lagarith pcm_s16le
cdgraphics libgsm pcm_s16le_planar
cdxl libgsm_ms pcm_s24be
cinepak libilbc pcm_s24daud
cljr libopencore_amrnb pcm_s24le
cllc libopencore_amrwb pcm_s32be
comfortnoise libopenjpeg pcm_s32le
pcm_s8 s302m vc1_vdpau
pcm_s8_planar sgi vc1image
pcm_u16be shorten vcr1
pcm_u16le sipr vmdaudio
pcm_u24be smackaud vmdvideo
pcm_u24le smacker vmnc
pcm_u32be smc vorbis
pcm_u32le sol_dpcm vp3
pcm_u8 sp5x vp5
pcm_zork srt vp6
pcx sunrast vp6a
pgm svq1 vp6f
pgmyuv svq3 vp8
pgssub tak vqa
pictor targa wavpack
png theora wmalossless
ppm thp wmapro
prores tiertexseqvideo wmav1
ptx tiff wmav2
qcelp tmv wmavoice
qdm2 truehd wmv1
qdraw truemotion1 wmv2
qpeg truemotion2 wmv3
qtrle truespeech wmv3_vdpau
r10k tscc wmv3image
r210 tscc2 wnv1
ra_144 tta ws_snd1
ra_288 twinvq xan_dpcm
ralf txd xan_wc3
rawvideo ulti xan_wc4
rl2 utvideo xl
roq v210 xsub
roq_dpcm v210x xwd
rpza v410 yop
rv10 vb zerocodec
rv20 vble zlib
rv30 vc1 zmbv
rv40

FFmpeg.AutoGen 是基于FFmpeg的自动生成的C#绑定库,可以在C#项目中使用FFmpeg的功能。使用FFmpeg.AutoGen需要以下步骤: 1. 下载FFmpeg的静态库文件和头文件。可以从FFmpeg官网下载最新版的压缩包,解压后可以找到头文件和静态库文件。 2. 安装FFmpeg.AutoGen。可以通过NuGet包管理器来安装FFmpeg.AutoGen,也可以从GitHub上下载源码并编译生成DLL文件。 3. 使用FFmpeg.AutoGen。首先需要在代码中引入FFmpeg.AutoGen的命名空间,然后就可以直接使用FFmpeg的功能了。例如,可以使用av_register_all函数注册所有可用的AVCodec和AVFormat,使用avcodec_find_decoder函数查找指定的解码器等。 以下是一个使用FFmpeg.AutoGen的示例代码,可以打开视频文件,并将视频帧保存为位图文件: ```csharp using System.Drawing; using System.Drawing.Imaging; using FFmpeg.AutoGen; unsafe static void Main(string[] args) { const string filename = "test.mp4"; // 注册所有可用的AVCodec和AVFormat ffmpeg.av_register_all(); // 打开视频文件 AVFormatContext* formatContext = null; int ret = ffmpeg.avformat_open_input(&formatContext, filename, null, null); if (ret < 0) { // 打开失败,处理错误 } // 获取流信息 ret = ffmpeg.avformat_find_stream_info(formatContext, null); if (ret < 0) { // 获取失败,处理错误 } // 查找视频流 AVCodecContext* codecContext = null; int videoStreamIndex = -1; for (int i = 0; i < formatContext->nb_streams; i++) { AVStream* stream = formatContext->streams[i]; if (stream->codecpar->codec_type == AVMediaType.AVMEDIA_TYPE_VIDEO) { videoStreamIndex = i; codecContext = ffmpeg.avcodec_alloc_context3(null); if (codecContext == null) { // 分配失败,处理错误 } ret = ffmpeg.avcodec_parameters_to_context(codecContext, stream->codecpar); if (ret < 0) { // 转换失败,处理错误 } break; } } // 查找解码器 AVCodec* codec = ffmpeg.avcodec_find_decoder(codecContext->codec_id); if (codec == null) { // 查找失败,处理错误 } // 打开解码器 ret = ffmpeg.avcodec_open2(codecContext, codec, null); if (ret < 0) { // 打开失败,处理错误 } // 获取视频帧 AVPacket packet; ffmpeg.av_init_packet(&packet); AVFrame* frame = ffmpeg.av_frame_alloc(); while (ffmpeg.av_read_frame(formatContext, &packet) >= 0) { if (packet.stream_index == videoStreamIndex) { ret = ffmpeg.avcodec_send_packet(codecContext, &packet); if (ret < 0) { // 发送失败,处理错误 } while (ret >= 0) { ret = ffmpeg.avcodec_receive_frame(codecContext, frame); if (ret == ffmpeg.AVERROR(ffmpeg.EAGAIN) || ret == ffmpeg.AVERROR_EOF) { break; } else if (ret < 0) { // 接收失败,处理错误 } // 将视频帧保存为位图文件 Bitmap bitmap = new Bitmap(codecContext->width, codecContext->height, PixelFormat.Format24bppRgb); BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, bitmap.PixelFormat); byte* srcPtr = frame->data[0]; byte* destPtr = (byte*)bitmapData.Scan0.ToPointer(); for (int y = 0; y < codecContext->height; y++) { Buffer.MemoryCopy(srcPtr, destPtr, codecContext->width * 3, codecContext->width * 3); srcPtr += frame->linesize[0]; destPtr += bitmapData.Stride; } bitmap.UnlockBits(bitmapData); bitmap.Save($"frame{frame->display_picture_number:D3}.bmp", ImageFormat.Bmp); } } ffmpeg.av_packet_unref(&packet); } // 释放资源 ffmpeg.av_frame_free(&frame); ffmpeg.avcodec_close(codecContext); ffmpeg.avformat_close_input(&formatContext); } ``` 注意:以上代码仅供参考,实际使用时应该根据具体情况进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值