2012-12-28 14:42:59 +0000 2012-12-28 14:42:59 +0000
48
48

Convertir 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 :

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

FFmpeg sortie console (ffmpeg -i input.avi) :

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

Test 1

FFmpeg commande :

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 1 Écran :

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

FFmpeg sortie console (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 '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

Test 2

FFmpeg commande :

Test 2 Écran :

Sortie console FFmpeg (ffmpeg -i 2.mp4)

Réponses (1)

60
60
60
2012-12-28 14:53:52 +0000

Tout d'abord, installez une version plus récente de FFmpeg - prenez une version statique de la page de téléchargement .

L'utilisation des presets vpre (qui est une façon de définir des valeurs par défaut pour les paramètres ffmpeg, et non pour les paramètres des encodeurs) n'est pas vraiment nécessaire ; vous voulez généralement utiliser les options -preset définies par les encodeurs.

Les raisons pour lesquelles vous obtenez une qualité de sortie médiocre sont les suivantes, pour vos deux cas respectivement : Dans le premier cas, vous utilisez crf 25, un facteur de vitesse constante qui vous donnera une qualité inférieure à celle par défaut de l'encodeur x264 (qui est de 23). Le CRF contrôle la qualité. Essayez de régler un CRF plus bas, 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 un débit binaire moyen deux fois moindre que celui d'origine, en gros.

  1. Dans le second cas, vous essayez de fixer un débit constant de 2 MBit/s. Votre vidéo d'entrée a en gros le même débit binaire. Aujourd'hui, x264 offre une qualité visuelle bien meilleure qu'un encodeur MPEG-4 Visual pour le même débit, mais en raison de la perte de génération, vous pourriez vouloir utiliser un débit encore plus élevé que l'original - sinon vous finirez par compresser trop d'informations.

Cela é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 plutôt ceci :

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 qualité sera votre réglage CRF. Expérimentez avec cela et utilisez une valeur inférieure si vous avez besoin d'une meilleure qualité.

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

Si vous n'arrivez pas à obtenir un fichier de qualité décente à une taille raisonnable, alors vous n'avez pas de chance. Il vaut mieux garder le fichier original tel quel, sans réencodage. Il n'y a pas d'outil magique pour “garder la même qualité” quand vous comprimez quelque chose qui est déjà compressé.