Velocidad de fotogramas de trabajo mínima para el códec H264

7

Al hacer un video a partir de archivos de imágenes individuales, mientras que cada archivo de imagen debe estar visible durante aproximadamente un segundo, tiene sentido codificar un video con una velocidad de cuadro extremadamente baja, como 1 cuadro por segundo. Para este tipo de aplicación, cada velocidad de cuadro mayor que esta sería un desperdicio de recursos.

Me pregunto si el códec H264 (o cualquier implementación específica, como x264) en sí tiene algún límite inferior para la velocidad de fotogramas por debajo del cual se trata de problemas técnicos o algún tipo de inestabilidades. En caso de que no haya problemas con la codificación, ¿podemos esperar que los reproductores de video manejen adecuadamente una velocidad de fotogramas tan inusual?

¡Gracias por compartir tu experiencia!

Jan-Philip Gehrcke
fuente

Respuestas:

2

Estoy con AJ A menos que conozca las características de cada jugador que pueda ver esto, no sería prudente confiar en una pequeña muestra de resultados de la prueba. El uso de una velocidad de cuadro estándar como 24 fps con un intervalo de fotogramas clave de 24 cuadros le dará esencialmente lo mismo sin comprometer la compatibilidad. Los cuadros intermedios serán mínimamente pequeños porque no habrá cambios detectables para codificar.

Jim Mack
fuente
1
sí, una trama idéntica a un bit solo toma alrededor de 15 bytes. Todos los macrobloques = omitir, y CABAC comprime el patrón de bits repetido para eso muy bien.
Peter Cordes
2
Sin embargo, solo me preocuparía por los reproductores de hardware que suponen que emitirán una señal de TV de 60 o 50Hz. A h.264 no le importa el tiempo, son solo cuadros, incluso en un video VFR. Las marcas de tiempo del marco son un problema de contenedor. Los formatos de contenedores son muy flexibles. Es fácilmente posible que se muestre un solo cuadro durante 1 minuto, luego 150 fps para varios cuadros, luego se muestra otro cuadro por un tiempo, o cualquier cosa que desee. Almacenar video VFR en mkv, mp4 y algunos otros contenedores modernos es un problema resuelto.
Peter Cordes
5

No estoy seguro de cómo se comportará a velocidades de cuadro muy bajas, pero vale la pena señalar que esto también limitaría sus opciones sobre cómo y cuándo podría cambiar los cuadros, ya que tendrían que seguir los ciclos del reloj. Lo que es más probable que funcione en este caso es un intervalo de fotogramas clave largo. La mayoría de los cuadros en una compresión como H.264 solo almacenan los cambios del cuadro anterior. En el caso de una imagen fija, las relaciones de compresión serán enormes porque se produce muy poco (no) cambio entre fotogramas. No estoy seguro de que realmente obtenga un ahorro suficiente al reducir la velocidad de cuadros para que valga la pena perder el control sobre cuándo puede hacer un cambio en el marco.

La mejor opción sería probarlo con sus medios y ver los resultados. La compresión depende mucho del contenido y la mejor calidad y compresión para un clip en particular dependerá mucho de la naturaleza de ese clip, por lo que la prueba sigue siendo la mejor manera de probarlo.

