Recherche avancée

Médias (91)

Autres articles (55)

  • Mise à disposition des fichiers

    14 avril 2011, par

    Par défaut, lors de son initialisation, MediaSPIP ne permet pas aux visiteurs de télécharger les fichiers qu’ils soient originaux ou le résultat de leur transformation ou encodage. Il permet uniquement de les visualiser.
    Cependant, il est possible et facile d’autoriser les visiteurs à avoir accès à ces documents et ce sous différentes formes.
    Tout cela se passe dans la page de configuration du squelette. Il vous faut aller dans l’espace d’administration du canal, et choisir dans la navigation (...)

  • Use, discuss, criticize

    13 avril 2011, par

    Talk to people directly involved in MediaSPIP’s development, or to people around you who could use MediaSPIP to share, enhance or develop their creative projects.
    The bigger the community, the more MediaSPIP’s potential will be explored and the faster the software will evolve.
    A discussion list is available for all exchanges between users.

  • MediaSPIP en mode privé (Intranet)

    17 septembre 2013, par

    À partir de la version 0.3, un canal de MediaSPIP peut devenir privé, bloqué à toute personne non identifiée grâce au plugin "Intranet/extranet".
    Le plugin Intranet/extranet, lorsqu’il est activé, permet de bloquer l’accès au canal à tout visiteur non identifié, l’empêchant d’accéder au contenu en le redirigeant systématiquement vers le formulaire d’identification.
    Ce système peut être particulièrement utile pour certaines utilisations comme : Atelier de travail avec des enfants dont le contenu ne doit pas (...)

