[RISOLTO] mpv ffmpeg e AV1

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3931
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

[RISOLTO] mpv ffmpeg e AV1

Messaggio da joe »

Ieri sono inciampato in un video codificato AV1 di cui veniva riprodotto solo l'audio da MPV.

Anni fa ricordo che gli AV1 venivano riprodotti grazie al pacchetto "dav1d" che, sempre a memoria, andava installato ed incluso nella compilazione di ffmpeg, io ero partito dal pacchetto ffmpeg ufficiale di Pat, e aveva funzionato, o almeno mi pareva. Poi siccome ove possibile avevo attivate le opzioni -vo=gpu e hwdec=auto, tendenzialmente tendo a preferire le versioni h264 come formato dei video, ove è possibile scegliere perché vengono decodificati dalla scheda video, il ché vista la pochezza della stessa non è un plus se non per lasciare scarica la CPU, ma nei casi di video a 1080@60fps, anche gli h264/AVC1 non li regge ed è leggermente meglio farli decodificare alla CPU. Per la cronaca la scheda video è una nvidia GT210, quindi roba da 30 euro da ufficio, niente di ché.
Ci sarebbe da che ridire anche su driver che "funzionicchia", o meglio funziona ma non è il massimo dell'integrazione nel sistema. Su SBo è nvidia-legacy340, non più mantenuto. L'avevo patchato per adeguarlo al kernel, copiando da arch, ma la parte driver non era così limpida.

L'obiettivo banalmente è quello di riuscire a riprodurre gli AV1 in modo accettabile, su slackware64-15.0 e usando MPV.

Ho provato ad aggiornare MPV ffmpeg e le loro code di dipendenze incluso "dav1d". La situazione sembra peggiorata. Ora mpv non apre neanche la finestra in idle. Avevo la versione 0.37, ora c'è la 0.38, forse è cambiato qualcosa anche nella configurazione, nel senso che le opzioni presenti nel mpv.conf potrebbero non andar più bene, ma la butto lì, non so...

Aggiungo che ho anche il sistema non perfettamente aggiornato, tra gli aggiornamenti visibili da slackpkg c'è anche il kernel.
Insomma se riesco a risolvere senza aggiornare tutto è meglio, altrimenti pazienza.

Se avete suggerimenti...

Per il test ho preso due files, uno H264 a 60fps

https://www.elecard.com/storage/video/T ... 0x1080.mp4

e l'altro AV1 sempre a 60fps:

https://www.elecard.com/storage/video/C ... x1080.webm

La cosa strana è che Firefox li riproduce...
Anche lì, non alla perfezione perché sono entrambi a 60 fps, ma quello è proprio un limite del mio hardware ormai da dismettere.
Ultima modifica di joe il lun 27 gen 2025, 11:29, modificato 1 volta in totale.

Avatar utente
brg
Linux 3.x
Linux 3.x
Messaggi: 589
Iscritto il: sab 12 mar 2011, 14:20
Slackware: 15.0
Kernel: 5.15.117
Desktop: KDE5
Località: Montecatini
Contatta:

Re: mpv ffmpeg e AV1

Messaggio da brg »

Credo che Firefox usi gstreamer e non FFMPEG. Prova ad usare un programma basato su gstreamer per riprodurre il file.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3931
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: mpv ffmpeg e AV1

Messaggio da joe »

Ho in parte risolto il fatto che MPV non si apriva neanche... Dipendeva dallo slackbuild su SBo, e probabilmente dalle impostazioni che ho in config.

Codice: Seleziona tutto

meson \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --sysconfdir=/etc \
  --mandir=/usr/man \
  -Dbuildtype=release \
  -Dmanpage-build=enabled \
  -Dlibmpv=true \
  -Dhtml-build=enabled \
  -Dcdda=enabled \
  -Ddvdnav=enabled \
  -Ddvbin=enabled \
  -Dgl-x11=enabled \
  -Dvdpau-gl-x11=enabled \
  -Dvdpau=enabled \
  $pipewire \
  $BUILD_OPTS \
  . build
Nel mio caso occorre aggiungere il supporto a gl-X11, quindi ho aggiunto le voci:

Codice: Seleziona tutto

 -Dgl-x11=enabled \
 -Dvdpau-gl-x11=enabled \
 -Dvdpau=enabled \
Ho ritrovato un mio vecchio messaggio dell'ano passato in cui ero caduto nello stesso inghippo. Ora ho messo mpv tra i software compilati a mano, perché usando sbopkg questi dettagli sfuggono e si finisce per usare lo slackbuild di default.

Però anche dopo la ricompilazione così, quindi ffmpeg con supporto a "dav1d" ed mpv, ancora il video non si vede. Si sente e basta.
Ho provato anche con questo file come test:
https://github.com/SPBTV/video_av1_samp ... _25fps.mp4

E anche lì si sente ma non si vede.
Dandolo in pasto ad "ffmpeg -i", saltano fuori un sacco d'errori:

Codice: Seleziona tutto

ffmpeg version 4.4.5 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 11.2.0 (GCC)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/doc/ffmpeg-4.4.5/html --mandir=/usr/man --disable-debug --enable-shared --disable-static --enable-gpl --enable-version3 --enable-avresample --arch=x86_64 --disable-encoder=aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-libbluray --enable-libcaca --enable-libcdio --enable-frei0r --enable-openal --enable-libopus --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libmp3lame --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libpulse --enable-libsmbclient --enable-libxml2 --enable-librsvg --enable-libdrm
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[av1 @ 0xda4000] Your platform doesn't suppport hardware accelerated AV1 decoding.
[av1 @ 0xda4000] Failed to get pixel format.
[av1 @ 0xda4000] Missing Sequence Header.
    Last message repeated 98 times
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[av1 @ 0xda4000] video_get_buffer: image parameters invalid
[av1 @ 0xda4000] get_buffer() failed
[av1 @ 0xda4000] thread_get_buffer() failed
[av1 @ 0xda4000] Failed to allocate space for current frame.
[av1 @ 0xda4000] Get current frame error
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xd9fec0] decoding for stream 1 failed
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xd9fec0] Could not find codec parameters for stream 1 (Video: av1 (Main) (av01 / 0x31307661), none(tv), 960x540 [SAR 1:1 DAR 16:9], 116 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Downloads/spbtv_sample_bipbop_av1_960x540_25fps.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: avc1isommp42avc1
    creation_time   : 2018-10-05T14:40:45.000000Z
  Duration: 00:00:15.04, start: 0.000000, bitrate: 130 kb/s
  Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 32000 Hz, mono, fltp, 8 kb/s (default)
    Metadata:
      handler_name    : snd
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Video: av1 (Main) (av01 / 0x31307661), none(tv), 960x540 [SAR 1:1 DAR 16:9], 116 kb/s, 25 fps, 25 tbr, 90k tbn, 90k tbc (default)
    Metadata:
      handler_name    : vid
      vendor_id       : [0][0][0][0]
At least one output file must be specified
Va be' indagherò meglio...
Per quanto riguarda Firefox se usa gstreamer allora ffmpeg non c'entra per cui giusto farlo presente. Grazie.

rik70
Iper Master
Iper Master
Messaggi: 2535
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: mpv ffmpeg e AV1

Messaggio da rik70 »

La butto lì:
mi sa che ti serve dav1d e ricompilare ffmpeg, se non hai già fatto.

Codice: Seleziona tutto

ffmpeg -codecs | grep -i av1

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3931
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: mpv ffmpeg e AV1

Messaggio da joe »

L'ho già fatto... In passato in realtà funzionava con gli AV1, poi devo aver ricompilato qualcosa (ffmpeg stesso?) nel tempo o per qualche altro motivo che non so ha smesso di funzionare. Me ne sono accorto solo l'altro giorno, perché è una codifica non frequente per la roba che riproduco di solito, che in gran parte è dal tubo e lì ho impostato yt-dlp per scegliere automaticamente il codec video h264 / avc1. Per cui anche se il video in questione è pubblicato anche in AV1, viene data priorità all'H264, quindi è ignorato.

Codice: Seleziona tutto

$ ffmpeg -codecs | grep -i av1
ffmpeg version 4.4.5 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 11.2.0 (GCC)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/doc/ffmpeg-4.4.5/html --mandir=/usr/man --disable-debug --enable-shared
--disable-static --enable-gpl --enable-version3 --enable-avresample --arch=x86_64 --disable-encoder=aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gnutls --enable-libbluray --enable-libcaca --enable-libcdio --enable-frei0r --enable-openal --enable-libopus --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libmp3lame --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libpulse --enable-libsmbclient --enable-libxml2 --enable-librsvg --enable-libdrm
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
 D.V.L. av1                  Alliance for Open Media AV1
 DEAIL. wmav1                Windows Media Audio 1
Le ultime due righe dovrebbero confermare il supporto alla D-ecodifica degli av1, però nelle opzioni di configurazione che appaiono prima (su std error in realtà), ecco che

Codice: Seleziona tutto

--enable-dav1d
non c'è...

Probabile che abbia utilizzato lo slackbuild di Pat di ffmpeg in modo errato.
L'ho preso da qui:

https://mirrors.slackware.com/slackware ... ce/ffmpeg/

E in effetti mi ero fatto un script "build.sh" in cui passo delle variabili impostate a "yes" allo slackbulid in fase di esecuzione:

avevo messo una cosa del tipo:

Codice: Seleziona tutto

libdav1d=yes ./ffmpeg.SlackBuild
Però rileggendo lo slackbuild non funziona così, non ricordo perché avevo scritto così quel build.sh, forse avevo modificato anche lo slackbuild di Pat... perché in passato aveva funzionato tutto mentre ora no, probabile che abbia sovrascritto della roba tirando giù la versione attuale di ffmpeg dal mirror slackware indicato sopra.

Ad ogni modo dice:

Codice: Seleziona tutto

# Configure ffmpeg features not autodetected by default.
# You can enable a lot of optional (not-autodetected) features by
# passing variables to the script (VAR=yes/no ./ffmpeg.SlackBuild).
# Unfortunately ffmpeg's configure doesn't support --enable-feature=yes
# syntax, so we have to do it the complicated way :/

libx264=""    ; [ "${X264:-no}" != "no" ]         && libx264="--enable-libx264"
libass=""     ; [ "${ASS:-no}" != "no" ]          && libass="--enable-libass"
libdav1d=""   ; [ "${DAV1D:-no}" != "no" ]        && libdav1d="--enable-libdav1d"
ecc
Per cui la variabile da passare allo script non era ad esempio "libdav1d=yes", perché tanto poi viene svuotata nelle righe qui sopra. Invece va impostato, ad esempio:

Codice: Seleziona tutto

DAV1D=yes ./ffmpeg.SlackBuild
Il fatto che non l'abbia attivato nella versione installata appare anche da:

Codice: Seleziona tutto

ffmpeg -hide_banner -buildconf|grep dav1d
Che non ritorna niente...

Ora ho provato a ricompilare con DAV1D=yes e le altre variabili messe in maiuscolo come indicate nello SlackBuild.
Aggiorno ffmpeg e riprovo...

Codice: Seleziona tutto

$ ffmpeg -hide_banner -buildconf|grep dav1d
    --enable-libdav1d
Infatti ora i conti tornano... mpv non dovrebbe essere ricompilato in teoria...

OK, dopo qualche prova, confermo:
- ffplay riesce a riprodurre il video AV1
- mpv idem come sopra, anche senza essere ricompilato contro la nuova installazione di ffmpeg

Insomma il problema è che avevo cannato il nome delle varibil da passare allo slackbuild nello script build.sh che mi sono fatto per ricompilare ffmpeg.

In sintesi mi sono preparato uno script di build comprensivo di aggiornamento eventuale, molto basico, giusto per concludere questa discussione e mettere risolto:

Codice: Seleziona tutto

#!/bin/sh

down() {
	# Download sorgenti ffmpeg da mirror Slackware
        lftp -c "open https://slackware.mirror.garr.it/slackware/slackware64-15.0/patches/source; mirror ffmpeg"
}

deps() {
	# Build dipendenze custom via sbopkg
	QUEUE=$(cat <<-EOQ
	x264
	libass
	aom
	dav1d
	EOQ
	)

	for p in $QUEUE; do
		sbopkg -i $p
	done
}

build() {
	# Build con attivazione funzionalità varie
	cd ffmpeg 
	X264=yes \
	ASS=yes \
	AOM=yes \
	DAV1D=yes \
	./ffmpeg.SlackBuild
}

case $1 in
	all)
		down && deps &&	build
		;;
	down)
		down
		;;
	deps)
		deps
		;;
	ffmpeg)
		build
		;;
	*)
		echo "./build [ all | down | deps | ffmpeg ]"
		;;
esac

Rispondi