58 votes

Convertissez AVI (Xvid) en MP4 (H.264) en conservant la même qualité.

Je veux compresser un fichier AVI en MP4 en utilisant un codec h.264. Je n'ai pas pu obtenir la même qualité. Comment puis-je le compresser ?

Vidéo originale :

Écran vidéo original :

Sortie console 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

Test 1

Commande FFmpeg :

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

Test 1 Écran :

Sortie console 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

Test 2

Commande 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

Test 2 Écran :

Sortie console 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

73voto

slhck Points 209720

Tout d'abord, installez une version plus récente de FFmpeg - récupérez une compilation statique à partir de la page de téléchargement .

L'utilisation de vpre les préréglages (qui sont un moyen de définir des valeurs par défaut pour les éléments suivants ffmpeg et non les paramètres de l'encodeur) n'est pas vraiment nécessaire ; vous souhaitez généralement utiliser le paramètre -preset options définies par les encodeurs.

Les raisons pour lesquelles vous obtenez une faible qualité de sortie sont les suivantes, pour vos deux cas respectifs :

  1. Dans le premier cas, vous utilisez crf 25 , a Facteur de taux constant qui vous donnera une qualité pire que celle par défaut de l'encodeur x264 (qui est 23). Le CRF contrôle la qualité. Essayez de définir un CRF plus faible, peut-être 20, 18, etc. Ici, plus bas signifie une meilleure qualité, mais cela augmentera la taille du fichier. Un changement de 6 dans le CRF vous donne deux fois/moitié le bitrate moyen original, en gros.

    Vous devrez régler un CRF plus bas à cause de la perte de production . Vous encodez quelque chose qui était déjà encodé, donc vous jetez à nouveau des informations visuelles. Ce n'est jamais bon, mais si vous devez le faire, vous devrez définir une qualité plus élevée afin de ne pas supprimer trop d'informations de la vidéo d'entrée.

  2. Dans le second cas, vous essayez de définir un débit binaire constant de 2 MBit/s. Votre vidéo d'entrée a à peu près le même débit binaire. Le x264 offre une bien meilleure qualité visuelle qu'un encodeur MPEG-4 Visual pour le même débit binaire, mais en raison de la perte de génération, il est préférable d'utiliser un débit binaire encore plus élevé que l'original, sinon vous finirez par compresser trop d'informations.

    En outre, l'encodage à débit constant peut faire en sorte que certains passages soient de bonne qualité, mais que d'autres parties de la vidéo soient moins bonnes. Si vous ne laissez pas l'encodeur choisir librement la quantité de bits qu'il veut consacrer à quelque chose, vous allez sacrifier la qualité au détriment de la connaissance de la taille cible du fichier.

    x264 dispose d'un mode de débit constant, mais il est considéré comme inférieur aux autres méthodes d'encodage. En fait, l'encodage en deux passes n'est pas censé viser une qualité optimale, alors oubliez ça.

Ceci étant dit, essayez quelque chose comme suit :

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

Si libfdk_aac n'est pas disponible, utilisez ceci à la place :

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

Le principal bouton de contrôle de la qualité sera votre réglage CRF. Expérimentez avec celui-ci et utilisez une valeur plus faible si vous avez besoin d'une meilleure qualité.

Vous pouvez également choisir le veryslow qui vous donnera une meilleure compression, mais l'encodage prendra évidemment plus de temps.

Si vous ne parvenez pas à obtenir un fichier de qualité décente à une taille raisonnable, vous n'avez pas de chance. Il vaut mieux garder le fichier original tel quel, sans le réencoder. Il n'existe pas d'outil magique permettant de "conserver la même qualité" lorsque vous comprimez quelque chose qui l'est déjà.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X