Bonjour,
Je cherche à récupérer la liste des formats (containers) vidéos en lecture de FFMPEG (FFMPEG 0.9.1) pour les proposer dans la liste des filtres d'une boîte de dialogue lors de l'ouverture de médias. Je ne veux que la liste des containers qui supportent la vidéo (et donc par le format mp3 par exemple).
pour connaître les formats vidéos en écriture (encoding) de FFMPEG, j'utilise AVOutputFormat::video_codec.
Mais pour récupérer uniquement les formats vidéos en lecture (decoding) par FFMPEG, je ne trouve pas de solution avec la structure AVInputFormat. J'ai essayé comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for(AVOutputFormat * avOutputFormat = av_oformat_next(NULL); avOutputFormat != NULL; avOutputFormat = av_oformat_next(avOutputFormat)) { if(avOutputFormat->video_codec == CODEC_ID_NONE) { continue; } .... }
Mais ça ne fonctionne pas bien d'autant plus que j'utilise avcodec_find_decoder_by_name avec un nom de format. Par exemple, les formats suivants ne sont pas retenus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 for(AVInputFormat * avInputFormat = av_iformat_next(NULL); avInputFormat != NULL; avInputFormat = av_iformat_next(avInputFormat)) { for(unsigned int index = 0; avInputFormat->codec_tag[index] != NULL; ++index) { AVCodec * codec = avcodec_find_decoder(avInputFormat->codec_tag[index]->id); if(codec == NULL) { codec = avcodec_find_decoder_by_name(avInputFormat->name); if((codec == NULL) || (codec->type != AVMEDIA_TYPE_VIDEO)) { continue; } } else if(codec->type != AVMEDIA_TYPE_VIDEO)) { continue; } } ... }
- le format ASF car codec_tag est NULL et avcodec_find_decoder_by_name retourne NULL (ce qui est normal puisque ASF n'est pas un codec)
- le format AVI pour les mêmes raisons
- le format DVVidéo pour les mêmes raisons
- le format Matroska pareil
- etc
Du coup, j'ai essayé de voir l'aide de ffmpeg.exe (--help) pour voir si je pouvais pomper des trucs dans le source. Mais pour la commande
on a seulement l'information encoding / decoding mais pas d'information sur le support vidéo ou audio du container. Donc je me demande si c'est possible. Si ça ne l'est pas c'est quand même curieux !
Code : Sélectionner tout - Visualiser dans une fenêtre à part ffmpeg -formats
Quand on exécute la commande
on a cette information audio / video mais je n'arrive pas à relier les deux. C'est à dire récupérer uniquement les formats qui supportent des codecs vidéos seulement (pour éventuelle solution alternative).
Code : Sélectionner tout - Visualiser dans une fenêtre à part ffmpeg -codecs
Est-ce que quelqu'un s'est déjà confronté à ce problème ? Et comment le résoudre ?
Merci
Flo.
Partager