在Python中为子处理调用FFMPEG应用循环

在Python中为子处理调用FFMPEG应用循环,python,audio,ffmpeg,subprocess,Python,Audio,Ffmpeg,Subprocess,假设我有一个长度为00:04:00(240秒)的音频mp3文件。我想在2秒内提取所述文件的各个部分,因此: 文件\u 01 00:00:00-00:00:02,文件\u 02 00:00:02-00:00:04,文件\u 03 00:00:04-00:00:06。。。文件_120 00:03:58-00:04:00 我正在使用python,调用模块子进程来运行ffmpeg函数。我所做的只是把它放在这样一个循环中: count = 0 count2 = 2 count3 = 1 while cou

假设我有一个长度为00:04:00(240秒)的音频mp3文件。我想在2秒内提取所述文件的各个部分,因此:

文件\u 01 00:00:00-00:00:02,文件\u 02 00:00:02-00:00:04,文件\u 03 00:00:04-00:00:06。。。文件_120 00:03:58-00:04:00

我正在使用python,调用模块子进程来运行ffmpeg函数。我所做的只是把它放在这样一个循环中:

count = 0
count2 = 2
count3 = 1
while count2 <= audio_length:
    ffmpeg = 'ffmpeg -i input.mp3 -c copy -ss %d -to %d output%d.wav' % (count, count2, count3)
    subprocess.call(ffmpeg, shell=True)
    count = count + 2
    count2 = count2 + 2
    count3 = count3 + 1
count=0
count2=2
count3=1

而count2如果您愿意使用外部库并使用脱机音频文件,则具有内置实用程序来制作给定长度的可播放音频块

只需从pydub.utils调用
make_chunk
方法,提供块大小并导出可播放的音频块

我把一个34.6秒长的文件分成18个块,每个块2秒。最后一个区块可能小于2秒,这取决于长度,在我的例子中,长度为0.6秒

工作代码:

from pydub import AudioSegment
from pydub.utils import make_chunks

audiofile = 'example.wav'

#set chunk duration in milliseconds
chunk_duration = 2000 #2 seconds

#Convert audio to audio segment
audio_segment = AudioSegment.from_wav(audiofile)
print("audio length in seconds={}".format(len(audio_segment) / float(1000.0)))

#make chunks
chunks = make_chunks(audio_segment, chunk_duration)

end = 0
for idx,chunk in enumerate(chunks):
    start = end
    end = start + (chunk_duration//1000)
    count = idx + 1
    print("Exporting File_{}_{}:{}.wav".format(count,start,end))
    chunk.export("File_{}_{}:{}.wav".format(count,start,end))
输出:

$python splitaudio.py 
audio length in seconds=34.6
Exporting File_1_0:2.wav
Exporting File_2_2:4.wav
Exporting File_3_4:6.wav
Exporting File_4_6:8.wav
Exporting File_5_8:10.wav
Exporting File_6_10:12.wav
Exporting File_7_12:14.wav
Exporting File_8_14:16.wav
Exporting File_9_16:18.wav
Exporting File_10_18:20.wav
Exporting File_11_20:22.wav
Exporting File_12_22:24.wav
Exporting File_13_24:26.wav
Exporting File_14_26:28.wav
Exporting File_15_28:30.wav
Exporting File_16_30:32.wav
Exporting File_17_32:34.wav
Exporting File_18_34:36.wav

如果您愿意使用外部库并使用脱机音频文件,则可以使用内置实用程序制作给定长度的可播放音频块

只需从pydub.utils调用
make_chunk
方法,提供块大小并导出可播放的音频块

我把一个34.6秒长的文件分成18个块,每个块2秒。最后一个区块可能小于2秒,这取决于长度,在我的例子中,长度为0.6秒

工作代码:

from pydub import AudioSegment
from pydub.utils import make_chunks

audiofile = 'example.wav'

#set chunk duration in milliseconds
chunk_duration = 2000 #2 seconds

#Convert audio to audio segment
audio_segment = AudioSegment.from_wav(audiofile)
print("audio length in seconds={}".format(len(audio_segment) / float(1000.0)))

#make chunks
chunks = make_chunks(audio_segment, chunk_duration)

end = 0
for idx,chunk in enumerate(chunks):
    start = end
    end = start + (chunk_duration//1000)
    count = idx + 1
    print("Exporting File_{}_{}:{}.wav".format(count,start,end))
    chunk.export("File_{}_{}:{}.wav".format(count,start,end))
输出:

$python splitaudio.py 
audio length in seconds=34.6
Exporting File_1_0:2.wav
Exporting File_2_2:4.wav
Exporting File_3_4:6.wav
Exporting File_4_6:8.wav
Exporting File_5_8:10.wav
Exporting File_6_10:12.wav
Exporting File_7_12:14.wav
Exporting File_8_14:16.wav
Exporting File_9_16:18.wav
Exporting File_10_18:20.wav
Exporting File_11_20:22.wav
Exporting File_12_22:24.wav
Exporting File_13_24:26.wav
Exporting File_14_26:28.wav
Exporting File_15_28:30.wav
Exporting File_16_30:32.wav
Exporting File_17_32:34.wav
Exporting File_18_34:36.wav

Anil_M的回答是完全正确的,但我认为最好提及另外两种快速且不需要Python脚本编写的方法(如果您需要,还可以提供大量额外功能)

使用您已经尝试过的
ffmpeg

ffmpeg -i input.mp3 -f segment -segment_time 2 -c copy output%03d.mp3
SoX:

sox input.mp3 output.mp3 trim 0 2 : newfile : restart

Anil_M的回答是完全正确的,但我认为最好提及另外两种快速且不需要Python脚本编写的方法(如果您需要,还可以提供大量额外功能)

使用您已经尝试过的
ffmpeg

ffmpeg -i input.mp3 -f segment -segment_time 2 -c copy output%03d.mp3
和SoX:

sox input.mp3 output.mp3 trim 0 2 : newfile : restart