Recherche avancée

Médias (1)

Mot : - Tags -/punk

Autres articles (58)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (8489)

  • C++ ffmpeg API created video does not open in some players

    18 novembre 2017, par ar2015

    After my previous question, I found codes from here to create videos in C++ using avcodec of ffmpeg libraries.

    I have modified this code to comply with C++. Everything is fine and it creates mp4 videos. Except for the output video opens with some video managers and does not open with some others.

    E.g. I can open it on Linux by totem (the slider does not allow back and forth anyway). But VLC (on the same Linux machine) does not open this file. Probably, there will be similar problem in windows.

    Is there any missing process for this code causing this problem ?

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

    extern "C" {
       #include <libavcodec></libavcodec>avcodec.h>
       #include <libavutil></libavutil>opt.h>
       #include <libavutil></libavutil>imgutils.h>
    }

    static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
                      FILE *outfile)
    {
       int ret;

       /* send the frame to the encoder */
       if (frame)
           std::cout&lt;&lt;"Send frame "&lt;&lt;(frame->pts)&lt;= 0) {
           ret = avcodec_receive_packet(enc_ctx, pkt);
           if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
               return;
           else if (ret &lt; 0) {
               fprintf(stderr, "Error during encoding\n");
               exit(1);
           }

           std::cout&lt;&lt;"Write packet "&lt;&lt;(pkt->pts)&lt;&lt;" (size="&lt;&lt;(pkt->size)&lt;&lt;")"&lt;/ printf("Write packet %3" PRId64" (size=%5d)\n", pkt->pts, pkt->size);
           fwrite(pkt->data, 1, pkt->size, outfile);
           av_packet_unref(pkt);
       }
    }

    int main(int argc, char **argv)
    {
       const char *filename;
       const AVCodec *codec;
       AVCodecContext *c= NULL;
       int i, ret, x, y;
       FILE *f;
       AVFrame *frame;
       AVPacket *pkt;
       uint8_t endcode[] = { 0, 0, 1, 0xb7 };

       if (argc &lt; 2) {
           fprintf(stderr, "Usage: %s <output file="file">\n", argv[0]);
           exit(0);
       }
       filename = argv[1];
       std::string codec_name = "mpeg4";

       avcodec_register_all();

       /* find the mpeg1video encoder */
       codec = avcodec_find_encoder_by_name(codec_name.c_str());
       if (!codec) {
           fprintf(stderr, "Codec '%s' not found\n", codec_name.c_str());
           exit(1);
       }

       c = avcodec_alloc_context3(codec);
       if (!c) {
           fprintf(stderr, "Could not allocate video codec context\n");
           exit(1);
       }

       pkt = av_packet_alloc();
       if (!pkt)
           exit(1);

       /* put sample parameters */
       // c->bit_rate = 400000;
       c->bit_rate = 4000000;
       /* resolution must be a multiple of two */
       // c->width = 352;
       // c->height = 288;
       c->width = 640;
       c->height = 480;
       /* frames per second */
       c->time_base = (AVRational){1, 25};
       c->framerate = (AVRational){25, 1};

       /* emit one intra frame every ten frames
        * check frame pict_type before passing frame
        * to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
        * then gop_size is ignored and the output of encoder
        * will always be I frame irrespective to gop_size
        */
       c->gop_size = 10;
       c->max_b_frames = 1;
       c->pix_fmt = AV_PIX_FMT_YUV420P;

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

       /* open it */
       ret = avcodec_open2(c, codec, NULL);
       if (ret &lt; 0) {
           fprintf(stderr, "Could not open codec\n");
           // fprintf(stderr, "Could not open codec: %s\n", av_err2str(ret));
           exit(1);
       }

       f = fopen(filename, "wb");
       if (!f) {
           fprintf(stderr, "Could not open %s\n", filename);
           exit(1);
       }

       frame = av_frame_alloc();
       if (!frame) {
           fprintf(stderr, "Could not allocate video frame\n");
           exit(1);
       }
       frame->format = c->pix_fmt;
       frame->width  = c->width;
       frame->height = c->height;

       ret = av_frame_get_buffer(frame, 32);
       if (ret &lt; 0) {
           fprintf(stderr, "Could not allocate the video frame data\n");
           exit(1);
       }

       /* encode 10 second of video */
       for (i = 0; i &lt; 250; i++) {
           fflush(stdout);

           /* make sure the frame data is writable */
           ret = av_frame_make_writable(frame);
           if (ret &lt; 0)
               exit(1);

           /* prepare a dummy image */
           /* Y */
           for (y = 0; y &lt; c->height; y++) {
               for (x = 0; x &lt; c->width; x++) {
                   frame->data[0][y * frame->linesize[0] + x] = uint8_t(x + y + i * 3);
               }
           }

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

           frame->pts = i;

           /* encode the image */
           encode(c, frame, pkt, f);
       }

       /* flush the encoder */
       encode(c, NULL, pkt, f);

       /* add sequence end code to have a real MPEG file */
       fwrite(endcode, 1, sizeof(endcode), f);
       fclose(f);

       avcodec_free_context(&amp;c);
       av_frame_free(&amp;frame);
       av_packet_free(&amp;pkt);

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

    build :

    g++ -I ./FFmpeg/ video.cpp -L ./fflibs -lavdevice -lavfilter -lavformat -lavcodec -lrt -ldl -lXfixes -lXext -lX11 -lasound -lSDL -lz -lrt -lswresample -lswscale -lavutil -lm -llzma -lbz2 -lswresample -lpthread

    run

    ./a.out myvideo.mp4

    This video will be fine if converted in bash via

    ffmpeg -i myvideo.mp4 out1.mp4

    But I look for a method to fix it from the code.

    Generated video played on totem (Ubuntu) :

    c++ ffmpeg avcodec

    Video after conversion :

    converted

  • FFMPEG Open several video files at the same time ? C++ [on hold]

    8 octobre 2017, par LemanRass

    I wrote a C++ plugin for playing videos using FFmpeg libraries. All works perfectly when playing a single video, but when I try to play at least 2 videos at the same time I have these errors :

    #01 pc 0000714d  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_ZN12FFmpegReader13ReadNextFrameEPvPc+404)
    #02 pc 00005a9f  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_ZN9Videofile17UpdateFramesCacheEv+118)
    #03 pc 000057d1  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_firstUpdateThread+80)

    It seems that when I open the second video it, replaces the first one.
    I came up with this idea when I opened 2 videos one by one (without any errors) then I started to play only the second one and as a result I didn’t get any errors. But when I tried to read frames from the first video, my app crashed with the error above.

    A bit about plugin`s structure :

    1. I created a class called FFmpegReader where methods work
      directly with ffmpeg (Opening file, ReadFrames and returning them as void*,
      Seek and Close).

    2. Then I created one more class which creates a FFmpegReader instance using
      the "new" operator inside its constructor, descriptor (unique id of the opened
      file), queue of cached frames (up to 100 at the same time) and
      methods to operate with FFmpegReader and framesCache.

    3. I created a main file where I created a vector of objects of class from
      the second point I described above. Also I declared 4 threads for each
      opened video file (4 opened videos is the max number of allowed opened
      videos at the same time). They call the method to update a cache of frames in
      its own video file using the video file descriptor. Finally I declared methods
      which will be called from the main app which is using this plugin to retrieve
      cached frames from cache.

    As you can see, I did everything to let it works separately with each new opened video. It seems the problem is inside of FFmpeg. There might be some restrictions I’m not aware of.

    ================UPDATE=================

    Sources of Main: https://pastebin.com/DfGH0BRZ
    Sources of Videofile class: https://pastebin.com/WjdS532B
    Sources of FFmpegReader class: https://pastebin.com/aPHpBvBv

    Hope it’s gonna help...

  • FFmpeg error : ratecontrol_init : can't open stats file

    6 octobre 2017, par oldo.nicho

    I’ve setup an AWS EC2 instance running Ubuntu 14.04 and have installed FFmpeg so that I can compress and transcode video.

    I’m trying to do a two pass conversion with the following code :

    ffmpeg -i input-file.avi -codec:v libx264 -profile:v high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=702:-1 -threads 0 -pass 1 -an -f mp4 ~/encoded/null

    and second pass :

    ffmpeg -i input-file.avi -codec:v libx264 -profile:v high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=702:-1 -threads 0 -pass 2 -codec:a libfdk_aac -b:a 128k -f mp4 output-file.mp4

    However I get the following error :

    ffmpeg version N-77283-g91c2a33 Copyright (c) 2000-2015 the FFmpeg developers
     built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
     configuration: --prefix=/home/ubuntu/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/ubuntu/ffmpeg_build/include --extra-ldflags=-L/home/ubuntu/ffmpeg_build/lib --bindir=/home/ubuntu/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree
     libavutil      55. 11.100 / 55. 11.100
     libavcodec     57. 17.100 / 57. 17.100
     libavformat    57. 20.100 / 57. 20.100
     libavdevice    57.  0.100 / 57.  0.100
     libavfilter     6. 21.100 /  6. 21.100
     libswscale      4.  0.100 /  4.  0.100
     libswresample   2.  0.101 /  2.  0.101
     libpostproc    54.  0.100 / 54.  0.100
    Input #0, avi, from 'input-file.avi':
     Duration: 01:18:05.29, start: 0.000000, bitrate: 2025 kb/s
       Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 720x480 [SAR 1:1 DAR 3:2], 1789 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn, 29.97 tbc
       Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 224 kb/s
    [libx264 @ 0x1e04240] using SAR=1/1
    [libx264 @ 0x1e04240] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX AVX2 FMA3 LZCNT BMI2
    [libx264 @ 0x1e04240] ratecontrol_init: can't open stats file
    Output #0, mp4, to '/home/ubuntu/encoded/null':
       Stream #0:0: Video: h264, none, q=2-31, 128 kb/s, SAR 1:1 DAR 0:0, 29.97 fps
       Metadata:
         encoder         : Lavc57.17.100 libx264
    Stream mapping:
     Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))
    Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    The command as written above works fine on my local computer (running OSX). Would anyone have any suggestions as to how to fix this problem ?