Creare playlist m3u

Installazione, configurazione e utilizzo di applicativi multimediali, masterizzazione, acquisizione e codec audio/video, streaming e altro.
Scrivi risposta
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Creare playlist m3u

Messaggio da FlameMEX »

Salve a tutti,
stavo cercando di automatizzare un lavoro, in pratica dovrei creare un file-playlist m3u, per ogni cartella o sottocartella contenente un album di mp3, mi dite se questo script in python fa al caso, altrimenti passo... grazie

https://www.hackitu.de/playlist_gen/
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

Anche questo ,grazie

Codice: Seleziona tutto

import os

def create_m3u_for_folder(folder_path):
    # Get the list of all mp3 files in the folder
    mp3_files = [f for f in os.listdir(folder_path) if f.endswith('.mp3')]
    if not mp3_files:
        return  # No mp3 files in this folder, skip creating the m3u file

    # Sort the mp3 files to maintain order
    mp3_files.sort()

    # Create the .m3u file
    m3u_file_path = os.path.join(folder_path, 'playlist.m3u')
    with open(m3u_file_path, 'w') as m3u_file:
        for mp3_file in mp3_files:
            m3u_file.write(f"{mp3_file}\n")

    print(f"Created playlist: {m3u_file_path}")

def create_m3u_for_all_subfolders(root_folder):
    for root, dirs, files in os.walk(root_folder):
        create_m3u_for_folder(root)

# Usage
root_folder = 'path/to/your/music/folder'
create_m3u_for_all_subfolders(root_folder)
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1633
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: Creare playlist m3u

Messaggio da nuzzopippo »

Il primo non lo ho guardato, ma se a Te interessa crearti in ogni direttrice un file m3u dei soli files mp3 contenuti nella stessa il secondo esempio andrebbe bene, unica accortezza che devi avere è valorizzare con il path assoluto della Tua direttrice che vuoi esaminare ricorsivamente la variabile "root_folder".
Tutte le playlist locali alle singole cartelle saranno denominate "playlist.m3u" e conterranno solo i files *.mp3 contenuti nella cartella stessa.

N.B: essendo che le stringhe python sono codificate in utf-8, non in ascii, forse varrebbe la pena di denominare playlist creata come "playlist.m3u8", la versione m3u prevede l'encoding in ascii.
Fatti non foste a viver come bruti ...
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Creare playlist m3u

Messaggio da rai »

Il codice python postato mi pare che dovrebbe funzionare (comunque, perché non lo provi in un cartella di test?).
Oltre al fatto della codifica di cui ti ha avvisato @nuzzopippo, tieni conto che quello script opera _solo_ sui file.mp3 di _tutte_ le sottocartelle della cartella root che contiene la tua musica. Questi possono essere dei vantaggi ma anche no: per esempio nel caso che uno abbia file musicali non.mp3 oppure che voglia potere scegliere singolarmente le cartelle su cui agire.

Se usi Gnome potrebbe esserti utile questo Nautilus-script che non uso da diversi anni ma che certamente funzionava quando usavo Gnome. Non ne ho fatto versioni diverse per altri DE.
La playlist creata prende il nome della cartella contenente i file; l'azione non è ricorsiva ma agisce una cartella alla volta; inserisce in playlist tutti i file musicali le cui estensioni sono elencate nell'array AudioVideo

Codice: Seleziona tutto

#!/bin/bash
: <<DOC
 questo script deve stare nella cartella ~/.gnome2/nautilus-scripts
 Tutti i file eseguibili in questa cartella appariranno nel menù «Script».

Crea una playlist nella cartella corrente o nella cartella selezionata

