複数(40〜50)のMP3ファイルを1つのファイルに連結したい。 Pythonでこれを行う最良の方法は何ですか?
fileinput
モジュールを使用して、各ファイルの各行をループし、出力ファイルに書き込みますか? Windowsにアウトソース copy
コマンド?
それらのファイルのバイトをまとめることは簡単です...しかし、それが継続的な再生を引き起こすかどうかはわかりません-ファイルが同じビットレートを使用しているのではないかと思いますが、わかりません。
_from glob import iglob
import shutil
import os
PATH = r'C:\music'
destination = open('everything.mp3', 'wb')
for filename in iglob(os.path.join(PATH, '*.mp3')):
shutil.copyfileobj(open(filename, 'rb'), destination)
destination.close()
_
これにより、C:\ music内のすべてのmp3ファイルのすべてのバイトが連結された単一の「everything.mp3」ファイルが作成されます。
コマンドラインでファイルの名前を渡したい場合は、iglob(...)
などの代わりに_sys.argv[1:]
_を使用できます。
要約するだけで(そして noskloの答え から盗みます)、2つのファイルを連結するには、次のようにします。
destination = open(outfile,'wb')
shutil.copyfileobj(open(file1,'rb'), destination)
shutil.copyfileobj(open(file2,'rb'), destination)
destination.close()
これは次と同じです:
cat file1 file2 > destination
うーん。 「行」は使いません。すばやく汚れた使用
outfile.write( file1.read() )
outfile.write( file2.read() )
;)
Clintとnoskloを改善し、コンテキストマネージャを知っているので、次のように書くとわかりやすくなります。
import shutil
import pathlib
source_files = pathlib.Path("My_Music").rglob("./*.mp3")
with open("concatenated_music.mp3", mode="wb") as destination:
for file in source_files:
with open(file, mode="rb") as source:
shutil.copyfileobj(source, destination)