วิธีสร้าง MP4 พร้อมตัวแปลงสัญญาณ H.265 โดยใช้ FFmpeg


24

ฉันต้องการเข้ารหัสไฟล์วิดีโอเป็น H.265 ffmpeg รุ่นสุดท้ายควรสนับสนุน H.265 ( ที่มา )

อย่างไรก็ตามฉันไม่พบข้อมูลใด ๆ เกี่ยวกับคำสั่งที่แน่นอน

ฉันไม่ทราบว่าฉันควรจะระบุว่าห้องสมุด-vcodecใด

ฉันใช้ Zeranoe FFmpeg Build ล่าสุด (git-c78a416 (2013-10-26))

คำตอบ:


40

พื้นหลัง

FFmpeg รองรับการเข้ารหัส HEVC / H.265 ตั้งแต่ 2014-2-12 ด้วย libx265 ตอนนี้คุณสามารถใช้ ffmpeg โดยตรงเพื่อเข้ารหัส HEVC หรือใช้ตัวเข้ารหัสอื่นจากนั้นทำการ mux ด้วยตนเองลงใน. mp4, .mov หรือ. mkv โดยใช้ FFmpeg

ตัวเข้ารหัสที่มี

ตัวเข้ารหัส H.265 / HEVC ปัจจุบันคือ:

แนะนำให้ใช้ MulticoreWare และ DivX เท่านั้นเนื่องจากเวลาในการพัฒนาและความน่าเชื่อถือ

สอง x265

ความสับสนอย่างหนึ่งคือว่ามีสองโครงการอิสระทั้งสองชื่อ "x265" โดยนักศึกษาวิทยาลัยจีนและตายจริงและอีกโครงการหนึ่งโดย บริษัท การค้าที่เรียกว่า MulticoreWare ถึงแม้ว่าอดีตจะเริ่มต้นก่อน แต่ตอนนี้แทบจะตายไปแล้วและสิ่งที่อยู่เบื้องหลังนั้นกำลังอยู่ในระหว่างการพัฒนาและได้รับการรับรองโดย VideoLAN (ผู้พัฒนา x264)

เส้นเวลาของการสนับสนุนการเข้ารหัส FFmpeg HEVC

  • 2013/10/12 .mov สนับสนุน muxing 53f903bเพิ่มเข้ามาใน
  • 2014/02/12 libx265 bb6b173เข้ารหัสเพิ่มการสนับสนุนใน
  • 2014-03-09 สนับสนุน Matroska muxing ที่สมบูรณ์ยิ่งขึ้นสำหรับ HEVC ที่เพิ่มเข้า38aee64มา
  • 2014-03-09 .ovov muxing และการรองรับ muxing ใหม่ที่สมบูรณ์9563e67ยิ่งขึ้น

TL; DR

อย่างไรก็ตามนี่เป็นชุดของความเป็นไปได้ในปัจจุบันทั้งหมดของการเข้ารหัส HEVC ตามคำแนะนำของฉัน:

  • ใช้ MulticoreWare libx265 โดยตรงกับ FFmpeg โดยตรง ซึ่งหมายความว่าด้วย Zeranoe build ล่าสุดที่คุณสามารถทำได้:

    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
    

    หมายเหตุ: FFmpeg สร้างใหม่กว่า 2014-03-09 อนุญาตให้คุณ mux HEVC เป็นไฟล์. mp4 ตอนนี้ (ส่ง 9563e67):

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

    คุณยังสามารถผสมมันใน Matroska (.mkv):

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • การใช้แบบสแตนด์อโลน MulticoreWare x265 แล้ว mux แฟ้มผลกับ FFmpeg หรือmp4box สิ่งนี้จะทำงานกับ FFmpeg รุ่นเก่าที่ไม่มีการสนับสนุน 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
    

    ขอบคุณ @Duvrai

  • ใช้ DivX HEVC Encoder แล้วจึงรวมมัน

    วิธีการใช้งานนั้นคล้ายกับการใช้ x265 แบบสแตนด์อโลน (ดูด้านบน)

อัปเดต: FFmpeg มีการสนับสนุนการเข้ารหัส HEVC โดยใช้ MulticoreWare libx265 ทันที

อัปเดต 2: FFmpeg ตอนนี้รองรับ muxing HEVC ลงใน mp4 และ mov แล้ว


1
สำหรับผู้ที่ไม่ทราบว่าสิ่งที่crf=25แสดงให้เห็นถึงคำสั่งตัวอย่างต่อไปนี้คือคำแนะนำที่ CRF: slhck.info/articles/crf
Programster

เพื่อชี้แจงความคิดเห็นของ @ Programster ลิงก์จะไปที่คำแนะนำ x264 แต่ x265 และ x264 นั้นคล้ายคลึงกันมากในการเลือก CRF
ทิโมธี Gu

ฉันไม่พบคำแนะนำใด ๆ เกี่ยวกับ CRF ที่มีจุดประสงค์เป็นพิเศษที่ h265 แต่แนวคิดนั้นดูคงที่ ฉันกำลังทดลองกับค่าที่แนะนำ (18-28) แต่ไม่รู้ว่าสิ่งเหล่านี้จำเป็นต้องแตกต่างกันเล็กน้อยสำหรับ h265
โปรแกรม

@Programster: ใช่ช่วง x265 คือ0-51 อย่างไรก็ตามค่าเริ่มต้นคือ28แทน 23
Timothy Gu

2
คำตอบที่ยอดเยี่ยมโดยรวม แต่ขาดความสำคัญ -c:v libx265ตามที่เป็นอยู่ตัวอย่างข้างต้นใช้ x264 เพื่อความชัดเจนffmpeg -i INPUT -c:a copy -x265-params crf=2 OUTPUT_h265.mp4ถูกเข้ารหัสด้วย x264 แต่ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=2 OUTPUT_h265.mp4เข้ารหัสด้วย x265
rainabba

18

ffmpeg ได้เพิ่มการเข้ารหัส x265 ในวันที่ 12 กุมภาพันธ์ 2014 และการสนับสนุน mp4 คอนเทนเนอร์ในวันที่ 9 มีนาคม:

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

บันทึก:

  • คำสั่งดังกล่าวจะคัดลอกเสียงในตัวแปลงสัญญาณเดิม หากไม่ได้ทำงานแปลงเสียงเพื่อ AAC โดยเลี่ยง-c:a copy(หรือแทนที่copyด้วยaac, libfdk_aacหรือlibfaac- สั่งซื้อที่มีคุณภาพที่ชาญฉลาด)
  • เมื่อรวบรวม ffmpeg ใช้--enable-libx265(และ--enable-libfdk-aacหรือ--enable-libfaacถ้าจำเป็น)

1
FFmpeg รองรับการ muxing HEVC ใน mp4 ตั้งแต่วันที่ 3-9-2014
Timothy Gu

1
ด้วยเหตุผลบางอย่างผลลัพธ์เป็นสีเขียวและสีชมพู แต่เมื่อฉันเพิ่ม-pix_fmt yuv420pก่อน-c:vผลลัพธ์ก็ดี
Evgeni Sergeev

-2

ลองใช้ตัวเข้ารหัส divx ปัจจุบัน มันได้สร้างในการสนับสนุนสำหรับ h265: http://www.divx.com/

(ตามที่รายงานhttp://jkdigital.de/h265-hevc-divx-praxisbericht/ )


คำถามนี้เกี่ยวกับการใช้ ffmpeg เพื่อทำสิ่งนี้ให้สำเร็จ
Mahmoud Al-Qudsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.