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.org/

https://ffmpeg.zeranoe.com/builds/

http://stackoverflow.com/questions/9464617/retrieving-and-saving-media-metadata-using-ffmpeg

http://stackoverflow.com/questions/678236/how-to-get-the-filename-without-the-extension-from-a-path-in-python

http://stackoverflow.com/questions/89228/calling-an-external-command-in-python