AJ Henderson
fuente
Hay una desventaja de compresión más allá de lo que dijo mi comentario anterior sobre otra respuesta: si hay mucha redundancia entre las diferentes imágenes (es decir, sigue siendo un video, no una presentación de diapositivas), el relleno con imágenes idénticas dificultará que el codificador encuentre y explotar eso. Dependiendo de la configuración de codificación, el codificador solo mantendrá cierto número de fotogramas antiguos como posibles referencias para nuevos fotogramas, y solo podrá buscar dentro de un GOP (por ejemplo, 250 fotogramas predeterminados para x264). Si todos esos candidatos son la misma imagen, eso no le da múltiples opciones para encontrar una mejor referencia para cada bloque ...
Peter Cordes
... por ejemplo, después de que un objeto en primer plano se mueva delante de algún detalle de fondo, el codificador puede guardar bits haciendo referencia a cómo se veía en un marco anterior antes de que se oscureciera. h.264 puede elegir marcos de referencia por bloque. Este es un efecto relativamente pequeño; buenos codificadores h.264 funcionan bien con solo 1 marco de referencia, pero aún así es algo dañino para la eficiencia de compresión
Peter Cordes
Claro, todavía necesita una configuración de codificación adecuada, pero puede aumentar el tamaño de su GOP en lugar de reducir su velocidad de fotogramas si las cosas son tan estáticas. Si no lo son, comenzar a reducir la velocidad de fotogramas no es una buena opción. Me pregunto si ha habido algún trabajo en un formato GOP variable.
AJ Henderson
Creo que las imágenes repetidas seguirán reduciendo la posibilidad de opciones útiles de Pirámide B y múltiples marcos de referencia P. Pero supongo que un codificador puede mantener un marco P antiguo desde cualquier lugar dentro del GOP, por lo que perder en los marcos B de referencia es probablemente todo en teoría, pero es un IDK en la práctica.
Peter Cordes
1
Los buenos codificadores MPEG-2 pueden tomar decisiones de fotogramas clave basados ​​en cortes de escena, y decisiones de fotogramas P vs B basadas en contenido. : El mpeg2videocodificador de P ffmpeg enumera una -sc_thresholdopción y una -b_strategyopción para controlar la estrategia de selección I / P / B. Pero de todos modos, h.265 es ordenado, con bloques DCT de hasta 32x32 y unidades de predicción muy grandes de 64x64 que pueden dividirse en bloques más pequeños si es necesario. sonnati.wordpress.com/2014/06/20/h265-part-i-technical-overview . vs. h.264 macrobloques 16x16 con solo bloques DCT 4x4 u 8x8 (solo perfil alto). También forum.doom9.org/showthread.php?t=167081
Peter Cordes
2

He jugado a convertir un montón de fotos fijas en una presentación de diapositivas h.264, principalmente para comparar la eficiencia de compresión de JPG frente a h.264. Tengo algunas respuestas útiles acerca de las implicaciones técnicas de este desde x264 desarrolladores en doom9. por ejemplo, forzar a x264 a no usar cuadros B para esto, porque las imágenes no muy relacionadas necesitarán muchos macrobloques I, y codificarlos en cuadros B es más costoso.

El comportamiento del reproductor de software con video de baja fps no era ideal, en el pasado. Creo que un jugador mayor solo verificó la entrada del teclado cuando mostraba un cuadro. Así que hubo un retraso entre la entrada del usuario y la respuesta del jugador. mplayer2 y mpv no tienen este problema. Además, los jugadores que solo pueden buscar fotogramas clave buscarán en bloques realmente grandes (¡2 minutos más o menos!) Si no reducen el intervalo de fotogramas clave. x264 no insertará IDR (límites GOP) en todo el lugar si las imágenes están algo relacionadas entre sí.

Uso x264 -tune stillimage. Se manivelas de las optimizaciones psy , debido a la estabilidad temporal no es un problema para este caso de uso. Resultados de búsqueda adicionales: de google .

Estoy de acuerdo con otras sugerencias para tener algunos fotogramas duplicados, para aumentar el FPS hasta al menos 5 o algo así, en caso de malos jugadores. Sin embargo, los teléfonos inteligentes / tabletas no deberían tener problemas para reproducir video FPS variable, ya que generalmente graban de esa manera cuando los niveles de luz caen. Dado que los videos de FPS variable de los teléfonos ya están disponibles, se debe esperar el soporte del reproductor de hardware para ellos. No esperaría problemas, pero tampoco me sorprendería si hubiera al menos algunos reproductores de hardware antiguos que no lo manejen bien.

