2012-04-07 3 views
2

У меня есть куча аудиофайлов на CDN. Это и mp3, и ogg vorbises, параллельно. Эти файлы стоят около часа воспроизведения. Мне нужно извлечь произвольные части из этих файлов: мне дано имя файла (я могу выбрать, использую ли я версию mp3 или ogg) и две временные метки, и мне нужен звук точно между заданными временными позициями. Я не хочу загружать весь файл, поэтому я думаю об использовании заголовка Range http.вырезать точный временной диапазон от mp3/ogg

У меня есть полный контроль над аудиофайлами, поэтому я закодировал их в фиксированном битрейте, чтобы иметь возможность оценить, к каким байтам я должен обратиться. Однако оба формата используют фреймы (или страницы в случае vorbis), которые должны быть декодированы атомарно.

Программа, которую я пишу, находится в Perl. Я попытался загрузить часть файла, где я считаю, что данное окно будет содержаться, а затем используя Audio :: Mad и Ogg :: Vorbis :: Decoder для анализа фрагментов аудиофайла. Тем не менее, оба, похоже, не обрабатывают фрагменты и преуспевают только в том случае, когда я обслуживаю интегральный файл.

Итак, мой вопрос: как я могу получить точную длину аудиофайла, не загружая все это?

ответ

0

Ответ «вырезать точный диапазон времени от mp3/OGG» - Вы можете проверить, если следующее соответствует вашим потребностям:

ffmpeg -i InFile -vn -acodec copy -ss 00:00:00 -t 00:01:32 -threads 0 OutFile 

где сс - время начала, т - длительность. Это действительно режет - никаких повторных компрессий.

+0

Ну, это предполагает, что у вас есть весь файл в вашем распоряжении. Я хотел бы избежать загрузки всего файла. – Sixtease

Смежные вопросы