[英]How to FFmpeg decode and extract metadata from last frame?
我正在使用FFMpeg解碼。 我正在解碼的視頻是使用C代碼的H.264或MPEG4視頻。 我正在使用32位庫。 我已經成功解碼並提取了第一幀的元數據。 我現在想解碼最后一幀。 我已經定義了視頻的時長,並且認為isLastFrame = duration
是一個安全的假設。 這是我的意見,有什么建議嗎?
AVFormatContext* pFormatCtx = avformat_alloc_context();
avformat_open_input(&pFormatCtx, filename, NULL, NULL);
int64_t duration = pFormatCtx->duration;
i=0;
while(av_read_frame(pFormatCtx, &packet)>=0) {
/* Is this a packet from the video stream? */
if(packet.stream_index==videoStream) {
/* Decode video frame*/
avcodec_decode_video2(pCodecCtx, pFrame, &duration, &packet);
}
任何幫助深表感謝! :)
感謝大家的幫助,但我發現AV_SEEK_FRAME持續時間不起作用的原因是,您必須將其乘以1000才能使其適用於讀取幀。 另外請注意,我擁有的是decode_video,而不是decode函數,這是因為我使用的是32位並創建了自己的代碼,但是如果您插入video_decode()或我相信它是decode_video2,那么它也可以正常工作。 希望這將對以后的其他解碼器有所幫助。
AVFormat Format;
int64_t duration = Format->duration;
duration = duration * 1000;
if (av_seek_frame(Format, Packet->stream_index, duration, AVSEEK_FLAG_ANY) <= 0)
{
/* read the frame and decode the packet */
if (av_read_frame(FormatContext, &Packet) >= 0)
{
/*decode the video frame*/
decode_video(CodecContext, Frame, &duration, &Packet);
}
這可能是您要尋找的:
設置了CODEC_CAP_DELAY功能的編解碼器在輸入和輸出之間有延遲,需要在末尾輸入avpkt-> data = NULL,avpkt-> size = 0來返回其余幀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.