FFmpeg a výroba náhledů v AVIF

hknmtt

  • ***
  • 110
    • 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

  • ***
  • 110
    • 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

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