Oso Oluwafemi Ebenezer Ответов: 1

Длина MP3 закодированного с помощью LAME


В настоящее время я работаю над кодированием pcm в mp3 с помощью LAME, но длина полученного mp3 больше (и смог изолировать часть кода, вызывающую это). Pcm составляет около 4:45, но когда я кодирую с настройками

lame_set_VBR(gfp, vbr_off);
lame_set_quality(gfp, 5);
lame_set_preset(gfp, 128);

результирующая длина mp3-файла составила около 11:30

когда я кодирую с настройками

lame_set_VBR(gfp, vbr_mtrh);
lame_set_VBR_quality(gfp, 5);

получившаяся длина mp3-файла составила около 14:18

но когда я закодировал с настройками

lame_set_VBR(gfp, vbr_abr);
lame_set_VBR_min_bitrate_kbps(gfp, 128);

результирующая длина mp3 была правильно 4:45 (но я заметил, что когда я увеличил битрейт до 188, длина подскочила примерно на 5 секунд до 4:50)


Я действительно не знаю, что я делаю неправильно, но кажется, что только abr приводит к правильной длине vbr, а cbr-нет!

ОБНОВЛЕНИЕ::::
когда эти mp3 воспроизводятся, они воспроизводятся нормально и останавливаются в 4:45, но проигрыватель windows media и их свойство(в windows) все еще читают эти выше длины

Обновление::: есть параметры ЦБ РФ работает путем удаления настроек lame_set_preset. Это только настройки vbr, которые возвращают неправильную длину

KarstenK

откуда вы получаете эту информацию? Windows иногда гадает о mp3...

Oso Oluwafemi Ebenezer

Проигрыватель Windows Media и вкладка свойства В Windows

KarstenK

Я действительно не буду на этом настаивать. Я думаю, что M$ делит размер / битрейт также, если это VBR. И так далее...

Проверь получше. Может быть, посмотрите с winamp.

Oso Oluwafemi Ebenezer

Я думаю, что это связано с моими настройками. Когда я молился mp3 на vlc тоже, общая длина продолжала идти вверх и вниз в течение некоторого времени, пока она не установилась на правильное время.

1 Ответов

Рейтинг:
9

Oso Oluwafemi Ebenezer

Узнал, что я должен написать свое lametag (который получен из lame_get_lametag_frame) в файл сразу же после id3v2 теги. Это решило проблему!

ЗАПИСКА:
lame_get_lametag_frame это должно быть вызвано после вызова lame_encode_flush, так что вы должны искать назад, к концу id3v2 тег для записи lametag.