Вопросы о видеоплеерах

0

Учитывая, что FFmpeg является ведущей мультимедийной картой, и большинство видео/аудиопроигрывателей использует ее, мне интересно, что происходит с аудио/видео плеерами, использующими FFmpeg в качестве промежуточного.

Я изучаю, и я хочу знать, как работают аудио/видеоплееры, и у меня есть некоторые вопросы.

Я читал исходный код ffplay, и я увидел, что ffplay обрабатывает поток субтитров. Я попытался использовать файл mkv с субтитрами на нем и не работает. Я попытался использовать такие аргументы, как -sst, но ничего не произошло. - Я читал о субтитрах и о том, как его используют видеофайлы (или я могу сказать контейнеры?). Я видел, что есть два способа поместить подзаголовок: hardsubs и softsubs - грубо говоря, режим hardsubs сожжен и становится частью видео, а softsubs превращает поток субтитров (возможно, я ошибаюсь - пожалуйста, исправьте меня).

  • Вопрос в том, как они справляются с этим? Я имею в виду, когда субтитры являются частью видео, там ничего не происходит, сам видеопоток показывает субтитры, но как насчет мягких программ? как они обрабатываются? (Я тоже слышал о текстовых субстратах). - Как субтитры появляются на экране и могут быть настроены изменение шрифтов, размер, цвета, без повторного кодирования?

  • Я изучал некоторые исходные коды видеоигр, и некоторые или большинство из них использует OpenGL в качестве средства визуализации кадра, а другие используют (например, Qt QWidget) (вроде или наверняка) холст. - Что является наиболее используемым, а какой самый быстрый и лучший? OpenGL с шейдерами и материалами? Обработка YUV или RGB и так далее? Как это работает?

  • Это может быть вопрос сбрасывания, но какой формат возвращает AVFrame? Например, когда мы хотим сохранить кадры в качестве изображений, нам сначала нужен кадр, а затем мы конвертируем, из какого формата мы конвертируем? Изменяется ли это в соответствии с кодеком видео или он всегда один и тот же?

  • Большинство видео, которые я пытался обработать, это использование YUV720P, я пытался сохранить фреймы как png, и мне нужно сначала преобразовать в RGB. Я сделал тест с игроками, и я поставил один и тот же фрейм, и я взял скриншоты и сравнил их. Видеоплейеры показывают, что кадры более яркие. Я пробовал то же самое с ffplay, который использует SDL (OpenGL), и цвета (качество) кадров кажется очень низким. Что может быть? Что они делают? Это шейдеры (или своего рода магия? Ха-ха).

Ну, я думаю, что это пока. Надеюсь, ты поможешь мне в этом.

Если это не правильное место, сообщите мне, где. Я не нашел другого места в сообществах Stack Exchange.

  • 1
    ffmpeg может использовать libass для рендеринга программных субтитров, вы также можете просто использовать ffmpeg для демультиплексирования потока субтитров без его рендеринга. «Оптимальное» решение для рендеринга видеопотоков зависит от платформы, OpenGL является просто лучшим «общим знаменателем» для аппаратного ускорения рендеринга. Что касается цветовой магии, ОС и драйверы иногда используют фильтры для видеопотоков, заходят в их настройки и отключают «улучшения»
  • 0
    Спасибо, что ответили @PeterT. Рендеринг субтитров превращает субтитры в изображение, или рендеринг должен выполняться после получения потока субтитров? Это тексты или изображения? - Например, если ffmpeg демультиплексирует поток субтитров и возвращает, если это текстовый поток, программист отвечает за его рендеринг, как обычно это делается? Можно ли использовать OpenGL и рисовать текст потока субтитров? - Надеюсь, вы понимаете мой вопрос.
Показать ещё 3 комментария
Теги:
ffmpeg
libav
libavcodec

1 ответ

0
Лучший ответ

В одном посте много вопросов:

Как обрабатываются "мягкие субтитры"

Точно так же, как и любой другой поток:

  1. читать пакеты из потока в контейнер
  2. Дайте пакет декодеру
  3. Используйте декодированный кадр, как хотите. Здесь, в большинстве контейнеров, поддерживающих субтитры, время представления будет присутствовать. Все, что вам нужно в это время, это получить текст и записать его на изображение в то же время презентации. Существует много способов распечатать текст на видео, используя ffmpeg или другую библиотеку

Каков наиболее используемый рендерер, а какой самый быстрый и лучший?

  1. большинство из них зависит от базовой системы. Например, Qt только переносит собственные средства визуализации и даже имеет версию openGL
  2. Вы можете быть такими же быстрыми, как позволяет базовая система. Поддерживает ли она буферизацию? Может ли он отображаться в формате декодированного пикселя или вам нужно выполнить преобразование цвета раньше? Эта тема слишком широка
  3. Лучше только зависеть от варианта использования. это слишком широкое

какой формат возвращается AVFrame? Это необработанный формат (enum AVPixelFormat) и зависит от кодека. Существует список YUV и RGB FOURCC, которые охватывают большинство форматов в ffmpeg. Программно вы можете получить доступ к таблице AVCodec::pix_fmts чтобы получить формат пикселя для поддержки определенного кодека.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню