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.
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
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
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