Я пытаюсь понять вашу проблему.
Моя программа ScreenCaptureEncode использует стандартные настройки кодировщика Microsoft:
Исходя из моих результатов, я считаю, что качество хорошее / приемлемое.
Вы можете изменить профиль / уровень / битрейт с помощью MF_MT_MPEG2_PROFILE / MF_MT_MPEG2_LEVEL / MF_MT_AVG_BITRATE. Для CODECAPI_AVEncCommonQuality кажется, что вы пытаетесь использовать локально зарегистрированный кодер, потому что вы на Win7, чтобы установить это значение на 100, я думаю.
Но я не думаю, что это сильно изменит ситуацию.
Зв
здесь 3 скриншота с экраном печати клавиатуры:
Два последних изображения из одного и того же видео кодированного файла. Видеоплеер вводит псевдонимы, когда не воспроизводится в полноэкранном режиме. Тот же кодированный файл, воспроизводимый в полноэкранном режиме, не так плох, как по сравнению с исходным экраном, так и с настройками кодера по умолчанию. Вы должны попробовать это. Я думаю, что мы должны смотреть на это более внимательно.
Я думаю, что псевдоним исходит от вашего видеоплеера, и потому что не играет в полноэкранном режиме.
PS: я использую видеоплеер MPC-HC.
PS2: мою программу нужно улучшить:
РЕДАКТИРОВАТЬ
Вы читали это:
Режим с низкой задержкой полезен для связи в реальном времени или захвата в реальном времени, когда задержка должна быть минимизирована. Однако режим с низкой задержкой может также снизить качество декодирования или кодирования .
blockquote>О том, почему моя программа использует MFVideoFormat_RGB32, а ваша - MFVideoFormat_YUY2. По умолчанию в SinkWriter включены конвертеры. SinkWriter преобразует MFVideoFormat_RGB32 в совместимый формат кодера h264. Для кодировщика Microsoft прочитайте это: Видеокодер H.264
Формат ввода:
- MFVideoFormat_I420
- MFVideoFormat_IYUV
- MFVideoFormat_NV12
- MFVideoFormat_YUY2
- MFVideoFormat_YV12
Таким образом, MFVideoFormat_RGB32 отсутствует. Я думаю, что SinkWriter выполняет преобразование с использованием DSP Color Converter.
Так что определенно проблема не в преобразовании rgb в yuv до кодирования.
PS (последний)
, как сказал Маркус Шуман,
H.264 больше предназначен для естественного контента, а не для захвата экрана.
blockquote>Он должен был упомянуть, что проблема особенно связана с захватом текста.
Вы только что нашли ограничение кодера. Я просто думаю, что ни один кодировщик не подходит для кодирования текста с приемлемым растяжением, как я упоминал при рендеринге видеоплеера.
Вы видите псевдоним при окончательном захвате видео, потому что это фиксированная информация внутри фильма. Воспроизведение этого фильма в полноэкранном режиме (так же, как захват) - это нормально.
В Windows текст рассчитывается в соответствии с разрешением экрана. Так что дисплей всегда хорош.
это мой последний вывод.
Это должно сработать -
string assemblyFile = (
new System.Uri(Assembly.GetExecutingAssembly().CodeBase)
).AbsolutePath;