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?
+1. Además, creo que la opción '-vbsf h264_mp4toannexb' puede ser necesaria para extraer el flujo del anexo B real. – misha
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. –
Comience con la fuente ffmpeg. Todo está ahí para que lo veas. – misha