2017-04-14 1 views
0

오디오 파일이 많아서 각 파일을 무음 및 SOX을 기준으로 분할해야합니다. 그러나 일부 파일은 매우 시끄러운 배경을 가지고 있으며 일부는 그렇지 않으므로 분할을 수행하는 모든 파일을 반복하는 매개 변수 집합을 사용할 수 없습니다. 나는 그들이 시끄러운 배경으로 그들을 어떻게 분리하는지에 관해 계산하려고 노력한다. 여기에 내가 sox input2.flac -n statsox를 ​​사용한 오디오 통계에 대한 설명

Samples read:   18207744 
Length (seconds): 568.992000 
Scaled by:   2147483647.0 
Maximum amplitude:  0.999969 
Minimum amplitude: -1.000000 
Midline amplitude: -0.000015 
Mean norm:   0.031888 
Mean amplitude: -0.000361 
RMS  amplitude:  0.053763 
Maximum delta:   0.858917 
Minimum delta:   0.000000 
Mean delta:   0.018609 
RMS  delta:   0.039249 
Rough frequency:   1859 
Volume adjustment:  1.000 

Samples read:   198976896 
Length (seconds): 6218.028000 
Scaled by:   2147483647.0 
Maximum amplitude:  0.999969 
Minimum amplitude: -1.000000 
Midline amplitude: -0.000015 
Mean norm:   0.156168 
Mean amplitude: -0.000010 
RMS  amplitude:  0.211787 
Maximum delta:   1.999969 
Minimum delta:   0.000000 
Mean delta:   0.091605 
RMS  delta:   0.123462 
Rough frequency:   1484 
Volume adjustment:  1.000 

전자는 시끄러운 배경을 포함하지 않고, 후자는 수행을 sox input1.flac -n stat에서 얻고 것입니다. 큰 차이 때문에 Sample MeanMax delta 일 수 있다고 생각합니다. 누구나 그 통계의 의미를 설명해 주거나 적어도 내가 직접 얻을 수있는 곳을 보여줄 수 있습니까 (공식적인 문서를 보려고했지만 설명하지는 않았습니다). 많은 감사합니다.

답변

1

통계의 의미를 설명 할 수 없습니다. 나는 많은 경우에 자신을 알아 내려고 노력했지만 어느 곳에서도 문서화 된 것으로 보이지 않습니다. 개인적으로 나는 대신 stat 함수를 사용하고 출력을 훨씬 쉽게 이해할 수 있습니다.

더 많거나 적은 시끄러운 오디오를 구별하기위한 방법으로 최고 소리와 최저 소리의 차이를 사용하려고합니다. 가장 조용한 부분은 배경 잡음만으로는 결코 조용하지 않습니다. 따라서 약간의 차이가있을 경우 오디오는 시끄 럽거나 항상 큰 소리가됩니다 (예 : compressed pop song). 최대 RMS 값과 최소 RMS 값의 차이를 취할 수 있습니다. RMS 창 길이는 상당히 짧게 유지해야하며, 오디오에 페이드 인 또는 페이드 아웃 섹션이있는 경우, 코드에 포함시키지 않았더라도 오디오를 제거해야합니다.

audio="input1.flac" 
width=0.01 

peak=$(sox "$audio" -n channels 1 stats -w $width 2>&1 |\ 
    grep "Pk lev dB" |\ 
    sed 's/[^0-9.-]*//g') 
rmsmax=$(sox "$audio" -n channels 1 stats -w $width 2>&1 |\ 
    grep "RMS Pk dB" |\ 
    sed 's/[^0-9.-]*//g') 
rmsmin=$(sox "$audio" -n channels 1 stats -w $width 2>&1 |\ 
    grep "RMS Tr dB" |\ 
    sed 's/[^0-9.-]*//g') 
rmsdif=$(echo "($rmsmax)-($rmsmin)" | bc -l) 
pkmindif=$(echo "($peak)-($rmsmin)" | bc -l) 

echo " 
    max RMS: $max 
    min RMS: $min 

    diff RMS: $rmsdif 
    peak-min: $pkmindif 
" 
관련 문제