Sur d’autres sites (8234)

  • How do I properly enable ffmpeg for matplotlib.animation ?

    9 novembre 2018, par spanishgum

    I have covered a lot of ground on stack so far trying to get ffmpeg going so I can make a timelapse video.

    I am on a CentOS 7 machine, running python3.7.0a0.

    python3
    >>> import numpy as np
    >>> np.__version__
    '1.12.0'
    >>> import matplotlib as mpl
    >>> mpl.__version__
    '2.0.0'
    >>> import mpl_toolkits.basemap as base
    >>> base.__version__
    '1.0.7'

    I found this github gist on installing ffmpeg. I used the chromium source, and installed without a prefix option (using the default).

    I have confirmed that ffmpeg is installed, although I don’t know anything about testing whether it works.

    which ffmpeg
    /usr/local/bin/ffmpeg

    ffmpeg -version
    ffmpeg version N-83533-gada281d Copyright (c) 2000-2017 the FFmpeg dev elopers
    built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11
    configuration:
    libavutil      55. 47.100 / 55. 47.100
    libavcodec     57. 80.100 / 57. 80.100
    libavformat    57. 66.102 / 57. 66.102
    libavdevice    57.  2.100 / 57.  2.100
    libavfilter     6. 73.100 /  6. 73.100
    libswscale      4.  3.101 /  4.  3.101
    libswresample   2.  4.100 /  2.  4.100

    I tried to run a few sample examples I found online :

    [1] http://matplotlib.org/examples/animation/basic_example_writer.html

    [2] https://stackoverflow.com/a/23098090/3454650

    Everything works fine up until I try to save the animation file.

    [1]

    anim.save('basic_animation.mp4', writer = FFwriter, fps=30, extra_args=['-vcodec', 'libx264'])

    [2]

    im_ani.save('im.mp4', writer=writer)

    I found here that explictly setting the path to ffmpeg might be necessary so I added this to the top of the test scripts :

    plt.rcParams['animation.ffmpeg_path'] = '/usr/local/bin/ffmpeg'

    I tried a few more tweaks in the code but always get the same response, which I do not know how to begin deciphering :

    Traceback (most recent call last):
     File "testanim.py", line 27, in <module>
       writer.grab_frame()
     File "/usr/local/lib/python3.7/contextlib.py", line 100, in __exit__
       self.gen.throw(type, value, traceback)
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 256, in saving
       self.finish()
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 276, in finish
       self.cleanup()
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 311, in cleanup
       out, err = self._proc.communicate()
     File "/usr/local/lib/python3.7/subprocess.py", line 836, in communicate
       stdout, stderr = self._communicate(input, endtime, timeout)
     File "/usr/local/lib/python3.7/subprocess.py", line 1474, in _communicate
       selector.register(self.stdout, selectors.EVENT_READ)
     File "/usr/local/lib/python3.7/selectors.py", line 351, in register
       key = super().register(fileobj, events, data)
     File "/usr/local/lib/python3.7/selectors.py", line 237, in register
       key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
     File "/usr/local/lib/python3.7/selectors.py", line 224, in _fileobj_lookup
       return _fileobj_to_fd(fileobj)
     File "/usr/local/lib/python3.7/selectors.py", line 39, in _fileobj_to_fd
       "{!r}".format(fileobj)) from None
    ValueError: Invalid file object: &lt;_io.BufferedReader name=6>
    </module>

    Is there something with my configuration that is malformed ? I searched google for this error for some time but never found anything relevant to animations / ffmpeg. Any help would be greatly appreciated.


    UPDATE :

    @LordNeckBeard pointed me here : https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

    I ran into problems with installing the x264 encoding dependency. Some files in libavcodec/*.c (in the make output) were reporting undefined references to several functions. After a wild goose chase found this : https://mailman.videolan.org/pipermail/x264-devel/2015-February/010971.html

    To fix the x264 installation, I simply added some configure flags :

    ./configure --enable-static --enable-shared --extra-ldflags="-lswresample -llzma"

    UPDATE :

    So everything installed fine after fixing the libx264 problems. I went ahead and copied the ffmpeg binary from the ffmpeg_build folder into /usr/local/bin/ffmpeg.

    After running the script I was getting problems where ffmpeg could not find the libx264 shared object. I think I will have to recompile everything using different prefixes. My intuition tells me there are old files laying around after I have messed with everything, using some configuration that is broken.

    So I decided maybe I should just try to use NUX : http://linoxide.com/linux-how-to/install-ffmpeg-centos-7/
    I installed ffmpeg using the new rpm, but to no avail. I still was not able to run ffmpeg because of a missing shared object.

    Finally, instead of usiong files copied into my /usr/local/bin folder, I ran ffmpeg directly from the build bin directory. Turns out that this does work properly !

    So in essence, if I want to install ffmpeg system wide, I need to manually compile from sources again but using a nonlocal prefix.

  • How do I properly enable ffmpeg for matplotlib.animation ?

    7 mars 2017, par spanishgum

    I have covered a lot of ground on stack so far trying to get ffmpeg going so I can make a timelapse video.

    I am on a CentOS 7 machine, running python3.7.0a0.

    python3
    >>> import numpy as np
    >>> np.__version__
    '1.12.0'
    >>> import matplotlib as mpl
    >>> mpl.__version__
    '2.0.0'
    >>> import mpl_toolkits.basemap as base
    >>> base.__version__
    '1.0.7'

    I found this github gist on installing ffmpeg. I used the chromium source, and installed without a prefix option (using the default).

    I have confirmed that ffmpeg is installed, although I don’t know anything about testing whether it works.

    which ffmpeg
    /usr/local/bin/ffmpeg

    ffmpeg -version
    ffmpeg version N-83533-gada281d Copyright (c) 2000-2017 the FFmpeg dev elopers
    built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11
    configuration:
    libavutil      55. 47.100 / 55. 47.100
    libavcodec     57. 80.100 / 57. 80.100
    libavformat    57. 66.102 / 57. 66.102
    libavdevice    57.  2.100 / 57.  2.100
    libavfilter     6. 73.100 /  6. 73.100
    libswscale      4.  3.101 /  4.  3.101
    libswresample   2.  4.100 /  2.  4.100

    I tried to run a few sample examples I found online :

    [1] http://matplotlib.org/examples/animation/basic_example_writer.html

    [2] http://stackoverflow.com/a/23098090/3454650

    Everything works fine up until I try to save the animation file.

    [1]

    anim.save('basic_animation.mp4', writer = FFwriter, fps=30, extra_args=['-vcodec', 'libx264'])

    [2]

    im_ani.save('im.mp4', writer=writer)

    I found here that explictly setting the path to ffmpeg might be necessary so I added this to the top of the test scripts :

    plt.rcParams['animation.ffmpeg_path'] = '/usr/local/bin/ffmpeg'

    I tried a few more tweaks in the code but always get the same response, which I do not know how to begin deciphering :

    Traceback (most recent call last):
     File "testanim.py", line 27, in <module>
       writer.grab_frame()
     File "/usr/local/lib/python3.7/contextlib.py", line 100, in __exit__
       self.gen.throw(type, value, traceback)
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 256, in saving
       self.finish()
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 276, in finish
       self.cleanup()
     File "/usr/local/lib/python3.7/site-packages/matplotlib/animation.py", line 311, in cleanup
       out, err = self._proc.communicate()
     File "/usr/local/lib/python3.7/subprocess.py", line 836, in communicate
       stdout, stderr = self._communicate(input, endtime, timeout)
     File "/usr/local/lib/python3.7/subprocess.py", line 1474, in _communicate
       selector.register(self.stdout, selectors.EVENT_READ)
     File "/usr/local/lib/python3.7/selectors.py", line 351, in register
       key = super().register(fileobj, events, data)
     File "/usr/local/lib/python3.7/selectors.py", line 237, in register
       key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
     File "/usr/local/lib/python3.7/selectors.py", line 224, in _fileobj_lookup
       return _fileobj_to_fd(fileobj)
     File "/usr/local/lib/python3.7/selectors.py", line 39, in _fileobj_to_fd
       "{!r}".format(fileobj)) from None
    ValueError: Invalid file object: &lt;_io.BufferedReader name=6>
    </module>

    Is there something with my configuration that is malformed ? I searched google for this error for some time but never found anything relevant to animations / ffmpeg. Any help would be greatly appreciated.


    UPDATE :

    @LordNeckBeard pointed me here : https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

    I ran into problems with installing the x264 encoding dependency. Some files in libavcodec/*.c (in the make output) were reporting undefined references to several functions. After a wild goose chase found this : https://mailman.videolan.org/pipermail/x264-devel/2015-February/010971.html

    To fix the x264 installation, I simply added some configure flags :

    ./configure --enable-static --enable-shared --extra-ldflags="-lswresample -llzma"

    UPDATE :

    So everything installed fine after fixing the libx264 problems. I went ahead and copied the ffmpeg binary from the ffmpeg_build folder into /usr/local/bin/ffmpeg.

    After running the script I was getting problems where ffmpeg could not find the libx264 shared object. I think I will have to recompile everything using different prefixes. My intuition tells me there are old files laying around after I have messed with everything, using some configuration that is broken.

    So I decided maybe I should just try to use NUX : http://linoxide.com/linux-how-to/install-ffmpeg-centos-7/
    I installed ffmpeg using the new rpm, but to no avail. I still was not able to run ffmpeg because of a missing shared object.

    Finally, instead of usiong files copied into my /usr/local/bin folder, I ran ffmpeg directly from the build bin directory. Turns out that this does work properly !

    So in essence, if I want to install ffmpeg system wide, I need to manually compile from sources again but using a nonlocal prefix.

  • How to mux raw PCM with h.264 to MP4 with ffmpeg API ?

    5 janvier 2019, par Oliver.Wong

    I’m doing some stuff with real-time multimedia transporting with FFmpeg API. Due to the requests of transporting audio/video data separately, so I need to mix them into an mp4 file at the receiver side.

    Now I can mux PCM and H.264 into mp4 file, but when playing, only images come out, the audio can’t.
    PCM raw data attribute : 8000 sample rate, mono channel, 16 bit.

    Can anybody give some advice to me ? Thanks a lot.

    I’ve tried to add WAV header to in_pcm_file, and make sure the pcm file can be played by Windows Media Player. But still not working in MP4 file.

    int muxerData(char *in_h264_file,
                 char *in_pcm_file,
                 char *out_mp4_file,
                 char *angle)
    {
       AVFormatContext *ifmt_ctx_v = NULL;
       AVFormatContext *ifmt_ctx_a = NULL;
       AVFormatContext *ofmt_ctx = NULL;
       AVFormatContext *ifmt_ctx = NULL;

       AVOutputFormat *ofmt = NULL;

       AVPacket pkt = {0};
       AVCodec *dec = NULL;

       AVStream *in_stream = NULL;
       AVStream *out_stream = NULL;

       int ret = 0;
       unsigned int i = 0;
       int videoindex_v = -1;
       int videoindex_out = -1;
       int audioindex_a = -1;
       int audioindex_out = -1;
       int frame_index = 0;
       int64_t cur_pts_v = 0;
       int64_t cur_pts_a = 0;

       int stream_index = 0;

       int compare_tag = -1;

       char log_buf[1024] = {0};

       avcodec_register_all();
       av_register_all();

       //Input
       if ((ret = avformat_open_input(&amp;ifmt_ctx_a, in_pcm_file, NULL, NULL)) &lt; 0)
       {
           av_strerror(ret, log_buf, 1024);
           printf("Couldn't open file %s: %d(%s)", in_pcm_file, ret, log_buf);
           goto end;
       }

       if ((ret = avformat_find_stream_info(ifmt_ctx_a, 0)) &lt; 0)
       {
           printf("Failed to retrieve input stream information");
           //if (acc_length>0)
           //  goto end;
       }

       if ((ret = avformat_open_input(&amp;ifmt_ctx_v, in_h264_file, NULL, NULL)) &lt; 0)
       {
           printf("Could not open input file:%d\n", ret);
           goto end;
       }

       if ((ret = avformat_find_stream_info(ifmt_ctx_v, 0)) &lt; 0)
       {
           printf("Failed to retrieve input stream information");
           goto end;
       }

       av_dump_format(ifmt_ctx_v, 0, in_h264_file, 0);
       av_dump_format(ifmt_ctx_a, 0, in_pcm_file, 0);

       //Output
       avformat_alloc_output_context2(&amp;ofmt_ctx, NULL, NULL, out_mp4_file);
       if (!ofmt_ctx)
       {
           printf("Could not create output context\n");
           ret = AVERROR_UNKNOWN;
           goto end;
       }

       ofmt = ofmt_ctx->oformat;

       for (i = 0; i &lt; ifmt_ctx_v->nb_streams; i++)
       {
           //Create output AVStream according to input AVStream
           if (ifmt_ctx_v->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
           {
               in_stream = ifmt_ctx_v->streams[i];
               out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
               videoindex_v = i;

               if (!out_stream)
               {
                   printf("Failed allocating output stream\n");
                   ret = AVERROR_UNKNOWN;
                   goto end;
               }

               videoindex_out = out_stream->index;

               //Copy the settings of AVCodecContext
               ret = av_dict_set(&amp;out_stream->metadata, "rotate", angle, 0);

               if (avcodec_copy_context(out_stream->codec, in_stream->codec) &lt; 0)
               {
                   printf("Failed to copy context from input to output stream codec context\n");
                   goto end;
               }

               out_stream->codec->codec_tag = 0;
               if (ofmt_ctx->oformat->flags &amp; AVFMT_GLOBALHEADER)
               {
                   out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
               }

               break;
           }
       }


       for (i = 0; i &lt; ifmt_ctx_a->nb_streams; i++)
       {
           printf("===========acc=====from======:%d\n", ifmt_ctx_a->nb_streams);

           //Create output AVStream according to input AVStream
           if (ifmt_ctx_a->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
           {
               in_stream = ifmt_ctx_a->streams[i];
               out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
               audioindex_a = i;

               if (!out_stream)
               {
                   printf("Failed allocating output stream\n");
                   ret = AVERROR_UNKNOWN;
                   goto end;
               }

               audioindex_out = out_stream->index;

               //Copy the settings of AVCodecContext
               if (avcodec_copy_context(out_stream->codec, in_stream->codec) &lt; 0)
               {
                   printf("Failed to copy context from input to output stream codec context\n");
                   goto end;
               }

               if (ofmt_ctx->oformat->flags &amp; AVFMT_GLOBALHEADER)
               {
                   out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
               }

               break;
           }
       }


       printf("==========Output Information==========\n");
       av_dump_format(ofmt_ctx, 0, out_mp4_file, 1);
       printf("======================================\n");

       //Open output file
       if (!(ofmt->flags &amp; AVFMT_NOFILE))
       {
           if (avio_open(&amp;ofmt_ctx->pb, out_mp4_file, AVIO_FLAG_WRITE) &lt; 0)
           {
               printf("Could not open output file '%s'", out_mp4_file);
               goto end;
           }
       }

       //Write file header
       int header_ret = avformat_write_header(ofmt_ctx, NULL);
       if (header_ret &lt; 0)
       {
           av_strerror(header_ret, log_buf, 1024);
           printf("Error occurred when opening output file:%d (%s)\n", header_ret, log_buf);
           goto end;
       }

       //FIX
       //AVBitStreamFilterContext* h264bsfc = av_bitstream_filter_init("h264_mp4toannexb");
       //AVBitStreamFilterContext* aacbsfc = av_bitstream_filter_init("aac_adtstoasc");


       while (1)
       {
           //Get an AVPacket
           //if (acc_length>0)
           //{
           compare_tag = av_compare_ts(cur_pts_v,
                                       ifmt_ctx_v->streams[videoindex_v]->time_base,
                                       cur_pts_a,
                                       ifmt_ctx_a->streams[audioindex_a]->time_base);
           //}

           if (compare_tag &lt;= 0)
           {
               ifmt_ctx = ifmt_ctx_v;
               stream_index = videoindex_out;

               if (av_read_frame(ifmt_ctx, &amp;pkt) >= 0)
               {
                   do
                   {
                       in_stream = ifmt_ctx->streams[pkt.stream_index];
                       out_stream = ofmt_ctx->streams[stream_index];

                       if (pkt.stream_index == videoindex_v)
                       {
                           //FIX No PTS (Example: Raw H.264)
                           //Simple Write PTS
                           if (pkt.pts == AV_NOPTS_VALUE)
                           {
                               //Write PTS
                               AVRational time_base1 = in_stream->time_base;
                               //Duration between 2 frames (us)
                               int64_t calc_duration = (double)AV_TIME_BASE / av_q2d(in_stream->r_frame_rate);
                               //Parameters
                               pkt.pts = (double)(frame_index*calc_duration) / (double)(av_q2d(time_base1)*AV_TIME_BASE);
                               pkt.dts = pkt.pts;
                               pkt.duration = (double)calc_duration / (double)(av_q2d(time_base1)*AV_TIME_BASE);
                               frame_index++;
                           }

                           cur_pts_v = pkt.pts;
                           break;
                       }
                   } while (av_read_frame(ifmt_ctx, &amp;pkt) >= 0);
               }
               else
               {
                   break;
               }
           }
           else
           {
               ifmt_ctx = ifmt_ctx_a;
               stream_index = audioindex_out;
               if (av_read_frame(ifmt_ctx, &amp;pkt) >= 0)
               {
                   do
                   {
                       in_stream = ifmt_ctx->streams[pkt.stream_index];
                       out_stream = ofmt_ctx->streams[stream_index];

                       if (pkt.stream_index == audioindex_a)
                       {
                           //FIX No PTS
                           //Simple Write PTS
                           if (pkt.pts == AV_NOPTS_VALUE)
                           {
                               //Write PTS
                               AVRational time_base1 = in_stream->time_base;
                               //Duration between 2 frames (us)
                               int64_t calc_duration = (double)AV_TIME_BASE / av_q2d(in_stream->r_frame_rate);
                               //Parameters
                               pkt.pts = (double)(frame_index*calc_duration) / (double)(av_q2d(time_base1)*AV_TIME_BASE);
                               pkt.dts = pkt.pts;
                               pkt.duration = (double)calc_duration / (double)(av_q2d(time_base1)*AV_TIME_BASE);
                               frame_index++;
                           }
                           cur_pts_a = pkt.pts;

                           break;
                       }
                   } while (av_read_frame(ifmt_ctx, &amp;pkt) >= 0);
               }
               else
               {
                   break;
               }
           }

           //FIX:Bitstream Filter
           //av_bitstream_filter_filter(h264bsfc, in_stream->codec, NULL, &amp;pkt.data, &amp;pkt.size, pkt.data, pkt.size, 0);
           //av_bitstream_filter_filter(aacbsfc, out_stream->codec, NULL, &amp;pkt.data, &amp;pkt.size, pkt.data, pkt.size, 0);

           //Convert PTS/DTS
           pkt.pts = av_rescale_q_rnd(pkt.pts,
                                      in_stream->time_base,
                                      out_stream->time_base,
                                      (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));

           pkt.dts = av_rescale_q_rnd(pkt.dts,
                                      in_stream->time_base,
                                      out_stream->time_base,
                                      (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));

           pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);
           pkt.pos = -1;
           pkt.stream_index = stream_index;

           printf("Write 1 Packet. size:%5d\tpts:%lld\n", pkt.size, pkt.pts);

           if (av_interleaved_write_frame(ofmt_ctx, &amp;pkt) &lt; 0)
           {
               printf("Error muxing packet\n");
               break;
           }

           av_free_packet(&amp;pkt);
       }

       //Write file trailer
       av_write_trailer(ofmt_ctx);

       //av_bitstream_filter_close(h264bsfc);
       //av_bitstream_filter_close(aacbsfc);


    end:

       avformat_close_input(&amp;ifmt_ctx_v);
       avformat_close_input(&amp;ifmt_ctx_a);

       /* close output */
       if (ofmt_ctx &amp;&amp; !(ofmt->flags &amp; AVFMT_NOFILE))
       {
           avio_close(ofmt_ctx->pb);
       }

       avformat_free_context(ofmt_ctx);

       if ((ret &lt; 0) &amp;&amp; (ret != AVERROR_EOF))
       {
           printf("Error occurred.\n");
           return -1;
       }

       printf("======muxer mp4 success =====!\n");
       return 0;
    }