Recherche avancée

Médias (91)

Autres articles (31)

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

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

  • Why when converting avi video file to another format the first 2-3 seconds are blurry ?

    13 juin 2016, par Sharon Gabriel

    The source file is avi. The target new file is mp4.
    The first 2-3 seconds are blurry. Then after 2-3 second the whole video until the end is smooth and sharp.

    Another sub question is how come that 2.16 GB avi file after conversion using ffmpeg is only 1.34 MB ? It’s not part of a movie or something it’s collection of screenshots images i did in c# and then used AviFile Lib to create from them a avi video file. and yet from 2.16 GB to 1.34 MB and it keep the quality i think almost the same quality like the original avi file and the same duration 2:20 minutes.

    About the blurry problem this is my code where i set the ffmpeg arguments and set the process :

    private void Convert()
           {
               try
               {
                   Control.CheckForIllegalCrossThreadCalls = false;
                   if (ComboBox1.SelectedIndex == 3)
                   {
                       strFFCMD = " -i " + (char)34 + InputFile + (char)34 + " -c:v libx264 -s 1920x1080 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " + OutputFile;
                   }    
                   psiProcInfo.FileName = exepath;
                   psiProcInfo.Arguments = strFFCMD;        
                   psiProcInfo.UseShellExecute = false;      
                   psiProcInfo.WindowStyle = ProcessWindowStyle.Hidden;    
                   psiProcInfo.RedirectStandardError = true;            
                   psiProcInfo.RedirectStandardOutput = true;        
                   psiProcInfo.CreateNoWindow = true;                
                   prcFFMPEG.StartInfo = psiProcInfo;          
                   prcFFMPEG.Start();
                   ffReader = prcFFMPEG.StandardError;

                   do
                   {
                       if (Bgw1.CancellationPending)
                       {
                           return;
                       }
                       Button5.Enabled = true;
                       Button3.Enabled = false;
                       strFFOUT = ffReader.ReadLine();                    
                       RichTextBox1.Text = strFFOUT;
                       if (strFFOUT != null)
                       {
                           if (strFFOUT.Contains("frame="))
                           {
                               currentFramestr = strFFOUT.Substring(7, 6).Trim();
                               Regex rx = new Regex(@"^\d+");
                               Match m = rx.Match(currentFramestr);
                               if (m.Success)
                               {
                                   currentFrameInt = System.Convert.ToInt32(m.Value);
                               }
                           }
                       }
                       string percentage = ((double)ProgressBar1.Value / (double)ProgressBar1.Maximum * 100.0).ToString();
                       textBox3.Text = ProgressBar1.Value.ToString();                    
                       ProgressBar1.Maximum = FCount + 1;
                       ProgressBar1.Value = (currentFrameInt);
                       Label12.Text = "Current Encoded Frame: " + currentFrameInt;
                       Label11.Text = percentage;
                   } while (!(prcFFMPEG.HasExited || string.IsNullOrEmpty(strFFOUT)));
               }
               catch(Exception err)
               {
                   string errors = err.ToString();
               }
           }

    psiProcInfo is ProcessStartInfo

    prcFFMPEG is Process

    And this is how it looks like when i play the target the new created converted video file the mp4 the first seconds :

    Duration : 00:02:20

    Width : 1920 Height : 1080

    Data Rate and Total Rate both : 80kbps

    Frame rate : 2 frames/second

    Blurry

    This is the output of the ffmpeg console while converting the file.

     ffmpeg version 2.8.git Copyright (c) 2000-2015 the FFmpeg developers
     built with gcc 5.2.0 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
     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
    [avi @ 00000147a882b660] Stream #0: not enough frames to estimate rate; consider increasing probesize
    Input #0, avi, from 'C:\temp\video\new.avi':
     Duration: 00:02:20.50, start: 0.000000, bitrate: 132710 kb/s
       Stream #0:0: Video: rawvideo, bgra, 1920x1080, 2 fps, 2 tbr, 2 tbn, 2 tbc
    Please use -profile:a or -profile:v, -profile is ambiguous
    Codec AVOption b (set bitrate (in bits/s)) specified for output file #0 (C:\temp\video\5.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
    [libx264 @ 00000147a882c820] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
    [libx264 @ 00000147a882c820] profile High, level 4.0
    [libx264 @ 00000147a882c820] 264 - core 148 r2638 7599210 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=2 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=18 ip_ratio=1.40 pb_ratio=1.30 aq=0
    Output #0, mp4, to 'C:\temp\video\5.mp4':
     Metadata:
       encoder         : Lavf57.20.100
       Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1920x1080, q=-1--1, 2 fps, 16384 tbn, 2 tbc
       Metadata:
         encoder         : Lavc57.17.100 libx264
    Stream mapping:
     Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    frame=    8 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   15 fps= 14 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   21 fps= 13 q=18.0 size=      92kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   30 fps= 14 q=18.0 size=     141kB time=00:00:04.50 bitrate= 257.3kbits/s speed=2.03x    
    frame=   37 fps= 13 q=20.0 size=     164kB time=00:00:08.00 bitrate= 167.6kbits/s speed=2.82x    
    frame=   46 fps= 14 q=18.0 size=     185kB time=00:00:12.50 bitrate= 121.0kbits/s speed= 3.7x    
    frame=   51 fps= 13 q=19.0 size=     194kB time=00:00:15.00 bitrate= 106.1kbits/s speed=3.87x    
    frame=   58 fps= 13 q=18.0 size=     210kB time=00:00:18.50 bitrate=  93.2kbits/s speed=4.19x    
    frame=   65 fps= 13 q=20.0 size=     224kB time=00:00:22.00 bitrate=  83.6kbits/s speed=4.46x    
    frame=   71 fps= 13 q=19.0 size=     238kB time=00:00:25.00 bitrate=  78.1kbits/s speed=4.56x    
    frame=   78 fps= 13 q=18.0 size=     253kB time=00:00:28.50 bitrate=  72.6kbits/s speed=4.75x    
    frame=   83 fps= 13 q=19.0 size=     265kB time=00:00:31.00 bitrate=  70.0kbits/s speed= 4.7x    
    frame=   89 fps= 12 q=20.0 size=     280kB time=00:00:34.00 bitrate=  67.4kbits/s speed=4.73x    
    frame=   95 fps= 12 q=19.0 size=     291kB time=00:00:37.00 bitrate=  64.5kbits/s speed=4.73x    
    frame=  102 fps= 12 q=18.0 size=     308kB time=00:00:40.50 bitrate=  62.3kbits/s speed=4.84x    
    frame=  107 fps= 12 q=19.0 size=     317kB time=00:00:43.00 bitrate=  60.4kbits/s speed=4.82x    
    frame=  115 fps= 12 q=19.0 size=     336kB time=00:00:47.00 bitrate=  58.6kbits/s speed=4.96x    
    frame=  123 fps= 12 q=20.0 size=     354kB time=00:00:51.00 bitrate=  56.8kbits/s speed=5.09x    
    frame=  132 fps= 12 q=20.0 size=     371kB time=00:00:55.50 bitrate=  54.8kbits/s speed=5.25x    
    frame=  139 fps= 13 q=20.0 size=     392kB time=00:00:59.00 bitrate=  54.5kbits/s speed=5.32x    
    frame=  146 fps= 13 q=19.0 size=     408kB time=00:01:02.50 bitrate=  53.5kbits/s speed=5.37x    
    frame=  150 fps= 12 q=20.0 size=     417kB time=00:01:04.50 bitrate=  52.9kbits/s speed=5.28x    
    frame=  155 fps= 12 q=18.0 size=     428kB time=00:01:07.00 bitrate=  52.4kbits/s speed=5.25x    
    frame=  161 fps= 12 q=20.0 size=     441kB time=00:01:10.00 bitrate=  51.6kbits/s speed=5.26x    
    frame=  167 fps= 12 q=19.0 size=     462kB time=00:01:13.00 bitrate=  51.9kbits/s speed=5.29x    
    frame=  174 fps= 12 q=20.0 size=     483kB time=00:01:16.50 bitrate=  51.7kbits/s speed=5.33x    
    frame=  181 fps= 12 q=18.0 size=     614kB time=00:01:20.00 bitrate=  62.8kbits/s speed=5.36x    
    frame=  187 fps= 12 q=20.0 size=     763kB time=00:01:23.00 bitrate=  75.3kbits/s speed=5.35x    
    frame=  193 fps= 12 q=19.0 size=     852kB time=00:01:26.00 bitrate=  81.2kbits/s speed=5.36x    
    frame=  199 fps= 12 q=18.0 size=     865kB time=00:01:29.00 bitrate=  79.6kbits/s speed=5.37x    
    frame=  206 fps= 12 q=20.0 size=     932kB time=00:01:32.50 bitrate=  82.6kbits/s speed=5.39x    
    frame=  211 fps= 12 q=20.0 size=     943kB time=00:01:35.00 bitrate=  81.3kbits/s speed=5.38x    
    frame=  217 fps= 12 q=18.0 size=    1007kB time=00:01:38.00 bitrate=  84.1kbits/s speed=5.38x    
    frame=  223 fps= 12 q=20.0 size=    1175kB time=00:01:41.00 bitrate=  95.3kbits/s speed=5.38x    
    frame=  230 fps= 12 q=20.0 size=    1195kB time=00:01:44.50 bitrate=  93.7kbits/s speed=5.42x    
    frame=  235 fps= 12 q=18.0 size=    1205kB time=00:01:47.00 bitrate=  92.3kbits/s speed= 5.4x    
    frame=  241 fps= 12 q=20.0 size=    1222kB time=00:01:50.00 bitrate=  91.0kbits/s speed= 5.4x    
    frame=  247 fps= 12 q=19.0 size=    1232kB time=00:01:53.00 bitrate=  89.3kbits/s speed=5.39x    
    frame=  255 fps= 12 q=19.0 size=    1252kB time=00:01:57.00 bitrate=  87.7kbits/s speed=5.45x    
    frame=  260 fps= 12 q=20.0 size=    1274kB time=00:01:59.50 bitrate=  87.3kbits/s speed=5.44x    
    frame=  267 fps= 12 q=20.0 size=    1287kB time=00:02:03.00 bitrate=  85.7kbits/s speed=5.45x    
    frame=  272 fps= 12 q=18.0 size=    1304kB time=00:02:05.50 bitrate=  85.1kbits/s speed=5.43x    
    frame=  278 fps= 12 q=20.0 size=    1314kB time=00:02:08.50 bitrate=  83.8kbits/s speed=5.41x    
    frame=  281 fps= 12 q=-1.0 Lsize=    1376kB time=00:02:19.50 bitrate=  80.8kbits/s speed=5.76x    
    video:1372kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.299861%
    [libx264 @ 00000147a882c820] frame I:2     Avg QP:15.00  size: 98930
    [libx264 @ 00000147a882c820] frame P:80    Avg QP:18.00  size:  7068
  • ffplay : ensure that we buffer at least 1 second of content

    11 juin 2016, par Marton Balint
    ffplay : ensure that we buffer at least 1 second of content
    

    In order to do that, we keep track of the total duration of packets in a packet
    queue.

    Signed-off-by : Marton Balint <cus@passwd.hu>

    • [DH] ffplay.c
  • What's wrong with my use of timestamps/timebases for frame seeking/reading using libav (ffmpeg) ?

    17 septembre 2013, par mtree

    So I want to grab a frame from a video at a specific time using libav for the use as a thumbnail.

    What I'm using is the following code. It compiles and works fine (in regards to retrieving a picture at all), yet I'm having a hard time getting it to retrieve the right picture.

    I simply can't get my head around the all but clear logic behind libav's apparent use of multiple time-bases per video. Specifically figuring out which functions expect/return which type of time-base.

    The docs were of basically no help whatsoever, unfortunately. SO to the rescue ?

    #define ABORT(x) do {fprintf(stderr, x); exit(1);} while(0)

    av_register_all();

    AVFormatContext *format_context = ...;
    AVCodec *codec = ...;
    AVStream *stream = ...;
    AVCodecContext *codec_context = ...;
    int stream_index = ...;

    // open codec_context, etc.

    AVRational stream_time_base = stream->time_base;
    AVRational codec_time_base = codec_context->time_base;

    printf("stream_time_base: %d / %d = %.5f\n", stream_time_base.num, stream_time_base.den, av_q2d(stream_time_base));
    printf("codec_time_base: %d / %d = %.5f\n\n", codec_time_base.num, codec_time_base.den, av_q2d(codec_time_base));

    AVFrame *frame = avcodec_alloc_frame();

    printf("duration: %lld @ %d/sec (%.2f sec)\n", format_context->duration, AV_TIME_BASE, (double)format_context->duration / AV_TIME_BASE);
    printf("duration: %lld @ %d/sec (stream time base)\n\n", format_context->duration / AV_TIME_BASE * stream_time_base.den, stream_time_base.den);
    printf("duration: %lld @ %d/sec (codec time base)\n", format_context->duration / AV_TIME_BASE * codec_time_base.den, codec_time_base.den);

    double request_time = 10.0; // 10 seconds. Video&#39;s total duration is ~20sec
    int64_t request_timestamp = request_time / av_q2d(stream_time_base);
    printf("requested: %.2f (sec)\t-> %2lld (pts)\n", request_time, request_timestamp);

    av_seek_frame(format_context, stream_index, request_timestamp, 0);

    AVPacket packet;
    int frame_finished;
    do {
       if (av_read_frame(format_context, &amp;packet) &lt; 0) {
           break;
       } else if (packet.stream_index != stream_index) {
           av_free_packet(&amp;packet);
           continue;
       }
       avcodec_decode_video2(codec_context, frame, &amp;frame_finished, &amp;packet);
    } while (!frame_finished);

    // do something with frame

    int64_t received_timestamp = frame->pkt_pts;
    double received_time = received_timestamp * av_q2d(stream_time_base);
    printf("received:  %.2f (sec)\t-> %2lld (pts)\n\n", received_time, received_timestamp);

    Running this with a test movie file I get this output :

       stream_time_base: 1 / 30000 = 0.00003
       codec_time_base: 50 / 2997 = 0.01668

       duration: 20062041 @ 1000000/sec (20.06 sec)
       duration: 600000 @ 30000/sec (stream time base)
       duration: 59940 @ 2997/sec (codec time base)

       requested: 10.00 (sec)  -> 300000 (pts)
       received:  0.07 (sec)   -> 2002 (pts)

    The times don't match. What's going on here ? What am I doing wrong ?


    While searching for clues I stumbled upon this this statement from the libav-users mailing list…

    [...] packet PTS/DTS are in units of the format context's time_base,
    where the AVFrame->pts value is in units of the codec context's time_base.

    In other words, the container can have (and usually does) a different
    time_base than the codec. Most libav players don't bother using the
    codec's time_base or pts since not all codecs have one, but most
    containers do. (This is why the dranger tutorial says to ignore AVFrame->pts)

    …which confused me even more, given that I couldn't find any such mention in the official docs.

    Anyway, I replaced…

    double received_time = received_timestamp * av_q2d(stream_time_base);

    …with…

    double received_time = received_timestamp * av_q2d(codec_time_base);

    …and the output changed to this…

    ...

    requested: 10.00 (sec)  -> 300000 (pts)
    received:  33.40 (sec)  -> 2002 (pts)

    Still no match. What's wrong ?