it-swarm.com.de

Wie kann ich mit FFmpeg einen MP4 mit H.265-Codec erzeugen?

Ich möchte eine Videodatei nach H.265 kodieren. Die letzte Version von ffmpeg sollte H.265 ( Source ) unterstützen.

Ich konnte jedoch keine Informationen über den genauen Befehl finden.

Ich weiß nicht, welche Bibliothek ich nach -vcodec angeben soll.

Ich benutze den neuesten Zeranoe FFmpeg Build (git-c78a416 (2013-10-26)).

23
skull3r7

Hintergrund

FFmpeg unterstützt die Codierung von HEVC/H.265 seit dem 12.02.2014 mit libx265. Jetzt können Sie ffmpeg direkt zum Codieren von HEVC verwenden oder einen anderen Encoder verwenden und diesen dann manuell mit FFmpeg in .mp4, .mov oder .mkv muxen.

Verfügbare Encoder

Aktuelle H.265/HEVC-Encoder sind:

Aufgrund ihrer Entwicklungszeit und Zuverlässigkeit werden nur MulticoreWare und DivX empfohlen.

Zwei x265

Eine Verwirrung ist, dass es zwei unabhängige Projekte mit dem Namen "x265" gibt, eines von einem chinesischen College-Studenten, der praktisch tot ist, und eines von einer kommerziellen Firma namens MulticoreWare. Obwohl die erste Version als erste gestartet wurde, ist sie jetzt praktisch tot. Die zweite Version befindet sich in der aktiven Entwicklung und wird von VideoLAN (dem Entwickler von x264) unterstützt.

Zeitleiste der FFmpeg-HEVC-Codierungsunterstützung

  • 2013-10-12 .mov Muxing-Unterstützung in 53f903b hinzugefügt.
  • 2014-02-12 Unterstützung für libx265-Codierung in bb6b173 hinzugefügt.
  • 2014-03-09 Vollständigere Matroska-Muxing-Unterstützung für HEVC in 38aee64 hinzugefügt.
  • 2014-03-09 Vollständigere .mov- und neue .mp4-Muxing-Unterstützung in 9563e67 hinzugefügt.

tl; dr

Wie auch immer, dies ist ein vollständiger Satz aktueller Möglichkeiten zur Codierung von HEVC in der Reihenfolge meiner Empfehlung:

  • Direktes Verwenden von MulticoreWare libx265 mit FFmpeg. Dies bedeutet, dass Sie mit dem neuesten Zeranoe-Build Folgendes tun können:

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mov
    # With audio
    ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=25 OUT.mov
    

    Hinweis: Mit FFmpeg-Builds, die neuer als der 09.03.2014 sind, können Sie HEVC jetzt in MP4-Dateien muxen (Commit 9563e67):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mp4
    

    Sie können es auch in Matroska (.mkv) muxen:

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • Verwenden Sie Standalone MulticoreWare x265 und muxen Sie dann die resultierende Datei mit FFmpeg oder MP4Box . Dies funktioniert mit älteren FFmpeg-Builds, die libx265 nicht unterstützen.

    # Decode input using FFmpeg and encode using x265 using pipe
    ffmpeg -i INPUT -f yuv4mpegpipe -pix_fmt yuv420p - | \
    x265 --y4m -o encoded.265 -
    
    # Mux the resulting encoded .265 file into an .mp4 or .mov
    
    # Using ffmpeg: only works with newer builds that support muxing HEVC
    # Muxing to .mp4 supported since 03-09-2014
    ffmpeg -i encoded.265 -c copy out.mp4
    # With audio
    ffmpeg -i encoded.265 -i INPUT -map 0 -map 1:a -c copy out.mp4
    
    # Using MP4Box
    MP4Box -add raw.265 out.mp4
    # With audio
    MP4Box -add {INPUT}#audio -add raw.265 out.mp4
    

    Vielen Dank an @Duvrai.

  • Mit DivX HEVC Encoder und dann muxen.

    Die Art der Verwendung ähnelt der Verwendung von Standalone x265 (siehe oben).

Update: FFmpeg unterstützt jetzt die HEVC-Codierung mit MulticoreWare libx265.

Update 2: FFmpeg unterstützt jetzt das Muxen von HEVC in mp4 UND mov.

39
Timothy Gu

ffmpeg hat am 12. Februar 2014 die x265-Codierung und am 9. März die MP4-Container-Unterstützung hinzugefügt:

ffmpeg -i input -c:v libx265 -c:a copy output.mp4

Hinweis:

  • Der obige Befehl kopiert das Audio im Original-Codec. Wenn dies nicht funktioniert, konvertieren Sie das Audio in AAC, indem Sie -c:a copy weglassen (oder copy durch aac, libfdk_aac oder libfaac ersetzen - in der Qualität sortiert).
  • verwenden Sie beim Kompilieren von ffmpeg --enable-libx265 (und --enable-libfdk-aac oder --enable-libfaac, falls erforderlich)
17
Duvrai