Warum decodiert FFmpeg ein Roh-YUV420p-Video?

11275
Nick van Tilborg

Warum decodiert FFmpeg ein Rohvideo im YUV420-planaren 8-Bit-Pixelformat, wenn es auch das Video mit demselben YUV420p-Pixelformat codiert?

Ich habe ein paar Benchmark-Tests durchgeführt, bei denen nur reines YUV420p-Video mit dem MPEG2-Encoder auf einem FreeScale PowerPC mit den folgenden Einstellungen codiert wurde:

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 

Die Videosequenz dauert 15 Minuten. Ich fand heraus, dass der gesamte Prozess verwendet wird:

  • 3,9% der Zeit beim Lesen der Datei;
  • 3,7% der Zeitdekodierung;
  • 91,2% der Zeitverschlüsselung;
  • 0,7% der Zeit Muxen + Schreiben der Datei;
  • 0,5% der Zeit wird ffmpeg initialisiert / geschlossen

Der gesamte Vorgang wurde in 382 Sekunden (58,9 fps) durchgeführt, sodass die Dekodierung insgesamt 14,1 Sekunden dauerte. Das scheint mir viel zu sein!

Warum verwendet FFmpeg 3,7% der Zeit, um das unformatierte YUV420p-Format in dasselbe Format zu decodieren, da der Codierungsprozess das YUV420p-Pixelformat verwendet?

2

1 Antwort auf die Frage

2
slhck

Um das Video zu kodieren, müssen Sie immer noch die Daten jedes Frames in einem internen Format abrufen, von wo aus sie dem Encoder zugeführt werden können.

AVFrame wird für die interne Darstellung von Frames verwendet und kann ein beliebiges Pixelformat annehmen - Sie müssen es nur richtig zuordnen.

Aus diesem Grund nimmt die Dekodierung CPU-Zeit in Anspruch, auch wenn Ihre Eingabe- und Ausgabepixelformate gleich sind: Sie müssen für jeden Frame Speicher zuweisen, ihn lesen (auch wenn es sich um Rohdaten handelt) und diesen Frame dann an den Encoder weitergeben. Ein Beispiel für die Handhabung der Kodierung und Dekodierung finden Sie hier .

Ich dachte, YUV420p sei das interne Format. Wenn ich ein unformatiertes YUV422-Video eingebe, dauert es etwa 30 Sekunden, sodass die Dekodierzeit doppelt so groß ist wie bei YUV420. Also, ich möchte eigentlich wissen, in welcher Form oder in welcher Art die internen Daten beschrieben werden, ob sie nicht unterabgetastet / planar sind. Nick van Tilborg vor 11 Jahren 0
Scratch that - Jeder Frame kann ein anderes Pixelformat annehmen. Was Sie sehen, ist der Aufwand, der für die Zuordnung der Daten und das Auslesen der Daten aus der Datei benötigt wird. slhck vor 11 Jahren 1