wav непоследователен брой проби при използване на avconv

Трябва да създам редица последователни музикални проби. Имайки 1 секунда дълга вълна с честота на дискретизация 44100, трябва да мога да получа масив от точно 44100 проби. За съжаление това не е вярно.

Моят подход е следният:

1) Създайте output.wav, който е дълъг 1 секунда с честота на дискретизация 44100

avconv -i input.mp3 -ss 00:01:00 -t 00:00:01 -ar 44100 -ac 1 output.wav

2) Прочитам файла и отпечатвам броя на пробите

meta,song  = scipy.io.wavfile.read(path + "/" +file)
assert meta == 44100
print(len(song))

За различни избори на input.mp3 и начална позиция получавам различни номера: 43776, 43776, 44928, 43776, 43776, 44928

Въпросът ми е защо е така? и как мога да променя стъпка 1, за да създам последователни проби от данни?


person user2590425    schedule 23.07.2016    source източник


Отговори (1)


Avconv не е много прецизен. Фрагментът от песента, който трябва да има една секунда, всъщност има 0,983991 секунди.

За да разрешим проблема, можем да използваме sox:

sox input.mp3 -r 44100 -c 1 output.wav  --show-progress trim 0 00:01

sox не поддържа mp3 по подразбиране, така че трябваше да инсталирам

sudo apt-get install libsox-fmt-mp3
person user2590425    schedule 23.07.2016