2011-08-25 14 views
7

bien, este es el caso, en realidad quiero analizar los fotogramas de un archivo mov. obtener los marcos codificados h264. y lo he logrado usando ffmpeg, pero cuando trato de hacer una película nuevamente usando ffmpeg -i test* test.mov obtengo test00: Invalid data found when processing input, por lo que hay algo incorrecto en la estructura de los marcos. Como lo entiendo un marco debería tener el siguiente aspecto:convirtiendo el archivo .mov al archivo .h264

00 00 00 01 XX datos -------------

donde XX es decir si se trata de un I-, P- o B-frame. o más específicamente type(XX) = 0x0F && XX dice si es I (tipo (XX) = 5?), P (tipo (XX) = 7?) o B (tipo (XX) = 8?) marco. No estoy seguro acerca de este número, lo he estado buscando pero no encontré buenas fuentes. así que esa es la pregunta número uno, ¿qué número debería ser el NALU para los diferentes cuadros?

todos modos, cuando se utiliza av_read_frame en el archivo de los movimientos, consigo marco que se parece a esto:

4B = tamaño, 1B = XX y luego de datos. (al menos esto es lo que creo que tengo)

los archivos donde guardo los marcos son siempre tamaño de largo cuando los miro en un editor hexadecimal (por lo demás también, por supuesto). y XX siempre es 65 (es decir, tipo (XX) = 5) en el primero y luego 61 (es decir, tipo (XX) = 1) para un par de fotogramas y luego de vuelta a 65 para un fotograma y así sucesivamente.

Supongo que estos son marcos como: I P P P P P P P P P P P P P P P P P P P .... Sin embargo, mi hipótesis sobre los números de tipo para los diferentes tipos de cuadros es falsa, lo cual es muy probable. (cualquier sugerencia sobre la lectura sobre esto? excepto el ISO/IEC 14496-10, realmente no lo entiendo).

He intentado eliminar el tamaño y anexar 00 00 00 01 antes del byte XX y los datos pero sin éxito. ¿Algún consejo sobre cómo podría modificar los marcos para que sean marcos codificados con H264?

Respuesta

5

En primer lugar, tengo que recomendar una buena herramienta para la comprensión de los flujos H264: http://sourceforge.net/projects/h264bitstream/

No, para responder a su pregunta específica, sí, los marcos por lo general comienzan con 65 y 61. Las unidades NAL especiales que normalmente se inician con 67 y 68 son, respectivamente, SPS (conjunto de parámetros de secuencia) y PPS (conjunto de parámetros de imagen).

También sugiero que intente utilizar ffmpeg -i input.mov -vcodec copy output.h264 para obtener la secuencia del anexo B (con 00 00 00 01) correctamente como un único archivo.

No pude entender exactamente lo que está tratando de lograr extrayendo fotogramas de mov y poniéndolos nuevamente en test.mov.

+1

+1. Además, creo que la opción '-vbsf h264_mp4toannexb' puede ser necesaria para extraer el flujo del anexo B real. – misha

+1

gracias por la respuesta Alex y @misha. Soy consciente de esta solución, pero el problema es que no puedo hacerlo en el momento oportuno, ya que estoy haciendo la extracción real de marcos en el iPhone, necesito una forma de hacer exactamente esto en el código. alguna sugerencia por dónde empezar? la razón para hacer esto es porque necesito transmitir tramas h264 a través de un servidor web a un marco externo para un manejo posterior del marco. –

+0

Comience con la fuente ffmpeg. Todo está ahí para que lo veas. – misha

Cuestiones relacionadas