Nome della playlist: `nomeDellaCartella.m3u'
Contenuto della playlist: (a secondo dalla selezione)
				tutti i file selezionati
				tutti i file dell'unica cartella selezionata 
				tutti i file della cartella corrente (no selezione)
DOC

IFS=$'\n' # don't use <space>,<tab> to split words as part of expansion

[ $# -eq 1 ] && [ -f "$1" ] && exit # only one file is selected: nothing is done

AudioVideo=( aac ac3 aiff amr ape bwf cda flac iff mid mka mp1 mp2 mp3 m4a riff pca ra rm oga ogg wav wma xm 3gp animgif asf avi divx flv mkv mov mp4v mpeg ogm svi swf vob wmv )
the_path=$(echo "${PWD}") # the dir where we create the playlist

# in case of no selection: list all files in current dir
[ $# -eq 0 ] && NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$(ls)

# if only a dir is selected, it's our target: list all its files
[ $# -eq 1 ] && [ -d "$1" ] && NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$(ls "$1") && the_path=$(echo "${PWD}/$1")

# else list all selected files
for File in ${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}; do
    for ext in ${AudioVideo[@]}; do
       FileExt="${File##*.}"               # will take file suffix from `File'
       if [ ${FileExt,,} == ${ext} ]; then # `,,' change suffix to lowercase
          echo $(basename "${File}") >> "${the_path}/$(basename "${the_path}").m3u"
          continue 2 # go to next `path' in higher loop, the loop in 2nd level
       fi
    done
done
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1633
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: Creare playlist m3u

Messaggio da nuzzopippo »

rai ha scritto:
giovedì 27 giugno 2024, 8:41
... inserisce in playlist tutti i file musicali le cui estensioni sono elencate nell'array AudioVideo
Interessante script, anche se per la selezione dei files magari avrei optato per magic, o forse no, essendo la Tua implementazione molto più snella di quella che verrebbe altrimenti.
Fatti non foste a viver come bruti ...
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

ringrazio tutti dei vostri sforzi, ma lo script lo ho preso da chat-gpt e mi da problemi su Windows, potreste ricontrollarlo e correggerlo, ovvio che ho estratto il 2% del archivio sulla cartella per testare il tutto, ma sembra non andare quello script... grazie
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

Raga!! Ha funzionato, ma ha glissato sugli altri file, possiedo FLAC, m4a, ecc... e fattibile con quelli?
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

ho fatto solo le prove con il test, e funziona con tutta la cartella m da questo errore:

Codice: Seleziona tutto

Traceback (most recent call last):
  File "C:\Users\User\Desktop\test.py", line 26, in <module>
    create_m3u_for_all_subfolders(root_folder)
  File "C:\Users\User\Desktop\test.py", line 22, in create_m3u_for_all_subfolders
    create_m3u_for_folder(root)
  File "C:\Users\User\Desktop\test.py", line 16, in create_m3u_for_folder
    m3u_file.write(f"{mp3_file}\n")
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u0300' in position 18: character maps to <undefined>
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

Adesso questo funziona lo confermo per tutti gli amici del forum:

Codice: Seleziona tutto

import os

def create_m3u_for_folder(folder_path):
    # Get the list of all mp3 files in the folder
    mp3_files = [f for f in os.listdir(folder_path) if f.endswith('.mp3')]
    if not mp3_files:
        return  # No mp3 files in this folder, skip creating the m3u file

    # Sort the mp3 files to maintain order
    mp3_files.sort()

    # Create the .m3u file
    m3u_file_path = os.path.join(folder_path, 'playlist.m3u')
    with open(m3u_file_path, 'w', encoding='utf-8') as m3u_file:
        for mp3_file in mp3_files:
            m3u_file.write("{}\n".format(mp3_file))

    print("Created playlist: {}".format(m3u_file_path))

def create_m3u_for_all_subfolders(root_folder):
    for root, dirs, files in os.walk(root_folder):
        create_m3u_for_folder(root)

# Usage
root_folder = 'C:\Musica'
create_m3u_for_all_subfolders(root_folder)
Mettete tutto in C:, sapiate che il lavoro lo fa solo sull’estensione mp3, in minuscolo il resto me li ha saltati, adesso chiedo per gli altri file come i FLAC ecc... come faccio?
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1633
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: Creare playlist m3u

Messaggio da nuzzopippo »

--- windows + chatGPT, che brutta accoppiata!
Suppongo che parlare di venvs non sia il caso, quindi mi son ricavato da wikipedia alcune estensioni audio ... ho il dubbio che ciò che Ti ho preparato Ti metterà in difficoltà, lo script modificato si aspetta di essere avviato da terminale e di aver passato quale parametro il path assoluto della directory in cui lavorare, il lo ho chiamato "base.py", provalo

Codice: Seleziona tutto

import os
import sys

