Может ffmpeg av освобождать, возвращают точный PTS?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

7
задан halfelf 19 December 2018 в 08:10
поделиться

3 ответа

Я думаю, что наконец выяснил то, что продолжается на основе комментария, сделанного в http://www.dranger.com/ffmpeg/tutorial05.html :

ffmpeg переупорядочивает пакеты так, чтобы DTS пакета, обрабатываемого avcodec_decode_video (), был всегда быть тем же как PTS кадра, который это возвращает

Перевод: Если я подам пакет в avcodec_decode_video (), который имеет PTS 12, то avcodec_decode_video () не возвратит декодируемый кадр, содержавшийся в том пакете, пока я не подаю его позже пакет, который имеет DTS 12. Если PTS пакета совпадает со своим DTS, то данный пакет совпадает с возвращенным кадром. Если PTS пакета будет 2 кадрами позже, чем его DTS, то avcodec_decode_video () задержит кадр и не возвратит его, пока я не обеспечу еще 2 пакета.

На основе этого поведения, я предполагаю, что av_read_frame (), возможно, переупорядочивает пакеты от IPBB до IBBP так, чтобы avcodec_decode_video () только буферизовал кадры P для 3 кадров вместо 5. Например, различие между входом и выводом кадра P с этим упорядочиванием равняется 3 (6 - 3):

|                  I B B P B B P
|             DTS: 0 1 2 3 4 5 6
| decode() result:       I B B P

по сравнению с различием 5 с упорядочиванием стандарта (6 - 1):

|                  I P B B P B B
|             DTS: 0 1 2 3 4 5 6
| decode() result:       I B B P

< пожмите плечами/>, но это - чистая догадка.

10
ответ дан 2 September 2019 в 02:53
поделиться

Хорошо, поцарапайте мой предыдущий запутанный ответ.

Для фильма IBBPBBI, Вы ожидали бы, что PTSes будет похож на это (в декодировании порядка)

0, 3, 1, 2, 6, 4, 5, ...

соответствие кадрам

I, P, B, B, I, B, B, ...

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

1
ответ дан 2 September 2019 в 02:53
поделиться

Я вполне уверен, что Вы получаете точные значения. Это могло бы помочь если Вы вещь потока MPEG как, ну, в общем, поток. В этом случае до IBBPBB, который Вы видите, обычно была бы другая Республиканская партия. Возможно, что-то вроде этого (использующий ту же нотацию в качестве исходного вопроса):

P(-3,-2)  B(-2,-1)  B(-1,0)

В основном кадры B после меня структурируют, на основе кадра меня и последний кадр P от предыдущие Республиканская партия.

, В то время как имеет логический смысл для видео начинаться с этим:

Start GOP: IPBBPBBPBB...

Позже это должно быть

Start GOP: IBBPBBPBBPBB
Start GOP: IBBPBBPBBPBB
Start GOP: IBB... 

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

FFMPEG, возможно, просто воздержался от "особого случая" первой Республиканской партии.

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

, Приведет ли это на самом деле к потере кадров, будет зависеть от реализации FFMPEG, но худший вариант развития событий - то, что Вы теряете 83 миллисекунды (2 кадра на уровне 24 кадр/с).

0
ответ дан 2 September 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: