[Risolto] Nautilus bash script estrarre cover da mp3

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
MoonDragon
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1632
Iscrizione: sabato 17 aprile 2010, 17:46
Desktop: Gnome
Distribuzione: Ubuntu 20.04.1 64-bit gdm3 xorg
Sesso: Maschile
Contatti:

[Risolto] Nautilus bash script estrarre cover da mp3

Messaggio da MoonDragon »

Salve, ho creato uno script per estrarre le cover integrati negli mp3

Codice: Seleziona tutto

## sudo apt-get install ffmpeg
MP3FILE=$1
PNGFILE=${MP3FILE}.png
# estraggo copertina con ffmpeg
ffmpeg -i "$MP3FILE" -an -c:v copy "$PNGFILE"
Però vorrei migliorarlo su due aspetti:
1) certe cover sono in jpg e alcune sono in png, come determinarlo?
2) funziona solo su un mp3 alla volta come posso modificarlo per fargli "passare" tutti i file selezionati?
Ultima modifica di MoonDragon il venerdì 22 luglio 2022, 18:29, modificato 1 volta in totale.
"Coltiva 🐧 LINUX tanto WINDOWS si pianta da solo e la MELA è già stata morsa" :p
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4698
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Nautilus bash script estrarre cover da mp3

Messaggio da vaeVictis »

1) Usa find. Ci sono pacchi di discussioni.
2) usa un ciclo while

E usa le doppie virgolette quando assegni il contenuto delle variabili.

Ma soprattutto, se vuoi che qualcuno possa aiutarti, devi dare qualche dettaglio, qualche richiesta e cose del genere, ma in modo chiaro.

Ad esempio, se i file con le immagini sono nella stessa directory, si può usare un metodo, se sono i directory diverse un altro metodo.
Tutto dipende dallo specifico business case.
A quanto vedo tu prendo il nome del file musicale e ti aspetti che ci sia nella stessa directory un file con lo stesso nome e l'estensione jpg o png.
Se è così, ti basta anche solo fare una ricerca con find per trovare tutti gli mp3. Una volta che hai la lista, li scorri uno ad uno e per controllare semplicemente se esista un file con lo stesso nome e con una delle due estensione (lo fai usando il comando base test o la parentesi quadra singola o doppia). Una volta che sai quale dei due è presente, lo usi nel comando ffmpeg
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4287
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 20.04.2 LTS
Sesso: Maschile
Contatti:

Re: Nautilus bash script estrarre cover da mp3

Messaggio da UbuNuovo »

Puoi salvare sempre con estensione 'png', poi controlli con 'file' se è il formato corretto;
se non lo è, rinomini l'immagine.
(Altrimenti ti servirebbe un lettore di metadati.)

esempio di output di file:

Codice: Seleziona tutto

8-) file -ib jpg_con_ext_sbagliata.png 
image/jpeg; charset=binary

per esempio per uno script che agisce su tutti gli mp3 nella dir corrente e sottodir, come intende VaeVictis:

Codice: Seleziona tutto

#!/bin/bash
# salva le copertine degli mp3 nella directory corrente e sottodirectory

ext_default='png'
while read f;do
	ffmpeg -hide_banner -loglevel error -i "$f" -an -c:v copy "$f.$ext_default" < /dev/null
	ext=$(file -ib "$f.$ext_default"|grep -Po '/\K.*(?=;)')
	[ "$ext" = "$ext_default" ] || mv "$f.$ext_default" "${f%.$ext_default}.$ext"
done < <(find . -type f -iname '*.mp3')
exit

Se vuoi estrarre le copertine dei file selezionati, devi usare l'equivalente di:
CAJA_SCRIPT_SELECTED_FILE_PATHS
che dovrebbe essere:
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

Questo è lo script che ho provato su mate

Codice: Seleziona tutto

#!/bin/bash
# salva le copertine dagli mp3 selezionati

ext_default='png'
while read f;do
	ffmpeg -hide_banner -loglevel error -i "$f" -an -c:v copy "$f.$ext_default" < /dev/null
	ext=$(file -ib "$f.$ext_default" | grep -Po '/\K.*(?=;)')
	[ "$ext" = "$ext_default" ] || mv "$f.$ext_default" "${f%.$ext_default}.$ext"
done < <(grep '\.mp3$' <<< "$CAJA_SCRIPT_SELECTED_FILE_PATHS")

exit
devi copiare o creare un collegamento allo script nella dir dei nautilus scripts,
con mate è: ~/.config/caja/scripts con nautilus non lo so.

P.s. Naturalmente devi sostituire "$CAJA_SCRIPT_SELECTED_FILE_PATHS" con "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
Ho visto che si possono estrarre anche con exiftool, ma anche qua va impostato il nome del file
exiftool -picture -b test.mp3 > img
Salva l'Ucraina! 🇺🇦
Avatar utente
MoonDragon
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1632
Iscrizione: sabato 17 aprile 2010, 17:46
Desktop: Gnome
Distribuzione: Ubuntu 20.04.1 64-bit gdm3 xorg
Sesso: Maschile
Contatti:

Re: Nautilus bash script estrarre cover da mp3

Messaggio da MoonDragon »

