Convierta la velocidad de fotogramas variable ~ 60 FPS a 60 FPS constantes sin pérdidas

Tengo secuencias de juego grabadas con ShadowPlay ("GeForce Experience") a 60 FPS, lo que, según tengo entendido, da como resultado una velocidad de fotogramas variable, porque el juego pierde fotogramas a veces. Sin embargo, tratar de usar este video en Adobe Premiere hace que el audio del juego quede muy por detrás de las imágenes, porque Premiere lo trata como si cada cuadro tuviera la misma longitud.

He probado HandBrake con esta configuración:

Calidad: constante, RF 0 (sin pérdidas)
FPS: 60, constante
Detelecine: Desactivado
Descombinado: Desactivado Eliminación de
ruido: Desactivado
Desbloqueo: Desactivado

Pero el video de salida no solo es mucho más pequeño que el video de origen, sino que es enormemente peor en términos de calidad visual. ¿Por qué no es sin pérdidas cuando lo configuré en lo que dice que es sin pérdidas?

Información de video de entrada: http://pastebin.com/7Tss4brj
Información de video de salida: http://pastebin.com/DKFEzDKk (de Mediainfo)

¿Cómo puedo convertir un video de velocidad de fotogramas variable a un video de velocidad de fotogramas constante sin pérdidas?

