2011-08-25 3 views
7

ok, c'est le cas, je veux réellement analyser les cadres d'un fichier mov. obtenir les cadres encodés h264. et j'ai réussi à le faire en utilisant ffmpeg mais quand j'essaie de faire un film à nouveau en utilisant ffmpeg -i test* test.mov je reçois test00: Invalid data found when processing input donc il y a quelque chose de pas correct avec la structure des cadres. si je comprends bien un cadre doit avoir l'aspect suivant:convertir le fichier .mov en fichier .h264

00 00 00 01 XX données -------------

où XX est dire que ce soit un I, P- ou B-trame. ou plus précisément type(XX) = 0x0F && XX indique si c'est I (type (XX) = 5?), P (type (XX) = 7?) ou B (type (XX) = 8?) cadre. Je ne suis pas sûr de ces chiffres, je l'ai cherché mais je n'ai pas trouvé de bonnes sources. c'est donc la question numéro un, quel devrait être le numéro NALU pour les différentes images?

de toute façon, quand je l'utilise av_read_frame sur le fichier mov, je reçois cadre qui ressemble à ceci:

4B = taille, 1B = XX et ensuite les données. (Au moins ce que je pense que je reçois)

les fichiers où je stocke les images sont toujours taille longtemps quand je les regarde dans un hexeditor (sinon, ainsi bien sûr). et XX est toujours 65 (c'est-à-dire type (XX) = 5) dans le premier et ensuite 61 (c'est-à-dire type (XX) = 1) pour un couple d'images et revient à 65 pour une image et ainsi de suite.

Je suppose que ce sont des cadres comme: I alors, mon hypothèse sur les numéros de type pour les différents types de trame sont fausses, ce qui est très probable. (Toute suggestion sur la lecture à ce sujet? Sauf l'ISO/CEI 14496-10, je ne comprends pas vraiment).

J'ai essayé de supprimer la taille et d'ajouter 00 00 00 01 avant l'octet XX et les données mais sans succès. des conseils sur la façon dont je pourrais modifier les cadres pour être des cadres codés H264 valides?

Répondre

5

D'abord, je dois recommander un bel outil pour la compréhension des flux H264: http://sourceforge.net/projects/h264bitstream/

Non, pour répondre à votre question, oui, les cadres commencent généralement avec 65 et 61. Les unités NAL spéciales qui commencent généralement avec 67 et 68 sont, respectivement, SPS (jeu de paramètres de séquence) et PPS (jeu de paramètres d'image).

Je suggère également que vous essayez d'utiliser ffmpeg -i input.mov -vcodec copy output.h264 pour obtenir correctement le flux de l'Annexe B (avec 00 00 00 01) en un seul fichier.

Je ne pouvais pas comprendre exactement ce que vous essayez d'obtenir en extrayant des images de mov et en les mettant à nouveau dans test.mov.

+1

+1. De plus, je pense que l'option '-vbsf h264_mp4toannexb' peut être nécessaire pour extraire le flux de l'annexe B. – misha

+1

merci pour la réponse Alex et @misha. Je suis au courant de cette solution mais la chose est que je ne peux pas le faire dans l'instant puisque je fais l'extraction réelle des cadres sur iphone, j'ai besoin d'un moyen de faire exactement cela dans le code. des suggestions par où commencer? La raison de faire ceci est parce que j'ai besoin de diffuser des trames h264 via un serveur Web à un cadre externe pour la manipulation ultérieure de la trame. –

+0

Commencez par la source ffmpeg. Tout est là pour que vous puissiez voir. – misha

Questions connexes