ffmpeg: pomalý zápis na SD, pomaleji než sekvenčně

Záznam a úpravy zvuku a videa na počítači

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dovok 12. 10. 2017 21:36

Dobrý den, v ffmpeg převádím soubor v jednotkách GB do jiného kontejneru s parametrem -copy (tedy rychlostí asi 7500 fps ~ 120 MB/s - jen orientačně) - SSD to zvládá takto rychle. Zkopíruji li ho následně celý na SD kartu - probíhá to rychlostí 60 MB/s.
Bohužel, zapisuje li ffmpeg cílový soubor na SD kartu, je zápis pomalejší, na kvůli tomu, že by sama karta byla pomalejší (kopírování velkého souboru na ni probíhá 60 MB/s), ale nevím proč kvůli čemu, myslím, že to nějak souvisí se způsobem zápisu nebo flushováním nebo velikostí výstupního bloku dat ffmpeg. - Rychlost je mnohem nižší - asi jen 250 fps ~ 5-10 MB/s.

Nevím, zda za to může chyba OS (Mám Windows 8) nebo ffmpeg (mladší jako půl roku) nebo snad SD karty (pokud nepočítám, že pomalejší rychlost zápisu menších bloků je vlastnost). Potřeboval bych poradit, jak ten zápis zrychlit na úroveň sekvenčního zápisu (60 MB/s) (nebo přesněji sekvenční zápisu menších bloků, pokud ta hypotéza platí), poradíte jak? Existuje například nějaké řešení v linuxu, kde by se cachování dalo simulovat zřetězením nějakým cachovacím příkazem za pípu ?Protože právě takhle to budu zrovna chci použít, že chci zapisovat rovnou na kartu. Chci využít prostě plnou rychlost, co karta umí i pokud by to mělo nějaké nevýhody (pár MB RAM jako cache) nebo snad nějaké riziko ztráty atomicity...
dovok
Junior

Odeslat příspěvekod Milanr1 13. 10. 2017 05:53

Řešíš nesmysly.
Zápis malých souborů je vždy pomalejší.
Milan
Milanr1
Pokročilý
Uživatelský avatar

Odeslat příspěvekod vladimir 13. 10. 2017 08:47

ffmpeg zřejmě nezapisuje sekvenčně. Pokud se na převodu podílí více jader procesoru, je možné, že každé zpracovává svou část souboru a výsledek se ukládá na přeskáčku podle toho, jak je hotový. Nebo se samostatně zpracuje video a audio a ukládá se prokládaně, tedy v souboru jsou na střídačku kousky videa a audia, tedy zdánlivě sekvenční zápis je ve skutečnosti random. Na to není SD-karta stavěná. Pokud preferuješ práci na přenosných médiích, pořiď si přenosný SSD disk.
vladimir
Expert
Uživatelský avatar

Odeslat příspěvekod dovok 13. 10. 2017 19:39

Odpovídáš nesmysly. Výsledný soubor je identický, tudíž stejně velký. (dyť jsem dokonce psal, že ho v prvním případě ukládám na SSD a pak zkopíruji, v druhém případě rovnou zapisuji na kartu) - Možná je problém v zápisu ffmpeg po menších blocích. A právě na to se ptám, aby zápis byl nějak cachovaný aby, karta viděla, že se na ni zapisuje, jako při kopírování, tedy tak rychle
dovok
Junior

Odeslat příspěvekod Nargon 13. 10. 2017 21:47

Nevím jak v linuxu, ale ve windows se dá zapnout "cache" na disk. Defaultně je zapnutá jen pro interní disky (SATA), všechny vyměnitelné zařízení, např flashky to mají vypnuté. Je to holt z důvodu že lidi jsou prasata a vytrhávají zařízení aniž by ho odpojily. Do které kategorie patří sd karty nevím, ale tipuji že to bude spíš jako u flashek. Tak se zkus podívat tímto směrem.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod dovok 20. 11. 2017 12:08

To by mě zajímalo, jak se to nastavuje na linuxu. Jednak rychlé odebrání vs lepší výkon, za druhé cache – podobné co je na windows.

a ve windows právě že v těch vlastnostech disku to nejde nastavit (dialog se záložkou Zásady odebrání, spodní část dialogu má checkbox povolit mezi paměť a vyprazdnování) - ale změna stavu a uložení neprojde,hodí to nějakou hlášku, že to nejde nastavit.
dovok
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků