FOK!forum / Digital Corner / M3U playlistmaakgeval
pfefferkatzemaandag 14 januari 2008 @ 23:21
Haai,
Mijn MP3 speler speelt mp3's af. Echt waar. Maar, als ik in Winamp ze eerst laad, dan de playlist opsla, en die in dezelfde map zte als het album, komen ze op mijn msn speler netjes gerangschikt bij Playlists staan.

Ik heb echter geen zin om 40 keer een lijst mp3's in te laden en die op te slaan.

Ik zoek dus een programma dat een m3u playlist maakt van een lijst mp3tjes die in een map staan.
Zo simpel als het maar kan. Het liefst gewoon dat je een map aanklikt en dat ie dan elk mp3tje daarin een playlist van maakt, maar opzich mp3tjes los erin slepen kan ook wel.

En het liefst freeware.

En de M3U moet er zo uit komen te zien, anders werkt het natuurlijk niet:
1
2
3
#EXTM3U
#EXTINF:208,Alien Ant Farm - Smooth Criminal
Alien Ant Farm - Smooth Criminal.mp3


Het programma dat ik al had gevonden maakte er zoiets van:

1
2
3
#EXTM3U
#EXTINF:208
D:/downloads/Muziek/Albums/A/Alient Ant Farm - Greatest Hits/Alien Ant Farm - Smooth Criminal.mp3
Ripariusdinsdag 15 januari 2008 @ 00:17
quote:
Op maandag 14 januari 2008 23:21 schreef RacerDKB het volgende:

Ik zoek dus een programma dat een m3u playlist maakt van een lijst mp3tjes die in een map staan.
Zo simpel als het maar kan. Het liefst gewoon dat je een map aanklikt en dat ie dan elk mp3tje daarin een playlist van maakt, maar opzich mp3tjes los erin slepen kan ook wel.

En het liefst freeware.
Niet helemaal wat je zoekt, maar ik heb zoiets gewoon zelf gemaakt. Dat gaat als volgt.

Je maakt eerst (met Notepad/Kladblok) een batchfile make_m3u.bat met de volgende inhoud:

1
2
3
4
@echo off
if exist %1\*.mp3 dir %1\*.mp3 /b /on > %1\Playlist.m3u
if exist %1\*.ape dir %1\*.ape /b /on > %1\Playlist.m3u
if exist %1\*.flac dir %1\*.flac /b /on > %1\Playlist.m3u


Dit batchfile plaats je in de map \Documents and Settings\<Username>

Vervolgens maak je een snelkoppeling naar dit batchfile (bestandsnaam/icoontje aanklikken met rechter muisknop). Deze snelkoppeling (.lnk bestand) komt dan te staan in dezelfde map als waar het batchfile al staat. Wijzig vervolgens de naam van de snelkoppeling in Make Playlist (of: Maak Playlist), en verplaats deze snelkoppeling via Cut & Paste naar de onderliggende map:

\Documents and Settings\,<Username>\SendTo

(Het kan zijn dat de SendTo map onzichtbaar is dan moet je die eerst in de verkenner zichtbaar maken via Tools --> Folder Options --> View --> Show hidden files and folders).

Dit is alles. Als je nu een playlist wil maken voor een groep MP3 bestanden in een map, dan hoef je alleen maar met de rechter muisknop op die map te klikken en dan uit het popup menu de optie Send To --> Make Playlist te kiezen.
Thomassdinsdag 15 januari 2008 @ 00:34
Dat kan simpeler

1
2
@echo off
dir *.mp3 *.ogg *.wav *.wma /a:-d /b /s > playlist.m3u


edit; laat maar zoals gewoonlijk weer té snel gelezen, bovenstaande post is voor ts een handigere oplossing
pfefferkatzedinsdag 15 januari 2008 @ 22:47
Bedankt :)

Heb die van jullie 2 gecombineerd tot deze:
1
2
@echo off
dir *.mp3 *.ogg *.wav *.wma /a:-d /b > playlist.m3u


Dat van dat Send To was niet per se nodig :@ En kon het ook niet vinden onder Vista :P

