Objectif
J'écris une petite application preuve de concept pour prendre des données d'image brutes j'acquiers d'un numérique caméra (une série d'images RGB24), et les combiner ensemble dans un fichier vidéo simple, sans audio.FFMPEG - Impossible de créer une vidéo de la série d'images au format de pixel RGB24
travail So Far
Le code d'initialisation est la suivante:
AVCodec* pCodec = NULL;
AVCodecContext* pCodecContext = NULL;
AVFrame* pFrame = NULL;
/* Register all available codecs. */
avcodec_register_all();
/* Determine if desired video encoder is installed. */
pCodec = avcodec_find_encoder(CODEC_ID_MJPEG);
if (!pCodec) {
printf("Codec not installed!\n");
}
pCodecContext = avcodec_alloc_context3(pCodec);
pFrame = avcodec_alloc_frame();
Très coupé et sec. Cependant, lorsque je tente d'enregistrer le codec, il échoue avec mon message d'erreur personnalisé, et un est tombé dans un joli format codé couleur directement à partir des bibliothèques de FFMPEG:
[mjpeg @ 0x650d00] Specified pixel format rgb24 is invalid or not supported
Codec not available.
Je peux confirmer que ce format de pixel est valide assez facilement:
Pixel formats:
I.... = Supported Input format for conversion
.O... = Supported Output format for conversion
..H.. = Hardware accelerated format
...P. = Paletted format
....B = Bitstream format
2>&1 ffmpeg -pix_fmts | grep -i -e rgb24 -e flags
FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL
IO... rgb24 3 24
Je peux également confirmer que le codec vidéo que j'essaie d'utiliser est valide pour l'encodage.
Codecs:
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...I.. = Intra frame-only codec
....L. = Lossy compression
.....S = Lossless compression
2>&1 ffmpeg -codecs | grep -i mjpeg
DEVIL. mjpeg Motion JPEG
Question
Pourquoi ce format de pixel non pris en charge? Cela semble très commun lorsque vous travaillez avec d'autres utilitaires tels que MATLAB, OpenCV, FreeImage, etc. Existe-t-il un ensemble d'options ou de fonctions dans FFMPEG/AVcodec pouvant résoudre ce problème? Je souhaite éviter d'avoir à convertir manuellement mon image en un espace de couleur différent si possible, donc je ne brûle pas les cycles CPU en convertissant d'abord l'image RGB24 en un nouveau format, THEN en encodant une image vidéo avec il.
Merci.
Il semble que j'ai mal compris les "formats pris en charge" à partir de la ligne de commande. Je vais reconvertir (avec une étape supplémentaire) en un format supporté. Merci! – DevNull