Понимание точек, dts, time_base в FFmpeg
Понимание точек, dts, time_base в FFmpeg
Сначала представим концепцию:

PTS:Presentation Time Штамп. PTS в основном используется для измерения времени отображения декодированного видеокадра.

DTS:Decode Time Штамп. DTS главным образом определяет, когда битовый поток, считанный в память, начинает отправляться в декодер для декодирования.

То есть pts отражает момент, когда кадр начинает отображаться, а dts — когда поток данных начинает декодироваться.

Как вы понимаете здесь «когда»? Если есть определенный кадр, предположим, что он начинает отображаться с 10-й секунды. Так какие у него баллы? Это 10? Или 10-ки? Или ни того, ни другого.

Чтобы ответить на вопрос индивидуальный,Сначала представим концепцию временной базы в FFmpeg.,То естьtime_base。Его также используют для измерения временииз。

Если разделить 1 секунду на 25 равных частей, то можно понять это как линейку, тогда каждый квадрат представляет 1/25 секунды. Time_base={1, 25} в настоящее время.

Если вы разделите 1 секунду на 90 000 частей, каждый тик будет равен 1/90 000 секунды, а time_base = {1, 90 000} в это время.

Так называемая временная база показывает, сколько секунд составляет каждая шкала.

Значение ptsiz — это то, сколько индивидуальных временных масштабов он занимает (сколько индивидуальных сеток он занимает).этоиз Единица измерения не секунды,Но масштаб времени. Толькоhapts плюс time_base используются одновременно.,Чтобы выразить, сколько времени это занимает.

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

баллы = 20 тиков time_base={1,10} Каждый масштаб составляет 1/10 сантиметра. Значит длина объекта=точки*time_base=20*1/10 см.

В ffmpeg av_q2d(time_base)=сколько секунд длится каждый тик.

На этом этапе вам не составит труда понять, что pts*av_q2d(time_base) — это временная метка отображения кадра.

Давайте разберемся в преобразовании базы времени и в том, почему оно происходит.

первый,Различные форматы упаковки,временная база не та. кроме того,Весь индивидуальный процесс перекодирования,Временная база, соответствующая разным изданным состояниям, также противоречива.

В качестве примера возьмем формат упаковки mpegts 25fps (только видео, аудио примерно одинаковое, но немного другое).

Для несжатых данных (например, YUV или других) соответствующей структурой в ffmpeg является AVFrame, а ее базой времени является time_base AVCodecContext, AVRational{1,25}.

Базой времени, соответствующей сжатым данным (соответствующая структура — AVPacket), является time_base AVStream, AVRational{1,90000}.

Поскольку статус данных другой и временная база другая, мы должны преобразовать его. Сколько ячеек он занимает в масштабе времени 1/25 и занимает 10 ячеек в масштабе 1/90000? Это конвертация очков.

Рассчитайте временную позицию кадра во всем видео на основе точек: временная метка (секунды) = pts * av_q2d(st->time_base)

Длительность имеет те же единицы измерения, что и точки, а длительность указывает, сколько ячеек занимает длительность текущего кадра. Или чтобы понять, сколько кадров занимает интервал между двумя кадрами, надо понимать единицу измерения.

pts: количество сеток av_q2d(st->time_base): секунды/деление

Рассчитать продолжительность видео: время (секунды) = st->duration * av_q2d(st->time_base)

Внутреннее время ffmpeg и метод преобразования стандартного времени: временная метка внутри ffmpeg = AV_TIME_BASE * время (секунды) AV_TIME_BASE_Q=1/AV_TIME_BASE

av_rescale_q(int64_t a, AVRational bq, AVRational cq) функция

Цель этой функции — вычислить a*bq/cq для настройки временной метки с одной временной базы на другую.

При выполнении преобразования развертки эту функцию следует использовать в первую очередь, поскольку она позволяет избежать ситуаций переполнения.

Функция указывает, сколько она занимает сетки под bq и под cq.

По поводу подсчета аудиобаллов:

Audio sample_rate: количество выборок в секунду, то есть частота дискретизации, указывающая, сколько точек выборки собирается в секунду. Например, 44100HZ означает сбор 44100 выборок за одну секунду.

То есть время каждой выборки составляет 1/44100 секунды.

AVFrame аудиокадра содержит nb_samples выборок, поэтому время, необходимое для AVFrame, составляет nb_samples раз (1/44100) секунд.

То есть длительность_s=nb_samples раз (1/44100) секунд стандартного времени.

преобразован в AVStream временная база duration=duration_s / av_q2d(st->time_base)。

на основеst->time_base из num Значение обычно равно частоте дискретизации, так duration=nb_samples。

pts=n* duration=n *nb_samples。

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.