なんかいろいろこんぴゅーたかんけいのなぐりがき

なんか勉強しているこんぴゅーた関係のことのメモやそれ以外のことを書こうかなあ...

logs

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

pythonで m4aをmp3に変換するffmpegのフロントエンドみたいなの

ffmpegていう動画とか音楽のフォーマットを変換できるCUIプログラムがあるのだけど、それをGUIで操作でm4aファイルをmp3形式に変換できるようにするpythonスクリプトを書いてみた。(こういうプログラムをラッパーとかフロントエンドとか呼ぶのか?)

動作確認環境 python2.6 windows Vista 32bit
ffmpeg.exeを別途ダウンロードしてスクリプトと同じフォルダに準備する必要あり、またwinsound.PlaySoundの命令は必ずしも必要ではないのでwavを準備するのがめんどくさいなら削除して実行すればいい。
絶対pathをつくるために文字列を組み合わせるときの処理にかなり手を焼いた。日本語がはいってくるとどうしても文字コードが混同してしまって難しくなってします。
あとは、はじめてpythonで例外処理を使ってみた。基本は
try:
command
except WindowsError:
command

みたいな感じで使えばいい。
exceptのあとに何も例外名をいれないと全ての例外が処理されるようだ。
あとJavaでそうであるようにpythonでも例外になろうとならまいとfinalyとかいう接をつくるとその節は常に実行されるらしい。


#coding:utf-8
from Tkinter import *
from tkMessageBox import *
import tkFileDialog
import glob,os,winsound

def ask() :
global dirname,isselect
dirname = tkFileDialog.askdirectory(initialdir = dirname)
if dirname == "": return
isselect = True
os.chdir(dirname)
#print "selected dir is ",os.getcwdu()

def convert():
global dirname,condition,ffmpegDir,root,canvas
if not isselect :
showinfo(title="エラー",message="フォルダを選択してください")
return
percent = 0.0
try:
os.mkdir(dirname+"\\"+CHID_DIR)
except WindowsError:
pass
m4a_list = glob.glob("*.m4a")
#print m4a_list
if len(m4a_list) == 0 : return
try:
winsound.PlaySound(seDir + u"\\" + se1,winsound.SND_FILENAME)
for i in range(len(m4a_list)):
m4a_list[i] = m4a_list[i].decode("cp932")
#print "list = ",m4a_list
canvas.create_rectangle(0,0,BARX,15,fill="white")
condition.set("変換中")
root.update()
for i in range(len(m4a_list)):
#print "converting ",m4a_list[i]
outputname = CHID_DIR + "\\" + m4a_list[i].replace(".m4a",".mp3")
outputname = u'"' + outputname + u'"'
inputname = dirname+ u"\\" + m4a_list[i]
inputname = u'"' + inputname + u'"'
#print "outputname = ",outputname
#print "inputname = ",inputname
os.spawnv(os.P_WAIT,ffmpegDir,[ffmpegDir,"-y", \
"-i",inputname,"-f","mp3",outputname])

#print outputname," is created"
percent = (float)(i+1) / (float)(len(m4a_list))
#print percent*100.0,"%"
canvas.create_rectangle(0,0,\
percent *BARX,15,fill="blue")
root.update()
winsound.PlaySound(seDir + u"\\" + se3,winsound.SND_FILENAME)
condition.set("変換可能")
showinfo(title="変換終了",message="変換作業が完了しました")
except WindowsError:
winsound.PlaySound(seDir + u"\\" + se2,winsound.SND_FILENAME)
showinfo(title="エラー",message="変換作業中にエラーが発生しました")
condition.set("変換可能")


isselect = False
CHID_DIR = "mp3"
BARX = 200
se1 = u"se_moc03.wav"
se2 = u"se_moc05.wav"
se3 = u"se_sud08.wav"
dirname = r"C:"
ffmpegDir = seDir = os.getcwd() ; ffmpegDir += r"\ffmpeg.exe"
#print ffmpegDir
#print seDir
root = Tk()
root.title("iTunesの形式をMP3に変換するソフト")
#root.withdraw()
condition = StringVar()
condition.set("変換可能")
condition_label = Label(textvariable=condition)
condition_label.pack(expand=True,fill=BOTH)
button1 = Button(text="フォルダ選択",command=ask)
button1.pack(expand=True,fill=BOTH)
button2 = Button(text="変換",command=convert)
button2.pack(expand=True,fill=BOTH)
button3 = Button(text="終了",command=exit)
button3.pack(expand=True,fill=BOTH)
canvas = Canvas(root,bg="white",width=BARX,height=15)
canvas.pack()
root.mainloop()


スポンサーサイト

トラックバックURL

http://ilovevim.blog42.fc2.com/tb.php/75-0b52660e

この記事へのトラックバック

この記事へのコメント

コメント投稿フォーム

Paging Navigation

Navigations, etc.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。