Làm cách nào để tạo MP4 với codec H.265 bằng FFmpeg?


24

Tôi muốn mã hóa một tập tin video thành H.265. Phiên bản cuối cùng của ffmpeg phải hỗ trợ H.265 ( Nguồn ).

Tuy nhiên, tôi không thể tìm thấy bất kỳ thông tin nào về lệnh chính xác.

Tôi không biết, thư viện nào tôi nên chỉ ra sau -vcodec.

Tôi sử dụng Zeranoe FFmpeg Build mới nhất (git-c78a416 (2013-10-26)).

Câu trả lời:


40

Lý lịch

FFmpeg hỗ trợ mã hóa HEVC / H.265 kể từ 2014-2-12 với libx265. Bây giờ bạn có thể sử dụng ffmpeg trực tiếp để mã hóa HEVC hoặc sử dụng một bộ mã hóa khác sau đó chuyển thủ công vào .mp4, .mov hoặc .mkv bằng FFmpeg.

Bộ mã hóa có sẵn

Bộ mã hóa H.265 / HEVC hiện tại là:

Chỉ MulticoreWare và DivX được đề xuất vì thời gian phát triển và độ tin cậy của chúng.

Hai x265

Một sự nhầm lẫn là có hai dự án độc lập được đặt tên là "x265", một dự án của một sinh viên đại học Trung Quốc và thực tế đã chết, và một dự án khác của một công ty thương mại có tên MulticoreWare. Mặc dù cái trước bắt đầu trước, nhưng thực tế nó đã chết và cái sau đang được phát triển tích cực và được xác nhận bởi Videolan (nhà phát triển của x264).

Dòng thời gian của FFmpeg Hỗ trợ mã hóa HEVC

  • 2013-10-12 .mov hỗ trợ muxing được thêm vào 53f903b.
  • 2014/02/12 hỗ trợ mã hóa libx265 được thêm vào bb6b173.
  • 2014 / 03-09 Hỗ trợ thêm Matroska đầy đủ cho HEVC được thêm vào 38aee64.
  • 2014 / 03-09 Hoàn thành đầy đủ hơn .mov và hỗ trợ muxing .mp4 mới được thêm vào 9563e67.

tl; dr

Dù sao, đây là một bộ đầy đủ các khả năng hiện tại của mã hóa HEVC theo khuyến nghị của tôi:

  • Trực tiếp sử dụng MulticoreWare libx265 với FFmpeg. Điều này có nghĩa là với bản dựng Zeranoe mới nhất, bây giờ bạn có thể làm điều này:

    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
    

    Lưu ý: FFmpeg xây dựng mới hơn 2014 / 03-09 cho phép bạn chuyển HEVC thành các tệp .mp4 ngay bây giờ (cam kết 9563e67):

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

    Bạn cũng có thể điều khiển nó trong Matroska (.mkv):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • Sử dụng MulticoreWare x265 độc lập và sau đó mux tệp kết quả với FFmpeg hoặc MP4Box . Điều này sẽ hoạt động với các bản dựng FFmpeg cũ hơn không có hỗ trợ 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
    

    Cảm ơn @Duvrai.

  • Sử dụng DivX HEVC Encoder và sau đó mux nó.

    Cách sử dụng tương tự như sử dụng độc lập x265 (xem bên trên).

Cập nhật: FFmpeg hiện có hỗ trợ mã hóa HEVC bằng MulticoreWare libx265.

Cập nhật 2: FFmpeg hiện đã hỗ trợ chuyển HEVC sang mp4 Mov ngay bây giờ.


1
Đối với những người không biết những gì crf=25đại diện trong các lệnh ví dụ, đây là hướng dẫn CRF: slhck.info/articles/crf
Programster

Để làm rõ nhận xét của @ Programster, liên kết đến một hướng dẫn x264, nhưng x265 và x264 rất giống nhau trong lựa chọn CRF.
Timothy Gu

Tôi không thể tìm thấy bất kỳ hướng dẫn nào về CRF đặc biệt nhắm vào h265 nhưng khái niệm này có vẻ không đổi. Tôi hiện đang thử nghiệm các giá trị mà nó khuyến nghị (18-28), nhưng không biết liệu những giá trị này có cần thay đổi đôi chút cho h265 không.
trình viên

@ Chương trình: Có phạm vi của x265 là 0-51 . Tuy nhiên, giá trị mặc định28 thay vì 23.
Timothy Gu

2
Câu trả lời tuyệt vời tổng thể, nhưng thiếu một chút quan trọng; -c:v libx265như nó là, các ví dụ trên đầu ra bằng x264. Để rõ ràng, ffmpeg -i INPUT -c:a copy -x265-params crf=2 OUTPUT_h265.mp4đã mã hóa với x264, nhưng ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=2 OUTPUT_h265.mp4được mã hóa bằng x265.
rainabba

18

ffmpeg đã thêm mã hóa x265 vào ngày 12 tháng 2 năm 2014 và hỗ trợ bộ chứa mp4 vào ngày 9 tháng 3:

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

Chú thích:

  • Lệnh trên sẽ sao chép âm thanh trong codec gốc của nó. Nếu điều đó không hiệu quả, hãy chuyển đổi âm thanh thành AAC bằng cách bỏ qua -c:a copy(hoặc thay thế copybằng aac, libfdk_aachoặc libfaac- theo thứ tự chất lượng)
  • khi biên dịch ffmpeg sử dụng --enable-libx265(và --enable-libfdk-aachoặc --enable-libfaacnếu cần)

1
FFmpeg hỗ trợ muxing HEVC nguyên bản trong mp4 kể từ ngày 3-9-2014.
Ti-mô-thê

1
Vì một số lý do, kết quả là màu xanh lá cây và màu hồng, nhưng khi tôi thêm vào -pix_fmt yuv420ptrước đó -c:v, kết quả vẫn ổn.
Evgeni Sergeev

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.