Wat doet dat /a:-d en /b en /s?
Toen ik die /b weghaalde kwam er allerlei systeeminfo bij in ieder geval.

Met /a:-d /b dan krijg ik juiste, werkende m3u's.

Thanks!
Ripariusdinsdag 15 januari 2008 @ 23:07
quote:
Op dinsdag 15 januari 2008 22:47 schreef RacerDKB het volgende:
Bedankt

Heb die van jullie 2 gecombineerd tot deze:
[ code verwijderd ]

Dat van dat Send To was niet per se nodig En kon het ook niet vinden onder Vista
Geen ervaring hier met Vista, maar dat SendTo mapje is nou juist zo handig. Ik heb daar allerlei shortcuts instaan zodat ik via het contextmenu bijv. makkelijk bestanden kan openen in een andere applicatie dan die aan de betreffende extensie is gekoppeld. Simpel voorbeeld: .ISO bestand (bij mij gekoppeld aan UltraISO) direct openen in Nero, of een mediabestand direct openen in Mediaplayer Classic terwijl de betreffende bestandsextensie gekoppeld is aan de Windows Media Player. Of een geluidsbestand direct openen in een audio editor i.p.v. in een speler, teveel om op te noemen.
quote:
Wat doet dat /a:-d en /b en /s?
Toen ik die /b weghaalde kwam er allerlei systeeminfo bij in ieder geval.

Met /a:-d /b dan krijg ik juiste, werkende m3u's.

Thanks!
Dat zijn command line parameters voor het DIR commando. Als je in een command line venster de opdracht DIR /? geeft krijg je uitleg over de betekenis van al die parameters.

Maar vertel eens: kun je nu gewoon met de rechtermuisknop op een mapje klikken en direct een M3U bestand aanmaken in het betreffende mapje zoals je wilde? Bij mij werkt dat zo, maar als je die optie niet in je contextmenu hebt wordt het toch een stuk minder handig ...

Er bestaat wel degelijk een SendTo map in Vista, hier vind je uitgelegd hoe je daar shortcuts in kunt plaatsen.
pfefferkatzewoensdag 16 januari 2008 @ 13:25
quote:
Op dinsdag 15 januari 2008 23:07 schreef Riparius het volgende:

[..]

Geen ervaring hier met Vista, maar dat SendTo mapje is nou juist zo handig. Ik heb daar allerlei shortcuts instaan zodat ik via het contextmenu bijv. makkelijk bestanden kan openen in een andere applicatie dan die aan de betreffende extensie is gekoppeld. Simpel voorbeeld: .ISO bestand (bij mij gekoppeld aan UltraISO) direct openen in Nero, of een mediabestand direct openen in Mediaplayer Classic terwijl de betreffende bestandsextensie gekoppeld is aan de Windows Media Player. Of een geluidsbestand direct openen in een audio editor i.p.v. in een speler, teveel om op te noemen.
[..]

Dat zijn command line parameters voor het DIR commando. Als je in een command line venster de opdracht DIR /? geeft krijg je uitleg over de betekenis van al die parameters.

Maar vertel eens: kun je nu gewoon met de rechtermuisknop op een mapje klikken en direct een M3U bestand aanmaken in het betreffende mapje zoals je wilde? Bij mij werkt dat zo, maar als je die optie niet in je contextmenu hebt wordt het toch een stuk minder handig ...

Er bestaat wel degelijk een SendTo map in Vista, hier vind je uitgelegd hoe je daar shortcuts in kunt plaatsen.
Ik heb gewoon dat .bat bestandje, op me mp3 speler gezet in de hoofdmap. Ik zet er een nieuwe map met muziek op, plak even dat batch bestandje in die nieuwe map, draai hem, en zet die batch weer terug
Voor die ene keer per week dat ik iets verander op me mp3 speler is dit prima hoor.
Ripariuswoensdag 16 januari 2008 @ 15:30
quote:
Op woensdag 16 januari 2008 13:25 schreef RacerDKB het volgende:

[..]

