od PandaWild » 1. říjen 2017 12:51
Parametr "GOP length" při konverzi na MOV Motion JPEG kodek je omyl autora, u Motion JPEG se neuplatní, je automaticky = 1. Ověřil jsem to tak, že jsem video zkonvertoval s různým nastavením GOP a soubory jsem pak porovnal - lišily se jen v pár bajtech obsahujících časové razítko času konverze streamu, ale samotná data se nijak nelišila.
Podrobněji ke GOP (=group of pictures):
U MPEG videí (DivX, MJPEG4 atd) se používají 3 typy snímků:
1) I-frame (intra coded picture, též keyframe, klíčový snímek) obsahuje úplný obraz snímku, je to plnohodnotný JPEG obrázek.
2) P-frame (predictive coded picture) obsahuje rozdílovou informaci od předešlého snímku. P-frame umožňuje obraz zkomprimovat více než I-frame.
3) B-frame (bipredictive coded picture) obsahuje rozdílovou informaci od některého předešlého a/nebo následujícího snímku. B-frame má ještě úspornější kompresi proti P-frame nebo I-frame.
Rozdílová informace mohou být nejen změněné pixely, ale i celé oblasti obrazu - např. při pohybu kamery se posouvá pozadí scény, rozdílové snímky použijí starý obraz pozadí a posunou ho na nové místo (k tomu se používají pohybové vektory).
GOP skupina snímků je ucelená skupina začínající klíčovým snímkem I-frame, za kterým následuje několik P-frame snímků, které jsou prokládané B-frame snímky, typicky např. IBBPBBPBBPBBPBB (=PAL). Dekodér snímků si musí v paměti udržet všechny dekódované snímky GOP skupiny, proto pro hw přehrávače může být délka GOP omezena (15 snímků pro PAL).
Pro sw dekodéry nemusí být omezením velikost paměti a může se zvolit i větší interval mezi klíčovými snímky. Znamená to zmenšení velikosti videa a snížení potřebného datového toku. Nevýhodou je větší náchylnost k nepřesnostem obrazu (chyby se akumulují), ale hlavně - problémy s vystavením a se stříháním. Pokud v přehrávači nastavíte ukazatel pozice, musí se nejdříve vyhledat předešlý klíčový snímek I-frame a od něj postupně dekódovat všechny snímky, až se dostane na požadovanou pozici ukazatele. Což např. při intervalu klíčových snímků 10 sekund může zabrat i několik sekund než video zobrazí nějaký obraz.
Problém je i při stříhání videa. Video se nedá střihnout uprostřed GOP skupiny, obraz nemůže začínat P nebo B snímkem (potřebuje se obrazová informace z I snímku). Obraz se musí nejdříve dekódovat a pak se musí znovu zakódovat, což je časově náročná operace a navíc opakovanou kompresí klesá kvalita obrazu. Jinou možností je střih jen v místech klíčových snímků, ale tím může vzniknout chyba pozice obrazu i několik sekund.
Motion-JPEG je zvláštní varianta MPEG videí. Nepoužívá rozdílové snímky, všechny snímky jsou I-frame, tedy plnohodnotné JPEG obrázky (jako když se nastaví GOP=1). Výhodou je rychlost vystavení pozice a snadnost stříhání - obraz lze střihnout v jakémkoliv místě a uložení je rychlé, data se jen zkopírují bez potřeby rekomprese. Nevýhodou jsou velké nároky na velikost souboru.
Pro fotobanky má otázka délky keyframe intervalu (GOP length) význam např. u Xvid nebo MPEG4 komprese - pro krátký interval roste velikost souboru, pro dlouhý interva se video špatně stříhá a klesá kvalita kvůli kumulaci chyb. Pokud se místo konstantní kvality videa volí konstantní datový tok, má kvalita obrazu jakoby opačné působení - při kratším intervalu klíčových snímků roste náročnost na data a proto pro zajištění potřebného datového toku musí kodek použít úspornější kompresi pro klíčové snímky, čímž následně klesá kvalita obrazu.
Parametr "GOP length" při konverzi na MOV Motion JPEG kodek je omyl autora, u Motion JPEG se neuplatní, je automaticky = 1. Ověřil jsem to tak, že jsem video zkonvertoval s různým nastavením GOP a soubory jsem pak porovnal - lišily se jen v pár bajtech obsahujících časové razítko času konverze streamu, ale samotná data se nijak nelišila.
[u]Podrobněji ke GOP (=group of pictures)[/u]:
U MPEG videí (DivX, MJPEG4 atd) se používají 3 typy snímků:
1) I-frame (intra coded picture, též keyframe, klíčový snímek) obsahuje úplný obraz snímku, je to plnohodnotný JPEG obrázek.
2) P-frame (predictive coded picture) obsahuje rozdílovou informaci od předešlého snímku. P-frame umožňuje obraz zkomprimovat více než I-frame.
3) B-frame (bipredictive coded picture) obsahuje rozdílovou informaci od některého předešlého a/nebo následujícího snímku. B-frame má ještě úspornější kompresi proti P-frame nebo I-frame.
Rozdílová informace mohou být nejen změněné pixely, ale i celé oblasti obrazu - např. při pohybu kamery se posouvá pozadí scény, rozdílové snímky použijí starý obraz pozadí a posunou ho na nové místo (k tomu se používají pohybové vektory).
GOP skupina snímků je ucelená skupina začínající klíčovým snímkem I-frame, za kterým následuje několik P-frame snímků, které jsou prokládané B-frame snímky, typicky např. IBBPBBPBBPBBPBB (=PAL). Dekodér snímků si musí v paměti udržet všechny dekódované snímky GOP skupiny, proto pro hw přehrávače může být délka GOP omezena (15 snímků pro PAL).
Pro sw dekodéry nemusí být omezením velikost paměti a může se zvolit i větší interval mezi klíčovými snímky. Znamená to zmenšení velikosti videa a snížení potřebného datového toku. Nevýhodou je větší náchylnost k nepřesnostem obrazu (chyby se akumulují), ale hlavně - problémy s vystavením a se stříháním. Pokud v přehrávači nastavíte ukazatel pozice, musí se nejdříve vyhledat předešlý klíčový snímek I-frame a od něj postupně dekódovat všechny snímky, až se dostane na požadovanou pozici ukazatele. Což např. při intervalu klíčových snímků 10 sekund může zabrat i několik sekund než video zobrazí nějaký obraz.
Problém je i při stříhání videa. Video se nedá střihnout uprostřed GOP skupiny, obraz nemůže začínat P nebo B snímkem (potřebuje se obrazová informace z I snímku). Obraz se musí nejdříve dekódovat a pak se musí znovu zakódovat, což je časově náročná operace a navíc opakovanou kompresí klesá kvalita obrazu. Jinou možností je střih jen v místech klíčových snímků, ale tím může vzniknout chyba pozice obrazu i několik sekund.
Motion-JPEG je zvláštní varianta MPEG videí. Nepoužívá rozdílové snímky, všechny snímky jsou I-frame, tedy plnohodnotné JPEG obrázky (jako když se nastaví GOP=1). Výhodou je rychlost vystavení pozice a snadnost stříhání - obraz lze střihnout v jakémkoliv místě a uložení je rychlé, data se jen zkopírují bez potřeby rekomprese. Nevýhodou jsou velké nároky na velikost souboru.
Pro fotobanky má otázka délky keyframe intervalu (GOP length) význam např. u Xvid nebo MPEG4 komprese - pro krátký interval roste velikost souboru, pro dlouhý interva se video špatně stříhá a klesá kvalita kvůli kumulaci chyb. Pokud se místo konstantní kvality videa volí konstantní datový tok, má kvalita obrazu jakoby opačné působení - při kratším intervalu klíčových snímků roste náročnost na data a proto pro zajištění potřebného datového toku musí kodek použít úspornější kompresi pro klíčové snímky, čímž následně klesá kvalita obrazu.