Проблемы с конвертированием .flv в mp3 с использованием FFmpeg SDK

Я использую FFmpeg SDK для программного конвертирования видео в mp3.

Я прочитал аудио кадры видео следующим образом:

while(av_read_frame(pFromCtx, &pkt) >= 0)
{
if(pkt.stream_index == audioStreamIndex)
{
avcodec_get_frame_defaults(frame);
got_frame = 0;
ret = avcodec_decode_audio4(pCodecCtx, frame, &got_frame, &pkt);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error decoding audio frame.\n");
continue;
}

if(got_frame)
{
// Write the decoded audio frame
write_audio_frame(pToCtx, pToCtx->streams[pToCtx->nb_streams-1], frame);
}
}
av_free_packet(&pkt);
}

Декодирование аудио из входного видеофайла работает нормально. Проблема возникает, когда я пытаюсь кодировать mp3-кадр:

static void write_audio_frame(AVFormatContext *oc, AVStream *st, AVFrame *frame)
{
AVCodecContext *enc = st->codec;
AVPacket pkt;
int got_packet = 0;
int ret = 0;
av_init_packet(&pkt);
pkt.data = NULL;
pkt.size = 0;

ret = avcodec_encode_audio2(enc, &pkt, frame, &got_packet);

if (ret < 0) {
// PROBLEM
fprintf(stderr, "Error encoding audio frame. \n");
exit(1);
}
}

Я получаю следующий вывод консоли:

[libmp3lame] inadequate AVFrame plane padding

Это происходит только с файлами .flv, код отлично работает для файлов .mp4. Любая подсказка, что означает сообщение об ошибке?

Спасибо

0

Решение

Исходный код, содержащий сообщение об ошибке, находится здесь: http://ffmpeg.org/doxygen/trunk/libmp3lame_8c-source.html. Соответствующий источник говорит:

if (frame->linesize[0] < 4 * FFALIGN(frame->nb_samples, 8)) {
av_log(avctx, AV_LOG_ERROR, "inadequate AVFrame plane padding\n");
return AVERROR(EINVAL);
}

FFALIGN определяется как

#define FFALIGN (x,a)(((x)+(a)-1)&~((a)-1))
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]