Vi ringrazio entrambi per le risposte,
ho provato a modificare lo script sopra dando per scontato che avrebbe estratto tutto in png, invece poi mi son accorto che estrae le immagini in maniera corretta con la loro estenzione.
Ecco quindi lo script usato:

Codice: Seleziona tutto

#!/bin/bash
ext_default='png'
while read f;do
	ffmpeg -hide_banner -loglevel error -i "$f" -an -c:v copy "$f.$ext_default" < /dev/null
	ext=$(file -ib "$f.$ext_default" | grep -Po '/\K.*(?=;)')
	[ "$ext" = "$ext_default" ] || mv "$f.$ext_default" "${f%.$ext_default}.$ext"
done < <(grep '\.mp3$' <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
exit
Di fatto è risolto, ma per mia curiosità farò altre prove, grazie ancora :birra:
"Coltiva 🐧 LINUX tanto WINDOWS si pianta da solo e la MELA è già stata morsa" :p
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4287
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 20.04.2 LTS
Sesso: Maschile
Contatti:

Re: Nautilus bash script estrarre cover da mp3

Messaggio da UbuNuovo »

MoonDragon ha scritto:
venerdì 22 luglio 2022, 18:28
...
ho provato a modificare lo script sopra dando per scontato che avrebbe estratto tutto in png, invece poi mi son accorto che estrae le immagini in maniera corretta con la loro estenzione.
...
Non proprio, ai letto la mia introduzione? Provo a rispiegare.
ffmpeg salva l'immagine nel formato originale ma la salva con nome ed estensione imposti dal comando.
Dopo, viene fatto un controllo (con file) sull'immagine salvata, se l'estensione non corrisponde al formato reale, l'immagine viene rinominata.
Salva l'Ucraina! 🇺🇦
Avatar utente
MoonDragon
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1632
Iscrizione: sabato 17 aprile 2010, 17:46
Desktop: Gnome
Distribuzione: Ubuntu 20.04.1 64-bit gdm3 xorg
Sesso: Maschile
Contatti:

Re: Nautilus bash script estrarre cover da mp3

Messaggio da MoonDragon »

UbuNuovo ha scritto:
venerdì 22 luglio 2022, 18:40
MoonDragon ha scritto:
venerdì 22 luglio 2022, 18:28
...
ho provato a modificare lo script sopra dando per scontato che avrebbe estratto tutto in png, invece poi mi son accorto che estrae le immagini in maniera corretta con la loro estenzione.
...
Non proprio, ai letto la mia introduzione? Provo a rispiegare.
ffmpeg salva l'immagine nel formato originale ma la salva con nome ed estensione imposti dal comando.
Dopo, viene fatto un controllo (con file) sull'immagine salvata, se l'estensione non corrisponde al formato reale, l'immagine viene rinominata.
Salve, eppure anche togliendo l'estensione, e controllando i dati dell'immagine l'estensione risulta corretta, ho fatto più prove anche usando EasyTag per cambiare immagine agli mp3, mi è abbastanza chiaro lo script e dovrebbe fare quello che hai scritto, però in realtà fa quello che ho citato, e qui non ho spiegazione!
"Coltiva 🐧 LINUX tanto WINDOWS si pianta da solo e la MELA è già stata morsa" :p
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4287
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 20.04.2 LTS
Sesso: Maschile
Contatti:

Re: [Risolto] Nautilus bash script estrarre cover da mp3

Messaggio da UbuNuovo »

La rinomina avviene tutte le volte che l'estensione, in ext, estratta dal comando file, differisce da quella impostata in ext_default.
Puoi verificarlo, commentando la riga di codice che rinomina il file, così:

Codice: Seleziona tutto

	# [ "$ext" = "$ext_default" ] || mv "$f.$ext_default" "${f%.$ext_default}.$ext"
da ora tutte le immagini saranno salvate con estensione png (che è quella impostats in ext_default)
Salva l'Ucraina! 🇺🇦
Avatar utente
MoonDragon
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1632
Iscrizione: sabato 17 aprile 2010, 17:46
Desktop: Gnome
Distribuzione: Ubuntu 20.04.1 64-bit gdm3 xorg
Sesso: Maschile
Contatti:

Re: [Risolto] Nautilus bash script estrarre cover da mp3

Messaggio da MoonDragon »

UbuNuovo ha scritto:
lunedì 25 luglio 2022, 18:15
La rinomina avviene tutte le volte che l'estensione, in ext, estratta dal comando file, differisce da quella impostata in ext_default.
Puoi verificarlo, commentando la riga di codice che rinomina il file, così:

Codice: Seleziona tutto

	# [ "$ext" = "$ext_default" ] || mv "$f.$ext_default" "${f%.$ext_default}.$ext"
da ora tutte le immagini saranno salvate con estensione png (che è quella impostats in ext_default)
Grazie :birra:
"Coltiva 🐧 LINUX tanto WINDOWS si pianta da solo e la MELA è già stata morsa" :p
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4287
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 20.04.2 LTS
Sesso: Maschile
Contatti:

Re: [Risolto] Nautilus bash script estrarre cover da mp3

Messaggio da UbuNuovo »

Di nulla :ciao:
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti