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

75590
skull3r7

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

Ich konnte jedoch keine Informationen zum genauen Befehl finden.

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

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

22

3 Antworten auf die Frage

36
Timothy Gu

Hintergrund

FFmpeg unterstützt die Kodierung von HEVC / H.265 seit 2014-2-12 mit libx265. Jetzt können Sie ffmpeg direkt verwenden, um HEVC zu codieren, oder einen anderen Encoder verwenden, der dann manuell in .mp4, .mov oder .mkv mithilfe von FFmpeg muxiert wird.

Verfügbare Encoder

Aktuelle H.265 / HEVC-Geber sind:

Aufgrund der Entwicklungszeit und Zuverlässigkeit werden nur MulticoreWare und DivX vorgeschlagen.

Zwei x265

Eine Verwirrung ist, dass es zwei unabhängige Projekte gibt, die beide "x265" genannt werden, eines von einem chinesischen Studenten und praktisch tot, und eines von einer kommerziellen Firma namens MulticoreWare. Obwohl Ersteres zuerst begonnen hat, ist es praktisch tot, und Letzteres befindet sich in aktiver Entwicklung und wird von VideoLAN (dem Entwickler von x264) unterstützt.

Zeitleiste der Unterstützung für FFmpeg HEVC-Codierung

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

tl; dr

Jedenfalls handelt es sich hier um ein komplettes Set aktueller Möglichkeiten, HEVC in der Reihenfolge meiner Empfehlung zu kodieren:

  • Direkte Verwendung von MulticoreWare libx265 mit FFmpeg. Mit dem neuesten Zeranoe-Build können Sie nun Folgendes tun:

    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: FFmpeg erstellt neuer als 2014-03-09. Sie können HEVC jetzt in .mp4-Dateien muxieren (Festschreiben 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 die resultierende Datei mit FFmpeg oder MP4Box . Dies funktioniert mit älteren FFmpeg-Builds, die keine Libx265-Unterstützung haben.

    # 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 #audio -add raw.265 out.mp4 

    Danke an @Duvrai.

  • Verwenden Sie den DivX HEVC Encoder und muxen Sie ihn.

    Die Verwendung ist ähnlich wie bei der Verwendung von Standalone x265 (siehe oben).

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

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

Für diejenigen, die nicht wissen, was das `crf = 25` in den Beispielbefehlen darstellt, finden Sie hier eine CRF-Anleitung: http://slhck.info/articles/crf Programster vor 9 Jahren 1
Um den Kommentar von @ Programster zu verdeutlichen, geht der Link zu einer x264-Anleitung, aber x265 und x264 sind in der CRF-Auswahl sehr ähnlich. Timothy Gu vor 9 Jahren 0
Ich konnte keine Anleitung zu CRF finden, die speziell auf h265 ausgerichtet ist, aber das Konzept sieht konstant aus. Ich experimentiere derzeit mit den von ihm empfohlenen Werten (18-28), weiß aber nicht, ob diese für h265 etwas anders sein müssen. Programster vor 9 Jahren 0
@Programster: Ja, der Bereich von x265 ist [0-51] (https://bitbucket.org/multicoreware/x265/src/ebf2d550938ca50a750e7cc7ee9fa4f34aed80a0/source/x265.cpp?at=default#cl-413). ** Der Standardwert ** ist jedoch [28] (https://bitbucket.org/multicoreware/x265/src/ebf2d550938ca50a750e7cc7ee9fa4f34aed80a0/source/x265.h?at=default#cl-752). Timothy Gu vor 9 Jahren 0
Nicht beeindruckt von der Qualität mit voreingestelltem Medium crf = 28. Die Dateigröße ist kleiner, aber ich kann definitiv feststellen, dass die Videoqualität immens leidet. Sun vor 8 Jahren 0
@ sunk818, x265 CRF hat natürlich eine andere Bedeutung als x264s CRF. [Diese Grafik] (https://blogs.gnome.org/rbultje/files/2015/09/vp9-x264-x265-encoding-speed.png) könnte für die Beurteilung der Qualität von x265 von Interesse sein. Timothy Gu vor 8 Jahren 0
Was mir helfen würde, ist der ffmpeg-Standard-crf-Wert für x265, der x264 in Bezug auf die Qualität entspricht. Eine Äquivalenzkarte der Qualität zwischen x265 und x264 würde ebenfalls helfen. Wenn x264 crf 23 für ffmpeg ist, welcher Crf-Wert würde dem für x265 entsprechen? Sun vor 8 Jahren 0
Insgesamt eine großartige Antwort, aber ein kritisches bisschen fehlt; `-c: v libx265` Wie es ist, werden die obigen Beispiele mit x264 ausgegeben. Der Einfachheit halber wurde "ffmpeg -i INPUT -c: Eine Kopie -x265-params crf = 2 OUTPUT_h265.mp4" mit x264 codiert, aber "ffmpeg -i INPUT -c: v libx265 -c: eine Kopie -x265-params crf = 2 OUTPUT_h265.mp4`, codiert mit x265. rainabba vor 8 Jahren 2
@rainabba, danke für die Korrektur. Fest. Timothy Gu vor 8 Jahren 0
17
Duvrai

ffmpeg fügte am 12. Februar 2014 die x265-Kodierung hinzu und am 9. März Unterstützung für mp4-Container:

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

Hinweis:

  • Der obige Befehl kopiert das Audio in seinem ursprünglichen Codec. Wenn das nicht funktioniert, konvertieren die Audio - AAC durch Weglassen -c:a copy(oder ersetzen copymit aac, libfdk_aacoder libfaac- bestellte Qualität her)
  • beim kompilieren von ffmpeg verwenden --enable-libx265(und --enable-libfdk-aacoder --enable-libfaacwenn nötig)
FFmpeg unterstützt das Muxen von HEVC nativ in mp4 seit dem 3-9-2014. Timothy Gu vor 10 Jahren 1
Aus irgendeinem Grund war das Ergebnis grün und pink, aber als ich vor dem `-c: v '` -pix_fmt yuv420p` hinzufügte, war das Ergebnis in Ordnung. Evgeni Sergeev vor 7 Jahren 1
-1
AndreLung

Probieren Sie den aktuellen divx-Encoder aus. Es hat eingebaute Unterstützung für h265: http://www.divx.com/

(wie berichtet http://jkdigital.de/h265-hevc-divx-praxisbericht/ )

Die Frage bezieht sich speziell auf die Verwendung von ffmpeg, um dies zu erreichen. Mahmoud Al-Qudsi vor 5 Jahren 0