sox: 음소거되면 오디오를 분할하지만 음소거는 유지합니다.

sox: 음소거되면 오디오를 분할하지만 음소거는 유지합니다.

나는 큰 mp3에 저장된 여러 개의 오디오북을 가지고 있습니다. 저는 이러한 대용량 mp3를 여러 개의 작은 파일로 분할하려고 합니다.

오디오 파일에서 무음을 감지하고 이 "구분 기호"를 기반으로 오디오 파일을 분할하는 도구를 찾았습니다.

예는 다음과 같습니다.

sox -V3 audiobook.mp3 audiobook_part_.mp3 \
silence 1 0.5 0.1% 1 0.5 0.1% : newfile : restart

audiobook.mp3이는 기본적으로 , audiobook_part_001.mp3, ... 로 나누어지며, audiobook_part_002.mp3여기서 침묵 >= 0.5초입니다.

이제 문제는 이 명령이 파일을 분할할 뿐만 아니라 묵음도 제거한다는 것입니다.

따라서 재생 목록에서 새 파일을 재생하면 트랙/섹션이 함께 압축되어 들리게 됩니다.

sox그렇다면 파일을 분할하기만 하고 (각 트랙의 끝에서) 침묵을 유지하도록 어떻게 알 수 있습니까 ?

답변1

약간의 변경으로 분할 섹션의 모든 무음을 유지할 수 있습니다. 원래 명령으로 시작하십시오.

silence 1 0.5 0.1%   1 0.5 0.1% 

첫 번째 삼중항 값은 사운드가 0.1% 이상일 때 0.5초까지 처음에 무음(있는 경우)을 제거하는 것을 의미합니다. 두 번째 삼중항은 무음 시간이 최소 0.5초 동안 0.1% 미만일 때 중지를 의미합니다. 그런 다음 명령의 나머지 부분은 : 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%

간단한 사운드 파일을 가지고 상황 대처 방법을 확인하고 싶다면 sox1초의 톤과 1초의 무음이 포함된 사운드 파일 2개를 쉽게 생성한 다음 이를 결합하여 결과를 발표할 수 있습니다 silence. 효과 입력. 예를 들어 다음을 생성합니다.

sox -n gap.wav   trim 0 1
sox -n tone.wav  synth 1.001t sine C5

그런 다음 갭 사운드를 추가하고 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

관련 정보