Ik heb gewoon dat .bat bestandje, op me mp3 speler gezet in de hoofdmap. Ik zet er een nieuwe map met muziek op, plak even dat batch bestandje in die nieuwe map, draai hem, en zet die batch weer terug
Voor die ene keer per week dat ik iets verander op me mp3 speler is dit prima hoor.
Tja, dan doe je toch weer veel te veel werk want dan heb je dus al 40 keer dat batch bestand heen en weer moeten verplaatsen ...
pfefferkatzemaandag 28 januari 2008 @ 23:15
*kick*

Ik heb nu deze:
@echo off
if exist %1\*.mp3 dir %1\*.mp3 /b /on > %1\Playlist.m3u

Maar de playlist moet anders heten. Hij moet de naam van de map krijgen.
Hoe moet dat?

@echo off
if exist %1\*.mp3 dir %1\*.mp3 /b /on > %1\dir.m3u
ofzo werkt natuurlijk niet...iemand?
ThE_EDmaandag 28 januari 2008 @ 23:34
Hey, tof, ik had dat van dat SendTo nog niet ontdekt.
Ripariusdonderdag 31 januari 2008 @ 00:05
quote:
Op maandag 28 januari 2008 23:15 schreef RacerDKB het volgende:

Maar de playlist moet anders heten. Hij moet de naam van de map krijgen.
Hoe moet dat?
Dat is niet zomaar te realiseren in een batchfile, daarvoor zul je een beetje echt moeten programmeren. Het probleem is dat %1 het volledige pad naar de betreffende subdirectory bevat, dus je zou een routine moeten maken om de naam van de subdirectory hier uit te vissen.
Thomassdonderdag 31 januari 2008 @ 02:21
Ik heb even uit pure verveling wat in elkaar geflants (moet eigenlijk leren :') )

hier is het beest...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
for /f "delims=\ tokens=1,*" %%a in ('cd') do set directory=%%b

for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)
for /f "delims=\ tokens=1,*" %%a in ("%directory%") do (@set res=%%a & set res2=%%b)
if NOT %res%==%res2% (set directory=%res2%) else (goto e)

:e
echo %directory%


:D

