En lugar de proporcionar una velocidad de cuadro fija a FFMPEG / libx264 (-r / -framerate), me gustaría especificar una velocidad de cuadro variable con un valor MÁXIMO, y permitir que libx264 reduzca la velocidad de cuadro como mejor le parezca. La idea aquí es obtener una compresión adicional cuando hay algo como un fotograma extendido (que sucede MUCHO en mis videos fuente).
Me doy cuenta de que un cuadro MPEG predictivo o bidireccional se comprimirá muy bien, pero también es posible que la velocidad de fotogramas de origen sea menor a la que pretendo transcodificar (¡posiblemente resultando en un flujo MÁS GRANDE!).
video
ffmpeg
compression
framerate
Mark Gerolimatos
fuente
fuente
Respuestas:
Frustrado porque tampoco había encontrado una respuesta, al menos iba a responder las preguntas de otras personas sobre cómo habilitar la salida VFR (no V B R) de FFMPEG.
La respuesta a eso es la
-vsync
opción con un nombre extraño . Puede configurarlo con algunas opciones diferentes, pero la que desea es '2' ovfr
. Desde la página del manual:Sin embargo, no tengo suficiente reputación como para publicar un comentario para responder a esa 'subpregunta' que todo el mundo parece estar teniendo. Pero tenía algunas ideas sobre las que sinceramente no era muy optimista ... Pero la primera que probé realmente funcionó . Entonces.
¡Simplemente necesita combinar la
-vsync 2
opción con la-r $maxfps
opción, por supuesto, donde la reemplace$maxfps
con la velocidad de fotogramas máxima que desea! ¡Y funciona! ¡No duplica fotogramas de un archivo fuente, pero dejará caer fotogramas que harán que el archivo supere la velocidad de fotogramas máxima!Por defecto, parece que
-r $maxfps
por sí solo hace que duplique / suelte fotogramas para lograr una velocidad de fotogramas constante, y-vsync 2
por sí mismo hace que tire de los fotogramas directamente sin afectar realmente los valores de PTS.No era optimista sobre esto porque ya sabía que eso lo
-r $maxfps
coloca a una velocidad de fotogramas constante. Sinceramente, esperaba un error o que simplemente obedeciera lo que ocurriera primero o último o lo que sea. El hecho de que hace exactamente lo que quería me satisface bastante con los desarrolladores de FFMPEG.Espero que esto te ayude a ti oa alguien más más adelante si ya no necesitas saber esto.
fuente
-copyts
puede ser útil tambiénEn mi opinión, esto puede ser posiblemente de una manera relativamente torpe, pero no es deseable por algunas razones complejas y contrarias a la intuición.
Aunque una transmisión x264 tiene una o más velocidades de fotogramas, la velocidad de fotogramas es más un problema de nivel de contenedor que un códec.
En una codificación VFR passthrough, habrá esencialmente un archivo de texto que detalla cuál es la velocidad de cuadros sobre qué cuadros / tiempos, y al codificar una fuente, una función como tcfile-in o tcfile-out pasa las marcas de tiempo a la codificación , para mapear las ubicaciones de tarifas y mantener el video subjetivamente consistente desde la fuente.
La idea de baja velocidad de fotogramas es lógica, pero no funciona por varias razones. Aunque x264 es compatible con VFR con algunas capacidades, no creo que haya una función de análisis que varíe la velocidad de fotogramas con respecto al movimiento para reducir el tamaño del archivo (de una manera análoga a los muchos controles de velocidad de bits).
La fuente también es un problema: las fuentes VFR conservarán por defecto su variabilidad de trama, pero aparentemente codificar un archivo CFR a una tasa de bits variable (una buena idea a veces, especialmente cuando se necesita telecine) simplemente producirá el mismo CFR.
Esto significa que probablemente tendría que volver a escribir la tasa de bits a mano (es decir, marcas de tiempo de escenas lentas mezcladas en el archivo), o recurrir a un algoritmo de decimación de cuadros como dup, dedup y exactDedup para avisynth . Si su video tiene un movimiento extremadamente bajo, algunos cuadros (¿incluso la mitad?) Se eliminarán. El problema es que estos algoritmos no son avanzados y no toman buenas decisiones con imágenes de la "vida real" en cuanto a qué contribuirá a la mejor codificación.
Además, la eliminación de cuadros que contienen elementos como los cuadros I y B reduce la cantidad de detalles disponibles con el tiempo, lo que hace que el movimiento se vea "escalonado" y puede interferir con los otros parámetros básicos de video y causar artefactos como el alias.
Y debido a la forma en que funcionan los cuantificadores, x264 en realidad disminuirá la tasa de bits de manera desproporcionada en estas escenas de movimiento bajo. A menos que tenga una presentación de diapositivas de imágenes idénticas, habrá movimiento (aunque solo sea grano y otros artefactos) y habrá una pérdida de calidad que no se vería sin cambios drásticos en la tasa de bits.
Y, por último, la razón por la que no hay muchas opciones para hacer lo que desea es que x264 es realmente bueno en la gestión de la tasa de bits simplemente usando la compresión temporal (grabación de cambios en fotogramas parciales). Ir a 1/2 framerate no reducirá el tamaño del archivo a la mitad; El 10% es probablemente una ganancia realista para esperar de movimiento bajo o animación.
En resumen, dejar caer la tasa de bits de sus escenas estáticas hará muy poco para el tamaño de su archivo, pero agregará una gran cantidad de problemas de calidad y sincronización, sin mencionar la incompatibilidad con el software de edición de video.
Si desea probar un decimador, puede limitar la velocidad máxima de fotogramas nuevos utilizando las opciones de niveles , cada una de las cuales tiene una resolución y velocidad de fotogramas máximas. Desafortunadamente, es probable que tenga que trabajar a resoluciones muy bajas para obtener el tipo de velocidad de fotogramas que desea, utilizando perfiles. Vuelve a editar las velocidades a mano, ya sea completamente o para corregir las velocidades de fotogramas que crees que son demasiado altas. De cualquier manera, será necesario hacer malabarismos para mantener el sonido sincronizado con las nuevas velocidades de cuadros si se realizan modificaciones después del proceso de codificación cuando se conserva el archivo tc.
La conclusión es que pasar tiempo optimizando las muchas configuraciones de velocidad de bits producirá mucho más en cuanto a la gestión del tamaño de archivo y mejorará la calidad de su video, en lugar de causar complicaciones con poca ganancia. Preservar el FPS original es probablemente la mejor idea a menos que esté buscando estándares de transmisión o medios. Los reproductores son capaces de reproducir velocidades de bits variables (a diferencia de los editores), y cuantos más cuadros haya en su video, más suave será la reproducción y quizás más pequeño el tamaño del archivo, debido a los pequeños cambios en el movimiento entre cuadros.
Aquí hay una colección de enlaces a información sobre estándares y debates en foros que deberían ayudar con este aspecto confuso de la codificación:
- herramientas de decimación avisynth
- conmutadores fps y -r
- x264 General (tcfile, fps)
- estándares de archivo de código de tiempo
- Niveles y perfiles
- Resumen breve y claro de configuración CFR / VFR (sección "framerate")
doom9, videohelp, & c debates teóricos
1 2 3 4 5 6 7
fuente