Konvertieren Sie AVI (Xvid) in MP4 (H.264) unter Beibehaltung der Qualität

Konvertieren Sie AVI (Xvid) in MP4 (H.264) unter Beibehaltung der Qualität

Ich möchte eine AVI-Datei mit einem h.264-Codec in MP4 komprimieren. Ich konnte nicht die gleiche Qualität erzielen. Wie kann ich sie komprimieren?

Originalvideo:

Original-Videobildschirm:

FFmpeg-Konsolenausgabe ( 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

Prüfung 1

FFmpeg-Befehl:

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

Test 1-Bildschirm:

FFmpeg-Konsolenausgabe ( 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

Prüfung 2

FFmpeg-Befehl:

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

FFmpeg-Konsolenausgabe ( 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

Antwort1

Installieren Sie zunächst eine aktuellere Version von FFmpeg – holen Sie sich einen statischen Build vondie Download-Seite.

Die Verwendung von vpreVoreinstellungen (das ist eine Möglichkeit, Standardwerte festzulegen fürffmpegEinstellungen, nicht Encodereinstellungen) ist nicht wirklich notwendig; normalerweise möchten Sie die -presetvon den Encodern definierten Optionen verwenden.

Die Gründe für die schlechte Ausgabequalität sind in Ihren beiden Fällen die folgenden:

  1. Im ersten Fall verwenden Sie crf 25, einKonstanter Ratenfaktordas ergibt eine schlechtere Qualität als der Standardwert für den x264-Encoder (23). Der CRF steuert die Qualität. Versuchen Sie, einen niedrigeren CRF einzustellen, vielleicht 20, 18 usw. Hier bedeutet niedriger eine bessere Qualität, aber die Dateigröße wird größer. Eine Änderung von 6 im CRF ergibt grob gesagt die doppelte/halbe ursprüngliche durchschnittliche Bitrate.

    Sie müssen einen niedrigeren CRF festlegen, daGenerationsverlust. Sie kodieren etwas, das bereits kodiert war, und werfen damit erneut visuelle Informationen weg. Das ist nie gut, aber wenn es sein muss, müssen Sie eine höhere Qualität einstellen, um nicht zu viele Informationen aus dem Eingabevideo zu entfernen.

  2. Im zweiten Fall versuchen Sie, eine konstante Bitrate von 2 MBit/s einzustellen. Ihr Eingangsvideo hat ungefähr dieselbe Bitrate. Nun liefert x264 bei derselben Bitrate eine viel bessere Bildqualität als ein MPEG-4 Visual-Encoder, aber aufgrund des Generierungsverlusts möchten Sie möglicherweise eine noch höhere Bitrate als das Original verwenden – andernfalls gehen am Ende zu viele Informationen verloren.

    Darüber hinaus kann die Kodierung mit konstanter Bitrate dazu führen, dass einige Passagen gut aussehen, andere Teile des Videos jedoch schlechter. Wenn Sie dem Encoder nicht die freie Wahl lassen, wie viele Bits er für etwas ausgeben möchte, müssen Sie auf Kosten der Zieldateigröße Qualität opfern.

    x264 verfügt zwar über einen Modus mit konstanter Bitrate, dieser gilt jedoch als den anderen Kodierungsmethoden unterlegen. Tatsächlich zielt die Zwei-Pass-Kodierung nicht auf optimale Qualität ab, also vergessen Sie das.

Versuchen Sie dennoch etwas in der Art des Folgenden:

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

Wenn libfdk_aaces nicht verfügbar ist, verwenden Sie stattdessen Folgendes:

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

Der wichtigste Qualitätskontrollknopf ist Ihre CRF-Einstellung. Experimentieren Sie damit und verwenden Sie einen niedrigeren Wert, wenn Sie eine bessere Qualität benötigen.

Sie können auch die Voreinstellung wählen veryslow, die eine bessere Komprimierung bietet, die Kodierung dauert dann aber offensichtlich länger.

Wenn Sie es nicht schaffen, eine Datei mit angemessener Qualität und angemessener Dateigröße zu erhalten, haben Sie Pech gehabt. Behalten Sie die Originaldatei besser so, wie sie ist, ohne sie neu zu kodieren. Es gibt kein magisches Tool, mit dem Sie die Qualität beibehalten können, wenn Sie etwas komprimieren, das bereits komprimiert ist.

verwandte Informationen