# da wikipedia : https://it.wikipedia.org/wiki/Lista_di_formati_di_file#Formati_audio
extensions = ('.m4a .m4b .m4p .m4r .m4v .3gp .mp4 .aac'
              ' .ac3 .aiff .aif .aifc .ape .amr	.wav .bwf'
              ' .cda .dts .flac .mid .midi .mod .mp3 .opus'
              ' .ra .ram .ogg .oga .wav .wave .wma')
              

def create_m3u_for_folder(folder_path):
    # Get the list of all mp3 files in the folder
    audio_files = [f for f in os.listdir(folder_path) if '.' + f.split('.')[-1].lower() in extensions]
    if not audio_files:
        return  # No mp3 files in this folder, skip creating the m3u file

    # Sort the mp3 files to maintain order
    audio_files.sort()

    # Create the .m3u file
    m3u_file_path = os.path.join(folder_path, 'playlist.m3u8')
    with open(m3u_file_path, 'w', encoding='utf-8') as m3u_file:
        for f in audio_files:
            m3u_file.write("{}\n".format(f))

    print("Created playlist: {}".format(m3u_file_path))

def create_m3u_for_all_subfolders(root_folder):
    for root, dirs, files in os.walk(root_folder):
        create_m3u_for_folder(root)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print(extensions)
        print('Uso : python base.py path_directory')
        exit(0)
    root_folder = sys.argv[1]
    create_m3u_for_all_subfolders(root_folder)
Alcune estensioni in circolazione potrebbero mancare ma, penso, il grosso dovrebbe trovarlo

[Edit] Dimenticavo, crea le playlist quali m3u8, che è il formato corretto, tutti i player audio che conosco dovrebbero essere in grado di aprirle, ho, inoltre, integrato una istruzione per la comparazione delle estensioni in caratteri minuscoli che avevo prima dimenticato.
Ultima modifica di nuzzopippo il giovedì 27 giugno 2024, 15:58, modificato 1 volta in totale.
Fatti non foste a viver come bruti ...
Avatar utente
FlameMEX
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 309
Iscrizione: martedì 4 ottobre 2016, 11:56

Re: Creare playlist m3u

Messaggio da FlameMEX »

fatto tutto, ho chiesto alla chat che non ti aggrada molto, capisco che per chi si e fatto il mazzo una vita a programmare, queste cose non le digerisce heheh...

Metto lo script case-insesitive, con i formati da editare, io ho lasciato cosi perché non ne ho altri, ciao e vi ringrazio a tutti dell'aiuto!

Codice: Seleziona tutto

import os

def create_m3u_for_folder(folder_path, audio_extensions):
    # Get the list of all audio files in the folder (case insensitive)
    audio_files = [f for f in os.listdir(folder_path) if f.lower().endswith(tuple(audio_extensions))]
    if not audio_files:
        return  # No audio files in this folder, skip creating the m3u file

    # Sort the audio files to maintain order
    audio_files.sort()

    # Create the .m3u file
    m3u_file_path = os.path.join(folder_path, 'playlist.m3u')
    with open(m3u_file_path, 'w', encoding='utf-8') as m3u_file:
        for audio_file in audio_files:
            m3u_file.write("{}\n".format(audio_file))

    print("Created playlist: {}".format(m3u_file_path))

def create_m3u_for_all_subfolders(root_folder, audio_extensions):
    for root, dirs, files in os.walk(root_folder):
        create_m3u_for_folder(root, audio_extensions)

# Usage
root_folder = r'D:\Musica'  # Update this path
audio_extensions = ['.mp3', '.wav', '.flac', '.aac', '.wma']  # Add more extensions if needed
create_m3u_for_all_subfolders(root_folder, audio_extensions)
Avatar utente
nuzzopippo
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1633
Iscrizione: giovedì 12 ottobre 2006, 11:34

Re: Creare playlist m3u

Messaggio da nuzzopippo »

FlameMEX ha scritto:
giovedì 27 giugno 2024, 15:56
... capisco che per chi si e fatto il mazzo una vita a programmare, queste cose non le digerisce heheh...
:lol: prova a far fare a ChatGPT questo
Immagine

Oltre a farmi playlist di file audio/video come le voglio per tutti i files sparsi nel sistema, mi permette di vederli in anteprima o fullscreen, copiarli, muoverli, etc.

Comunque, è vero, le IA non le digerisco molto, sono un dinosauro :(
Fatti non foste a viver come bruti ...
Scrivi risposta

Ritorna a “Multimediale”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti