[Python] 複数のmp3を結合して一つのメドレーファイルに

Google Driveにある単語集のトラックを全て自動再生したいけど、パソコンでもスマホでも自動で次のトラックに進まない。できない。そこで全部繋げてメドレーにした。
実質三行で書ける。今回はトラック番号2-26だけ連結したかった。

 
import glob
import os
import shutil

os.chdir(r'C:\Users\username\name\Music') // where mp3 files are

with open('newjoined.mp3', 'wb') as f:
    for filename in [i for i in glob.iglob(os.path.join(os.getcwd(),'*.mp3'))][1:26]:
        shutil.copyfileobj(open(filename,'rb'), f)


ちなみに、os.path.join()はパスの結合。OSによって区切りが\だったり\\だったり/だったりする不便を避けられる。

参考
How do I concatenate files in Python? - Stack Overflow

追記
2015年10月22日: このやり方、再び試みたところ、newjoined.mp3がnewjoined.mp3に無限に連結さ
れるバグを発生した。forループをまわるたび、[i for i in glob.iglob(os.path.join(os.getcwd(),'*.mp3'))][1:26]
が実行されているようなので、with open より先に
tracks = [i for i in glob.iglob(os.path.join(os.getcwd(),'*.mp3'))][1:26]
のようにしてトラックを取り出しておくのがよさそう。また、リスト内包表記のほうがよい。
 
import glob
import os
import shutil

os.chdir(r'C:\Users\username\name\Music') // where mp3 files are
tracks = [i for i in glob.iglob(os.path.join(os.getcwd(),'*.mp3'))][1:26]
with open('newjoined.mp3', 'wb') as f:
    [shutil.copyfileobj(open(filename,'rb'), f) for filename in tracks]

コメント

人気の投稿