FFmpeg - jak udělat bezztrátové video?

Jirka1

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #15 kdy: 18. 03. 2014, 19:48:00 »
1680 ... bmp 5M, png 90kB => komprese (neztratova) 1:50 .., realita je takova, ze jpeg nebude o moc mensi, pri mym hokuspokusu (pouzit widli paint) je naopak jpeg znacne vetsi (350kB). To je dany prave tim, ze nekde o fotku, ale o grafiku kde sou ohromny stejnobarevny plochy (a jpeg to vlastne rozbije).
To je výsledek konverze v grafickém programu, kdy je času dost. Při grabování je problém ještě v tom, že tuhle konverzi je potřeba stihnout 30x za vteřinu, takže žádná větší komplexnost není možná. Nagrabovat to nekomprimovaně a pak pustit konverzi dává proto lepší výsledky.


michal

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #16 kdy: 18. 03. 2014, 20:01:45 »
z mych skusenosti ma bezstratove video cca 2gb/min zalezi na rozliseni a frameratu. v dobe kdy jsem mel jeste upc a linku z malym uploadem jsem dycky videa pred nahranim na utube prekonvertoval, pouzil jsem treba tenhle prikaz:

ffmpeg -r 20 -i dwarf00%4d.png -i ../dwarf.mp3 -c:v libx264 -preset slow -crf 5 ../dwarf2.mkv

vysledny sopubor mel asi 12 mb a po te co jej utube znovu prekonvertoval tak to porad vypada slibne viz:
http://www.youtube.com/watch?v=3lBQoe1hihc

zajimavy je parametr crf:

Constant Rate Factor (CRF)

This method allows the encoder to attempt to achieve a certain output quality for the whole file when output file size is of less importance. This provides maximum compression efficiency with a single pass. Each frame gets the bitrate it needs to keep the requested quality level. The downside is that you can't tell it to get a specific filesize or not go over a specific size or bitrate.
1. Choose a CRF value

The range of the quantizer scale is 0-51: where 0 is lossless, 23 is default, and 51 is worst possible. A lower value is a higher quality and a subjectively sane range is 18-28. Consider 18 to be visually lossless or nearly so: it should look the same or nearly the same as the input but it isn't technically lossless.

The range is exponential, so increasing the CRF value +6 is roughly half the bitrate while -6 is roughly twice the bitrate. General usage is to choose the highest CRF value that still provides an acceptable quality. If the output looks good, then try a higher value and if it looks bad then choose a lower value.

    Note: The CRF quantizer scale mentioned on this page only applies to 8-bit x264 (10-bit x264 quantizer scale is 0-63). You can see what you are using with x264 --help listed under Output bit depth. 8-bit is more common among distributors.

j

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #17 kdy: 19. 03. 2014, 08:52:26 »
1680 ... bmp 5M, png 90kB => komprese (neztratova) 1:50 .., realita je takova, ze jpeg nebude o moc mensi, pri mym hokuspokusu (pouzit widli paint) je naopak jpeg znacne vetsi (350kB). To je dany prave tim, ze nekde o fotku, ale o grafiku kde sou ohromny stejnobarevny plochy (a jpeg to vlastne rozbije).
To je výsledek konverze v grafickém programu, kdy je času dost. Při grabování je problém ještě v tom, že tuhle konverzi je potřeba stihnout 30x za vteřinu, takže žádná větší komplexnost není možná. Nagrabovat to nekomprimovaně a pak pustit konverzi dává proto lepší výsledky.

... to je jen a vyhradne otazka vykonu CPU/GPU ... standardni desktop dneska vetsinou zvladne bezproblemu komprimovat fulhd v realnym case. Navic pouzivani ztratovych algoritmu je o poznani narocnejsi. V kazdym pripade ukladat 200MB/s je v domacich podminkach, pripadene podminkach maly/stredni firmy naprosto mimo realitu. Tohle ti neda ani low range diskovy pole.

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #18 kdy: 19. 03. 2014, 12:29:45 »
Asi jsem měl na začátku prostě a jednoduše říct, že chci zachytit FullHD hru v realtime na normálním počítači v relativně dobrý kvalitě. "Relativně" znamená v praxi to, že by to mělo být co nejpodobnější skutečnýmu obrazu. Mám k dispozici Core i5-750 (fyzický čtyřjádro, 2,66GHz), 8GB RAM a nic moc disk (budeme uvažovat o 60MB/s a kapacitě 50GB, vyhradím na to starší kousek, bude jen na zachytávání). Chci zachytit alespoň 15 minut záznamu.

Takže v tomhle místě restartuju otázku a odpovědi :-)

(Pro Petra: Pokud by to bylo možný, šlo by zašmodrchat tenhle příspěvek i do toho úvodního? Aby případný nově příchozí věděli na co odpovídat... Díky)

Jirka1

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #19 kdy: 19. 03. 2014, 14:00:34 »
... to je jen a vyhradne otazka vykonu CPU/GPU ... standardni desktop dneska vetsinou zvladne bezproblemu komprimovat fulhd v realnym case. Navic pouzivani ztratovych algoritmu je o poznani narocnejsi. V kazdym pripade ukladat 200MB/s je v domacich podminkach, pripadene podminkach maly/stredni firmy naprosto mimo realitu. Tohle ti neda ani low range diskovy pole.
160MB/s pro nekomprimovaný záznam 1080i50 (karta Decklink) mi dává už roky pole 4xSATA v Raid0. Původně jen z 320GB disků, dnes 4x1TB pod XP. Na doma to moc není, ve firmě zcela bez problémů.


mcx

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #20 kdy: 19. 03. 2014, 16:14:24 »

michal

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #21 kdy: 19. 03. 2014, 17:53:01 »
a co je to za hru? jestli je to 3dcko na zpusob open areny tak to ffmpegem uspokojive nepude nikdy, ale budes muset pouzit glc-capture

Randolf

Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #22 kdy: 19. 03. 2014, 19:26:34 »
a co tohle? - http://en.wikipedia.org/wiki/FFV1
Radsi neco co ma inter-frame prediction. Intra-frame Ti bude znovu zapisovat/prenaset data z cele obrazovky, kdyz jen hyber kurzorem mysi.

Asi bych dal prednost tomu H.264 Lossless...

Pavouk106

  • *****
  • 2 400
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:FFmpeg - jak udělat bezztrátové video?
« Odpověď #23 kdy: 19. 03. 2014, 19:56:34 »
a co je to za hru? jestli je to 3dcko na zpusob open areny tak to ffmpegem uspokojive nepude nikdy, ale budes muset pouzit glc-capture

Je to X3. GLC vypadá dobře. Doteď jsem myslel na ffmpeg kvůli tomu, že je to docela univerzální...