Videobilderfassung: I-Frame vs. P-Frames

448
Tina J

Ich versuche, verschiedene Frames in x264-kodierten Videodateien in pngDateien (in python) aufzunehmen und dann die Qualität dieser zu vergleichen:

cap = cv2.VideoCapture(filename); //get frame_number for saving, and save the frame cap.set(cv2.CAP_PROP_POS_FRAMES,frame_no); ret, frame = cap.read()  cv2.imwrite(dir_path+'uniform_frame_'+str(frame_no)+".png", frame); 

Jetzt habe ich mich gefragt, ob ich ein I-Frame abrufe. Bedeutet das, dass es eine höhere Qualität als andere Frames hat, z. B. P-Frames und B-Frames ? (In der Regel werden Keyframes nicht komprimiert, daher müssen sie eine höhere Qualität und weniger Rauschen haben).

0

1 Antwort auf die Frage

2
Gyan

Alle Frames innerhalb eines codierten Videostreams werden komprimiert. I-Frame zeigt einfach an, dass das Bild ohne Bezug auf andere codierte Bilder rekonstruiert werden kann.

Da I-Frames in der Regel als Referenz für andere Bilder verwendet werden, schont ein intelligenter Encoder die Quantisierung und ist daher in der Regel von höherer Qualität. P-Frames haben mehr Quantisierung und B-Frames noch mehr.

Vielen Dank. So haben die gespeicherten Framedateien in der Regel höhere Qualitäten. Tina J vor 5 Jahren 0
@TinaJ Normalerweise ja, es sei denn, beim Kodieren hat jemand mit den Einstellungen gespielt. I-Frames sind teurer als P- oder B-Frames, daher muss ein Kompromiss gemacht werden. Siehe: https://en.wikibooks.org/wiki/MeGUI/x264_Settings#ipratio slhck vor 5 Jahren 0
@slhck Übrigens noch eine kurze Frage: Wie ist der Abstand zwischen den I-Frames? Ich habe in den Videos, die ich gesehen habe, 1 FPS festgestellt (z. B. 1 pro 30 Bilder). Ist es immer so? Ich dachte es ist abhängig vom Inhalt. Tina J vor 5 Jahren 0
Es ist variabel - der Benutzer kann ein konstantes Intervall erzwingen oder den Encoder mit einigen weichen Einschränkungen wie max. Und min. Intervall entscheiden lassen. Gyan vor 5 Jahren 0