Baja calidad de conversión usando ffmpeg

Necesito convertir video flv en video mp4, así que usé este comando:

ffmpeg -i input.flv -c -vcodec libx264 -acodec copy output.mp4

Pero el video de salida tiene una calidad de video un poco peor, ¿cómo puedo solucionarlo?

Información MP4 (salida):

  • vídeo: tasa de bits de 472 kb/s, 680 x 480, 24 FPS
  • audio: velocidad de bits de 112 kb/s, 44,1 kHz, audio mpeg, estéreo

Información FLV (entrada):

  • vídeo: tasa de bits de 1500 kb/s, 680*480, 24 FPS
  • audio: velocidad de bits de 112 kb/s, 44,1 kHz, audio mpeg, estéreo

ACTUALIZAR:

Lo probé -crf 18y este es el resultado (los colores de salida son más brillantes y mira esa línea amarilla en la tapa, en la imagen de salida esa línea amarilla contiene algo como ruido).

Aporte:

APORTE

Producción:

PRODUCCIÓN

Agregar -crf 20..
@Gyan por qué 20? 23 es el valor predeterminado, ¿verdad? Y 0 es sin pérdidas, entonces, ¿por qué no 0?
0la salida no es compatible con la mayoría de los reproductores. El CRF bajo ofrece rendimientos decrecientes. 18se considera visualmente sin pérdidas, pero no es necesario que lo intente primero.
@Gyan ¿Qué tiene de malo este comando ffmpeg -i input.flv -crf 20 -c -vcodec libx264 -acodec copy -copyts output.mp4? Recibo un error: No se puede encontrar un formato de salida adecuado para 'libx264'
quitar -c_ A menos que tenga necesidades específicas, elimínelas -copytstambién.
@Gyan -c es el códec, ¿verdad? ¿Y por qué eliminar copyts? Simplemente copia la marca de tiempo, ¿para qué sirve?
No ha establecido un valor para -cy ya ha especificado vcodec y acodec, por lo que no es necesario. copyts puede generar problemas de mux dependiendo de la salida vsync.
@Gyan, gracias, por problemas mux, ¿quiere decir que el video y el audio no pueden sincronizarse? Mira la pregunta actualizada.
No sincronizar directamente, sino fidelidad de marca de tiempo y decisiones de soltar/dup si la base de tiempo de origen y la base de tiempo de salida tienen resoluciones muy diferentes.
En lo que respecta al color, parece que la fuente es de rango completo y la salida está marcada o tratada como rango limitado.

Respuestas (2)

Los códecs con pérdidas, como x264, degradan la calidad de la imagen por diseño; si no desea perder la calidad de la imagen, debe usar un códec sin pérdidas o, mejor aún, no volver a codificar.

Supongo que el material de origen es H.264 o MPEG-2, por lo que la mejor solución en su caso sería simplemente copiar todas las secuencias en el nuevo contenedor:

ffmpeg -i input.flv -c copy output.mp4

Aquí está el comando para usar el modo sin pérdidas de x264 si tiene que volver a codificar por cualquier motivo:

ffmpeg -i input.flv -c:a copy -c:v libx264 -crf 0 output.mp4

Por favor, mejore su -minrate, -maxrate, -bufsizey estudie su códec. Descargue el contenedor Better para el códec de video y el códec de audio por separado. codifique el códec en estos contenedores, pero siga estos pasos:

1. Descarga el audio y el video por separado. puede hacer esto agregando -vn y -an en la línea de comando de salida. -vn significa 'sin video' mientras que -an significa 'sin audio'. Después de eso, estudie el códec de video o audio y codifíquelo en su mejor contenedor... Aquí está el mejor contenedor para los códecs modernos.

"Audio/Video codec"

*AAC/H264 is better on (TS)
*OPUS is better on (MKV)
*VP9 is better on (AVI)

2. Después de descargar el video/audio por separado, debe fusionarlos, por supuesto. Incluya sus dichos -minrate, -maxrate y -bufsize. No olvides estudiar tus códecs y unirlos con estos contenedores:

"Merging"

*Mixing VP9 and OPUS is better on (MKV)
*Mixing H264 and AAC is better on (MOV)
*otherwise most incompatible codec is better on (MKV)