FFmpeg kullanarak H.265 kode sahip bir MP4 nasıl oluşturulur?


24

Bir video dosyasını H.265 olarak kodlamak istiyorum. Ffmpeg'in son sürümü H.265'i ( Kaynak ) desteklemelidir .

Ancak, kesin komut hakkında hiçbir bilgi bulamadım.

Bilmiyorum, hangi kütüphaneden sonra belirtmem gerektiğini -vcodec.

En son Zeranoe FFmpeg Build'ı kullanıyorum (git-c78a416 (2013-10-26)).

Yanıtlar:


40

Arka fon

FFmpeg, 2014-2-12'den beri libx265 ile HEVC / H.265 kodlamasını desteklemektedir. Şimdi, ffmpeg'i doğrudan HEVC'yi kodlamak için kullanabilirsiniz ya da başka bir enkoder kullanın, ardından FFmpeg kullanarak .mp4, .mov veya .mkv'ye manuel olarak mux.

Mevcut Enkoderler

Güncel H.265 / HEVC kodlayıcılar:

Gelişim süreleri ve güvenilirliklerinden dolayı yalnızca MulticoreWare ve DivX önerilmektedir.

İki x265'in

Bir karışıklık, her ikisi de "x265" olarak adlandırılan ve biri Çinli bir kolej öğrencisi tarafından diğeri pratik olarak ölü, diğeri ise MulticoreWare adlı ticari bir şirket tarafından iki bağımsız proje olduğu. Birincisi ilk olarak başlamış olmasına rağmen, şu anda neredeyse ölü ve ikincisi aktif olarak geliştiriliyor ve VideoLAN (x264 geliştiricisi) tarafından onaylanıyor.

FFmpeg HEVC Kodlama Desteği Zaman Çizelgesi

  • 2013-10-12 .mov muxing desteği eklendi 53f903b.
  • 2014-02-12 libx265 kodlama desteği eklendi bb6b173.
  • 2014-03-09 HEVC için daha eksiksiz Matroska muxing desteği eklendi 38aee64.
  • 2014-03-09 Daha eksiksiz .mov ve yeni .mp4 muxing desteği eklendi 9563e67.

tl; Dr.

Her neyse, bunlar benim tavsiyem sırasına göre HEVC'yi kodlamanın tam bir mevcut olasılıkları kümesi:

  • MulticoreWare libx265'i FFmpeg ile doğrudan kullanma. Bu, Zeranoe'nun en son yapılışı ile bunu şimdi yapabilirsiniz:

    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
    

    Not: FFmpeg 2014-03-09'dan daha yeni bir sürüm oluşturuyor, HEVC'yi şimdi .mp4 dosyalarına dönüştürmenize olanak tanıyor (9563e67'yi tamamla):

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

    Ayrıca Matroska (.mkv) 'ya kopyalayabilirsiniz:

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • Bağımsız MulticoreWare x265'i kullanın ve sonra elde edilen dosyayı FFmpeg veya MP4Box ile karıştırın . Bu, libx265 desteği olmayan daha eski FFmpeg yapılarıyla çalışacaktır.

    # 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
    

    @Duvrai'ye teşekkürler.

  • DivX HEVC Encoder kullanarak ve daha sonra sıkın.

    Kullanmanın yolu, bağımsız x265 kullanmaya benzer (yukarı bakın).

Güncelleme: FFmpeg şimdi MulticoreWare libx265 kullanarak HEVC kodlama desteğine sahip.

Güncelleme 2: FFmpeg şimdi HEVC'yi mp4 AND mov'a takma desteğine sahip .


1
crf=25Örnek komutlarda neyin temsil edildiğini bilmeyenler için , işte bir CRF rehberi: slhck.info/articles/crf
Programster

@ Programster'ın yorumunu netleştirmek için, bağlantı x264 kılavuzuna gider, ancak x265 ve x264 CRF seçiminde çok benzerdir.
Timothy Gu,

CRF hakkında özellikle h265'i hedef alan bir rehber bulamadım ancak konsept sabit görünüyor. Şu anda tavsiye ettiği değerleri deniyorum (18-28), ancak bunların h265 için biraz farklı olması gerekip gerekmediğini bilmiyorum.
Programcı

@Programcı: Evet x265'in aralığı 0-51 . Ancak varsayılan değer olan 28 yerine 23.
Timothy Gu

2
Genel olarak büyük cevap, ancak kritik bir bit eksik; -c:v libx265Olduğu gibi, yukarıdaki örnekler x264 kullanarak çıktı. Netlik sağlamak için, ffmpeg -i INPUT -c:a copy -x265-params crf=2 OUTPUT_h265.mp4x264 ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=2 OUTPUT_h265.mp4ile kodlandı , ancak x265 ile kodlandı.
rainabba

18

ffmpeg, 12 Şubat 2014'te x265 kodlamasını ve 9 Mart'ta mp4 konteyner desteğini ekledi:

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

Not:

  • Yukarıdaki komut, sesi orijinal kodeğinde kopyalar. O değil işi yaparsa, atlanması ile AAC ses dönüştürmek -c:a copy(veya değiştirin copyile aac, libfdk_aacya libfaac- sıralı kalite-bilge)
  • ffmpeg kullanımını derlerken --enable-libx265(ve --enable-libfdk-aacya --enable-libfaacgerekirse)

1
FFmpeg, HEVC'yi doğal olarak mp4'te 3-9-2014'ten bu yana susturmayı destekler.
Timothy Gu

1
Bazı nedenlerden dolayı sonuç yeşil ve pembe idi, ancak daha -pix_fmt yuv420pönce eklediğimde -c:vsonuç iyi oldu.
Evgeni Sergeev

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.