Tekkis vajadus ühes kataloogis paiknevatest videofailidest kätte saada heli ja konverteerida see mp3 failideks. Mp3 vorming on siiani üks laialtlevinumaid. Seda mängivad nii automakid kui ka kodused muusikakeskused, millel on USB pesa. Kindlasti leiaks selleks sobiva tööriista, kuid kas see teeks täpselt seda mida soovime? Olin kindel, et käsurea tööriistadega saab selle tehtud ja nii oligi. Sobilik tööriist on selleks ffmpeg. Windowsi jaoks on võimalik ka seda alla laadida.
Sobiva käsurea võib kasvõi Excelis konstrueerida, kuid mina otsustasin seekord pythoni kasuks. Vaikimisi üritatakse faili nimeks panna title väärtus. Kui see ebaõnnestub, siis võetakse videofailiga sama nimi. Jõudsin sellise skriptini. Kui pisut kohendada, peaks töötama enamikel platvormidel.
#!/usr/bin/python import glob import ntpath import os ffmpegPath= "C:/ffmpeg-20170125-2080bc3-win64-static/bin/ffmpeg.exe" srcPath = "c:/mp4" dstPath = "c:/mp3" titleToName=True print "alustame" def convert_all_to_mp3(srcDir, dstDir): files = glob.glob(srcDir + "/*.mp4") for f in files: m4afile = dstDir + "/tmp.m4a" convert_to_m4a(f, m4afile) mp3file = dstDir + "/" + os.path.splitext(ntpath.basename(f))[0] + ".mp3" if titleToName: title = get_title(f) if title is not None: mp3file= dstDir + "/" + title + ".mp3" print mp3file convert_m4a_to_mp3(m4afile, mp3file) os.remove(m4afile) def convert_to_m4a(srcFile, dstFile): cmd = ffmpegPath + ' -y -i "' + srcFile + '" -vn -c:a copy ' + dstFile print cmd os.system(cmd) def get_title(f): metadataFile = dstPath + "/metadata.txt" cmd = ffmpegPath + ' -y -i "' + f + '" -f ffmetadata ' + metadataFile os.system(cmd) title = get_title_from_metadata_file(metadataFile) os.remove(metadataFile) return title def get_title_from_metadata_file(metadatafile): titleString = 'title=' for line in open(metadatafile): if line.startswith(titleString): l = len(titleString) return line[l:].strip() def convert_m4a_to_mp3(m4afile, mp3file): cmd = ffmpegPath + ' -y -i ' + m4afile + ' -acodec libmp3lame "' + mp3file + '"' print cmd os.system(cmd) convert_all_to_mp3(srcPath, dstPath) print "valmis"
Linke:
https://ffmpeg.zeranoe.com/builds/
http://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg
http://stackoverflow.com/questions/89228/calling-an-external-command-in-python