2015-03-11 4 views
1

J'utilise LibAV pour multiplexer l'audio et la vidéo en temps réel. Pour cette question, je fais référence au fichier output.c provenant d'exemples LibAV. Si j'écris 250 images à 25 ips en utilisant AV_CODEC_ID_MPEG4 alors le fichier vidéo de sortie aura exactement 10 secondes. Mais si j'utilise AV_CODEC_ID_H264 pour 250 images à 25 fps alors le fichier vidéo de sortie sera environ 8,86 secondes environ.Erreur d'encodage H264 en utilisant LibAV

J'ai un code qui utilise PortAudio et LibAV pour le multiplexage en temps réel. Actuellement j'utilise MPEG-4 mais la qualité de la vidéo est inférieure à H264. Si c'est possible je préfère utiliser H264.

Ma question est: Comment puis-je forcer H264 à enregistrer 10 secondes de vidéo pour 250 images à 25 ips?

Merci.

Répondre

0

Pour le codage au lieu du multiplexage, il est préférable de regarder par exemple avcodec.c et de manière spécifique à this part où les trames retardées sont renvoyées par le codeur. Cette partie est absente dans l'exemple output.c.

+0

L'avcodec.c calcule le délai après l'écriture de certaines images. Mon code écrit des images en temps réel, le nombre d'images et la durée de la vidéo n'est pas prédéfini. – zindarod

+0

Non. Il ne s'agit pas de calculer le délai, mais de vider ces trames retardées en envoyant des trames NULL à coder pendant que vous en recevez encore des sorties. Si vous ne le faites pas lorsque les images réelles se terminent (peu importe le temps réel ou non), vous pouvez perdre environ 40 images. D'un autre côté, vous pouvez configurer libx264 pour utiliser le réglage de zerolatency qui supprimera toute cette mise en mémoire tampon au détriment de la qualité/compression. – nobody555

+0

Alors, quand les images cessent de venir de la caméra, alors j'exécute une boucle pour donner des images NULL à l'encodeur? Je suis désolé de ne pas avoir saisi le vrai concept derrière le processus d'encodage de LibAV. – zindarod