Si tiene mediainfo , ¿puede publicar la lectura para su salida? Utilice el modo Ver->Texto.
Espero que esto ayude: Información de video de entrada: pastebin.com/7Tss4brj Información de video de salida: pastebin.com/DKFEzDKk
Técnicamente, no sin pérdidas, ya que RF se registra como 1 y no como 0. Aún así, no debería ser " masivamente peor en términos de calidad visual ". ¿Cómo estás probando la reproducción?
Reproduciéndolo en VLC o previsualizándolo en Premiere. Tiene enormes artefactos de compresión por todas partes, especialmente con movimientos rápidos.
Hm, acabo de comparar capturas de pantalla de los dos videos en VLC y parece casi igual. La vista previa en Premiere es mucho peor. Déjame investigar. Podría ser un problema con Premiere. Aún así, ¿por qué es RF 1 cuando lo configuré como 0 y por qué el archivo de salida es mucho más pequeño?
Muy bien, comparé un video diferente en VLC y la calidad es definitivamente peor. Entrada: imgur.com/AKYhyuC pastebin.com/4vwJi8Vj Salida: imgur.com/m5TKr0L pastebin.com/49knbRiH
Prueba con ffmpeg .ffmpeg -i in.mp4 -r 60 -crf 0 -profile:v main -c:a copy out.mp4
Dice: x264 [error]: el perfil principal no es compatible con lossless [libx264 @ 00000000031c3280] Error al configurar el perfil principal. El único perfil que aceptó sin pérdida fue high444, que produjo un archivo de 43,2 GB a partir de los 7,17 GB, que no parece ser reproducible en VLC o Premiere (tiene colores raros). pastebin.com/MwtMPj8Q
Ups. Saltar el perfil pero añadir-pix_fmt yuv420p
Eso parece haber funcionado, pero el archivo resultante es tan grande que ni VLC ni Premiere pueden reproducirlo correctamente. (Frecuencia de cuadros extremadamente baja y artefactos en VLC, colores extraños en Premiere) Premiere parece poder exportarlo, pero es inútil para editar. :-( pastebin.com/7U60c0GU ¿Sería posible copiar los datos de transmisión en lugar de copiar sin pérdidas los datos de píxeles?

Respuestas (2)

Para empezar: tu versión de Handbrake es antigua. La versión 1.0.3 salió hace muy poco, tiene algunas mejoras con respecto a la versión anterior.

En segundo lugar, CQ0 en realidad no es "sin pérdidas". Su objetivo es la calidad "sin pérdidas", pero chocará con las limitaciones de velocidad de datos del nivel H.264 , por lo que, si bien podría necesitar, digamos, 100 MbPS en un punto determinado para lograr una compresión "sin pérdidas", el nivel 4.0 podría ser limitándolo a 20MbPS o algo así. Tenga en cuenta que en la lectura de Configuración de codificación en su archivo de exportación se enumera "vbv_maxrate=20000", ahí es donde se limita su tasa de bits. Entonces, para acercarse lo más posible a la pérdida sin pérdidas, necesitaría algo como el Nivel 5.2.

Por lo tanto, aumentar su nivel de H.264 mejorará la calidad, pero Premiere puede terminar esforzándose mucho. H.264 es realmente malo para la edición. Es muy complejo desde el punto de vista computacional, en gran parte porque no almacena cada fotograma por separado (llamado compresión intrafotograma), sino que toma lotes de fotogramas (llamados Grupo de imágenes o GOP) y los comprime juntos, de tal manera que cualquier fotograma dentro un GOP dependerá de los marcos circundantes para reproducir una imagen completa. Esto se denomina compresión Interframe, y la cantidad de fotogramas en un GOP depende de los parámetros establecidos en el momento de la codificación, e incluso puede ser variable (no es típico), pero puede ver cuáles son esos parámetros en MediaInfo al observar la línea que dice "Formatear". ajustes, GOP" ("N=30" significa 30 fotogramas por GOP), o mirando la configuración de codificación donde anota "keyint" (Intervalo de fotogramas clave). Entonces, necesitar decodificar los 30 cuadros para mostrarle cualquier cuadro esmuy intensivo en CPU y RAM.

Si tiene el almacenamiento, le recomiendo que considere usar DNxHD, que es un códec "mezzanine" (fácil de editar) que conserva la calidad, considerado "prácticamente sin pérdidas", pero tiene un bajo impacto en la CPU/RAM. La trampa son las tasas de bits muy altas. Así que estamos hablando de ~130-200GB/hr a 1080p59.94. El otro problema es que DNxHD tiene resoluciones y frecuencias de cuadro muy limitadas . También está CineForm, que tiene una calidad igual de alta, pero mucho más flexible, y tanto CineForm como DNxHD son compatibles de forma nativa con Premiere (CineForm en 2015 y posteriores), pero la última vez que verifiqué la compatibilidad con CineForm en otras herramientas, como ffmpeg, falta.

Entonces, una solución más fácil de editar sería usar ffmpeg para hacer DNxHD con una línea de comando de la siguiente manera:

ffmpeg -i (input file).mp4 -c:v dnxhd -b:v 290M -c:a pcm_s16le -r 60 (output).mxf

Eso haría DNxHD con audio sin comprimir en un archivo MXF Op1a. También puede golpear .mov al final y crear un archivo Quicktime con la misma facilidad. Tenga en cuenta que -r establece la velocidad de fotogramas de salida. Podría intentar usar H.264 en ffmpeg cambiando el códec de video (-c:v), pero se encontrará con las mismas limitaciones que tendría al trabajar con Handbrake, así que no sé si realmente vale la pena hacerlo. en eso aquí.

CQ0 es en realidad sin pérdidas. Si realiza una comparación SSIM con la fuente, el resultado de la métrica será 1,0, es decir, fidelidad perfecta. Los niveles H.264 están destinados a los decodificadores de hardware, por lo que pueden negarse a decodificar un flujo más allá de sus capacidades, en lugar de reproducir una reproducción entrecortada. Pero no restringen x264. Se quejará si su resolución/tasa de bits excede un nivel establecido explícitamente, pero procederá de todos modos.
Para reducir la carga de decodificación, siempre puede establecer un tamaño de GOP bajo y deshabilitar los fotogramas B. No uso Handbrake, pero se hace fácilmente con ffmpeg. DNxHD utilizará más ancho de banda del necesario.
No estoy seguro de si h264 cq0 no tiene pérdidas en términos de profundidad de bits... quiero decir... si pasa de 8 bits a 8 bits está bien... si 10 o 12 a 8 tendrá una pérdida a menos que sea una versión de 16 bits de h264 crf 0 está disponible. @Mulvya ¿existe una opción de 16 bits por componente + alfa?
Alpha no está disponible, y x264 solo funciona con 8 y 10 bits.

Grabo mi contenido de Shadowplay con la siguiente configuración:

  • 1440p
  • 50 MBps
  • 60 FPS
  • Micrófono y audio de escritorio en canales separados

Por lo tanto, no es compatible con el mencionado DNxHD. Los canales de audio también tienen velocidades de fotogramas variables y deben sincronizarse.

Lo siguiente volverá a codificar el video y el audio en 60 FPS CFR y no tendrá problemas de sincronización de audio en Adobe Premier. Lo guarda en un archivo por lotes (.bat) y luego lo ejecuta a través de la línea de comando con el archivo de video como primer argumento.

@echo off
set inputFile=%1
set outputFile=%inputFile:.mp4=_cbr.mp4%
ffmpeg  ^
-i %inputFile% ^
-vsync 1 -async 1 ^
-map 0:v:0 ^
    -c:v libx264 ^
    -preset veryfast ^
    -x264-params "nal-hrd=cbr" ^
    -b:v 50M ^
    -framerate 60 ^
-map 0:a:0 ^
    -c:a:0 aac ^
    -b:a 384k ^
-map 0:a:1  ^
    -c:a:1 aac ^
    -b:a 384k ^
%outputFile%

Al comparar cuadros individuales, no noté una diferencia en la calidad entre este y la grabación original. Puede cambiar algunas de las opciones, como la velocidad de fotogramas para que coincida con su contenido, o aumentar la velocidad de bits si cree que hay alguna pérdida.