Recherche avancée

Médias (9)

Mot : - Tags -/soundtrack

Autres articles (102)

  • 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 (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (8299)

  • How to parse ffmpeg info in PHP ?

    29 mai 2013, par Jizbo Jonez

    How does one go about getting specific pieces of information, like the 'duration' from the output of ffmpeg -i /var/thismovie.avi ?

    I need frame height, frame width, duration of movie and frame rate. All of these are in the out put of the above command but how do i get the bits i need individually and put them in a variable in PHP ?

    I've given up on trying to install ffmpeg-php which is what I used before this to do the same job.

    Thanks

    ffmpeg -i /var/thismovie.avi produce an output like this

    ffmpeg version N-43171-ga763caf Copyright (c) 2000-2012 the FFmpeg developers built on Aug 3 2012 07:56:19 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-52) configuration: --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-pic --enable-libx264 --enable-libxvid --disable-ffplay --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --extra-cflags=-fPIC libavutil 51. 66.100 / 51. 66.100 libavcodec 54. 48.100 / 54. 48.100 libavformat 54. 22.100 / 54. 22.100 libavdevice 54. 2.100 / 54. 2.100 libavfilter 3. 5.102 / 3. 5.102 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 [avi @ 0x18e8e240] non-interleaved AVI [avi @ 0x18e8e240] max_analyze_duration 5000000 reached at 5000000 Input #0, avi, from '/var/www/vhosts/mysite.com/httpdocs/movie.avi': Duration: 00:00:10.76, start: 0.000000, bitrate: 5180 kb/s Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 50 tbc Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, s16, 128 kb/s At least one output file must be specified`
  • Revision 6d15132742 : Change dx_time data type in vpxdec.c Change dx_time data type to int64_t to pre

    22 février 2014, par James Yu

    Changed Paths :
     Modify /vpxdec.c



    Change dx_time data type in vpxdec.c

    Change dx_time data type to int64_t to prevent
    test time overflow when decoding long video.

    Change-Id : I3dd5e324a246843e07e635fd25c50e71e385ed70
    Signed-off-by : James Yu <james.yu@linaro.org>

  • Have problems using FFMPEG to save RGB image sequence to .mp4

    28 septembre 2021, par Clubs

    I render some images with OpenGL and need to compose them into a video file. Each of the images is a sequence of uint8_t values representing a sRGB color component (image array looks like ...rgbrgbrgb...)

    &#xA;&#xA;

    I know very little about video processing and have no experience with ffmpeg libraries at all. I made a little test program using these sources as reference :

    &#xA;&#xA;

    https://ffmpeg.org/doxygen/trunk/encode_video_8c-example.html

    &#xA;&#xA;

    How to convert RGB from YUV420p for ffmpeg encoder ?

    &#xA;&#xA;

    The test program is supposed to make a video about growing green vertical stripe. I'm just trying to figure out how to make a video using some source of raw RGB data.

    &#xA;&#xA;

    Here is my code :

    &#xA;&#xA;

    #include <iostream>&#xA;#include <vector>&#xA;#include <algorithm>&#xA;&#xA;extern "C" {&#xA;    #include <libavcodec></libavcodec>avcodec.h>&#xA;    #include <libavutil></libavutil>opt.h>&#xA;    #include <libavutil></libavutil>imgutils.h>&#xA;    #include <libswscale></libswscale>swscale.h>&#xA;}&#xA;&#xA;static void encode( AVCodecContext* enc_ctx,&#xA;                    AVFrame* frame, AVPacket* pkt,&#xA;                    FILE* outfile                  )&#xA;{&#xA;    int ret;&#xA;    ret = avcodec_send_frame(enc_ctx, frame);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error sending a frame for encoding\n";&#xA;        return;&#xA;    }&#xA;    while (ret >= 0) {&#xA;        ret = avcodec_receive_packet(enc_ctx, pkt);&#xA;        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;            return;&#xA;        else if (ret &lt; 0) {&#xA;            fprintf(stderr, "Error during encoding\n");&#xA;            exit(1);&#xA;        }&#xA;        fwrite(pkt->data, 1, pkt->size, outfile);&#xA;        av_packet_unref(pkt);&#xA;    }&#xA;}&#xA;&#xA;static constexpr int w = 1920, h = 1080;&#xA;static constexpr float fps = 20.f, time = 5.f;&#xA;static constexpr int nFrames = static_cast<int>(fps * time);&#xA;static std::vector imageRGB(w * h * 3, 0);&#xA;&#xA;static void UpdateImageRGB()&#xA;{&#xA;    static int d = 50;&#xA;    imageRGB.assign(w * h * 3, 0);&#xA;    for (int i = 0; i &lt; h; &#x2B;&#x2B;i)&#xA;        for ( int j = std::max(0, w / 2 - d);&#xA;              j &lt; std::min(w, w / 2 &#x2B; d);&#xA;              &#x2B;&#x2B;j                             )&#xA;        {&#xA;            imageRGB[(w * i &#x2B; j) * 3 &#x2B; 0] = 50;&#xA;            imageRGB[(w * i &#x2B; j) * 3 &#x2B; 1] = 200;&#xA;            imageRGB[(w * i &#x2B; j) * 3 &#x2B; 2] = 50;&#xA;        }&#xA;    d &#x2B;= 5;&#xA;}&#xA;&#xA;int main()&#xA;{&#xA;    int ret = 0;&#xA;    auto filename = "test.mp4";&#xA;&#xA;    auto codec = avcodec_find_encoder(AV_CODEC_ID_H264);&#xA;    if (!codec) {&#xA;        std::cerr &lt;&lt; "Codec \"x.264\" not found\n";&#xA;        return 1;&#xA;    }&#xA;    auto c = avcodec_alloc_context3(codec);&#xA;    if (!c) {&#xA;        std::cerr &lt;&lt; "Could not allocate video codec context\n";&#xA;        return 1;&#xA;    }&#xA;    auto pkt = av_packet_alloc();&#xA;    if (!pkt) return 1;&#xA;&#xA;    // 1.8 bits / (pixel * frame)&#xA;    c->bit_rate = static_cast(1.8f * w * h * fps);&#xA;    /* resolution must be a multiple of two */&#xA;    c->width = w;&#xA;    c->height = h;&#xA;    /* frames per second */&#xA;    c->time_base = AVRational{ 1, static_cast<int>(fps) };&#xA;    c->framerate = AVRational{ static_cast<int>(fps), 1 };&#xA;&#xA;    c->gop_size = 10;&#xA;    c->max_b_frames = 1;&#xA;    c->pix_fmt = AV_PIX_FMT_YUV420P;&#xA;    av_opt_set(c->priv_data, "preset", "slow", 0);&#xA;    av_opt_set(c->priv_data, "preset", "slow", 0);&#xA;&#xA;    ret = avcodec_open2(c, codec, NULL);&#xA;    if (ret &lt; 0) {&#xA;        char str[AV_ERROR_MAX_STRING_SIZE];&#xA;        std::cerr &lt;&lt; "Could not open codec: "&#xA;                  &lt;&lt; av_make_error_string(str, AV_ERROR_MAX_STRING_SIZE, ret)&#xA;                  &lt;&lt; "\n";&#xA;        return 1;&#xA;    }&#xA;&#xA;    FILE * f;&#xA;    fopen_s(&amp;f, filename, "wb");&#xA;    if (!f) {&#xA;        std::cerr &lt;&lt; "Could not open " &lt;&lt; filename &lt;&lt; &#x27;\n&#x27;;&#xA;        return 1;&#xA;    }&#xA;&#xA;    auto frame = av_frame_alloc();&#xA;    if (!frame) {&#xA;        std::cerr &lt;&lt; "Could not allocate video frame\n";&#xA;        return 1;&#xA;    }&#xA;    frame->format = c->pix_fmt;&#xA;    frame->width = c->width;&#xA;    frame->height = c->height;&#xA;    ret = av_frame_get_buffer(frame, 0);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; stderr, "Could not allocate the video frame data\n";&#xA;        return 1;&#xA;    }&#xA;&#xA;    SwsContext* ctx = sws_getContext( w, h, AV_PIX_FMT_RGB24,&#xA;                                      w, h, AV_PIX_FMT_YUV420P,&#xA;                                      0, 0, 0, 0                );&#xA;&#xA;    for (int i = 0; i &lt; nFrames; i&#x2B;&#x2B;)&#xA;    {&#xA;        ret = av_frame_make_writable(frame);&#xA;        UpdateImageRGB();&#xA;        static const uint8_t* rgbData[1] = { &amp;imageRGB[0] };&#xA;        static constexpr int rgbLinesize[1] = { 3 * w };&#xA;        sws_scale( ctx, rgbData, rgbLinesize, 0, h,&#xA;                   frame->data, frame->linesize     );&#xA;        frame->pts = i;&#xA;        /* encode the image */&#xA;        encode(c, frame, pkt, f);&#xA;    }&#xA;    encode(c, NULL, pkt, f);&#xA;&#xA;    fclose(f);&#xA;    avcodec_free_context(&amp;c);&#xA;    av_frame_free(&amp;frame);&#xA;    av_packet_free(&amp;pkt);&#xA;    return 0;&#xA;}&#xA;</int></int></int></algorithm></vector></iostream>

    &#xA;&#xA;

    The program generates 33.9k video file with further console output :

    &#xA;&#xA;

    [libx264 @ 0000020c18681800] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2&#xA;[libx264 @ 0000020c18681800] profile High, level 5.0, 4:2:0, 8-bit&#xA;[libx264 @ 0000020c18681800] frame I:11    Avg QP: 0.00  size:   639&#xA;[libx264 @ 0000020c18681800] frame P:74    Avg QP: 0.32  size:   174&#xA;[libx264 @ 0000020c18681800] frame B:15    Avg QP: 2.26  size:   990&#xA;[libx264 @ 0000020c18681800] consecutive B-frames: 70.0% 30.0%&#xA;[libx264 @ 0000020c18681800] mb I  I16..4: 100.0%  0.0%  0.0%&#xA;[libx264 @ 0000020c18681800] mb P  I16..4:  0.6%  0.0%  0.0%  P16..4:  2.1%  0.0%  0.0%  0.0%  0.0%    skip:97.3%&#xA;[libx264 @ 0000020c18681800] mb B  I16..4:  0.1%  0.0%  0.0%  B16..8:  0.6%  0.0%  0.0%  direct: 0.6%  skip:98.7%  L0:39.8% L1:60.2% BI: 0.0%&#xA;[libx264 @ 0000020c18681800] final ratefactor: -46.47&#xA;[libx264 @ 0000020c18681800] 8x8 transform intra:0.0%&#xA;[libx264 @ 0000020c18681800] direct mvs  spatial:0.0% temporal:100.0%&#xA;[libx264 @ 0000020c18681800] coded y,uvDC,uvAC intra: 0.0% 0.1% 0.1% inter: 0.0% 0.1% 0.1%&#xA;[libx264 @ 0000020c18681800] i16 v,h,dc,p: 99%  0%  1%  0%&#xA;[libx264 @ 0000020c18681800] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  0%  0% 100%  0%  0%  0%  0%  0%  0%&#xA;[libx264 @ 0000020c18681800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46%  0% 54%  0%  0%  0%  0%  0%  0%&#xA;[libx264 @ 0000020c18681800] i8c dc,h,v,p: 96%  1%  3%  0%&#xA;[libx264 @ 0000020c18681800] Weighted P-Frames: Y:0.0% UV:0.0%&#xA;[libx264 @ 0000020c18681800] ref P L0: 70.2%  0.0% 29.8%  0.0%  0.0%&#xA;[libx264 @ 0000020c18681800] kb/s:55.61&#xA;

    &#xA;&#xA;

      &#xA;
    1. "Media Player Classic" on Windows plays this video but the time slider doesn't move, and the video cannot be fast-forwarded to some frame
    2. &#xA;

    3. VLC cannot play the video at all. It launches, shows me VLC logo, and time slider (which is unusually big) jumps from left to right, not responding to my clicks
    4. &#xA;

    5. If I set time = 0.05 to make a video of only 1 frame, I cannot play it even with "Media Player Classic". I want to make an algorithm to convert the arbitrary number of raw RGB images into the video files, even if there's only one image, and with arbitrary image size (that is, width and height may be odd).
    6. &#xA;

    7. As I said, I don't really understand what am I doing. There are low-level codec settings in lines 83-84. Are they all right ?
    8. &#xA;

    9. Do I have to manually set a bit rate (line 75) ? Shouldn't it be calculated automatically by the codec ?
    10. &#xA;

    &#xA;