9

私は 2 つのスクリプトを持っています。そのうちの 1 つは特定の長さのオーディオを分割し、もう 1 つは無音部分があるたびにオーディオを分割します。無音でオーディオを分割することはできますか? 5分以上の無音で分割されたビデオのチャンクが必要です。

無音を無視してスクリプトを分割する:

from pydub import AudioSegment
#from pydub.utils import mediainfo
from pydub.utils import make_chunks
import math

#lac_audio = AudioSegment.from_file("Kalimba.mp3", "mp3")
#flac_audio.export("audio.mp3", format="mp3")
myaudio = AudioSegment.from_file("Kalimba.mp3" , "mp3")
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}.mp3".format(i)
    print "exporting", chunk_name
    chunk.export(chunk_name, format="mp3")

長さを無視する分割スクリプト:

from pydub import AudioSegment
from pydub.silence import split_on_silence

sound = AudioSegment.from_mp3("my_file.mp3")
chunks = split_on_silence(sound, 
    # must be silent for at least half a second
    min_silence_len=500,

    # consider it silent if quieter than -16 dBFS
    silence_thresh=-16

 )

for i, chunk in enumerate(chunks):
    chunk.export("/path/to/ouput/dir/chunk{0}.wav".format(i), format="wav")
4

2 に答える 2

2

解決策は、代わりに mp3splt を使用することです: http://mp3splt.sourceforge.net/mp3splt_page/documentation/man.html

-t TIME[>MIN_TIME] 時間モード。このオプションは、TIME で指定された固定時間長 (上記と同じ形式) で、小さなファイルを無数に作成します。長いファイルを小さなファイルに分割すると便利です (たとえば、CD の時間の長さで)。調整オプション (-a) を使用して、無音検出で分割ポイントを調整できます。>MIN_TIME を使用して、最後のセグメントの理論上の最小トラック長を指定できます。これにより、最後のセグメントとして非常に小さなファイルを作成することを回避できます。MIN_TIME - "TIME>MIN_TIME" を使用する場合は、必ず引数を引用符で囲んでください。

次に、次のように python で使用できます。

import os
os.system("mp3splt inputfile.mp3")
于 2016-06-09T13:19:45.137 に答える