Почему FFmpeg декодирует необработанное видео YUV420p?

11197
Nick van Tilborg

Почему FFmpeg декодирует необработанное видео в плоском 8-битном пиксельном формате YUV420, а также кодирует видео с использованием того же пиксельного формата YUV420p?

Я провел несколько тестов производительности, кодирующих только необработанное видео YUV420p с использованием кодера MPEG2 на FreeScale PowerPC с использованием следующих настроек:

ffmpeg -f rawvideo -pix_fmt yuv420p -s cif -r 25 -i YUV420p_cif.yuv -vcodec mpeg2video -pix_fmt yuv420p -r 25 -g 25 -s cif -b:v 1024k Output.mp4 

Видеопоследовательность длится 15 минут. Я узнал, что весь процесс использует:

  • 3,9% времени чтения файла;
  • 3,7% времени декодирования;
  • 91,2% времени кодирования;
  • 0,7% времени муксинга + написание файла;
  • 0,5% времени инициализирует / закрывает ffmpeg

Весь процесс был выполнен за 382 секунды (58,9 кадров в секунду), поэтому декодирование заняло 14,1 секунды. Это мне кажется много!

Поскольку в процессе кодирования используется пиксельный формат YUV420p, почему FFmpeg требуется 3,7% времени для декодирования необработанного YUV420p в тот же формат?

2

1 ответ на вопрос

2
slhck

In order to encode the video, you will still have to get each frame's data in an internal format, from where it can be fed to the encoder.

AVFrame is used for representing frames internally, and it can take any pixel format you want – you just have to allocate it correctly.

And this is why decoding takes CPU time, even if your input and output pixel formats are the same: You need to allocate memory for each frame, read it (even if it's raw data), and then pass on this frame to the encoder. An example of how the encoding and decoding is handled can be seen here.

Я думал, что YUV420p был внутренний формат. Когда я вводю необработанное видео YUV422, это занимает около 30 секунд, что вдвое увеличивает время декодирования по сравнению с YUV420. Итак, я действительно хочу знать, в какой форме или типе описываются внутренние данные, если они не являются субдискретизированными / плоскими. Nick van Tilborg 11 лет назад 0
Поцарапайте это - каждый кадр может принять различный формат пикселя. То, что вы видите, это накладные расходы, используемые для выделения данных и чтения их из файла. slhck 11 лет назад 1

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