簡體   English   中英

如何FFmpeg解碼並從最后一幀中提取元數據?

[英]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來返回其余幀。

鏈接到FFmpeg文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM