Convierta AVI (Xvid) a MP4 (H.264) manteniendo la misma calidad

Convierta AVI (Xvid) a MP4 (H.264) manteniendo la misma calidad

Quiero comprimir un archivo AVI a MP4 usando un códec h.264. No pude conseguir la misma calidad. ¿Cómo puedo comprimirlo?

Vídeo original:

Pantalla de vídeo original:

Salida de consola FFmpeg ( ffmpeg -i input.avi):

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree                                                                                         --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc                                                                                        ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop                                                                                        enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264                                                                                         --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2542/release)
  Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr,                                                                                         23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified

Prueba 1

Comando FFmpeg:

ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4

Pantalla de prueba 1:

Salida de consola FFmpeg ( ffmpeg -i 1.mp4)

    FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

Prueba 2

Comando FFmpeg:

ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4

Pantalla de prueba 2:

Salida de consola FFmpeg ( ffmpeg -i 2.mp4)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
  configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

Respuesta1

En primer lugar, instale una versión más reciente de FFmpeg: obtenga una compilación estática dela página de descarga.

El uso de vpreajustes preestablecidos (que es una forma de establecer valores predeterminados paraffmpegajustes, no ajustes del codificador) no es realmente necesario; normalmente querrás utilizar las -presetopciones definidas por los codificadores.

Las razones por las que obtiene una baja calidad de salida son las siguientes, para sus dos casos respectivamente:

  1. En el primer caso se utiliza crf 25, unFactor de tasa constanteeso le dará peor calidad que la predeterminada para el codificador x264 (que es 23). El CRF controla la calidad. Intente configurar un CRF más bajo, tal vez 20, 18, etc. Aquí, más bajo significa mejor calidad, pero aumentará el tamaño del archivo. Un cambio de 6 en el CRF le da el doble o la mitad de la tasa de bits promedio original, en términos generales.

    Tendrá que establecer un CRF más bajo debido a lapérdida de generación. Estás codificando algo que ya estaba codificado, por lo que nuevamente estás desperdiciando información visual. Eso nunca es bueno, pero si es necesario, tendrás que configurar una calidad más alta para no eliminar demasiada información del vídeo de entrada.

  2. En el segundo caso, intenta establecer una velocidad de bits constante de 2 MBit/s. Su vídeo de entrada tiene aproximadamente la misma velocidad de bits. Ahora, x264 ofrece una calidad visual mucho mejor que un codificador visual MPEG-4 para la misma tasa de bits, pero debido a la pérdida de generación, nuevamente, es posible que desees usar una tasa de bits aún mayor que la original; de lo contrario, terminarás comprimiendo. demasiada información.

    Además, la codificación de velocidad de bits constante puede hacer que algunos pasajes se vean bien, pero otras partes del video se vean peor. Si no permite que el codificador elija libremente la cantidad de bits que quiere gastar en algo, sacrificará la calidad a expensas de conocer el tamaño del archivo de destino.

    x264 tiene un modo de velocidad de bits constante, pero se considera inferior a los otros métodos de codificación. En realidad, la codificación de dos pasos no está destinada a lograr una calidad óptima, así que elimine eso.

Dicho todo esto, intente algo como lo siguiente:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4

Si libfdk_aacno está disponible, utilice esto en su lugar:

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4

La principal perilla de control de calidad será la configuración CRF. Experimente con eso y use un valor más bajo si necesita mejor calidad.

También puedes elegir el veryslowajuste preestablecido, que te dará una mejor compresión, pero la codificación obviamente llevará más tiempo.

Si no puede conseguir un archivo de calidad decente con un tamaño de archivo razonable, no tendrá suerte. Es mejor mantener el archivo original tal como está, sin volver a codificarlo. No existe una herramienta mágica para "mantener la misma calidad" cuando comprimes algo que ya está comprimido.

información relacionada