Het geeft ongeveer 10.000 foutmeldingen en als als je een diepere nesting hebt dan het aantal for/f dingen dan geeft ie ook een gaar result, sowieso is het hele ding gaar. Ik ben er maar mee gestopt uit pure frustratie :D, misschien kan iemand anders het afmaken... :P
Ripariusdonderdag 31 januari 2008 @ 06:10
quote:
Op donderdag 31 januari 2008 02:21 schreef Thomass het volgende:
Ik heb even uit pure verveling wat in elkaar geflants (moet eigenlijk leren :') )

hier is het beest...
[ code verwijderd ]

:D

Het geeft ongeveer 10.000 foutmeldingen en als als je een diepere nesting hebt dan het aantal for/f dingen dan geeft ie ook een gaar result, sowieso is het hele ding gaar. Ik ben er maar mee gestopt uit pure frustratie :D, misschien kan iemand anders het afmaken... :P
Mmm... Dit biedt perspectieven. Ik heb mijn batchfile make_m3u.bat uit de bovenstaande post nu als volgt aangepast:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
for /F " delims=\ tokens=1,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=2,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=3,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=4,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=5,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=6,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=7,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=8,*" %%d in (%1) do set curdir=%%d
for /F " delims=\ tokens=9,*" %%d in (%1) do set curdir=%%d

if exist %1\*.mp3 dir %1\*.mp3 /b /on > %1\"%curdir%.m3u"
if exist %1\*.ape dir %1\*.ape /b /on > %1\"%curdir%.m3u"
if exist %1\*.flac dir %1\*.flac /b /on > %1\"%curdir%.m3u"


Samen met een snelkoppeling naar dit batchbestand in de SendTo map krijg ik nu keurig een playlist bestand met de naam van de map door met de rechtermuisknop op de betreffende map te klikken en uit het contextmenu Send To --> Make Playlist te kiezen. Natuurlijk werkt dit in deze vorm alleen goed tot 8 directory levels diep, maar dat is eenvoudig uit te breiden. Het batchfile is alleen niet zo elegant, maar misschien is daar ook nog een oplossing voor te vinden. Bedankt voor de hint!
Thomassdonderdag 31 januari 2008 @ 09:41
Mja ik was bezig het geheel weer in een andere for loop te plaatsen, en dan 100 nestings diep ofzo & met een conditional eruit springen. Alleen het is al een hele tijd geleden dat ik "echt" iets met batch heb gemaakt en ik weet nu ook weer waarom dat was

Maar ik ben blij dat ik iemand er een (kleine) dienst mee bewezen ben
Jo0Lzdonderdag 31 januari 2008 @ 09:50
quote:
Maar, als ik in Winamp ze eerst laad, dan de playlist opsla, en die in dezelfde map zte als het album, komen ze op mijn msn speler netjes gerangschikt bij Playlists staan.
! .

Grappig typefoutje .

ik wist niet eens dat je het op die manier aan een playlist kan toevoegen, meestal maak ik een playlist met de medialplayer. (Winamp)
Ripariusdonderdag 31 januari 2008 @ 16:33
quote:
Op donderdag 31 januari 2008 09:41 schreef Thomass het volgende:
Mja ik was bezig het geheel weer in een andere for loop te plaatsen, en dan 100 nestings diep ofzo & met een conditional eruit springen. Alleen het is al een hele tijd geleden dat ik "echt" iets met batch heb gemaakt en ik weet nu ook weer waarom dat was ;(
Werken met nested FOR loops in batchfiles gaat dacht ik niet tenzij je via CALL weer een ander batchfile of een stukje code in hetzelfde batchfile via een label aanroept, maar dat lijkt me sowieso niet zo'n goed idee hier. Voor mij was het ook weer een tijdje geleden dat ik lekker oldschool met batchfiles bezig ben geweest, maar ik weet nu weer waarom ik dat zo leuk vond :) .

Ik heb nu een elegante oplossing gevonden. Mijn make_m3u.bat file ziet er nu als volgt uit:

1
2
3
4
5
6
7
8
9
10
11
@echo off
set count=0
:loop
set olddir=%curdir%
set /a count+=1
for /f "delims=\ tokens=%count%" %%d in (%1) do set curdir=%%d
if not "%curdir%"=="%olddir%" goto loop

if exist %1\*.mp3 dir %1\*.mp3 /b /on > %1\"%curdir%.m3u"
if exist %1\*.ape dir %1\*.ape /b /on > %1\"%curdir%.m3u"
if exist %1\*.flac dir %1\*.flac /b /on > %1\"%curdir%.m3u"


Niet slecht toch?
Thomassdonderdag 31 januari 2008 @ 20:36
quote:
Op donderdag 31 januari 2008 16:33 schreef Riparius het volgende:

[..]

Werken met nested FOR loops in batchfiles gaat dacht ik niet tenzij je via CALL weer een ander batchfile of een stukje code in hetzelfde batchfile via een label aanroept, maar dat lijkt me sowieso niet zo'n goed idee hier. Voor mij was het ook weer een tijdje geleden dat ik lekker oldschool met batchfiles bezig ben geweest, maar ik weet nu weer waarom ik dat zo leuk vond :) .

Ik heb nu een elegante oplossing gevonden. Mijn make_m3u.bat file ziet er nu als volgt uit:
[ code verwijderd ]

Niet slecht toch?
:D

Het is alleen een gepiel van jewelste om zoiets goed te krijgen in een batch file ^^, overigens waarom doe je die dir opsomming niet gewoon in 1 regeltje:
1dir *.mp3 *.ogg *.wav *.wma /a:-d /b > playlist.m3u
Ripariusdonderdag 31 januari 2008 @ 20:55
quote:
Op donderdag 31 januari 2008 20:36 schreef Thomass het volgende:

[..]



Het is alleen een gepiel van jewelste om zoiets goed te krijgen in een batch file ^^,
Vind ik wel meevallen. Je moet het gewoon als een uitdaging zien, iets voor elkaar krijgen waarvan je eerder dacht dat het niet zou kunnen (zonder andere hulpmiddelen dan alleen een batch file). Zie je nu ook hoe ik het heb gedaan?
quote:
overigens waarom doe je die dir opsomming niet gewoon in 1 regeltje:
[ code verwijderd ]
Heel eenvoudig, ik wil hier een IF EXIST constructie gebruiken omdat die verhindert dat je bogus playlists (van 0 bytes) aanmaakt als je Send To --> Make Playlist uit het contextmenu gebruikt bij een map waar helemaal geen audiobestanden in staan. En met deze constructie kan ik niet meerdere extensies tegelijk gebruiken.

Overigens moet je /ON bij DIR gebruiken omdat anders de tracks niet op de juiste volgorde in de playlist komen te staan. Een aantal MP3 (of APE of FLAC) bestanden die samen een album vormen hebben vrijwel altijd het tracknummer in de bestandsnaam, met een leading zero voor de tracknummers onder de 10, en dus kun je de tracks op de juiste volgorde krijgen door de bestanden op naam te sorteren.

[ Bericht 0% gewijzigd door Riparius op 31-01-2008 21:05:10 ]
Thomassdonderdag 31 januari 2008 @ 21:41
Jawe hoor, maar ik zou een playlist maker voor mijn lol tegenwoordig niet meer in een batch file schrijven, ik flans gewoon wat in elkaar in c, net zo makkelijk
Ripariusdonderdag 31 januari 2008 @ 22:01
quote:
Op donderdag 31 januari 2008 21:41 schreef Thomass het volgende:
Jawel hoor, maar ik zou een playlist maker voor mijn lol tegenwoordig niet meer in een batch file schrijven, ik flans gewoon wat in elkaar in c, net zo makkelijk
Ja, maar je was er toch zelf ook aan begonnen om het met een batchfile voor elkaar te krijgen? Heeft in ieder geval het voordeel dat iedereen die dit topic leest het ook meteen kan gebruiken.
Ripariuswoensdag 6 februari 2008 @ 02:30
Nog even een aanvulling op dit topic. Ik heb de mogelijkheden van NT batch files (die veel uitgebreider zijn dan de mogelijkheden in DOS) nog eens bestudeerd en het blijkt helemaal niet nodig te zijn om de backslashes in het complete pad naar een subdirectory te parsen om de naam van de subdirectory te isoleren, omdat standaard al in deze mogelijkheid is voorzien, zie hier.

Een probleem met bovenstaande batchfiles is nog dat bij bestandsnamen met non-ASCII tekens (bijvoorbeeld letters met accenten of umlauts) geen correct werkende playlist wordt gemaakt. Dit komt doordat in de console mode standaard nog gewerkt wordt met de aloude IBM extended ASCII tekenset (codepage 437), terwijl Windows uitgaat van de ANSI tekenset (codepage 1252). Dit probleem is echter eenvoudig te verhelpen door in het batchfile de juiste codepagina te selecteren. Mijn batchfile make_m3u.bat ziet er nu als volgt uit:

1
2
3
4
5
@echo off
chcp 1252 > nul
pushd %1
if exist "%~n1.m3u" del "%~n1.m3u"
for %%f in (*.mp3 *.ape *.flac) do echo %%~nxf>>"%~n1.m3u"


In combinatie met een snelkoppeling naar dit batchfile in de SendTo map is nu eenvoudig voor elke map via het contextmenu een M3U playlist te maken met de naam van de map. Sorteren van de bestandsnamen om deze in de playlist op de juiste volgorde te krijgen is niet nodig omdat deze kennelijk standaard al in alfabetische volgorde worden gezet. Om te voorkomen dat je een console mode venstertje voorbij ziet flitsen is het aan te raden om in de snelkoppeling bij Properties --> Shortcut --> Run te kiezen voor Minimized. Eventueel is hier ook een icoontje toe wijzen aan de snelkoppeling dat dan bij elke map in het contextmenu onder Send To is te zien.
mscholdonderdag 3 april 2008 @ 09:22
leuk scriptje echter vraag ik mij af of er niet een C++.net of VB.net applicatie voor bestaat?
Thomassdonderdag 3 april 2008 @ 11:58
quote:
Op donderdag 3 april 2008 09:22 schreef mschol het volgende:
leuk scriptje echter vraag ik mij af of er niet een C++.net of VB.net applicatie voor bestaat?
Het antwoord op uw vraag is bevestigend