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?
+1. De plus, je pense que l'option '-vbsf h264_mp4toannexb' peut être nécessaire pour extraire le flux de l'annexe B. – misha
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. –
Commencez par la source ffmpeg. Tout est là pour que vous puissiez voir. – misha