FFmpeg a výroba náhledů v AVIF

hknmtt

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

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

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

  • ***
  • 126
    • 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.

hknmtt

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #6 kdy: Dnes v 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

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #7 kdy: Dnes v 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

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #8 kdy: Dnes v 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

  • ***
  • 126
    • Zobrazit profil
    • E-mail
Re:FFmpeg a výroba náhledů v AVIF
« Odpověď #9 kdy: Dnes v 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: Dnes v 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: Dnes v 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