В настоящее время я работаю над кодированием pcm в mp3, используя LAME, но длина получающегося mp3 больше (и я смог выделить часть кода, вызывающую это). PCM около 4:45, но когда я кодирую с настройками
///cbr settings
lame_set_VBR(gfp, vbr_off);
lame_set_quality(gfp, 5);
lame_set_preset(gfp, 128);
полученная длина mp3 была приблизительно 11:30. Когда я кодирую с настройками
//vbr settings
lame_set_VBR(gfp, vbr_mtrh);
lame_set_VBR_quality(gfp, 5);
полученная длина mp3 была приблизительно 14:18. Но когда я закодировал с настройками
//abr settings
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) по-прежнему считывают те, которые превышают длину.
ОБНОВИТЬ:::
получил настройки cbr, удалив настройки lame_set_preset. Только настройки vbr возвращают неправильную длину.
Я узнал, что должен написать lametag
(который получен из lame_get_lametag_frame
) в файл сразу после id3v2
теги. Это решило проблему!
НОТА:
lame_get_lametag_frame
должен быть вызван после вызова lame_encode_flush
, так что вы должны вернуться к концу id3v2
тег, чтобы написать lametag
,
Других решений пока нет …