He estado tratando de entender cómo funciona la codificación de video para codificadores modernos, en particular H264. Se menciona muy a menudo en la documentación que los marcos residuales se crean a partir de las diferencias entre el actual p-frame y el último i-frame (suponiendo que los siguientes cuadros no se usan en la predicción). Entiendo que se usa un espacio de color YUV (tal vez YV12), y que una imagen se "resta" de la otra y luego se forma el residuo. Lo que no entiendo es cómo funciona exactamente esta substracción. No creo que sea un valor absoluto de la diferencia porque sería ambiguo. ¿Cuál es la fórmula por píxel para obtener esta diferencia?¿Cómo calcula H.264 o los codificadores de video en general la imagen residual de dos cuadros?
Respuesta
Resta es solo un pequeño paso en la codificación de video; el principio central detrás de la codificación de video más moderna es motion estimation, seguido de motion compensation. Básicamente, el proceso de estimación de movimiento genera vectores que muestran desplazamientos entre macrobloques en cuadros sucesivos. Sin embargo, siempre hay un poco de error en estos vectores.
Entonces, lo que sucede es que el codificador generará las dos compensaciones vectoriales, y lo "restante" es lo que queda. El residual no es simplemente la diferencia entre dos cuadros; es la diferencia entre los dos cuadros después de se tiene en cuenta la estimación del movimiento. Vea la imagen "Diferencia compensada por movimiento" en el artículo de la wikipedia sobre la compensación para obtener una ilustración clara de esto: tenga en cuenta que la diferencia compensada por el movimiento es drásticamente más pequeña que el residuo "tonto".
Here's a decent PDF that goes over some of the basics.
A otras pocas notas:
- Sí, YUV se utiliza siempre, y por lo general la mayoría de los codificadores funcionan en YV12 o algún otro croma subsampled formato
- Resta tendrá que pasar en la Y, U y V fotogramas por separado (piense en ellos como tres canales separados, todos los cuales necesitan ser codificados, entonces queda bastante claro cómo tiene que suceder la resta). La estimación del movimiento puede ocurrir o no en los planos Y, U y V; a veces los codificadores solo lo hacen en los valores Y (la luminancia) para ahorrar un poco de CPU a expensas de la calidad.
- 1. MPEG-ES H.264 Video de RTP a MPEG-TS
- 2. H.264 Streaming Requirements
- 3. Streaming H.264 en tiempo real
- 4. Cómo codificar h.264 con libavcodec/x264?
- 5. Códec H.264 explicado
- 6. iPad no procesa video H.264 con HTML5
- 7. H.264 Filtra la pérdida de memoria con algunos decodificadores
- 8. ¿Cuál es la diferencia entre el video H.264 y el video MPEG-4?
- 9. H.264 sobre RTP/RTSP (iPhone)
- 10. Mejores prácticas H.264/FLV para HTML
- 11. H.264 RTSP absoluto TIMESTAMP
- 12. Libre/Abrir bibliotecas de decodificación de video h.264? (Sin GPL)
- 13. conversión H.264 con FFmpeg (de un flujo RTP)
- 14. Codificación de videos H.264 CBR con FFmpeg
- 15. Cómo decodificar el video frame H.264 en el entorno Java
- 16. H.264 sobre RTP - Identificar tramas SPS y PPS
- 17. Tamaño de archivo H.264 por 1 hora de video HD
- 18. h 264 Codificación/decodificación de hardware para IOS (IPhone/Ipad)?
- 19. Modificación de vectores de movimiento en ffmpeg decodificador H.264
- 20. H.264 AVC compatible con teléfonos Android?
- 21. Transmitiendo un video codificado con h.264 a través de UDP
- 22. ¿Cómo puedo realizar la codificación H.264 acelerada por hardware y la decodificación para la transmisión?
- 23. ¿Tiene GDI + codificadores de imagen estándar CLSID?
- 24. iPhone "no se puede reproducir" .mp4 archivo de video H.264
- 25. encapsulando velocidades H.264 de velocidad de cuadro variable en la corriente de transporte MPEG2
- 26. transmitiendo H.264 a través de RTP con libavformat
- 27. iOS extrayendo cuadros de video como imágenes
- 28. iOS obtener velocidad de cuadros de video
- 29. Transmisión en vivo de h.264 usando HTML5 en Internet Explorer 9
- 30. ¿Cómo se comparan dos DOM o DOM en general?
Sí, sé que ocurre la compensación de movimiento, lo que no sabía era cómo el marco de compensación de movimiento se restaba del i-frame. Si entendí correctamente, significa que se hace de la siguiente manera: Yresidual = Yi - Yi-1, Cbresidual = Cbi - Cbi-1, Crresidual = Cri - Cri-1. ¿Está bien? – cloudraven
Falta el PDF 404. –
Nuevo enlace para el PDF: [Enlace PDF] (http://classes.engr.oregonstate.edu/eecs/spring2013/ece477/slides/4.Video_Compression.pdf) –