Recherche avancée

Médias (3)

Mot : - Tags -/collection

Autres articles (74)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

Sur d’autres sites (13105)

  • Transcoding & displaying user-uploaded videos for cross-browser/platform compatibility

    5 avril 2012, par Jonathan Amend

    I want to display user-uploaded videos in high quality on different browsers/platforms. I think I have a pretty good start, but there are a few issues. I have at my disposal ffmpeg 0.10 (called from PHP) and jwPlayer 5.8 (licensed).

    Ideally I would like to support :

    • Browsers with Flash 9+
    • Modern Firefox/Chrome/Safari without Flash
    • iOS 4.1+
    • Android 2.2+

    My current transcoding commands are :

    $commands = array(
       'flv' => "/usr/bin/ffmpeg -y -i {$sourceFile} -b 500k -ar 22050 -ab 64 {$tmpFileName}.flv 2>&1",
       'webm' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libvorbis -ac 2 -ab 96k -ar 44100 -b 500k {$tmpFileName}.webm 2>&1",
       'mp4' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libfaac -ab 96k -vcodec libx264 -level 21 -refs 2 -vf 'scale=trunc(ih*a/2)*2:trunc(iw/a/2)*2' -b 500k -bt 1000k -threads 0 -f mp4 {$tmpFileName}.pre.mp4 2>&1",
       'jpg' => "/usr/bin/ffmpeg -y -i {$sourceFile} -ss 5 -vcodec mjpeg -vframes 1 -an -f rawvideo {$tmpFileName}.jpg 2>&1"
    );

    $fastStartCommand = "/usr/bin/qt-faststart {$tmpFileName}.pre.mp4 {$tmpFileName}.mp4");

    My current display code is this :

    <video controls="controls" width="{$width}" height="{$height}" poster="{$fileJPG}" style="width: {$width}px; height: {$height}px;">
       <source src="{$fileMP4}" type="video/mp4" data-ext="mp4"></source>
       <source src="{$fileWEBM}" type="video/webm" data-ext="webm"></source>
       <a href="http://stackoverflow.com/feeds/tag/{$fileMP4}" title="Play Video">
           <img border="0" src="http://stackoverflow.com/feeds/tag/{$fileJPG}" width='0' height='0' alt="Play Video" />
       </a>
    </video>
    <code class="echappe-js">&lt;script type=&quot;text/javascript&quot;&gt;<br />
    swfobject.embedSWF(<br />
       &amp;#39;/flash/jwPlayer.swf&amp;#39;,<br />
       &amp;#39;video&amp;#39;,<br />
       {$width},<br />
       {$height},<br />
       &amp;#39;9.0.0&amp;#39;,<br />
       &amp;#39;&amp;#39;,<br />
       {<br />
           file: &amp;#39;{$fileFLV}&amp;#39;,<br />
           width: {$width},<br />
           height: {$height},<br />
           provider: &amp;#39;video&amp;#39;,<br />
           stretching: &amp;#39;uniform&amp;#39;,<br />
           smoothing: &amp;#39;true&amp;#39;,<br />
           dock: &amp;#39;true&amp;#39;<br />
       },<br />
       {<br />
           menu: &amp;#39;false&amp;#39;,<br />
           allowfullscreen: &amp;#39;true&amp;#39;,<br />
           allowscriptaccess: &amp;#39;always&amp;#39;,<br />
           allownetworking: &amp;#39;always&amp;#39;,<br />
           wmode: &amp;#39;transparent&amp;#39;<br />
       }<br />
    );<br />
    &lt;/script&gt;

    The idea is to prefer the Flash player (we have many custom skins that we would like to keep using), then fall back to HTML 5 video, and if that fails, show the JPEG with a link to the mp4 file (that seems to work as a last-ditch effort for iOS 2/3 and old browsers so they can at least play the video by launching QuickTime).

    The main issues that I'm not sure how to solve right now are :

    • How can I show a higher quality video in Flash ? I tried using the mp4 video instead of the flv but it doesn't work and I only get sound, no video. I think Flash is supposed to support h.264 these days, but how ? And do I have to use a different transcoding method for older and newer versions of Flash ?
    • How can I transcode the video with better quality ? Right now I am using the same bitrate for all resolutions. Any chance there is a way for ffmpeg to adjust the bitrate automatically ? Or can I detect and match the resolution of the uploaded video to a list of resolution -> bitrates somehow ?
  • unexpected end of file error in ffmpeg libavutils/common.h while compiling

    23 mars 2014, par Mayank Agarwal

    I am compiling following simple code in ffmpeg.

    #include "stdafx.h"
    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>

    void main()
    {

       av_register_all();

    }

    all the ffmpeg headers i have included in project properties.
    but i am getting the following error on compiling.

    Error 1 error C1004 : unexpected end-of-file found dev\include\libavutil\common.h 87 1

    Regards
    Mayank

  • FFmpeg/libav : YUV420P to RGB conversion

    17 janvier 2014, par learner

    I am working with Video encoding-decoding based on online tutorials. In the encoding section, the dummy image created is in YUV420P format. I need it to be in RGB or BGR format. Any idea how to do this ??

    #include
    #include
    #include

    #ifdef HAVE_AV_CONFIG_H
    #undef HAVE_AV_CONFIG_H
    #endif

    #include "libavcodec/avcodec.h"
    #include "libavutil/mathematics.h"

    #define INBUF_SIZE 4096
    #define AUDIO_INBUF_SIZE 20480
    #define AUDIO_REFILL_THRESH 4096

    /*
    * Video encoding example
    */
    static void video_encode_example(const char *filename)
    {
        AVCodec *codec;
        AVCodecContext *c = NULL;
        int i, out_size, size, x, y, outbuf_size;
        FILE *f;
        AVFrame *picture;
        uint8_t *outbuf, *picture_buf;

        printf("Video encoding\n");

        /* find the mpeg1 video encoder */
        codec = avcodec_find_encoder(CODEC_ID_MPEG1VIDEO);
        if (!codec)
        {
            fprintf(stderr, "codec not found\n");
            exit(1);
        }

        c = avcodec_alloc_context();
        picture = avcodec_alloc_frame();

        /* put sample parameters */
        c->bit_rate = 400000;
        /* resolution must be a multiple of two */
        c->width = 352;
        c->height = 288;
        /* frames per second */
        c->time_base= (AVRational){1,25};
        c->gop_size = 10; /* emit one intra frame every ten frames */
        c->max_b_frames=1;
        c->pix_fmt = PIX_FMT_YUV420P;

        /* open it */
        if (avcodec_open(c, codec) &lt; 0)
        {
            fprintf(stderr, "could not open codec\n");
            exit(1);
        }

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

        /* alloc image and output buffer */
        outbuf_size = 100000;
        outbuf = malloc(outbuf_size);
        size = c->width * c->height;
        picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */

        picture->data[0] = picture_buf;
        picture->data[1] = picture->data[0] + size;
        picture->data[2] = picture->data[1] + size / 4;
        picture->linesize[0] = c->width;
        picture->linesize[1] = c->width / 2;
        picture->linesize[2] = c->width / 2;

        /* encode 1 second of video */
        for(i=0; i&lt;25; i++)
        {
            fflush(stdout);
            /* prepare a dummy image */
            /* Y */
            for(y=0; y &lt; c->height; y++)
            {
                for(x=0; x &lt; c->width; x++)
                {
                    picture->data[0][y * picture->linesize[0] + x] = 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++)
                {
                    picture->data[1][y * picture->linesize[1] + x] = 128 + y + i * 2;
                    picture->data[2][y * picture->linesize[2] + x] = 64 + x + i * 5;
                }
            }

            /* encode the image */
            out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture);
            printf("encoding frame %3d (size=%5d)\n", i, out_size);
            fwrite(outbuf, 1, out_size, f);
        }

        /* get the delayed frames */
        for(; out_size; i++)
        {
            fflush(stdout);

            out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL);
            printf("write frame %3d (size=%5d)\n", i, out_size);
            fwrite(outbuf, 1, out_size, f);
        }

        /* add sequence end code to have a real mpeg file */
        outbuf[0] = 0x00;
        outbuf[1] = 0x00;
        outbuf[2] = 0x01;
        outbuf[3] = 0xb7;
        fwrite(outbuf, 1, 4, f);
        fclose(f);
        free(picture_buf);
        free(outbuf);

        avcodec_close(c);
        av_free(c);
        av_free(picture);
        printf("\n");
    }

    /*
     * Video decoding example
     */

    static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
                         char *filename)
    {
        FILE *f;
        int i;

        f=fopen(filename,"w");
        fprintf(f,"P5\n%d %d\n%d\n",xsize,ysize,255);
        for(i=0; i* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
        memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);

        printf("Video decoding\n");

        /* find the mpeg1 video decoder */
        codec = avcodec_find_decoder(CODEC_ID_MPEG1VIDEO);
        if (!codec) {
            fprintf(stderr, "codec not found\n");
            exit(1);
        }

        c = avcodec_alloc_context();
        picture = avcodec_alloc_frame();

        if(codec->capabilities&amp;CODEC_CAP_TRUNCATED)
            c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */

        /* For some codecs, such as msmpeg4 and mpeg4, width and height
           MUST be initialized there because this information is not
           available in the bitstream. */

        /* open it */
        if (avcodec_open(c, codec) &lt; 0) {
            fprintf(stderr, "could not open codec\n");
            exit(1);
        }

        /* the codec gives us the frame size, in samples */

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

        frame = 0;
        for(;;) {
            avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
            if (avpkt.size == 0)
                break;

            /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
               and this is the only method to use them because you cannot
               know the compressed data size before analysing it.

               BUT some other codecs (msmpeg4, mpeg4) are inherently frame
               based, so you must call them with all the data for one
               frame exactly. You must also initialize &#39;width&#39; and
               &#39;height&#39; before initializing them. */

            /* NOTE2: some codecs allow the raw parameters (frame size,
               sample rate) to be changed at any frame. We handle this, so
               you should also take care of it */

            /* here, we use a stream based decoder (mpeg1video), so we
               feed decoder and see if it could decode a frame */

            avpkt.data = inbuf;
            while (avpkt.size > 0)
            {
                len = avcodec_decode_video2(c, picture, &amp;got_picture, &amp;avpkt);
                if (len &lt; 0)
                {
                    fprintf(stderr, "Error while decoding frame %d\n", frame);
                    exit(1);
                }
                if (got_picture)
                {
                    printf("saving frame %3d\n", frame);
                    fflush(stdout);

                    /* the picture is allocated by the decoder. no need to
                       free it */
                    snprintf(buf, sizeof(buf), outfilename, frame);
                    pgm_save(picture->data[0], picture->linesize[0],
                             c->width, c->height, buf);
                    frame++;
                }
                avpkt.size -= len;
                avpkt.data += len;
            }
        }

        /* some codecs, such as MPEG, transmit the I and P frame with a
           latency of one frame. You must do the following to have a
           chance to get the last frame of the video */

        avpkt.data = NULL;
        avpkt.size = 0;
        len = avcodec_decode_video2(c, picture, &amp;got_picture, &amp;avpkt);
        if (got_picture)
        {
            printf("saving last frame %3d\n", frame);
            fflush(stdout);

            /* the picture is allocated by the decoder. no need to
               free it */
            snprintf(buf, sizeof(buf), outfilename, frame);
            pgm_save(picture->data[0], picture->linesize[0],
                     c->width, c->height, buf);
            frame++;
        }

        fclose(f);

        avcodec_close(c);
        av_free(c);
        av_free(picture);
        printf("\n");
    }

    int main(int argc, char **argv)
    {
        const char *filename;

        /* must be called before using avcodec lib */
        avcodec_init();

        /* register all the codecs */
        avcodec_register_all();

        if (argc &lt;= 1)
        {
            video_encode_example("asdf.mpg");
            filename = "asdf.mpg";
        }
        else
        {
            filename = argv[1];
        }

        video_decode_example("%d.pgm", filename);

        return 0;
    }

    I tried with PIX_FMT_RGB24 and changing each channel accordingly. For this, I declared another :

    AVFrame *pictureRGB ; and then : pictureRGB = avcodec_alloc_frame() ;

    for(y=0; y &lt; c->height; y++)
    {
        for(x=0; x &lt; c->width; x++)
        {
             pictureRGB ->data[0][y * pictureRGB ->linesize[0] + x] = x + y + i * 3;
             pictureRGB ->data[1][y * pictureRGB ->linesize[1] + x] = x + y + i * 3;
             pictureRGB ->data[2][y * pictureRGB ->linesize[2] + x] = x + y + i * 3;
        }
    }

    But it gives errors ! I am totally new to this library. Is it possible to directly encode as a RGB dummy image rather than as YUV420P. Anybody out there with sound knowledge in this area ??? Thanks in advance !