Можно ли хранить несколько абзацев видео, каждый из которых имеет свои собственные параметры, в одной дорожке файла mp4? - PullRequest
0 голосов
/ 15 июня 2019

Я хочу закодировать последовательность видеокадров (FHD) в поток h264 следующим образом: от времени t1 до времени t2: кодировать с «основным» профилем, FHD и со скоростью 30 кадров в секунду.От времени t3 до времени t4: кодирование с «высоким» профилем, HD (в масштабе) и со скоростью 15 кадров в секунду.От времени t5 до времени t6: кодировать с «основным» профилем, FHD и со скоростью 30 кадров в секунду.

Примечание: t1

Мой вопросВ соответствии со стандартом MP4, возможно ли поместить видеопотоки, закодированные с различными параметрами, в одну и ту же видеодорожку файла mp4?Если это невозможно, что является лучшей альтернативой?

1 Ответ

1 голос
/ 15 июня 2019

Да, по крайней мере, согласно спецификации. Если вы посмотрите на ISO / IEC 14496-15 (3-е издание), он содержит определение Трек набора параметров :

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

Насколько я понимаю, в этом случае вместо записи исходных данных SPS / PPS в поле avcC в stbl вы пишете отдельную дорожку, содержащую изменяющиеся данные SPS / PPS в качестве выборок синхронизации. Таким образом, по крайней мере, в соответствии со спецификацией, вы должны иметь выборки в этом потоке с временами представления t1, t2, t3, t4, t5, а сами выборки будут содержать обновленные данные SPS / PPS. Эта цитата из того же стандарта, кажется, согласна:

Наборы параметров: Если используется набор параметров элементарного потока, то выборка в параметре поток должен иметь время декодирования, равное или предшествующее моменту вступления в силу набора (ов) параметров мгновенно. Это означает, что для набора параметров, который будет использоваться в изображении, он должен быть отправлен до образец, содержащий это изображение, или образец для этого изображения.

ПРИМЕЧАНИЕ Наборы параметров хранятся либо в описаниях сэмплов видеопотока, либо в наборе параметров. поток, но никогда в обоих. Это гарантирует, что нет необходимости изучать каждую часть видео элементарно поток, чтобы найти соответствующие наборы параметров. Это также позволяет избежать зависимости неопределенной продолжительности между образцом, который содержит определение набора параметров и примеры, которые его используют. Хранение наборов параметров в образце описания видеопотока предоставляют простой и статичный способ предоставления наборов параметров. Набор параметров элементарные потоки, с другой стороны, являются более сложными, но допускают больший динамизм в случае обновлений. Наборы параметров могут быть вставлены в элементарный поток видео, когда файл передается по транспорту, который разрешает такие обновления набора параметров.

ИСО / МЭК 14496-15 (3-е издание) также определяет дополнительные блоки avc3 / avc4, которые при использовании должны позволять фактически записывать наборы параметров в полосе с единицами NAL видео:

Если имя записи примера - «avc3» или «avc4», применяется следующее:

  1. Если выборка является единицей доступа IDR, все наборы параметров, необходимые для декодирования этой выборки, должны быть включены либо в запись выборки, либо в сам образец.

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

Другой вопрос, несмотря на то, что стандарт позволяет достичь этого как минимум двумя способами (в диапазоне с avc3, вне диапазона с треком с набором параметров), сколько игроков это соблюдают. Я бы предположил, что, по крайней мере, заглянув в источники ffmpeg, можно найти хорошее начало.

Ответы на этот вопрос также указывают на то, что многие демультиплексоры используют только поле avcC, а не отдельную дорожку набора параметров, но пара быстрых поисков в Google показывает, что по крайней мере оба vlc На форумах / ffmpeg и в новостных рассылках есть упоминания об этих терминах, поэтому я бы сказал, что лучше всего попробовать скопировать такой файл и просто проверить, что происходит.

...