FFmpeg a výroba náhledů v AVIF

hknmtt

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

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

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

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #5 kdy: 03. 12. 2024, 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.

hknmtt

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #6 kdy: 03. 12. 2024, 18:18:09 »
Zda sa ze problem je v tom ze johnova verzia nema strasne vela pluginov takze niekde je prerusena retaz toku dat. Ale neviem kde inde zohnat aktualnu verziu ffmpeg na ubuntu server 22.

hknmtt

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #7 kdy: 03. 12. 2024, 18:33:32 »
Toto je johnova verzia:

Kód: [Vybrat]
ffmpeg version 7.0.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil      59.  8.100 / 59.  8.100
libavcodec     61.  3.100 / 61.  3.100
libavformat    61.  1.100 / 61.  1.100
libavdevice    61.  1.100 / 61.  1.100
libavfilter    10.  1.100 / 10.  1.100
libswscale      8.  1.100 /  8.  1.100
libswresample   5.  1.100 /  5.  1.100
libpostproc    58.  1.100 / 58.  1.100

Toto je moja("oficialna") windowsacka:
Kód: [Vybrat]
ffmpeg version 2024-11-18-git-970d57988d-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      59. 47.100 / 59. 47.100
libavcodec     61. 25.100 / 61. 25.100
libavformat    61.  9.100 / 61.  9.100
libavdevice    61.  4.100 / 61.  4.100
libavfilter    10.  6.101 / 10.  6.101
libswscale      8.  9.101 /  8.  9.101
libswresample   5.  4.100 /  5.  4.100
libpostproc    58.  4.100 / 58.  4.100


Ocividne Johnovej verzii chyba strasne vela veci. Takze tam je problem. Ale neviem ako sa proste dostat k nejakej "normalnej" verzii na tom ubuntu server 22.

hknmtt

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #8 kdy: 03. 12. 2024, 19:25:58 »
podarilo sa mi nahodit oficialny ffmpeg z ppa:ubuntuhandbook1/ffmpeg7.

Kód: [Vybrat]
ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
configuration: --disable-decoder=amrnb --disable-gnutls --disable-liblensfun --disable-libopencv --disable-podpages --disable-sndio --disable-stripping --enable-avfilter --enable-chromaprint --enable-frei0r --enable-gcrypt --enable-gpl --enable-ladspa --enable-libaom --enable-libaribb24 --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libdc1394 --enable-libdrm --enable-libdvdnav --enable-libdvdread --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libilbc --enable-libjack --enable-libjxl --enable-libklvanc --enable-libkvazaar --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librabbitmq --enable-librist --enable-librsvg --enable-librubberband --enable-libshine --enable-libsmbclient --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-nonfree --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-vaapi --enable-libvpl --enable-libxavs2 --enable-libdavs2 --enable-libvmaf --enable-libvvenc --cc=x86_64-linux-gnu-gcc --cxx=x86_64-linux-gnu-g++ --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.100 / 61. 19.100
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

ale aj tak to nejde.

hknmtt

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #9 kdy: 03. 12. 2024, 19:43:27 »
vraj nieco so settb ale ani to nepomohlo. vratim sa k png/jpg a manualne skonvertujem do avif.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #10 kdy: 03. 12. 2024, 22:46:55 »
Jo, teď na to koukám.. John zřejmě přestal buildovat ffmpeg, včetně těch gitů :(. Všechno je to staré.
libaom je tam víc než rok stará verze 3.2, co neumí ty timebase, jak vám to píše. V knihovně už je commit, co to opravoval pro podobná použití, aktuální release libaom je 3.11.

Tady máte aktuální release verzi ffmpeg 7.1, statický build pro Linux, mělo by to jít i na starším Ubuntu
https://filetransfer.io/data-package/VKIdPRim

Je to teď jen narychlo bez GPL a non-free věcí, ale na thumbnaily by to mělo stačit, dekodéry tam jsou.
Plná verze s x265, x264 atd. se mi ještě kompiluje.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #11 kdy: 03. 12. 2024, 23:12:06 »
Tady kdyžtak ještě tučnější verze, jsou tam zapečené i non-free a GPL knihovny. Chybí akorát CUDA, to ale, počítám, ve virtuálu asi nepoužijete..
https://filetransfer.io/data-package/3H3pGYs5

hknmtt

  • ***
  • 129
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #12 kdy: Dnes v 09:13:20 »
Dakujem, ale ako som pisal, rozbehal som ten 7.1 z ppa:ubuntuhandbook1/ffmpeg7.

Problem je ze toto nekonzistentne spravanie je pre mna neprijatelne, takze pouzivat konverziu do avif ako samostatny krok je pre mna bezpecnejsie riesenie nez sa snazit najst "ten spravny" ffmpeg. Do buducna si urcite skompilujem vlastny ffmpeg, ale aktualne na to nemam cas ani potrtebu to riesit.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #13 kdy: Dnes v 09:43:29 »
Chápu, to je samozřejmě také možnost, udělat z toho nejdřív např. bezztrátové png, a pak to převést třeba pomocí avifenc.
Je to tak, že kodeky pro AV1 se stále poměrně dost mění (v porovnání se stabilními implementacemi jako např. x264, LAME atp.) a když ten ffmpeg někdo sestavuje proti rok starým verzím knihoven, tak můžou nastat problémy. Ale taky se to usadí.

Jinak kdybyste si chtěl někdy dělat svoje statické buildy, ať už z jakéhokoliv důvodu, tak většinou docela dobrý začátek je tohle repo:
https://github.com/markus-perl/ffmpeg-build-script
Můžete to buildovat i s Dockerem v podstatě nezávisle na distribuci, případně upravit podle potřeby.

Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #14 kdy: Dnes v 09:45:52 »
Tahle zpráva je omyl, pardon :)