fatal error: libavcodec/avcodec.h no such file or directory compilation terminated

22,307

Solution 1

You need to add the path to the libavcodec and libavformat include files to your command line. Find the include/ directory and add

-Ipath/to/include

for each of the relevant include files.

You'll also need to do the same thing for the library directories, using -L.

Solution 2

That error occur due to error in path

-L/home/yourpath/ffmpeg_build/lib/

-I/home/yourpath/ffmpeg_build/include/

ffmpeg_build – Where the files will be built and libraries installed.

Example :

create file "execute.sh "

NOW open file and paste the following code :

g++ -Wno-format-zero-length -Wno-write-strings -L/home/yourpath/ffmpeg_build/lib/ -I/home/yourpath/ffmpeg_build/include/ -o output program.cpp -lavcodec -lavformat -lavutil -lavdevice -lswresample -lswscale -lm -lva -lpthread -lvorbis -lvpx -lopus -lz -lpostproc -ldl -lfdk-aac -lmp3lame -lvorbisenc -lvorbisfile -lx264 -ltheora -ltheoraenc -ltheoradec -ldl -lrt -lx265 -lbz2

and type: sh execute.sh and binary will be created in the name "output" then type ./output for output.

Note : above for C++ , for c code change g++ to gcc

Solution 3

It depends how you install your ffmpeg. Generally, you can compile and install with 3 steps:

  1. ./configure --prefix=/yourpath/ffmpeg
  2. make
  3. make install

If you configured without "--prefix" parameter, it is installed at your default path.(on my Ubuntu, I found ffmpeg has been installed at "/usr/local/")

After install ffmpeg correctly, you may use following command to compile your code:

gcc testFfmpeg.c -I/yourpath/ffmpeg/include/ -L/yourpath/ffmpeg/lib/

or

gcc testFfmpeg.c -I/usr/local/include/ -L/usr/local/lib/
Share:
22,307
user1625271
Author by

user1625271

Updated on April 23, 2020

Comments

  • user1625271
    user1625271 about 4 years

    I'm trying to execute tutorial01.c using gcc and I have the gcc and tutorial01.c in the same folder along with libavcodec and libavformat and its associated files it gives me this error

    fatal error: libavcodec/avcodec.h no such file or directory compilation terminated

    when I run gcc -o tutorial01 tutorial01.c -lavformat -lavcodec -lz through the terminal in ubuntu 12.04

    the code is

    #include  libavcodec/avcodec.h
    #include libavformat/avformat.h
    #include stdio.h
    
    void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame)
     {
      FILE *pFile;
      char szFilename[32];
      int  y;
    
      // Open file
      sprintf(szFilename, "frame%d.ppm", iFrame);
      pFile=fopen(szFilename, "wb");
      if(pFile==NULL)
        return;
    
      // Write header
      fprintf(pFile, "P6\n%d %d\n255\n", width, height);
      // Write pixel data
      for(y=0; y<height; y++)
        fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
    
      // Close file
      fclose(pFile);
    }
    
    int main(int argc, char *argv[])
     {
      AVFormatContext *pFormatCtx;
      int             i, videoStream;
      AVCodecContext  *pCodecCtx;
      AVCodec         *pCodec;
      AVFrame         *pFrame; 
      AVFrame         *pFrameRGB;
      AVPacket        packet;
      int             frameFinished;
      int             numBytes;
      uint8_t         *buffer;
    
      if(argc < 2) 
      {
        printf("Please provide a movie file\n");
        return -1;
      }
    
      // Register all formats and codecs
      av_register_all();
      // Open video file
      if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0)
        return -1; // Couldn't open file
    
      // Retrieve stream information
      if(av_find_stream_info(pFormatCtx)<0)
        return -1; // Couldn't find stream information
    
      // Dump information about file onto standard error
      dump_format(pFormatCtx, 0, argv[1], 0);
      // Find the first video stream
      videoStream=-1;
      for(i=0; i<pFormatCtx->nb_streams; i++)
        if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
        {
          videoStream=i;
          break;
        }
      if(videoStream==-1)
        return -1; // Didn't find a video stream
    
      // Get a pointer to the codec context for the video stream
      pCodecCtx=pFormatCtx->streams[videoStream]->codec;
      // Find the decoder for the video stream
      pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
      if(pCodec==NULL) 
      {
        fprintf(stderr, "Unsupported codec!\n");
        return -1; // Codec not found
      }
    
      // Open codec
      if(avcodec_open(pCodecCtx, pCodec)<0)
        return -1; // Could not open codec
    
      // Allocate video frame
      pFrame=avcodec_alloc_frame();
    
      // Allocate an AVFrame structure
      pFrameRGB=avcodec_alloc_frame();
    
      if(pFrameRGB==NULL)
        return -1;
    
      // Determine required buffer size and allocate buffer              
     numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
                      pCodecCtx->height);
    
      buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
    
      // Assign appropriate parts of buffer to image planes in pFrameRGB
      // Note that pFrameRGB is an AVFrame, but AVFrame is a superset
      // of AVPicture
      avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
             pCodecCtx->width, pCodecCtx->height);
    
      // Read frames and save first five frames to disk
      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_video(pCodecCtx, pFrame, &frameFinished, 
                   packet.data, packet.size);
    
          // Did we get a video frame?
          if(frameFinished) 
          {
            // Convert the image from its native format to RGB
    
    
    
    
        img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24, 
                        (AVPicture*)pFrame, pCodecCtx->pix_fmt, pCodecCtx->width, 
                        pCodecCtx->height);
    
    
    
    
        // Save the frame to disk
    
        if(++i<=5)
      SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, 
                i);
          }
       }
    
        // Free the packet that was allocated by av_read_frame
        av_free_packet(&packet);
      }
    
      // Free the RGB image
      av_free(buffer);
      av_free(pFrameRGB);
    
      // Free the YUV frame
      av_free(pFrame);
    
     // Close the codec
      avcodec_close(pCodecCtx);
    
    
      // Close the video file
      av_close_input_file(pFormatCtx);
    
    
      return 0;
    
    }