Uso de ffmpeg para codificar un video de alta calidad [cerrado]

92

Tengo un conjunto de fotogramas de video guardados como imágenes en un directorio y estoy tratando de codificarlos en un video de buena calidad, sin embargo, cada configuración y cada formato que intento produce artefactos muy notables.

El comando básico es este:

ffmpeg -r 25 -i %4d.png myvideo.mpg

y probé las banderas minrate y maxrate. Cualquiera de los formatos {mpg, avi, mov, flv} servirá.

¿Alguna sugerencia de configuración? El tamaño del archivo final no es un problema.

CakeMaster
fuente
7
En mi Mac, utilizo el siguiente comando: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Descubrí que para forzar la velocidad de fotogramas, tenía que especificarlo tanto para los archivos de entrada como para los de salida. Este códec parece funcionar para mí; es posible que no necesite especificarlo. Solo quería incluir lo que hice porque he pasado mucho tiempo trabajando en ello. El único inconveniente es que mis imágenes de entrada son de alto contraste (bolas azules y rojas sobre un fondo blanco) y más adelante en la película, las bolas comienzan a volverse todas del mismo color oscuro, un efecto de contraste no deseado.
jvriesem
¡Gracias @jvriesem! Esto funciono muy bien para mi.
Dan Loewenherz
Sugiero hacer esta pregunta en StackOverflow para sistemas multimedia
Hamed
c ++ versión stackoverflow.com/a/43464269/6180077 visite este enlace para trabajar con la aplicación de grabación de pantalla en formato FFMPEG c ++ mp4.
Abdullah Farweez
consulte este enlace que demuestra la escritura del archivo de video usando las librerías FFMPEG programáticamente: stackoverflow.com/a/43464269/6180077
Abdullah Farweez

Respuestas:

64

Un par de cosas:

  • Debe configurar la tasa de bits del video. Nunca he usado minrate y maxrate, así que no sé exactamente cómo funcionan, pero al configurar la tasa de bits con el -binterruptor, puedo obtener videos de alta calidad. Necesita crear una tasa de bits que ofrezca una buena compensación entre compresión y calidad de video. Es posible que tenga que experimentar con esto porque todo depende del tamaño del cuadro, la velocidad de cuadro y la cantidad de movimiento en el contenido de su video. Tenga en cuenta que el DVD tiende a rondar los 4-5 Mbit / s en promedio para 720x480, por lo que generalmente comienzo desde allí y decido si necesito más o menos y luego simplemente experimento. Por ejemplo, puede agregar -b 5000ka la línea de comandos para obtener más o menos tasa de bits de video de DVD.

  • Necesita especificar un códec de video. Si no lo hace, ffmpeg utilizará por defecto MPEG-1, que es bastante antiguo y no proporciona ni la cantidad de compresión que MPEG-4 o H.264. Si su versión de ffmpeg está construida con soporte libx264, puede especificarlo -vcodec libx264como parte de la línea de comando. De -vcodec mpeg4lo contrario , también funcionará mejor que MPEG-1, pero no tan bien como x264.

  • Hay muchas otras opciones avanzadas que lo ayudarán a obtener la mejor calidad con las tasas de bits más bajas. Eche un vistazo aquí para ver algunos ejemplos.

Jason B
fuente
6
La tasa de bits constante es mala para la calidad. Usar un factor de tasa constante es superior (es uno de los modos de operación x264). Por ejemplo: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 es el CRF con una pérdida de calidad muy marginal, pero la tasa de bits probablemente será baja. Y puede probar valores CRF más grandes si necesita un tamaño de archivo más pequeño. Y como ve, esto es bastante simple.
Nombre
tenga en cuenta que -b tiene que estar antes del video pero después de la entrada -i
mateuszb
45

Debe especificar la opción -vb para aumentar la tasa de bits del video; de lo contrario, obtiene el valor predeterminado que produce videos más pequeños pero con más artefactos.

Intente algo como esto:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg

jeff7
fuente
1
esto funciona bien para mí, gracias;)
thiago.adriano26
15

Asegúrese de que los PNG sean completamente opacos antes de crear el video

por ejemplo, con imagemagick, dales un fondo negro:

convert 0.png -background black -flatten +matte 0_opaque.png

Según mis pruebas, ninguna tasa de bits o códec es suficiente para que el video se vea bien si alimenta ffmpeg PNG con transparencia

Orán Fry
fuente
Esto resolvió mi problema.
Matěj Kripner
0

A menos que realice algún tipo de trabajo de posprocesamiento, el video nunca será mejor que los fotogramas originales. También al igual que un libro animado, si tienes un gran "salto" entre fotogramas clave, se verá divertido. Por lo general, necesita suficientes "interpolaciones" entre los fotogramas clave para proporcionar una animación fluida. HTH

JustBoo
fuente
Las imágenes son originalmente de una secuencia de video. Acaban de tener un poco de recorte, escala y otras cosas con imagemagick. Los efectos son definitivamente artefactos de compresión. Ahora he visto esta publicación, que parece tener una respuesta: stackoverflow.com/questions/3158235/…
CakeMaster
@CakeMaster No mencioné la compresión con pérdida porque tienes imágenes ".png" en tu ejemplo. Los .png pueden tener pérdidas, pero creo que generalmente no lo son. Los .jpg casi siempre tienen pérdida, por lo tanto, los artefactos al usarlos. Si puede, puede volver a guardar su .png con compresión sin pérdidas.
JustBoo