
대용량 mp3에 저장된 오디오북이 여러 개 있습니다. 그리고 저는 이러한 대용량 mp3를 여러 개의 작은 파일로 분할하려고 합니다.
오디오 파일의 무음을 감지하고 이 "구분 기호"를 기반으로 오디오 파일을 분할할 수 있는 도구를 찾았습니다.
예는 다음과 같습니다.
sox -V3 audiobook.mp3 audiobook_part_.mp3 \
silence 1 0.5 0.1% 1 0.5 0.1% : newfile : restart
이것은 기본적으로 , , ... audiobook.mp3
로 분할됩니다 . 여기서 침묵은 0.5초 이상입니다.audiobook_part_001.mp3
audiobook_part_002.mp3
이제 문제는 이 명령이 파일을 분할할 뿐만 아니라 침묵도 제거한다는 것입니다.
따라서 재생 목록의 새 파일을 재생하면 트랙/단락이 함께 압축되어 들립니다.
sox
그렇다면 파일을 분할하기만 하고 (각 트랙의 끝에서) 묵음을 유지하도록 어떻게 알 수 있습니까 ?
답변1
약간의 변경을 통해 분할된 부분의 모든 무음을 보존할 수 있습니다. 원래 명령으로 시작합니다.
silence 1 0.5 0.1% 1 0.5 0.1%
값의 첫 번째 삼중항은 시작 시 0.1%를 초과하는 사운드의 0.5초까지 무음을 제거한다는 의미입니다. 두 번째 세 글자는 0.1% 미만으로 최소 0.5초 동안 침묵이 있을 때 중지를 의미합니다. 나머지 명령은 : newfile : restart
새 출력 파일을 시작하고 처음부터 사운드를 찾기 위해 다시 시작됩니다. 따라서 첫 번째 파일은 묵음이 시작되면 종료되고 두 번째 파일은 묵음이 끝나면 시작됩니다.
이를 개선하는 데 사용할 수 있는 가장 간단한 옵션은 입니다 silence -l
. 파일 끝을 유발한 0.5초의 무음이 보존됩니다. 불행하게도 더 긴 묵음은 다음 파일의 시작이기 때문에 제거됩니다. 더 긴 간격을 유지하는 쉬운 방법은 -l
더 긴 감지 시간(예: 2초)과 결합하는 것입니다.
silence -l 1 0.5 0.1% 1 2.0 0.1%
이제 최소 2초의 침묵이 있을 경우에만 분할되지만 간격의 처음 2초는 보존됩니다. 모든 침묵을 잃지 않으려면 시작할 때 침묵 감지를 제거하면 됩니다. 삼중항을 단일 항목으로 바꿔야 합니다 0
.
silence -l 0 1 2.0 0.1%
상황을 어떻게 처리하는지 확인하기 위해 간단한 사운드 파일을 재생하고 싶다면 sox
1초의 소리와 1초의 무음으로 구성된 사운드 파일 2개를 쉽게 만든 다음 발표하기 전에 원하는 대로 결합할 수 있습니다. 결과를 silence
효과에 대한 입력으로 사용합니다. 예를 들어 다음을 생성합니다.
sox -n gap.wav trim 0 1
sox -n tone.wav synth 1.001t sine C5
그런 다음 gap-tone-gap-tone을 결합하고 out.wav
효과를 사용하여 생성하고 결과를 들어보세요.
sox gap.wav tone.wav gap.wav tone.wav out.wav silence 1 0.5 0.1%
play out.wav
답변2
각 분할 파일의 시작과 끝 부분에 다시 무음을 추가하기 위해 sox 패드를 사용합니다. 결국 모든 작업을 한 번에 수행하는 단일 Sox 명령은 아니지만 훨씬 더 간단하고 패딩된 무음 길이 선택과 같은 추가 제어 기능을 제공합니다.
보다이 답변삭스패드 사용법에 대해. 예:
files="*.wav"
for f in $files
do
sox "$f" "${f%.*}-pad.wav" pad 2 3
done