Recherche avancée

Médias (91)

Autres articles (11)

  • D’autres logiciels intéressants

    12 avril 2011, par

    On ne revendique pas d’être les seuls à faire ce que l’on fait ... et on ne revendique surtout pas d’être les meilleurs non plus ... Ce que l’on fait, on essaie juste de le faire bien, et de mieux en mieux...
    La liste suivante correspond à des logiciels qui tendent peu ou prou à faire comme MediaSPIP ou que MediaSPIP tente peu ou prou à faire pareil, peu importe ...
    On ne les connais pas, on ne les a pas essayé, mais vous pouvez peut être y jeter un coup d’oeil.
    Videopress
    Site Internet : (...)

  • Librairies et logiciels spécifiques aux médias

    10 décembre 2010, par

    Pour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
    Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

Sur d’autres sites (3192)

  • FFmpeg RTP example code

    20 juillet 2016, par Johnnylin

    Can anyone show me an example code of how to use FFmpeg to encode a ".mp4" video and then output to network stream using RTP(rtp ://127.0.0.1:6666). I have searched for it on google but most of them are just command line. Thanks very much.

    UPDATED :

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

               }
               #include
               #include <iostream>
               #include <string>
               using namespace std;

               // compatibility with newer API
               #if LIBAVCODEC_VERSION_INT &lt; AV_VERSION_INT(55,28,1)
               #define av_frame_alloc avcodec_alloc_frame
               #define av_frame_free avcodec_free_frame
               #endif
               #define RNDTO2(X) ( ( (X) &amp; 0xFFFFFFFE ))
               #define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) &amp; 0xFFFFFFE0 ) : (X) )

               //avcodec_alloc_frame is an old name


               int main(int argc, char *argv[]) {
                   // Initalizing these to NULL prevents segfaults!
                   AVFormatContext   *pFormatCtx = NULL;
                   int               i, videoStream;
                   AVCodecContext    *pCodecCtxOrig = NULL;
                   AVCodecContext    *pCodecCtx = NULL;
                   AVCodec           *pCodec = NULL;
                   AVFrame           *pFrame = NULL;
                   AVPacket          packet;
                   int               frameFinished;
                   int               numBytes;
                   struct SwsContext *sws_ctx = NULL;
                   int frame_index=0;

                   if(argc &lt; 2) {
                   printf("Please provide a movie file\n");
                   return -1;
                   }

                   // Register all formats and codecs
                   av_register_all();

                   //initialize network video
                   avformat_network_init();


                   int errorStatus = 0;
                   char errorLog[128] = { 0 };
                   av_log_set_level(AV_LOG_TRACE);


                   //------------------ This is for local video file --------------
                   // Open video file
                   if(avformat_open_input(&amp;pFormatCtx, argv[1], NULL, NULL)!=0)
                   return -1; // Couldn't open file

                   // Retrieve stream information
                   if(avformat_find_stream_info(pFormatCtx, NULL)&lt;0)
                   return -1; // Couldn't find stream information

                   // Find the first video stream
                   videoStream=-1;
                   for(i=0; inb_streams; i++)
                   if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
                     videoStream=i;
                     break;
                   }

                   // Dump information about file onto standard error
                   av_dump_format(pFormatCtx, 0, argv[1], 0);


                   if(videoStream==-1)
                       return -1; // Didn't find a video stream

                   // Get a pointer to the codec context for the video stream
                   pCodecCtxOrig=pFormatCtx->streams[videoStream]->codec;
                   // Find the decoder for the video stream
                   pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
                   if(pCodec==NULL) {
                   fprintf(stderr, "Unsupported codec!\n");
                   return -1; // Codec not found
                   }

                   // Copy context
                   pCodecCtx = avcodec_alloc_context3(pCodec);
                   if(avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) {
                   fprintf(stderr, "Couldn't copy codec context");
                   return -1; // Error copying codec context
                   }

                   // Open codec
                   if(avcodec_open2(pCodecCtx, pCodec, NULL)&lt;0)
                       return -1; // Could not open codec

                   // Allocate video frame
                   pFrame=av_frame_alloc();


                   // use nvidia codec
                   AVCodec* en_codec = avcodec_find_encoder_by_name("nvenc");
                   //AVCodec* en_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
                   AVCodecContext* nv_codec_context = avcodec_alloc_context3(en_codec);

                   nv_codec_context->bit_rate = 1244179;
                   nv_codec_context->width = 1920;                              
                   nv_codec_context->height = 1080;
                   nv_codec_context->time_base.num = 1;                                
                   nv_codec_context->time_base.den = 30;                              
                   nv_codec_context->gop_size = 10;                                    
                   nv_codec_context->max_b_frames = 1;                                  
                   nv_codec_context->keyint_min = 1;                                    
                   nv_codec_context->i_quant_factor = (float)0.71;                      
                   nv_codec_context->b_frame_strategy = 20;                            
                   nv_codec_context->qcompress = (float)0.6;                              
                   nv_codec_context->qmin = 20;                                      
                   nv_codec_context->qmax = 51;                                        
                   nv_codec_context->max_qdiff = 4;                                      
                   nv_codec_context->refs = 4;                                        
                   nv_codec_context->trellis = 1;                                        
                   nv_codec_context->pix_fmt = AV_PIX_FMT_YUV420P;                      
                   //nv_codec_context->codec_id = AV_CODEC_ID_H264;
                   //nv_codec_context->codec_type = AVMEDIA_TYPE_VIDEO;

                   if (avcodec_open2(nv_codec_context, en_codec,NULL) &lt; 0) {
                       fprintf(stderr, "Could not open codec\n");
                       exit(1);
                   }else printf("\nH264 codec opened\n");


                   /******stream*******/

                   string m_output("rtp://147.8.179.229:6666");
                   AVFormatContext* m_formatContext = NULL;
                   AVStream* m_stream = NULL;
                   if (avformat_alloc_output_context2(&amp;m_formatContext, NULL, "H264", m_output.c_str()) &lt; 0) {
                          cerr &lt;&lt; "Cannot allocate output context: "
                               &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
                          return -1;
                   }

                   //AVCodec* tmp_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
                   m_stream = avformat_new_stream(m_formatContext, en_codec);
                     if (!m_stream) {
                         cerr &lt;&lt; "Cannot create a new stream: "
                            &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
                       return -1;
                   }


                   av_dump_format(m_formatContext, 0, m_output.c_str(), 1);

                   m_stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
                   m_stream->codec->width = 1920;
                   m_stream->codec->height = 1080;
                   //m_stream->codec->codec_id = AV_CODEC_ID_H264;
                   m_stream->codec->bit_rate = 40000;
                   m_stream->codec->time_base.den = 30;
                   m_stream->codec->time_base.num = 1;
                   m_stream->time_base.den = 30;
                   m_stream->time_base.num = 1;

                   m_stream->codec->codec_tag = 0;
                   if (m_formatContext->oformat->flags &amp; AVFMT_GLOBALHEADER)
                       m_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;


                   if (!(m_formatContext->oformat->flags &amp; AVFMT_NOFILE))
                       errorStatus = avio_open(&amp;m_formatContext->pb, m_output.c_str(), AVIO_FLAG_WRITE);



                   if ((errorStatus) &lt; 0) {
                       cerr &lt;&lt; "Cannot open output: "
                            &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
                       return -1;
                   }


                   if (avformat_write_header(m_formatContext, NULL) &lt; 0) {
                       cerr &lt;&lt; "Cannot write header to stream: "
                            &lt;&lt; av_make_error_string(errorLog, 128, errorStatus) &lt;&lt; endl;
                       return -1;
                   }


                   /******stream*******/

                   FILE *fp_yuv = NULL;
                   fp_yuv=fopen("output.yuv","wb+");

                   // Read frames and save first five frames to disk
                   i=0;

                   while(av_read_frame(pFormatCtx, &amp;packet)>=0) {
                   // Is this a packet from the video stream?
                       if(packet.stream_index==videoStream) {

                           // Decode video frame
                           avcodec_decode_video2(pCodecCtx, pFrame, &amp;frameFinished, &amp;packet);

                           // Did we get a video frame?
                           if(frameFinished) {

                               AVPacket Outpacket;
                               int got_packet_ptr;
                               av_init_packet(&amp;Outpacket);
                               Outpacket.data = NULL;
                               Outpacket.size = 0;
                               int out_size = avcodec_encode_video2(nv_codec_context, &amp;Outpacket, pFrame, &amp;got_packet_ptr);
                               Outpacket.pts = av_rescale_q(pFrame->pts, m_stream->codec->time_base, m_stream->time_base);

                               fwrite(Outpacket.data,1,Outpacket.size,fp_yuv);

                               //av_write_frame(m_formatContext, &amp;Outpacket);
                               av_interleaved_write_frame(m_formatContext, &amp;Outpacket);

                               //Free the packet that was allocated by encoder
                               av_packet_unref(&amp;Outpacket);
                     }
                   }

                   // Free the packet that was allocated by av_read_frame
                   av_packet_unref(&amp;packet);
                   }

                   fclose(fp_yuv);


                   // Free the YUV frame
                   av_frame_free(&amp;pFrame);

                   // Close the codecs
                   avcodec_close(pCodecCtx);
                   avcodec_close(pCodecCtxOrig);
                   avcodec_close(m_stream->codec);
                   avformat_free_context(m_formatContext);

                   // Close the video file
                   avformat_close_input(&amp;pFormatCtx);


                   return 0;
               }
    </string></iostream>

    Above is my code for decoding a .mp4 file, outputting to a network stream through RTP. But it does not work. On the client side, I call VLC library to decode the stream ( VlcMedia(url, _instance) where url is rtp/h264 ://@147.8.179.229:6666 ). When I change the protocal to UDP, it works. However, it is not stable. The frames jumps and probably the frame lost or something wrong with the pts setting ?

    UPDATED :

    When I use UDP, I got this error message.
    enter image description here

    When I use RTP, I got this error message :
    enter image description here

    Not sure about how to solve this problem, Can anyone help ? Thanks very much.

  • Fade in/out gif in particular time in ffmpeg

    29 juin 2016, par Ahmad Ali Mukashaty

    I want to fade in gif file (mygif.gif) with video in every 10 minute and for 15 seconds

    is there any way to implement that ?

    ffmpeg -re -i test.mp4 -i logo.png -ignore_loop 0 -i mygif.gif -filter_complex
    "[0][1]overlay=0:0[a];[a][2]overlay=0:H-90,scale=1920:1080" -f mpegts
    udp://127.0.0.1:port
  • Why when creating video file with ffmpeg when playing the video file the video is moving very fast ?

    22 août 2013, par user2704319

    This is how I am using the ffmpeg arguments :

    public void Start(string pathFileName, int BitmapRate)
           {
               try
               {
                   string outPath = pathFileName;
                   Logger.Write("Output Video File Directory: " + outPath);
                   Logger.Write("Frame Rate: " + BitmapRate.ToString());
                   p = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte);
                   b = new byte[1920 * 1080 * 3]; // some buffer for the r g and b of pixels of an image of size 720p

                   ProcessStartInfo psi = new ProcessStartInfo();
                   psi.WindowStyle = ProcessWindowStyle.Hidden;
                   psi.UseShellExecute = false;
                   psi.CreateNoWindow = true;
                   psi.FileName = ffmpegFileName; // the ffmpegFileName is the ffmpeg.exe !
                   Logger.Write("psi.FileName: " + psi.FileName);
                   psi.WorkingDirectory = workingDirectory;
                   Logger.Write("psi.WorkingDirectory: " + psi.WorkingDirectory);
                   psi.Arguments = @"-f rawvideo -pix_fmt bgr0 -video_size 1920x1080 -i \\.\pipe\mytestpipe -map 0 -c:v libx264 -r " + BitmapRate + " " + outPath;
                   Logger.Write("ProcessStartInfo Arguments" + @"-f rawvideo -pix_fmt bgr0 -video_size 1920x1080 -i \\.\pipe\mytestpipe -map 0 -c:v libx264 -r " + BitmapRate + " " + outPath);
                   //psi.RedirectStandardOutput = true;
                   process = Process.Start(psi);
                   process.EnableRaisingEvents = false;
                   p.WaitForConnection();
               }
               catch (Exception err)
               {
                   Logger.Write("Exception Error: " + err.ToString());
               }
           }

    I guess it is something with the arguments command, but I am not sure where the problem is.
    I tried to google and saw that you can use h264 or libx264 only with an mp4 output file ?

    How can I fix this ?

    When I am running the video file on any player I see everything moving very fast.

    This is a screenshot of the ffmpeg cmd window :

    enter image description here

    And this is a link for the video file it created 1.37MB size and only 3 seconds length playing it with Media Player Classic :

    https://skydrive.live.com/redir?resid=EB1C71C44C3976D5 !295&authkey= !AJjCZ-zINYp7h4A

    https://skydrive.live.com/redir?resid=EB1C71C44C3976D5!295&amp;authkey=!AJjCZ-zINYp7h4A

    The ffmpeg command from the cmd window :

    ffmpeg version N-53885-gf97e28e Copyright (c) 2000-2013 the FFmpeg developers
     built on Jun  7 2013 00:32:38 with gcc 4.7.3 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
    isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
    le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
    e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
    ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
    ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
    eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
    amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
    enable-libxvid --enable-zlib
     libavutil      52. 35.100 / 52. 35.100
     libavcodec     55. 15.100 / 55. 15.100
     libavformat    55.  8.102 / 55.  8.102
     libavdevice    55.  2.100 / 55.  2.100
     libavfilter     3. 75.101 /  3. 75.101
     libswscale      2.  3.100 /  2.  3.100
     libswresample   0. 17.102 /  0. 17.102
     libpostproc    52.  3.100 / 52.  3.100

    And this is when its working :

    ffmpeg version N-53885-gf97e28e Copyright (c) 2000-2013 the FFmpeg developers
     built on Jun  7 2013 00:32:38 with gcc 4.7.3 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
    isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
    le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
    e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
    ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
    ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
    eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
    amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
    enable-libxvid --enable-zlib
     libavutil      52. 35.100 / 52. 35.100
     libavcodec     55. 15.100 / 55. 15.100
     libavformat    55.  8.102 / 55.  8.102
     libavdevice    55.  2.100 / 55.  2.100
     libavfilter     3. 75.101 /  3. 75.101
     libswscale      2.  3.100 /  2.  3.100
     libswresample   0. 17.102 /  0. 17.102
     libpostproc    52.  3.100 / 52.  3.100
    Input #0, rawvideo, from &#39;\\.\pipe\mytestpipe&#39;:
     Duration: N/A, start: 0.000000, bitrate: 1658880 kb/s
       Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1658880 k
    b/s, 25 tbr, 25 tbn, 25 tbc
    No pixel format specified, yuv444p for H.264 encoding chosen.
    Use -pix_fmt yuv420p for compatibility with outdated media players.
    [libx264 @ 003bc420] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
    [libx264 @ 003bc420] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit
    Output #0, avi, to &#39;D:\okwow.avi&#39;:
     Metadata:
       ISFT            : Lavf55.8.102
       Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 1920x1080,
    q=-1--1, 25 tbn, 25 tbc
    Stream mapping:
     Stream #0:0 -> #0:0 (rawvideo -> libx264)
    Press [q] to stop, [?] for help
    frame=   10 fps=1.9 q=0.0 size=       6kB time=00:00:00.00 bitrate=N/A