Як генерувати 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 або використовувати інший кодер, а потім вручну відключити його в .mp4, .mov або .mkv за допомогою FFmpeg.

Доступні кодери

Поточними кодерами H.265 / HEVC є:

Тільки MulticoreWare і DivX пропонуються через час їх розробки та надійність.

Два x265-х

Одна плутанина полягає в тому, що є два незалежні проекти, названі "x265", один - студент китайського коледжу і практично мертвий, а інший - комерційна компанія під назвою MulticoreWare. Незважаючи на те, що перший почався перший, він зараз практично мертвий, а другий перебуває в активному розвитку і його схвалює VideoLAN (розробник x264).

Хронологічна підтримка кодування FFmpeg HEVC

  • 2013-10-12 .mov додано підтримку 53f903b.
  • Додана підтримка кодування 2014-02-12 libx265 bb6b173.
  • 2014-03-09 Додано більш повну підтримку Matroska muxing для HEVC 38aee64.
  • 2014-03-09 Додано більш повну .mov та нову підтримку .mp4 muxing 9563e67.

тл; д-р

У будь-якому разі, це повний набір поточних можливостей кодування HEVC у порядку моєї рекомендації:

  • Безпосередньо за допомогою MulticoreWare libx265 з FFmpeg. Це означає, що з останньою збіркою Zeranoe тепер ви можете це зробити:

    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, дозволяє вимкнути 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 має підтримку для відключення HEVC у mp4 AND mov.


1
Для тих, хто не знає, що собою crf=25являє в прикладних
Programster

Щоб уточнити коментар @ Programster, посилання переходить до керівництва x264, але x265 та x264 дуже схожі у виборі CRF.
Тимофій Гу

Я не зміг знайти жодного керівництва по CRF, спеціально спрямованого на h265, але ця концепція виглядає постійною. Я зараз експериментую зі значеннями, які він рекомендує (18-28), але не знаю, чи потрібно для h265 їх трохи відрізнятись.
Programster

@Programster: Так, діапазон x265 становить 0-51 . Однак значення за замовчуванням - 28 замість 23.
Тимофій Гу

2
Чудова відповідь в цілому, але пропущений критичний біт; -c:v libx265як це є, наведені вище приклади виводять за допомогою x264. Для наочності кодували 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.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 підтримує вимкнення HEVC спочатку в mp4 з 3-9-2014.
Тимофій Гу

1
Чомусь результат був зеленим і рожевим, але коли я додав -pix_fmt yuv420pдо цього -c:v, результат був прекрасним.
Євгеній Сергєєв

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.