Un marco de todos los macrobloques "omitidos" solo toma alrededor de 20bytes a 1080p, IIRC. Sin embargo, una razón por la que no me gustan los cuadros duplicados es que interfiere con un solo paso para recorrer las imágenes manualmente.


Sin embargo, hay una desventaja de compresión para duplicar cuadros : si hay mucha redundancia entre las diferentes imágenes (es decir, sigue siendo un video, no una presentación de diapositivas), el relleno con imágenes idénticas dificultará que el codificador encuentre y explote eso.

Dependiendo de la configuración de codificación, el codificador solo mantendrá cierto número de fotogramas antiguos como posibles referencias para nuevos fotogramas, y solo podrá buscar dentro de un GOP (por ejemplo, 250 fotogramas predeterminados para x264). Si todos esos candidatos son la misma imagen, eso no le da múltiples opciones para encontrar una mejor referencia para cada bloque.

Por ejemplo, después de que un objeto en primer plano se mueva delante de algún detalle de fondo, el codificador puede guardar bits haciendo referencia a cómo se veía en un marco anterior antes de que se oscureciera. h.264 puede elegir marcos de referencia por bloque. Este es un efecto relativamente pequeño; Los buenos codificadores h.264 funcionan bien con solo 1 fotograma de referencia, pero todavía es algo dañino para la eficiencia de compresión y una pérdida de energía / duración de la batería / tiempo de CPU en el lado de la descompresión para copiar la memoria alrededor de la decodificación y la visualización de fotogramas adicionales.


La recuperación de VFR después de un NLE obliga a todos sus clips a una velocidad de fotogramas alta:

FFmpeg tiene un mpdecimatefiltro que elimina cuadros similares. Puede establecer límites sobre la cantidad de cuadros en una fila que puede soltar. Con un estrecho umbral de similitud, debe hacer que solo elimine duplicados reales.

por ejemplo, ffmpeg -i input.mp4 -vf mpdecimate=max=9:hi=400 -c:a copy -c:v libx264 -preset veryslow -tune film output_vfr.mkvcae hasta 9 cuadros seguidos, y solo si el bloque más diferente era diferente en "400", y (por defecto): no más del 33% de los bloques eran diferentes en unidades "320". IIRC, es básicamente un SAD 8x8 en componentes de píxeles.

(Sin .mp4embargo, FFmpeg está predeterminado en CFR para las salidas, así que úselo -vsync 2para .mp4salida de velocidad de cuadro variable . Creo que es seguro: problemas con la velocidad de cuadro en la conversión de video usando ffmpeg con libx264 )

Peter Cordes
fuente
1

La mayoría de los NLE le permitirán importar una imagen fija en la forma en que desea que aparezca en la línea de tiempo, suponiendo que haya configurado las propiedades del proyecto a una velocidad de cuadro estándar, como 30 fps o 24 fps, etc.

En Vegas Pro puedo configurar el tiempo en que debe aparecer una imagen fija en la línea de tiempo, desde una fracción de segundo hasta varios segundos. Si configuro esto en 1 segundo, cuando arrastre y suelte una imagen fija en la línea de tiempo, Vegas generará suficientes cuadros para satisfacer mi solicitud. Usualmente edito con videos de 30 fps, y cuando agrego una imagen fija, estoy mezclando una línea de tiempo con un video de 30 fps que ya está allí (AVCHD 1080p).

Para darle una respuesta específica, necesitaría saber qué NLE está utilizando.

filzilla
fuente
Solo aplico un software de codificación sin formato como ffmpego avconv, por lo que no es necesario hablar de ningún NLE. Creo que la pregunta se responde más o menos con "Siga una velocidad de fotogramas estándar que todos los jugadores puedan manejar adecuadamente. No hay un verdadero" desperdicio de recursos ", porque el esquema de codificación es lo suficientemente bueno como para manejar eficientemente imágenes fijas".
Jan-Philip Gehrcke