Hi,
I have the same issue.
At the beginning, aac encoder doesn't output coded data for the first two
frames, which means encoder begins to output coded data from 3rd frame. In the
end, all audio samples are sent to aac encoder, but coded data of last samples
are not output yet.
I know how to flush delayed frames in h264 encoder, i.e. flush operation uses
avcodec_encode_video()/avcodec_encode_video2() like encoding operation. But
avcodec_encode_audio()/avcodec_encode_audio2() can't flushed delayed samples
in aac encoder, as aac encoder doesn't have the AV_CODEC_CAP_DELAY capability
set.
'int avcodec_encode_audio2( AVCodecContext *avctx, AVPacket *avpkt, const
AVFrame *frame, int *got_packet_ptr ) ' is the function of encoding a audio
frame. If 3rd argument frame is set to NULL, aac encoder won't flush delayed
samples, as aac encoder doesn't have the AV_CODEC_CAP_DELAY capability set.
Which ffmpeg function can flush delayed aac samples? How to flush those samples?
I have tried one way to flush those samples. Having sent all audio frames to
aac encoder, I continue send to aac encoder several frames which have samples
with zero value. AAC does send coded data of delayed samples, but I don't think
it is good to flush aac encoder.
Is there better way to flush aac encoder?
andrew
From: Panicos Karkallis
Date: 2015-08-22 00:44
To: This list is about using libavcodec, libavformat, libavutil, libavdevice
and libavfilter.
Subject: Re: [Libav-user] AAC encoder not returning final samples
I do flush the encoder by passing a null frame. it returns 2 packets that get
appended at the beginning of my file and increase the padding instead of giving
the end samples.
Panicos
On 17:34, Fri, 21 Aug 2015 Henry, David <[email protected]> wrote:
> I am new to ffmpeg/avlib and what I am trying to do is just decode and encode
> back again an aac file. I don't try to make any changes to the file although
> the avlib encoder is producing a file with more initial padding than expected
> and it is cropping the final frames of the audio clip.
> I exported the avframes created by the decoder and all the file information
> is there. It is at the encoding step that I am doing something wrong.
It sounds like you are not flushing the libfdk-aac encoder at the end. The
encoder holds on to audio samples internally while you are encoding and you
need to flush those last samples
When you are finished encoding.
- David
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user