私はいくつかの異なるFLACファイルに分割する必要があるFLACファイルを用意しています。私のためにこれを行うことができるUNIXツールはありますか?このロジックを自分で実装できますか?オーディオファイルをいくつかのファイルに分割してそれぞれのサイズのしきい値を下にします。
サイドノート:FLACが圧縮されているため、最も簡単な解決方法は、最初にファイルをWAVに変換する必要があることを示しています。
私はいくつかの異なるFLACファイルに分割する必要があるFLACファイルを用意しています。私のためにこれを行うことができるUNIXツールはありますか?このロジックを自分で実装できますか?オーディオファイルをいくつかのファイルに分割してそれぞれのサイズのしきい値を下にします。
サイドノート:FLACが圧縮されているため、最も簡単な解決方法は、最初にファイルをWAVに変換する必要があることを示しています。
あなたの質問には2つの部分があります。
wav
wav
ファイルを変換するようないくつかの他のフォーマットに既存のFLAC
オーディオファイルを変換します。明らかに、これを行う方法は複数あります。しかしながら、pydub
は、上記を達成するより簡単な方法を提供する。 pydub
に関する の詳細はfound hereです。
1)あなたはFLAC
オーディオ形式を読み、以下の
flac_audio = AudioSegment.from_file("sample.flac", "flac")
flac_audio.export("audio.wav", format="wav")
2としてwav
に変換することができpydub
を使用wav
ようないくつかの他のフォーマットにFLAC
オーディオファイルを既存の変換)wav
ファイルを特定のサイズのチャンクに分割して分割します。
また、これを行うにはさまざまな方法があります。私がこれをした方法は、変換されたwavfile
の合計の長さとサイズを決定し、それを所望のチャンクサイズに近似することでした。
使用されたサンプルwav file
は、101,612 KB
サイズおよび約589 sec
または9 minutes
をわずかに超えた。観察による
WAVファイルサイズ:
ステレオframe_rateはの44.1KHzのオーディオファイル毎分約10 MBです。 48Kは少し大きくなります。
wavファイルとの共同関係:それは、対応するモノ・ファイルは、毎分5メガバイト
近似は数学によってabout10分あたりのMbの
WAVファイルのサイズとサンプルファイルのために良い成り立つだろうということを意味しますhttp://manual.audacityteam.org/o/man/digital_audio.html
:ファイルサイズと期間はwav_file_size_in_bytes = (sample rate (44100) * bit rate (16-bit) * number of channels (2 for stereo) * number of seconds)/8 (8 bits = 1 byte)
ソースによって与えられ、
私は、オーディオファイルのチャンクを計算するのに使用される式:
にこれはK = X * 10Mb/Y
pydub.utils
を与える以下の方法
for duration_in_sec (X) we get wav_file_size (Y)
So whats duration in sec (K) given file size of 10Mb
でチャンクサイズを取得するには、方法make_chunks
あり特定の持続時間のチャンクを作ることができます( milliseconds
)。上記の公式を使用して、希望するサイズの期間を決定します。
これを使用して10MB(または10Mb)のチャンクを作成し、各チャンクを別々にエクスポートします。サイズに応じて最後のチャンクが小さくなることがあります。
ここに作業コードがあります。
from pydub import AudioSegment
#from pydub.utils import mediainfo
from pydub.utils import make_chunks
import math
flac_audio = AudioSegment.from_file("sample.flac", "flac")
flac_audio.export("audio.wav", format="wav")
myaudio = AudioSegment.from_file("audio.wav" , "wav")
channel_count = myaudio.channels #Get channels
sample_width = myaudio.sample_width #Get sample width
duration_in_sec = len(myaudio)/1000#Length of audio in sec
sample_rate = myaudio.frame_rate
print "sample_width=", sample_width
print "channel_count=", channel_count
print "duration_in_sec=", duration_in_sec
print "frame_rate=", sample_rate
bit_rate =16 #assumption , you can extract from mediainfo("test.wav") dynamically
wav_file_size = (sample_rate * bit_rate * channel_count * duration_in_sec)/8
print "wav_file_size = ",wav_file_size
file_split_size = 10000000 # 10Mb OR 10, 000, 000 bytes
total_chunks = wav_file_size // file_split_size
#Get chunk size by following method #There are more than one ofcourse
#for duration_in_sec (X) --> wav_file_size (Y)
#So whats duration in sec (K) --> for file size of 10Mb
# K = X * 10Mb/Y
chunk_length_in_sec = math.ceil((duration_in_sec * 10000000) /wav_file_size) #in sec
chunk_length_ms = chunk_length_in_sec * 1000
chunks = make_chunks(myaudio, chunk_length_ms)
#Export all of the individual chunks as wav files
for i, chunk in enumerate(chunks):
chunk_name = "chunk{0}.wav".format(i)
print "exporting", chunk_name
chunk.export(chunk_name, format="wav")
出力:
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
sample_width= 2
channel_count= 2
duration_in_sec= 589
frame_rate= 44100
wav_file_size = 103899600
exporting chunk0.wav
exporting chunk1.wav
exporting chunk2.wav
exporting chunk3.wav
exporting chunk4.wav
exporting chunk5.wav
exporting chunk6.wav
exporting chunk7.wav
exporting chunk8.wav
exporting chunk9.wav
exporting chunk10.wav
>>>