ffmpeg 按约每30分钟切分长音视频,但不能把句子切断。从30分种的静默处前后切分
ffmpeg 按约每30分钟切分长音视频,但不能把句子切断。从30分种的静默处前后切分 。 该怎么做? 要使用 `ffmpeg` 按每30分钟切分长音视频,并确保不在句子中间切断,可以使用以下步骤:1. **检测静默段**:首先,使用 `ffmpeg` 检测音频中的静默段。可以使用 `silencedetect` 滤镜来识别音频中的静默部分。
2. **切分音频**:根据检测到的静默段,选择最接近30分钟的静默点进行切分。
以下是一个大致的步骤:
1. **检测静默段**:
使用 `ffmpeg` 的 `silencedetect` 滤镜来检测音频中的静默段:
ffmpeg -i input.mp4 -af silencedetect=n=-50dB:d=1 -f null -
这条命令会输出音频中静默段的时间戳。
2. **解析静默段**:
解析 `ffmpeg` 输出的静默段时间戳,找到最接近每30分钟的静默点。
3. **切分音频**:
使用 `ffmpeg` 的 `-ss` 和 `-to` 参数来切分音频:
ffmpeg -i input.mp4 -ss start_time -to end_time -c copy output_part1.mp4
其中 `start_time` 和 `end_time` 是你解析出的静默段时间戳。
通过这种方法,你可以在不打断句子的情况下,按每30分钟切分音视频。需要注意的是,解析和处理静默段时间戳可能需要编写额外的脚本来自动化这个过程。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
from pydub import AudioSegment
from pydub.silence import split_on_silence
# 读入音频
sound = AudioSegment.from_file("input.mp3")
# 分割
chunks = split_on_silence(sound, min_silence_len=300, silence_thresh=-70)
# 保存所有分段
for i, chunk in enumerate(chunks):
chunk.export(f"output_{i}.mp3", format="mp3")
很cool的阳 发表于 2024-11-1 14:16
from pydub import AudioSegment
from pydub.silence import split_on_silence
min_silence_len=300, 这个是啥单位? 生成了几百个小文件。
我把它改成300*1000 后, 一个30分钟的大文件,现在还没切出来! FishC 发表于 2024-11-1 11:52
要使用 `ffmpeg` 按每30分钟切分长音视频,并确保不在句子中间切断,可以使用以下步骤:
1. **检测静默 ...
你能把这段代码按要求改一下吗?
from pydub import AudioSegment
from pydub.silence import detect_silence
MIN_SILENCE=500
SILENCE_THRESH=-40
MIN_LENGTH=300*1000 # 25*1000,25 seconds in my case
MAX_LENGTH=350*1000 #30*1000,30 seconds in my case
filename = 'cn1.wav'
file_prefix = 'last_'
sound = AudioSegment.from_file(filename, format="wav")
silent_ranges = detect_silence(sound, min_silence_len=MIN_SILENCE, silence_thresh=SILENCE_THRESH)
print(silent_ranges, '---------------------------')
last_silence = 0
chunk = 0
for range in silent_ranges:
# ifrange - last_silence > MIN_LENGTH and range - last_silence < MAX_LENGTH:
sound].export(f'{file_prefix}-{chunk}.wav', format="wav")
chunk = chunk +1
last_silence = range blackantt 发表于 2024-11-02 13:45
你能把这段代码按要求改一下吗?
from pydub import...
要修改这段代码以满足你的要求,我们需要确保在每个音频片段的长度在 `MIN_LENGTH` 和 `MAX_LENGTH` 之间,并且在静默处切分。以下是修改后的代码:
from pydub import AudioSegment
from pydub.silence import detect_silence
MIN_SILENCE = 500
SILENCE_THRESH = -40
MIN_LENGTH = 300 * 1000# 300 seconds
MAX_LENGTH = 350 * 1000# 350 seconds
filename = 'cn1.wav'
file_prefix = 'last_'
sound = AudioSegment.from_file(filename, format="wav")
silent_ranges = detect_silence(sound, min_silence_len=MIN_SILENCE, silence_thresh=SILENCE_THRESH)
last_silence = 0
chunk = 0
for start, end in silent_ranges:
if MIN_LENGTH <= (start - last_silence) <= MAX_LENGTH:
sound.export(f'{file_prefix}{chunk}.wav', format="wav")
chunk += 1
last_silence = start
# Export the last segment if it wasn't exported
if last_silence < len(sound):
sound.export(f'{file_prefix}{chunk}.wav', format="wav")
### 主要修改点:
1. **静默范围的处理**:使用 `for start, end in silent_ranges` 来遍历静默段的开始和结束时间。
2. **条件判断**:在导出音频片段之前,检查片段长度是否在 `MIN_LENGTH` 和 `MAX_LENGTH` 之间。
3. **导出最后一个片段**:在循环结束后,检查是否有剩余的音频片段需要导出。
这样可以确保音频在静默处切分,并且每个片段的长度在指定范围内。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]