stackoverflow上有几个类似的问题,但我还没能弄清楚这个确切的问题。
我想得到一个列表的fourcc
的avi编解码器,FFMpeg可以解码。
我知道如何获得所有格式ffmpeg -formats
和编解码器ffmpeg -codecs
,但这两个列表都没有给我一个可访问的fourccs
列表。我能找到的文件也没有。
我需要这个列表,这样我的应用程序就可以访问avi
文件的fourcc
,并确定是使用ffmpeg
还是VfW
(或DirectX
)来尝试解码该文件。
有什么ffmpeg
命令可以给我这个列表吗?
为了扩展Darren上面给出的答案(因为注释功能不允许这么多文本),以下是从ffmpeg.org上的isom_8c-源文件解析的编解码器的完整列表:
raw yuv2 2vuy yuvs L555 L565 B565 24BG
BGRA RGBA ABGR b16g b48r bxbg bxrg bxyv
NO16 DVOO R420 R411 R10k R10g r210 AVUI
AVrp SUDS v210 bxy2 v308 v408 v410 Y41P
yuv4 jpeg mjpa AVDJ AVRn dmb1 mjpb SVQ1
svq1 svqi SVQ3 mp4v DIVX XVID 3IV2 h263
s263 dvcp dvc dvpp dv5p dv5n AVdv AVd1
dvhq dvhp dvh1 dvh2 dvh4 dvh5 dvh6 dvh3
VP31 rpza cvid 8BPS smc rle WRLE qdrw
WRAW avc1 ai5p ai5q ai52 ai53 ai55 ai56
ai1p ai1q ai12 ai13 ai15 ai16 m1v1 mpeg
m1v m2v1 hdv1 hdv2 hdv3 hdv4 hdv5 hdv6
hdv7 hdv8 hdv9 hdva mx5n mx5p mx4n mx4p
mx3n mx3p xd54 xd55 xd59 xd5a xd5b xd5c
xd5d xd5e xd5f xdv1 xdv2 xdv3 xdv4 xdv5
xdv6 xdv7 xdv8 xdv9 xdva xdvb xdvc xdvd
xdve xdvf xdhd xdh2 AVmp mjp2 tga tiff
gif png MNG vc-1 avs2 drac AVdn H263
3IVD AV1x AVup sgi dpx exr apch apcn
我不知道它是否全面,但源代码似乎包含一个FourCC列表。
看看http://ffmpeg.org/doxygen/trunk/isom_8c-source.html
有很多像这样的线路
{ CODEC_ID_AAC, MKTAG('m', 'p', '4', 'a') }
您应该能够下载最新的源代码并编写一个脚本来挑选它们。
可以通过avformat api进行映射,而无需挖掘源代码。
uint32_t tag = MKTAG('H', '2', '6', '4');
const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 };
enum AVCodecID vcodec = av_codec_get_id(table, tag );
函数avformat_get_riff_video_tags
、avformat_get_riff_audio_tags
和av_codec_get_id
都在"libavformat/avformat.h"中定义
您还可以使用表AVOutputFormat.codec_tag
或AVInputFormat.codec_tag