FFmpeg a výroba náhledů v AVIF

hknmtt

  • ***
  • 122
    • Zobrazit profil
    • E-mail
FFmpeg a výroba náhledů v AVIF
« kdy: 20. 11. 2024, 17:06:26 »
Mam prikaz na generovanie obrazkov z videa:

Kód: [Vybrat]
ffmpeg-hide_banner -loglevel error -i foo.mkv -vf thumbnail=n=50,fps=1/5,scale='if(gt(dar,320/180),180*dar,320)':'if(gt(dar,320/180),180,320/dar)',setsar=1,crop=320:180,tile=6x4,crop=1920:720 %d.avif
Ak pouzijem jpeg format, tak nie je problem. Ak ale pouzijem avif, tak mi to hodi error:

Kód: [Vybrat]
[libaom-av1 @ 0000000000ed2b00] Failed to initialize encoder: Invalid parameter
[libaom-av1 @ 0000000000ed2b00] Additional information: g_timebase.num out of range [1..cfg->g_timebase.den]
[vost#0:0/libaom-av1 @ 0000000002d3fa40] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height. Error while filtering: Invalid argument
[out#0/avif @ 0000000002deb5c0] Nothing was written into output file, because at least one of its streams received no packets. 

Pouzivam ffmpeg verziou 6.1-full_build-www.gyan.dev.

Aktualizacia na master(2024-11-18-git-970d57988d-full_build-www.gyan.dev), nepomohla.
« Poslední změna: 20. 11. 2024, 17:11:21 od hknmtt »


hknmtt

  • ***
  • 122
    • Zobrazit profil
    • E-mail
Re:FFmpeg - avif thumbnail problem
« Odpověď #1 kdy: 20. 11. 2024, 17:29:41 »
Hm, tak sa mi to podarilo spustit ale nic to nerobi(alebo to robi prilis dlho). Takze asi skor ostanem pri jpg ale manualne zkonvertujem do avif cez vips.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #2 kdy: 20. 11. 2024, 23:20:50 »
Je to boj!

Problém spočívá v tom, že avif formát umí i animace. Takže když se do výchozího avif muxeru cpe video, tak si z kontextu nepozná, že by měl dělat individuální soubory.
Musel jsem procházet patche, abych se někam dostal.


ffmpeg -i "input.mkv" -vf "thumbnail=n=50, fps=1/5, scale='if(gt(dar,320/180),180*dar,320)':'if(gt(dar,320/180),180,320/dar)', setsar=1, crop=320:180, tile=6x4, crop=1920:720" -g 1 -flags global_header -c:v libaom-av1 -still-picture 1 -colorspace 1 -color_primaries 1 -color_trc 1 -f image2 "thumb-%03d.avif"


To zásadní je, že se musí použít muxer image2 a zároveň s ním nastavit flag global header, jinak to produkuje nečitelné soubory. Muxer image2 umí jen sekvence statických obrázků, takže je to pak jednoznačné, a začne logicky fungovat i ta printf expanze na číslování.

https://github.com/FFmpeg/FFmpeg/commit/dd99d34d67e2612a8f133f8a86db9f64b4dfa20d

Ostatní přidané parametry jsou jen tuning enkodéru navíc -still-pictrure a -g 1 jej optimalizuje pro statické snímky.
Ty parametry colorspace, primaries a převodní charakteristika jen přidají metadata, aby se to zobrazovalo s kolorimetrickými parametry Rec 709 (res. sRGB), což bude asi odpovídat většině použitých vstupů.
Zdálo se mi totiž, že různé dekodéry AVIF pak lehce ujížděly s barvami a bylo to desaturované, než jsem tohle přidal.
Ale otestujte si to.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #3 kdy: 20. 11. 2024, 23:25:42 »
A musím říct, že mi přijde lepší, jak tohle vyřešili u podpory WebP.. Tam jsou prostě dva enkodéry libwebp, libwebp_anim - hotovo.
Jak libaom-av1, tak libwebp jsou víceméně commity od Google, dokonce jsem dohledal i nějaké rejectnuté patche, aby to i u AV1 bylo stejné. Nevím, moc to nechápu, ale to je jedno :)

hknmtt

  • ***
  • 122
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #4 kdy: 21. 11. 2024, 08:29:18 »
Funguje to 👍🏻


hknmtt

  • ***
  • 122
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #5 kdy: Dnes v 17:08:38 »
Teraz som to skusal na ubuntu server 22.04.5 s ffmpeg 7.0.2(binarka z https://johnvansickle.com/ffmpeg/) a zase to blbne.

Kód: [Vybrat]
[libaom-av1 @ 0x7600ac0] Failed to initialize encoder: Invalid parameter
[libaom-av1 @ 0x7600ac0]   Additional information: g_timebase.num out of range [1..cfg->g_timebase.den]
[vost#0:0/libaom-av1 @ 0x75ca380] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x75ccec0] Error sending frames to consumers: Invalid argument
[vf#0:0 @ 0x75ccec0] Task finished with error code: -22 (Invalid argument)
[vf#0:0 @ 0x75ccec0] Terminating thread with return code -22 (Invalid argument)
[vost#0:0/libaom-av1 @ 0x75ca380] Could not open encoder before EOF
[vost#0:0/libaom-av1 @ 0x75ca380] Task finished with error code: -22 (Invalid argument)
[vost#0:0/libaom-av1 @ 0x75ca380] Terminating thread with return code -22 (Invalid argument)
[out#0/image2 @ 0x75c8e00] Nothing was written into output file, because at least one of its streams received no packets


Pre porovnanie povodny error:
Kód: [Vybrat]
[libaom-av1 @ 0000000000ed2b00] Failed to initialize encoder: Invalid parameter
[libaom-av1 @ 0000000000ed2b00] Additional information: g_timebase.num out of range [1..cfg->g_timebase.den]
[vost#0:0/libaom-av1 @ 0000000002d3fa40] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height. Error while filtering: Invalid argument
[out#0/avif @ 0000000002deb5c0] Nothing was written into output file, because at least one of its streams received no packets.

Teraz ma problem s Error sending frames to consumers, predtym s Error while filtering.

Mozno tej binarke nieco chyba alebo treba doinstalovat nejaku kniznicu? Toto mi hadze na linux serveri, povodny erorr na windows desktope. Takze tie binarky su znacne odline a aj uplne iny OS.