web-dev-qa-db-fra.com

Comment générer un MP4 avec codec H.265 en utilisant FFmpeg?

Je veux encoder un fichier vidéo au format H.265. La dernière version de ffmpeg devrait être supportée par H.265 ( Source ).

Cependant, je n'ai trouvé aucune information sur la commande exacte.

Je ne sais pas quelle bibliothèque je devrais indiquer après -vcodec.

J'utilise la dernière version de Zeranoe FFmpeg Build (git-c78a416 (2013-10-26)).

23
skull3r7

Contexte

FFmpeg prend en charge le codage HEVC/H.265 depuis le 2014-2-12 avec libx265. Maintenant, vous pouvez utiliser ffmpeg directement pour encoder HEVC ou utiliser un autre encodeur, puis le mux manuellement en .mp4, .mov ou .mkv en utilisant FFmpeg.

Encodeurs disponibles

Les codeurs H.265/HEVC actuels sont les suivants:

Seuls les systèmes MulticoreWare et DivX sont suggérés en raison de leur temps de développement et de leur fiabilité.

Deux x265

Une confusion est qu'il existe deux projets indépendants nommés "x265", l'un par un étudiant chinois et est pratiquement mort, et l'autre par une société commerciale appelée MulticoreWare. Bien que le premier ait commencé le premier, il est pratiquement mort maintenant, et le second est en cours de développement et est approuvé par VideoLAN (le développeur de x264).

Chronologie de la prise en charge du codage FFmpeg HEVC

  • 2013-10-12 Prise en charge du multiplexage .mov ajoutée dans 53f903b.
  • 2014-02-12 Prise en charge du codage libx265 ajoutée dans bb6b173.
  • 2014-03-09 Prise en charge plus complète de Matroska muxing pour HEVC ajoutée dans 38aee64.
  • 2014-03-09 Ajout de la prise en charge .mov plus complète et de la nouvelle prise en charge du multiplexage .mp4 dans 9563e67.

tl; dr

Quoi qu'il en soit, ce sont un ensemble complet de possibilités actuelles d'encoder HEVC dans l'ordre de ma recommandation:

  • Directement en utilisant MulticoreWare libx265 avec FFmpeg. Cela signifie qu'avec la dernière version de Zeranoe, vous pouvez maintenant le faire:

    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
    

    Remarque: FFmpeg construit une version plus récente que 2014-03-09 vous permet de muxager HEVC en fichiers .mp4 (commit 9563e67):

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

    Vous pouvez également le mux dans Matroska (.mkv):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • Utilisation de MulticoreWare x265 autonome, puis multiplexez le fichier résultant avec FFmpeg ou MP4Box . Cela fonctionnera avec les anciennes versions de FFmpeg qui ne prennent pas en charge libx265.

    # 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
    

    Merci à @ Duvrai.

  • En utilisant DivX HEVC Encoder, puis multiplexez-le.

    La façon de l'utiliser est similaire à l'utilisation de la version autonome x265 (voir ci-dessus).

Mise à jour: FFmpeg prend désormais en charge le codage HEVC avec MulticoreWare libx265.

Mise à jour 2: FFmpeg prend désormais en charge le multiplexage de HEVC dans mp4 ET mov maintenant.

39
Timothy Gu

ffmpeg a ajouté l'encodage x265 le 12 février 2014 et le support des conteneurs mp4 le 9 mars:

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

Remarque:

  • La commande ci-dessus copiera l'audio dans son codec d'origine. Si cela ne fonctionne pas, convertissez l'audio au format AAC en omettant -c:a copy (ou remplacez copy par aac, libfdk_aac ou libfaac - par ordre de qualité).
  • lors de la compilation de ffmpeg, utilisez --enable-libx265 (et --enable-libfdk-aac ou --enable-libfaac si nécessaire)
17
Duvrai