Полная форма HEVC — «Высокоэффективное кодирование видео». Это стандарт сжатия видео, используемый для кодирования и декодирования видеоконтента высокого разрешения. HEVC обеспечивает повышенную эффективность сжатия по сравнению с предыдущими стандартами, такими как H.264.
Что касается методов с примерами кода, вот несколько часто используемых методов работы с видеокодированием HEVC:
- Использование FFmpeg:
FFmpeg — это мощный инструмент командной строки, который может кодировать и декодировать видео HEVC. Вот пример команды для кодирования видео в HEVC с помощью FFmpeg:
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.hevc
В этом примере input.mp4
— это входной видеофайл, -c:v libx265
указывает кодировщик HEVC, -crf 28
устанавливает коэффициент постоянной скорости (более высокое значение означает более низкое качество и меньший размер файла), а output.hevc
— это результирующий видеофайл в кодировке HEVC.
- Использование библиотеки x265 (C++):
x265 — это библиотека кодировщика HEVC с открытым исходным кодом, которую можно использовать в проектах C++. Вот пример фрагмента кода, показывающий, как кодировать необработанный видеокадр с помощью библиотеки x265:
#include <x265.h>
// ...
x265_param* param = x265_param_alloc();
x265_param_default(param);
x265_param_parse(param, "preset", "medium");
x265_picture* pic_in = x265_picture_alloc();
x265_picture_init(param, pic_in);
// Set input frame data to pic_in->planes
x265_picture* pic_out = x265_picture_alloc();
x265_encoder* encoder = x265_encoder_open(param);
x265_encoder_encode(encoder, pic_out, nullptr, nullptr);
// Extract encoded frame from pic_out->planes
x265_encoder_close(encoder);
x265_picture_free(pic_in);
x265_picture_free(pic_out);
x265_param_free(param);
Этот код устанавливает кодировщик x265, кодирует входной видеокадр и извлекает закодированные данные кадра из структуры выходного изображения.
- Использование Media Foundation (C++/C#):
Если вы разрабатываете приложения для Windows с использованием C++ или C#, вы можете использовать платформу Media Foundation для работы с видео HEVC. Вот пример фрагмента кода на C++ для кодирования видео в HEVC с помощью Media Foundation:
#include <mfapi.h>
#include <mfidl.h>
#include <mfreadwrite.h>
// ...
IMFMediaSink* pSink = nullptr;
IMFAttributes* pSinkConfig = nullptr;
IMFMediaSink* pVideoSink = nullptr;
IMFSinkWriter* pSinkWriter = nullptr;
MFStartup(MF_VERSION);
MFCreateSinkWriterFromURL(L"output.hevc", nullptr, nullptr, &pSinkWriter);
MFCreateAttributes(&pSinkConfig, 1);
pSinkConfig->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_HEVC);
pSinkConfig->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 1);
IMFMediaType* pMediaType = nullptr;
MFCreateMediaType(&pMediaType);
pMediaType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pMediaType->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_HEVC);
// Set other video properties such as width, height, frame rate, etc.
pSinkWriter->AddStream(pMediaType, &dwStreamIndex);
// ...
IMFSample* pSample = nullptr;
IMFMediaBuffer* pBuffer = nullptr;
MFCreateSample(&pSample);
MFCreateMemoryBuffer(dwBufferSize, &pBuffer);
pSample->AddBuffer(pBuffer);
pSample->SetSampleTime(llTimestamp);
pSample->SetSampleDuration(llDuration);
pSample->SetUINT32(MFSampleExtension_CleanPoint, TRUE);
// Set frame data to pBuffer
pSinkWriter->WriteSample(dwStreamIndex, pSample);
// ...
pSinkWriter->Finalize();
pSinkWriter->Release();
pSinkConfig->Release();
pSink->Release();
MFShutdown();
Этот код демонстрирует, как настроить модуль записи Media Foundation, настроить его для вывода видео HEVC и записать образцы видео для создания видеофайла в кодировке HEVC.