or more accurately import os, subprocess, re directory = '/abs/path' for track, filename in enumerate(os.listdir(directory), 1): pathname = os.path.join(directory, filename) subprocess.call(['ffmpeg', '-i', pathname, filename[:-5]+'.mp3'])
On Thu, Jul 31, 2014 at 7:13 PM, C Smith <illusiontechniq...@gmail.com> wrote: > thanks, got it > import os, subprocess, re > directory = 'abs/path' > for track, filename in enumerate(os.listdir(directory), 1): > pathname = os.path.join(directory, filename) > subprocess.call(['ffmpeg', '-i', pathname, filename+str(track)+'.mp3']) > > On Thu, Jul 31, 2014 at 7:02 PM, C Smith <illusiontechniq...@gmail.com> wrote: >> Huh, that is quite an annoyance about changing the order though. Any >> ideas about that? I will look into it further in the meantime... >> >> On Thu, Jul 31, 2014 at 6:57 PM, C Smith <illusiontechniq...@gmail.com> >> wrote: >>> Works now, thanks! >>> >>> On Thu, Jul 31, 2014 at 6:57 PM, C Smith <illusiontechniq...@gmail.com> >>> wrote: >>>> woops, I see it pathname != filename >>>> >>>> On Thu, Jul 31, 2014 at 6:55 PM, C Smith <illusiontechniq...@gmail.com> >>>> wrote: >>>>>>for track, filename in enumerate(os.listdir(directory), 1): >>>>> It seems kinda counter-intuitive to have track then filename as >>>>> variables, but enumerate looks like it gets passed the filename then >>>>> track number. Is that correct and just the way enumerate works, a >>>>> typo, or am I missing something else here? >>>>> >>>>> It is an ffmpeg error I am getting. >>>>> ffmpeg just gives its usual build information and the error is (for >>>>> each song title in the directory): >>>>> songTitleIsHere.flac: no such file or directory >>>>> >>>>> So it looks like it is close to working because it finds the correct >>>>> file names, but doesn't recognize it for some reason. >>>>> Here is how I put in your code >>>>> import os, subprocess >>>>> directory = '/absolute/path/goes/here' >>>>> for track, filename in enumerate(os.listdir(directory), 1): >>>>> pathname = os.path.join(directory, filename) >>>>> subprocess.call(['ffmpeg', '-i', filename, str(track)+'.mp3']) >>>>> >>>>> So it goes to the right place, because every song title is listed out, >>>>> ffmpeg or the shell just don't recognize them correctly. >>>>> >>>>> On Thu, Jul 31, 2014 at 6:35 PM, Steven D'Aprano <st...@pearwood.info> >>>>> wrote: >>>>>> You may have already have solved your problem, unfortunately my >>>>>> emails are coming in slowly and out of order, but I have a suggestion: >>>>>> >>>>>> On Thu, Jul 31, 2014 at 03:53:48PM -0400, C Smith wrote: >>>>>>> I am on OSX, which needs to escape spaces in filenames with a backslash. >>>>>> >>>>>> Same as any other Unix, or Linux, or, indeed, Windows. >>>>>> >>>>>>> There are multiple files within one directory that all have the same >>>>>>> structure, one or more characters with zero or more spaces in the >>>>>>> filename, like this: >>>>>>> 3 Song Title XYZ.flac. >>>>>>> I want to use Python to call ffmpeg to convert each file to an .mp3. >>>>>>> So far this is what I was trying to use: >>>>>>> import os, subprocess >>>>>>> track = 1 >>>>>>> for filename in os.listdir('myDir'): >>>>>>> subprocess.call(['ffmpeg', '-i', filename, str(track)+'.mp3']) >>>>>>> track += 1 >>>>>> >>>>>> I believe that your problem is *not* the spaces, but that you're passing >>>>>> just the filename and not the directory. subprocess will escape the >>>>>> spaces for you. Also, let Python count the track number for you. Try >>>>>> this: >>>>>> >>>>>> >>>>>> directory = '/path/to/the/directory' >>>>>> for track, filename in enumerate(os.listdir(directory), 1): >>>>>> pathname = os.path.join(directory, filename) >>>>>> subprocess.call(['ffmpeg', '-i', filename, str(track)+'.mp3']) >>>>>> >>>>>> >>>>>> I expect something like that will work. You should be able to pass >>>>>> either an absolute path (beginning with /) or a relative path starting >>>>>> from the current working directory. >>>>>> >>>>>> If this doesn't work, please show the full error that you receive. If it >>>>>> is a Python traceback, copy and paste the whole thing, if it's an ffmpeg >>>>>> error, give as much information as you can. >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Steven >>>>>> _______________________________________________ >>>>>> Tutor maillist - Tutor@python.org >>>>>> To unsubscribe or change subscription options: >>>>>> https://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor