Recherche avancée

Médias (1)

Mot : - Tags -/censure

Autres articles (100)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (9167)

  • How to use ffmpeg for youtube stream ads for 2017 [on hold]

    24 août 2017, par Trần Quang Họa

    Can anybody share me the code using the url of a video above any wed as input for ffmpeg so the stream output is not.

  • Video creation with a recent ffmpeg API (2017)

    16 novembre 2017, par ar2015

    I have started learning how to work with ffmpeg which has a suffering deprecation of all tutorial and available examples such as this.

    I am looking for a code which creates an output video.

    Unfortunately, most of good examples are focusing on reading from a file rather than creating one.

    Here, I have found a deprecated example and I spent a long time to fix its errors until it became like this :

    #include <iostream>
    #include
    #include
    #include <string>

    extern "C" {
           #include <libavcodec></libavcodec>avcodec.h>
           #include <libavformat></libavformat>avformat.h>
           #include <libswscale></libswscale>swscale.h>
           #include <libavformat></libavformat>avio.h>
           #include <libavutil></libavutil>opt.h>
    }

    #define WIDTH 800
    #define HEIGHT 480
    #define STREAM_NB_FRAMES  ((int)(STREAM_DURATION * FRAME_RATE))
    #define FRAME_RATE 24
    #define PIXEL_FORMAT AV_PIX_FMT_YUV420P
    #define STREAM_DURATION 5.0 //seconds
    #define BIT_RATE 400000

    #define AV_CODEC_FLAG_GLOBAL_HEADER (1 &lt;&lt; 22)
    #define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
    #define AVFMT_RAWPICTURE 0x0020

    using namespace std;

    static int sws_flags = SWS_BICUBIC;

    AVFrame *picture, *tmp_picture;
    uint8_t *video_outbuf;
    int frame_count, video_outbuf_size;


    /****** IF LINUX ******/
    inline int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...)
    {
       va_list ap;
       va_start(ap, format);
       int result = vsnprintf(buffer, sizeOfBuffer, format, ap);
       va_end(ap);
       return result;
    }

    /****** IF LINUX ******/
    template
    inline int sprintf_s(char (&amp;buffer)[sizeOfBuffer], const char* format, ...)
    {
       va_list ap;
       va_start(ap, format);
       int result = vsnprintf(buffer, sizeOfBuffer, format, ap);
       va_end(ap);
       return result;
    }


    static void closeVideo(AVFormatContext *oc, AVStream *st)
    {
       avcodec_close(st->codec);
       av_free(picture->data[0]);
       av_free(picture);
       if (tmp_picture)
       {
           av_free(tmp_picture->data[0]);
           av_free(tmp_picture);
       }
       av_free(video_outbuf);
    }

    static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)
    {
       AVFrame *picture;
       uint8_t *picture_buf;
       int size;

       picture = av_frame_alloc();
       if(!picture)
           return NULL;
       size = avpicture_get_size(pix_fmt, width, height);
       picture_buf = (uint8_t*)(av_malloc(size));
       if (!picture_buf)
       {
           av_free(picture);
           return NULL;
       }
       avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
       return picture;
    }

    static void openVideo(AVFormatContext *oc, AVStream *st)
    {
       AVCodec *codec;
       AVCodecContext *c;

       c = st->codec;
       if(c->idct_algo == AV_CODEC_ID_H264)
           av_opt_set(c->priv_data, "preset", "slow", 0);

       codec = avcodec_find_encoder(c->codec_id);
       if(!codec)
       {
           std::cout &lt;&lt; "Codec not found." &lt;&lt; std::endl;
           std::cin.get();std::cin.get();exit(1);
       }

       if(codec->id == AV_CODEC_ID_H264)
           av_opt_set(c->priv_data, "preset", "medium", 0);

       if(avcodec_open2(c, codec, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Could not open codec." &lt;&lt; std::endl;
           std::cin.get();std::cin.get();exit(1);
       }
       video_outbuf = NULL;
       if(!(oc->oformat->flags &amp; AVFMT_RAWPICTURE))
       {
           video_outbuf_size = 200000;
           video_outbuf = (uint8_t*)(av_malloc(video_outbuf_size));
       }
       picture = alloc_picture(c->pix_fmt, c->width, c->height);
       if(!picture)
       {
           std::cout &lt;&lt; "Could not allocate picture" &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       tmp_picture = NULL;
       if(c->pix_fmt != AV_PIX_FMT_YUV420P)
       {
           tmp_picture = alloc_picture(AV_PIX_FMT_YUV420P, WIDTH, HEIGHT);
           if(!tmp_picture)
           {
               std::cout &lt;&lt; " Could not allocate temporary picture" &lt;&lt; std::endl;
               std::cin.get();exit(1);
           }
       }
    }


    static AVStream* addVideoStream(AVFormatContext *context, enum AVCodecID codecID)
    {
       AVCodecContext *codec;
       AVStream *stream;
       stream = avformat_new_stream(context, NULL);
       if(!stream)
       {
           std::cout &lt;&lt; "Could not alloc stream." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }

       codec = stream->codec;
       codec->codec_id = codecID;
       codec->codec_type = AVMEDIA_TYPE_VIDEO;

       // sample rate
       codec->bit_rate = BIT_RATE;
       // resolution must be a multiple of two
       codec->width = WIDTH;
       codec->height = HEIGHT;
       codec->time_base.den = FRAME_RATE; // stream fps
       codec->time_base.num = 1;
       codec->gop_size = 12; // intra frame every twelve frames at most
       codec->pix_fmt = PIXEL_FORMAT;
       if(codec->codec_id == AV_CODEC_ID_MPEG2VIDEO)
           codec->max_b_frames = 2; // for testing, B frames

       if(codec->codec_id == AV_CODEC_ID_MPEG1VIDEO)
           codec->mb_decision = 2;

       if(context->oformat->flags &amp; AVFMT_GLOBALHEADER)
           codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;

       return stream;
    }

    static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
    {
       int x, y, i;
       i = frame_index;

       /* Y */
       for(y=0;ydata[0][y * pict->linesize[0] + x] = x + y + i * 3;
           }
       }

       /* Cb and Cr */
       for(y=0;y<height></height>2;y++) {
           for(x=0;x<width></width>2;x++) {
               pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
               pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
           }
       }
    }

    static void write_video_frame(AVFormatContext *oc, AVStream *st)
    {
       int out_size, ret;
       AVCodecContext *c;
       static struct SwsContext *img_convert_ctx;
       c = st->codec;

       if(frame_count >= STREAM_NB_FRAMES)
       {

       }
       else
       {
           if(c->pix_fmt != AV_PIX_FMT_YUV420P)
           {
               if(img_convert_ctx = NULL)
               {
                   img_convert_ctx = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_YUV420P, WIDTH, HEIGHT,
                                                   c->pix_fmt, sws_flags, NULL, NULL, NULL);
                   if(img_convert_ctx == NULL)
                   {
                       std::cout &lt;&lt; "Cannot initialize the conversion context" &lt;&lt; std::endl;
                       std::cin.get();exit(1);
                   }
               }
               fill_yuv_image(tmp_picture, frame_count, WIDTH, HEIGHT);
               sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize, 0, HEIGHT,
                           picture->data, picture->linesize);
           }
           else
           {
               fill_yuv_image(picture, frame_count, WIDTH, HEIGHT);
           }
       }

       if (oc->oformat->flags &amp; AVFMT_RAWPICTURE)
       {
           /* raw video case. The API will change slightly in the near
              futur for that */
           AVPacket pkt;
           av_init_packet(&amp;pkt);

           pkt.flags |= AV_PKT_FLAG_KEY;
           pkt.stream_index= st->index;
           pkt.data= (uint8_t *)picture;
           pkt.size= sizeof(AVPicture);

           ret = av_interleaved_write_frame(oc, &amp;pkt);
       }
       else
       {
           /* encode the image */
           out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);
           /* if zero size, it means the image was buffered */
           if (out_size > 0)
           {
               AVPacket pkt;
               av_init_packet(&amp;pkt);

               if (c->coded_frame->pts != AV_NOPTS_VALUE)
                   pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
               if(c->coded_frame->key_frame)
                   pkt.flags |= AV_PKT_FLAG_KEY;
               pkt.stream_index= st->index;
               pkt.data= video_outbuf;
               pkt.size= out_size;
               /* write the compressed frame in the media file */
               ret = av_interleaved_write_frame(oc, &amp;pkt);
           } else {
               ret = 0;
           }
       }
       if (ret != 0) {
           std::cout &lt;&lt; "Error while writing video frames" &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       frame_count++;
    }

    int main ( int argc, char *argv[] )
    {
       const char* filename = "test.h264";
       AVOutputFormat *outputFormat;
       AVFormatContext *context;
       AVCodecContext *codec;
       AVStream *videoStream;
       double videoPTS;

       // init libavcodec, register all codecs and formats
       av_register_all();
       // auto detect the output format from the name
       outputFormat = av_guess_format(NULL, filename, NULL);
       if(!outputFormat)
       {
           std::cout &lt;&lt; "Cannot guess output format! Using mpeg!" &lt;&lt; std::endl;
           std::cin.get();
           outputFormat = av_guess_format(NULL, "h263" , NULL);
       }
       if(!outputFormat)
       {
           std::cout &lt;&lt; "Could not find suitable output format." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }

       context = avformat_alloc_context();
       if(!context)
       {
           std::cout &lt;&lt; "Cannot allocate avformat memory." &lt;&lt; std::endl;
           std::cin.get();exit(1);
       }
       context->oformat = outputFormat;
       sprintf_s(context->filename, sizeof(context->filename), "%s", filename);
       std::cout &lt;&lt; "Is '" &lt;&lt; context->filename &lt;&lt; "' = '" &lt;&lt; filename &lt;&lt; "'" &lt;&lt; std::endl;


       videoStream = NULL;
       outputFormat->audio_codec = AV_CODEC_ID_NONE;
       videoStream = addVideoStream(context, outputFormat->video_codec);

       /* still needed?
       if(av_set_parameters(context, NULL) &lt; 0)
       {
           std::cout &lt;&lt; "Invalid output format parameters." &lt;&lt; std::endl;
           exit(0);
       }*/

       av_dump_format(context, 0, filename, 1);

       if(videoStream)
           openVideo(context, videoStream);

       if(!outputFormat->flags &amp; AVFMT_NOFILE)
       {
           if(avio_open(&amp;context->pb, filename, AVIO_FLAG_READ_WRITE) &lt; 0)
           {
               std::cout &lt;&lt; "Could not open " &lt;&lt; filename &lt;&lt; std::endl;
               std::cin.get();exit(1);
           }
       }

       avformat_write_header(context, 0);

       while(true)
       {
           if(videoStream)
               videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;
           else
               videoPTS = 0.;

           if((!videoStream || videoPTS >= STREAM_DURATION))
           {
               break;
           }
           write_video_frame(context, videoStream);
       }
       av_write_trailer(context);
       if(videoStream)
           closeVideo(context, videoStream);
       for(int i = 0; i &lt; context->nb_streams; i++)
       {
           av_freep(&amp;context->streams[i]->codec);
           av_freep(&amp;context->streams[i]);
       }

       if(!(outputFormat->flags &amp; AVFMT_NOFILE))
       {
           avio_close(context->pb);
       }
       av_free(context);
       std::cin.get();
       return 0;
    }
    </string></iostream>

    Compile :

    g++ -I ./FFmpeg/ video.cpp -L fflibs -lavcodec -lavformat

    The code comes with two errors :

    video.cpp:249:84: error: ‘avcodec_encode_video’ was not declared in this scope
            out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);
                                                                                       ^


    video.cpp: In function ‘int main(int, char**)’:
    video.cpp:342:46: error: ‘AVStream {aka struct AVStream}’ has no member named ‘pts’
                videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;
                                                 ^

    and a huge number of warnings for deprecation.

    video.cpp: In function ‘void closeVideo(AVFormatContext*, AVStream*)’:
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        avcodec_close(st->codec);
                          ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘AVFrame* alloc_picture(AVPixelFormat, int, int)’:
    video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
               ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
               ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:80:53: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        size = avpicture_get_size(pix_fmt, width, height);
                                                        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here
    int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
        ^
    video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
        ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp:87:78: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]
        avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);
                                                                                 ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here
    int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
        ^
    video.cpp: In function ‘void openVideo(AVFormatContext*, AVStream*)’:
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘AVStream* addVideoStream(AVFormatContext*, AVCodecID)’:
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        codec = stream->codec;
                        ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp: In function ‘void write_video_frame(AVFormatContext*, AVStream*)’:
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
        c = st->codec;
                ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if (c->coded_frame->pts != AV_NOPTS_VALUE)
                       ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                    pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
                                             ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]
                if(c->coded_frame->key_frame)
                      ^
    In file included from video.cpp:8:0:
    ./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here
        attribute_deprecated AVFrame *coded_frame;
                                      ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]
            av_freep(&amp;context->streams[i]->codec);
                                           ^
    In file included from video.cpp:9:0:
    ./FFmpeg/libavformat/avformat.h:876:21: note: declared here
        AVCodecContext *codec;
                        ^
    video.cpp:337:38: warning: ignoring return value of ‘int avformat_write_header(AVFormatContext*, AVDictionary**)’, declared with attribute warn_unused_result [-Wunused-result]
        avformat_write_header(context, 0);
                                         ^

    I have also defined a few macros to redefine those who have been omited. In a modern ffmpeg API, they must be replaced.

    Could someone please help me solving errors and deprecation warnings to comply with recent ffmpeg API ?

  • Video creation with the most recent ffmpeg API (2017)

    19 octobre 2022, par ar2015

    I have started learning how to work with ffmpeg which has a suffering deprecation of all tutorial and available examples such as this.

    &#xA;&#xA;

    I am looking for a code which creates an output video.

    &#xA;&#xA;

    Unfortunately, most of good examples are focusing on reading from a file rather than creating one.

    &#xA;&#xA;

    Here, I have found a deprecated example and I spent a long time to fix its errors until it became like this :

    &#xA;&#xA;

    #include <iostream>&#xA;#include &#xA;#include &#xA;#include <string>&#xA;&#xA;extern "C" {&#xA;        #include <libavcodec></libavcodec>avcodec.h>&#xA;        #include <libavformat></libavformat>avformat.h>&#xA;        #include <libswscale></libswscale>swscale.h>&#xA;        #include <libavformat></libavformat>avio.h>&#xA;        #include <libavutil></libavutil>opt.h>&#xA;}&#xA;&#xA;#define WIDTH 800&#xA;#define HEIGHT 480&#xA;#define STREAM_NB_FRAMES  ((int)(STREAM_DURATION * FRAME_RATE))&#xA;#define FRAME_RATE 24&#xA;#define PIXEL_FORMAT AV_PIX_FMT_YUV420P&#xA;#define STREAM_DURATION 5.0 //seconds&#xA;#define BIT_RATE 400000&#xA;&#xA;#define AV_CODEC_FLAG_GLOBAL_HEADER (1 &lt;&lt; 22)&#xA;#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER&#xA;#define AVFMT_RAWPICTURE 0x0020&#xA;&#xA;using namespace std;&#xA;&#xA;static int sws_flags = SWS_BICUBIC;&#xA;&#xA;AVFrame *picture, *tmp_picture;&#xA;uint8_t *video_outbuf;&#xA;int frame_count, video_outbuf_size;&#xA;&#xA;&#xA;/****** IF LINUX ******/&#xA;inline int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...)&#xA;{&#xA;    va_list ap;&#xA;    va_start(ap, format);&#xA;    int result = vsnprintf(buffer, sizeOfBuffer, format, ap);&#xA;    va_end(ap);&#xA;    return result;&#xA;}&#xA;&#xA;/****** IF LINUX ******/&#xA;template&#xA;inline int sprintf_s(char (&amp;buffer)[sizeOfBuffer], const char* format, ...)&#xA;{&#xA;    va_list ap;&#xA;    va_start(ap, format);&#xA;    int result = vsnprintf(buffer, sizeOfBuffer, format, ap);&#xA;    va_end(ap);&#xA;    return result;&#xA;}&#xA;&#xA;&#xA;static void closeVideo(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    avcodec_close(st->codec);&#xA;    av_free(picture->data[0]);&#xA;    av_free(picture);&#xA;    if (tmp_picture)&#xA;    {&#xA;        av_free(tmp_picture->data[0]);&#xA;        av_free(tmp_picture);&#xA;    }&#xA;    av_free(video_outbuf);&#xA;}&#xA;&#xA;static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)&#xA;{&#xA;    AVFrame *picture;&#xA;    uint8_t *picture_buf;&#xA;    int size;&#xA;&#xA;    picture = av_frame_alloc();&#xA;    if(!picture)&#xA;        return NULL;&#xA;    size = avpicture_get_size(pix_fmt, width, height);&#xA;    picture_buf = (uint8_t*)(av_malloc(size));&#xA;    if (!picture_buf)&#xA;    {&#xA;        av_free(picture);&#xA;        return NULL;&#xA;    }&#xA;    avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;    return picture;&#xA;}&#xA;&#xA;static void openVideo(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    AVCodec *codec;&#xA;    AVCodecContext *c;&#xA;&#xA;    c = st->codec;&#xA;    if(c->idct_algo == AV_CODEC_ID_H264)&#xA;        av_opt_set(c->priv_data, "preset", "slow", 0);&#xA;&#xA;    codec = avcodec_find_encoder(c->codec_id);&#xA;    if(!codec)&#xA;    {&#xA;        std::cout &lt;&lt; "Codec not found." &lt;&lt; std::endl;&#xA;        std::cin.get();std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    if(codec->id == AV_CODEC_ID_H264)&#xA;        av_opt_set(c->priv_data, "preset", "medium", 0);&#xA;&#xA;    if(avcodec_open2(c, codec, NULL) &lt; 0)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not open codec." &lt;&lt; std::endl;&#xA;        std::cin.get();std::cin.get();exit(1);&#xA;    }&#xA;    video_outbuf = NULL;&#xA;    if(!(oc->oformat->flags &amp; AVFMT_RAWPICTURE))&#xA;    {&#xA;        video_outbuf_size = 200000;&#xA;        video_outbuf = (uint8_t*)(av_malloc(video_outbuf_size));&#xA;    }&#xA;    picture = alloc_picture(c->pix_fmt, c->width, c->height);&#xA;    if(!picture)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not allocate picture" &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    tmp_picture = NULL;&#xA;    if(c->pix_fmt != AV_PIX_FMT_YUV420P)&#xA;    {&#xA;        tmp_picture = alloc_picture(AV_PIX_FMT_YUV420P, WIDTH, HEIGHT);&#xA;        if(!tmp_picture)&#xA;        {&#xA;            std::cout &lt;&lt; " Could not allocate temporary picture" &lt;&lt; std::endl;&#xA;            std::cin.get();exit(1);&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;&#xA;static AVStream* addVideoStream(AVFormatContext *context, enum AVCodecID codecID)&#xA;{&#xA;    AVCodecContext *codec;&#xA;    AVStream *stream;&#xA;    stream = avformat_new_stream(context, NULL);&#xA;    if(!stream)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not alloc stream." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    codec = stream->codec;&#xA;    codec->codec_id = codecID;&#xA;    codec->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;&#xA;    // sample rate&#xA;    codec->bit_rate = BIT_RATE;&#xA;    // resolution must be a multiple of two&#xA;    codec->width = WIDTH;&#xA;    codec->height = HEIGHT;&#xA;    codec->time_base.den = FRAME_RATE; // stream fps&#xA;    codec->time_base.num = 1;&#xA;    codec->gop_size = 12; // intra frame every twelve frames at most&#xA;    codec->pix_fmt = PIXEL_FORMAT;&#xA;    if(codec->codec_id == AV_CODEC_ID_MPEG2VIDEO)&#xA;        codec->max_b_frames = 2; // for testing, B frames&#xA;&#xA;    if(codec->codec_id == AV_CODEC_ID_MPEG1VIDEO)&#xA;        codec->mb_decision = 2;&#xA;&#xA;    if(context->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;        codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;&#xA;    return stream;&#xA;}&#xA;&#xA;static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)&#xA;{&#xA;    int x, y, i;&#xA;    i = frame_index;&#xA;&#xA;    /* Y */&#xA;    for(y=0;ydata[0][y * pict->linesize[0] &#x2B; x] = x &#x2B; y &#x2B; i * 3;&#xA;        }&#xA;    }&#xA;&#xA;    /* Cb and Cr */&#xA;    for(y=0;y<height></height>2;y&#x2B;&#x2B;) {&#xA;        for(x=0;x<width></width>2;x&#x2B;&#x2B;) {&#xA;            pict->data[1][y * pict->linesize[1] &#x2B; x] = 128 &#x2B; y &#x2B; i * 2;&#xA;            pict->data[2][y * pict->linesize[2] &#x2B; x] = 64 &#x2B; x &#x2B; i * 5;&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;static void write_video_frame(AVFormatContext *oc, AVStream *st)&#xA;{&#xA;    int out_size, ret;&#xA;    AVCodecContext *c;&#xA;    static struct SwsContext *img_convert_ctx;&#xA;    c = st->codec;&#xA;&#xA;    if(frame_count >= STREAM_NB_FRAMES)&#xA;    {&#xA;&#xA;    }&#xA;    else&#xA;    {&#xA;        if(c->pix_fmt != AV_PIX_FMT_YUV420P)&#xA;        {&#xA;            if(img_convert_ctx = NULL)&#xA;            {&#xA;                img_convert_ctx = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_YUV420P, WIDTH, HEIGHT,&#xA;                                                c->pix_fmt, sws_flags, NULL, NULL, NULL);&#xA;                if(img_convert_ctx == NULL)&#xA;                {&#xA;                    std::cout &lt;&lt; "Cannot initialize the conversion context" &lt;&lt; std::endl;&#xA;                    std::cin.get();exit(1);&#xA;                }&#xA;            }&#xA;            fill_yuv_image(tmp_picture, frame_count, WIDTH, HEIGHT);&#xA;            sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize, 0, HEIGHT,&#xA;                        picture->data, picture->linesize);&#xA;        }&#xA;        else&#xA;        {&#xA;            fill_yuv_image(picture, frame_count, WIDTH, HEIGHT);&#xA;        }&#xA;    }&#xA;&#xA;    if (oc->oformat->flags &amp; AVFMT_RAWPICTURE)&#xA;    {&#xA;        /* raw video case. The API will change slightly in the near&#xA;           futur for that */&#xA;        AVPacket pkt;&#xA;        av_init_packet(&amp;pkt);&#xA;&#xA;        pkt.flags |= AV_PKT_FLAG_KEY;&#xA;        pkt.stream_index= st->index;&#xA;        pkt.data= (uint8_t *)picture;&#xA;        pkt.size= sizeof(AVPicture);&#xA;&#xA;        ret = av_interleaved_write_frame(oc, &amp;pkt);&#xA;    }&#xA;    else&#xA;    {&#xA;        /* encode the image */&#xA;        out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);&#xA;        /* if zero size, it means the image was buffered */&#xA;        if (out_size > 0)&#xA;        {&#xA;            AVPacket pkt;&#xA;            av_init_packet(&amp;pkt);&#xA;&#xA;            if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;            if(c->coded_frame->key_frame)&#xA;                pkt.flags |= AV_PKT_FLAG_KEY;&#xA;            pkt.stream_index= st->index;&#xA;            pkt.data= video_outbuf;&#xA;            pkt.size= out_size;&#xA;            /* write the compressed frame in the media file */&#xA;            ret = av_interleaved_write_frame(oc, &amp;pkt);&#xA;        } else {&#xA;            ret = 0;&#xA;        }&#xA;    }&#xA;    if (ret != 0) {&#xA;        std::cout &lt;&lt; "Error while writing video frames" &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    frame_count&#x2B;&#x2B;;&#xA;}&#xA;&#xA;int main ( int argc, char *argv[] )&#xA;{&#xA;    const char* filename = "test.h264";&#xA;    AVOutputFormat *outputFormat;&#xA;    AVFormatContext *context;&#xA;    AVCodecContext *codec;&#xA;    AVStream *videoStream;&#xA;    double videoPTS;&#xA;&#xA;    // init libavcodec, register all codecs and formats&#xA;    av_register_all(); &#xA;    // auto detect the output format from the name&#xA;    outputFormat = av_guess_format(NULL, filename, NULL);&#xA;    if(!outputFormat)&#xA;    {&#xA;        std::cout &lt;&lt; "Cannot guess output format! Using mpeg!" &lt;&lt; std::endl;&#xA;        std::cin.get();&#xA;        outputFormat = av_guess_format(NULL, "h263" , NULL);&#xA;    }&#xA;    if(!outputFormat)&#xA;    {&#xA;        std::cout &lt;&lt; "Could not find suitable output format." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;&#xA;    context = avformat_alloc_context();&#xA;    if(!context)&#xA;    {&#xA;        std::cout &lt;&lt; "Cannot allocate avformat memory." &lt;&lt; std::endl;&#xA;        std::cin.get();exit(1);&#xA;    }&#xA;    context->oformat = outputFormat;&#xA;    sprintf_s(context->filename, sizeof(context->filename), "%s", filename);&#xA;    std::cout &lt;&lt; "Is &#x27;" &lt;&lt; context->filename &lt;&lt; "&#x27; = &#x27;" &lt;&lt; filename &lt;&lt; "&#x27;" &lt;&lt; std::endl;&#xA;&#xA;&#xA;    videoStream = NULL;&#xA;    outputFormat->audio_codec = AV_CODEC_ID_NONE;&#xA;    videoStream = addVideoStream(context, outputFormat->video_codec);&#xA;&#xA;    /* still needed?&#xA;    if(av_set_parameters(context, NULL) &lt; 0)&#xA;    {&#xA;        std::cout &lt;&lt; "Invalid output format parameters." &lt;&lt; std::endl;&#xA;        exit(0);&#xA;    }*/&#xA;&#xA;    av_dump_format(context, 0, filename, 1);&#xA;&#xA;    if(videoStream)&#xA;        openVideo(context, videoStream);&#xA;&#xA;    if(!outputFormat->flags &amp; AVFMT_NOFILE)&#xA;    {&#xA;        if(avio_open(&amp;context->pb, filename, AVIO_FLAG_READ_WRITE) &lt; 0)&#xA;        {&#xA;            std::cout &lt;&lt; "Could not open " &lt;&lt; filename &lt;&lt; std::endl;&#xA;            std::cin.get();exit(1);&#xA;        }&#xA;    }&#xA;&#xA;    avformat_write_header(context, 0);&#xA;&#xA;    while(true)&#xA;    {&#xA;        if(videoStream)&#xA;            videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;&#xA;        else&#xA;            videoPTS = 0.;&#xA;&#xA;        if((!videoStream || videoPTS >= STREAM_DURATION))&#xA;        {&#xA;            break;&#xA;        }&#xA;        write_video_frame(context, videoStream);&#xA;    }&#xA;    av_write_trailer(context);&#xA;    if(videoStream)&#xA;        closeVideo(context, videoStream);&#xA;    for(int i = 0; i &lt; context->nb_streams; i&#x2B;&#x2B;)&#xA;    {&#xA;        av_freep(&amp;context->streams[i]->codec);&#xA;        av_freep(&amp;context->streams[i]);&#xA;    }&#xA;&#xA;    if(!(outputFormat->flags &amp; AVFMT_NOFILE))&#xA;    {&#xA;        avio_close(context->pb);&#xA;    }&#xA;    av_free(context);&#xA;    std::cin.get();&#xA;    return 0;&#xA;}&#xA;</string></iostream>

    &#xA;&#xA;

    Compile :

    &#xA;&#xA;

    g&#x2B;&#x2B; -I ./FFmpeg/ video.cpp -L fflibs -lavcodec -lavformat&#xA;

    &#xA;&#xA;

    The code comes with two errors :

    &#xA;&#xA;

    video.cpp:249:84: error: ‘avcodec_encode_video’ was not declared in this scope&#xA;         out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);&#xA;                                                                                    ^&#xA;&#xA;&#xA;video.cpp: In function ‘int main(int, char**)’:&#xA;video.cpp:342:46: error: ‘AVStream {aka struct AVStream}’ has no member named ‘pts’&#xA;             videoPTS = (double) videoStream->pts.val * videoStream->time_base.num / videoStream->time_base.den;&#xA;                                              ^&#xA;

    &#xA;&#xA;

    and a huge number of warnings for deprecation.

    &#xA;&#xA;

    video.cpp: In function ‘void closeVideo(AVFormatContext*, AVStream*)’:&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:60:23: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     avcodec_close(st->codec);&#xA;                       ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘AVFrame* alloc_picture(AVPixelFormat, int, int)’:&#xA;video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;            ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:80:12: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;            ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:80:53: warning: ‘int avpicture_get_size(AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     size = avpicture_get_size(pix_fmt, width, height);&#xA;                                                     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5228:5: note: declared here&#xA; int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);&#xA;     ^&#xA;video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp:87:5: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;     ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp:87:78: warning: ‘int avpicture_fill(AVPicture*, const uint8_t*, AVPixelFormat, int, int)’ is deprecated [-Wdeprecated-declarations]&#xA;     avpicture_fill((AVPicture *) picture, picture_buf, pix_fmt, WIDTH, HEIGHT);&#xA;                                                                              ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:5213:5: note: declared here&#xA; int avpicture_fill(AVPicture *picture, const uint8_t *ptr,&#xA;     ^&#xA;video.cpp: In function ‘void openVideo(AVFormatContext*, AVStream*)’:&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:96:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘AVStream* addVideoStream(AVFormatContext*, AVCodecID)’:&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:151:21: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     codec = stream->codec;&#xA;                     ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp: In function ‘void write_video_frame(AVFormatContext*, AVStream*)’:&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:202:13: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;     c = st->codec;&#xA;             ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:256:20: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if (c->coded_frame->pts != AV_NOPTS_VALUE)&#xA;                    ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:257:42: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;                 pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);&#xA;                                          ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:258:19: warning: ‘AVCodecContext::coded_frame’ is deprecated [-Wdeprecated-declarations]&#xA;             if(c->coded_frame->key_frame)&#xA;                   ^&#xA;In file included from video.cpp:8:0:&#xA;./FFmpeg/libavcodec/avcodec.h:2723:35: note: declared here&#xA;     attribute_deprecated AVFrame *coded_frame;&#xA;                                   ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:357:40: warning: ‘AVStream::codec’ is deprecated [-Wdeprecated-declarations]&#xA;         av_freep(&amp;context->streams[i]->codec);&#xA;                                        ^&#xA;In file included from video.cpp:9:0:&#xA;./FFmpeg/libavformat/avformat.h:876:21: note: declared here&#xA;     AVCodecContext *codec;&#xA;                     ^&#xA;video.cpp:337:38: warning: ignoring return value of ‘int avformat_write_header(AVFormatContext*, AVDictionary**)’, declared with attribute warn_unused_result [-Wunused-result]&#xA;     avformat_write_header(context, 0);&#xA;                                      ^&#xA;

    &#xA;&#xA;

    I have also defined a few macros to redefine those who have been omited. In a modern ffmpeg API, they must be replaced.

    &#xA;&#xA;

    Could someone please help me solving errors and deprecation warnings to comply with recent ffmpeg API ?

    &#xA;