Recherche avancée

Médias (0)

Mot : - Tags -/logo

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (61)

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

  • Dépôt de média et thèmes par FTP

    31 mai 2013, par

    L’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
    Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

Sur d’autres sites (7105)

  • libav error message with H264 codec. "non-strictly-monotonic PTS"

    13 mars 2018, par user1496491

    I have almost zero experience with libav/FFMPEG. I wrote this piece of code which capturing the screen and writes it to the file, and I’m facing some prolems with that. I was working with AV_CODEC_ID_MPEG4 codec at first, it worked just fine, but very quikly application started to spam messages like that

    [dshow @ 02da1c80] real-time buffer [screen-capture-recorder] [video input] too full or near too full (64% of size: 128000000 [rtbufsize parameter])! frame dropped!

    So I googled for some time, and found that probbably encoder is too slow, and I need to change it to faster one. So I changed it to AV_CODEC_ID_H264. Suddenly written file became unreadable, and application started to spam messages

    [libx264 @ 0455ff40] non-strictly-monotonic PTS

    I looked everywhere and all I found was a suggestion to put this two lines

    if(outPacket.pts != AV_NOPTS_VALUE) outPacket.pts = av_rescale_q(outPacket.pts, videoStream->codec->time_base, videoStream->time_base);
    if(outPacket.dts != AV_NOPTS_VALUE) outPacket.dts = av_rescale_q(outPacket.dts, videoStream->codec->time_base, videoStream->time_base);

    So I added them, and the result was the same.

    So, what should I do ? How do I configure output correctly ?

    Here’s my code :

    #include "MainWindow.h"

    #include <qguiapplication>
    #include <qlabel>
    #include <qscreen>
    #include <qtimer>
    #include <qlayout>
    #include <qimage>
    #include <qtconcurrent></qtconcurrent>QtConcurrent>
    #include <qthreadpool>
    #include <qvideoframe>

    #include "ScreenCapture.h"

    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {
       resize(800, 600);

       label = new QLabel();
       label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

       auto layout = new QHBoxLayout();
       layout->addWidget(label);

       auto widget = new QWidget();
       widget->setLayout(layout);
       setCentralWidget(widget);

       connect(this, &amp;MainWindow::imageReady, [=](QImage image) {label->setPixmap(QPixmap::fromImage(image).scaled(label->size(), Qt::KeepAspectRatio));});

       init();
       initOutFile();
       collectFrames();
    }

    MainWindow::~MainWindow()
    {
       isRunning = false;

       QThreadPool::globalInstance()->waitForDone();

       avformat_close_input(&amp;inputFormatContext);
       avformat_free_context(inputFormatContext);
    }

    void MainWindow::init()
    {
       av_register_all();
       avcodec_register_all();
       avdevice_register_all();

       auto screen = QGuiApplication::screens()[0];
       QRect geometry = screen->geometry();

       inputFormatContext = avformat_alloc_context();

    //    AVDictionary* options = NULL;
    //    av_dict_set(&amp;options, "framerate", "30", NULL);
    //    av_dict_set(&amp;options, "offset_x", QString::number(geometry.x()).toLatin1().data(), NULL);
    //    av_dict_set(&amp;options, "offset_y", QString::number(geometry.y()).toLatin1().data(), NULL);
    //    av_dict_set(&amp;options, "preset", "ultrafast", NULL);
    //    av_dict_set(&amp;options, "probesize", "10MB", NULL);
    //    av_dict_set(&amp;options, "pix_fmt", "yuv420p", NULL);
    //    av_dict_set(&amp;options, "video_size", QString(QString::number(geometry.width()) + "x" + QString::number(geometry.height())).toLatin1().data(), NULL);

    //    AVInputFormat* inputFormat = av_find_input_format("gdigrab");
    //    avformat_open_input(&amp;inputFormatContext, "desktop", inputFormat, &amp;options);

       QSettings settings("HKEY_CURRENT_USER\\Software\\screen-capture-recorder", QSettings::NativeFormat);
       settings.setValue("start_x", geometry.x());
       settings.setValue("start_y", geometry.y());
       settings.setValue("capture_width", geometry.width());
       settings.setValue("capture_height", geometry.height());

       AVDictionary* options = NULL;
       av_dict_set(&amp;options, "preset", "ultrafast", NULL);
       av_dict_set(&amp;options, "vcodec", "h264", NULL);
       av_dict_set(&amp;options, "video_size", "1920x1080", NULL);
       av_dict_set(&amp;options, "crf", "0", NULL);
       av_dict_set(&amp;options, "tune", "zerolatency", NULL);
       av_dict_set(&amp;options, "rtbufsize", "128M", NULL);

       AVInputFormat *format = av_find_input_format("dshow");
       avformat_open_input(&amp;inputFormatContext, "video=screen-capture-recorder", format, &amp;options);

       av_dict_free(&amp;options);
       avformat_find_stream_info(inputFormatContext, NULL);

       videoStreamIndex = av_find_best_stream(inputFormatContext, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);

       AVStream* inStream = inputFormatContext->streams[videoStreamIndex];

       inputCodec = avcodec_find_decoder(inStream->codecpar->codec_id);
       if(!inputCodec) qDebug() &lt;&lt; "Can't find input codec!";

       inputCodecContext = avcodec_alloc_context3(inputCodec);

       qDebug() &lt;&lt; "IN_FORMAT" &lt;&lt; av_get_pix_fmt_name(inStream->codec->pix_fmt);

       avcodec_parameters_to_context(inputCodecContext, inStream->codecpar);

       if(avcodec_open2(inputCodecContext, inputCodec, NULL)) qDebug() &lt;&lt; "Can't open input codec!";
    }

    void MainWindow::initOutFile()
    {
       const char* filename = "C:/Temp/output.mp4";

       if(avformat_alloc_output_context2(&amp;outFormatContext, NULL, NULL, filename) &lt; 0) qDebug() &lt;&lt; "Can't create out context!";

       outCodec = avcodec_find_encoder(AV_CODEC_ID_H264);
       if(!outCodec) qDebug() &lt;&lt; "Can't find codec!";

       videoStream = avformat_new_stream(outFormatContext, outCodec);
       videoStream->time_base = {1, 30};

       const AVPixelFormat* pixelFormat = outCodec->pix_fmts;
       while (*pixelFormat != AV_PIX_FMT_NONE)
       {
           qDebug() &lt;&lt; "OUT_FORMAT" &lt;&lt; av_get_pix_fmt_name(*pixelFormat);
           ++pixelFormat;
       }

       outCodecContext = videoStream->codec;
       outCodecContext->bit_rate = 16000000;
       outCodecContext->rc_max_rate = 0;
       outCodecContext->rc_buffer_size = 0;
       outCodecContext->qmin = 10;
       outCodecContext->qmax = 51;
       outCodecContext->qcompress = 0.6f;
       outCodecContext->width = inputCodecContext->width;
       outCodecContext->height = inputCodecContext->height;
       outCodecContext->time_base = videoStream->time_base;
       outCodecContext->gop_size = 10;
       outCodecContext->max_b_frames = 1;
       outCodecContext->pix_fmt = AV_PIX_FMT_YUV420P;

       if (outFormatContext->oformat->flags &amp; AVFMT_GLOBALHEADER) outCodecContext->flags |= CODEC_FLAG_GLOBAL_HEADER;

       if(avcodec_open2(outCodecContext, outCodec, NULL)) qDebug() &lt;&lt; "Can't open out codec!";

       swsContext = sws_getContext(inputCodecContext->width,
                                   inputCodecContext->height,
                                   inputCodecContext->pix_fmt,
                                   outCodecContext->width,
                                   outCodecContext->height,
                                   outCodecContext->pix_fmt,
                                   SWS_BICUBIC, NULL, NULL, NULL);

       if(avio_open(&amp;outFormatContext->pb, filename, AVIO_FLAG_WRITE) &lt; 0) qDebug() &lt;&lt; "Can't open file!";
       if(avformat_write_header(outFormatContext, NULL) &lt; 0) qDebug() &lt;&lt; "Can't write header!";
    }

    void MainWindow::collectFrames()
    {
       QtConcurrent::run([this](){

           AVFrame* inFrame = av_frame_alloc();
           inFrame->format = inputCodecContext->pix_fmt;
           inFrame->width = inputCodecContext->width;
           inFrame->height = inputCodecContext->height;

           int size = av_image_alloc(inFrame->data, inFrame->linesize, inFrame->width, inFrame->height, inputCodecContext->pix_fmt, 1);

           AVFrame* outFrame = av_frame_alloc();
           outFrame->format = outCodecContext->pix_fmt;
           outFrame->width = outCodecContext->width;
           outFrame->height = outCodecContext->height;

           av_image_alloc(outFrame->data, outFrame->linesize, outFrame->width, outFrame->height, outCodecContext->pix_fmt, 1);

           AVPacket packet;
           av_init_packet(&amp;packet);

           while(isRunning &amp;&amp; (av_read_frame(inputFormatContext, &amp;packet) >= 0))
           {
               if(packet.stream_index == videoStream->index)
               {
                   //for gdigrab
    //                uint8_t* result = new uint8_t[inFrame->width * inFrame->height * 4];
    //                for (int i = 0; i &lt; inFrame->height * inFrame->width * 4; i += 4)
    //                {
    //                    result[i + 0] = packet.data[i + 2]; //B
    //                    result[i + 1] = packet.data[i + 3]; //G
    //                    result[i + 2] = packet.data[i + 0]; //R
    //                    result[i + 3] = packet.data[i + 1]; //A
    //                }

    //                memcpy(inFrame->data[0], result, size);
    //                delete result;

                   QImage image(packet.data, inFrame->width, inFrame->height, QImage::Format_ARGB32);
                   QImage mirrored = image.mirrored(false, true);
                   emit imageReady(mirrored);

                   memcpy(inFrame->data[0], mirrored.bits(), size);

                   sws_scale(swsContext, inFrame->data, inFrame->linesize, 0, inputCodecContext->height, outFrame->data, outFrame->linesize);

                   av_packet_unref(&amp;packet);

                   AVPacket outPacket;
                   av_init_packet(&amp;outPacket);

                   int encodeResult = AVERROR(EAGAIN);
                   while(encodeResult == AVERROR(EAGAIN))
                   {
                       if(avcodec_send_frame(outCodecContext, outFrame)) qDebug() &lt;&lt; "Send frame error!";

                       encodeResult = avcodec_receive_packet(outCodecContext, &amp;outPacket);
                   }
                   if(encodeResult != 0) qDebug() &lt;&lt; "Encoding error!" &lt;&lt; encodeResult;

                   if(outPacket.pts != AV_NOPTS_VALUE) outPacket.pts = av_rescale_q(outPacket.pts, videoStream->codec->time_base, videoStream->time_base);
                   if(outPacket.dts != AV_NOPTS_VALUE) outPacket.dts = av_rescale_q(outPacket.dts, videoStream->codec->time_base, videoStream->time_base);

                   av_interleaved_write_frame(outFormatContext, &amp;outPacket);

                   av_packet_unref(&amp;outPacket);
               }
           }

           av_freep(inFrame->data);
           av_freep(outFrame->data);

           av_write_trailer(outFormatContext);
           avio_close(outFormatContext->pb);
       });

    }
    </qvideoframe></qthreadpool></qimage></qlayout></qtimer></qscreen></qlabel></qguiapplication>
  • Streaming Webcam from Windows 10 to Ubuntu 18.04 via WSL2 and usbip [closed]

    15 juin 2021, par Jacob Dallas

    Background
    &#xA;Alright so I was able to set up my Windows 10 desktop with WSL2 in order to run Ubuntu 18.04. I'm trying to get the webcam to be accessible and have picked and pieced together the following tutorials in order to get myself to where I am.

    &#xA;

    &#xA;

    The Why
    &#xA;"Why would you go through this painstaking effort ? Seems dumb." you might be telling yourself. Well I think that it's dumb that WSL2 doesn't have a USB pass-through, so there's that. But I develop on Windows traditionally, and with a recent computer vision project I'm undertaking that incorporates the Nvidia Isaac SDK (only available on Ubuntu 18.04) I was hoping to continue to use Windows to develop, and then Ubuntu 18.04 to test. I'm trying to stay away from dual booting because switching back and forth between OSs is time-consuming.

    &#xA;

    Current State
    &#xA;What I'm able to do is pass through the web camera using usbip from windows using the following commands
    &#xA;.\usbip.exe bind -b 1-189
    &#xA;.\usbipd.exe -d -4

    &#xA;

    and then on the linux side I connect it by running
    &#xA;sudo usbip attach --remote=172.30.64.1 --busid=1-220
    &#xA;except that I put in my own remote address and busid

    &#xA;

    What that results in is the ability to see that the camera is attached and seen by linux, but no matter what program/library I use, none of them are able to open the webcam

    &#xA;

    Here are some outputs from different commands people have used to display camera information :

    &#xA;

    ~$ v4l2-ctl --list-devices &#xA;Logitech Webcam C930e (usb-vhci_hcd.0-1):&#xA;    /dev/video0&#xA;    /dev/video1&#xA;&#xA;~$ v4l-info /dev/video0&#xA;&#xA;### v4l2 device info [/dev/video0] ###&#xA;general info&#xA;    VIDIOC_QUERYCAP&#xA;    driver                  : "uvcvideo"&#xA;    card                    : "Logitech Webcam C930e"&#xA;    bus_info                : "usb-vhci_hcd.0-1"&#xA;    version                 : 4.19.84&#xA;    capabilities            : 0x84a00001 [VIDEO_CAPTURE,?,?,STREAMING,(null)]&#xA;&#xA;standards&#xA;&#xA;inputs&#xA;    VIDIOC_ENUMINPUT(0)&#xA;    index                   : 0&#xA;    name                    : "Camera 1"&#xA;    type                    : CAMERA&#xA;    audioset                : 0&#xA;    tuner                   : 0&#xA;    std                     : 0x0 []&#xA;    status                  : 0x0 []&#xA;&#xA;video capture&#xA;    VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)&#xA;    index                   : 0&#xA;    type                    : VIDEO_CAPTURE&#xA;    flags                   : 0&#xA;    description             : "YUYV 4:2:2"&#xA;    pixelformat             : 0x56595559 [YUYV]&#xA;    VIDIOC_ENUM_FMT(1,VIDEO_CAPTURE)&#xA;    index                   : 1&#xA;    type                    : VIDEO_CAPTURE&#xA;    flags                   : 1&#xA;    description             : "Motion-JPEG"&#xA;    pixelformat             : 0x47504a4d [MJPG]&#xA;    VIDIOC_G_FMT(VIDEO_CAPTURE)&#xA;    type                    : VIDEO_CAPTURE&#xA;    fmt.pix.width           : 640&#xA;    fmt.pix.height          : 480&#xA;    fmt.pix.pixelformat     : 0x56595559 [YUYV]&#xA;    fmt.pix.field           : NONE&#xA;    fmt.pix.bytesperline    : 1280&#xA;    fmt.pix.sizeimage       : 614400&#xA;    fmt.pix.colorspace      : SRGB&#xA;    fmt.pix.priv            : 4276996862&#xA;&#xA;controls&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;0)&#xA;    id                      : 9963776&#xA;    type                    : INTEGER&#xA;    name                    : "Brightness"&#xA;    minimum                 : 0&#xA;    maximum                 : 255&#xA;    step                    : 1&#xA;    default_value           : 128&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;1)&#xA;    id                      : 9963777&#xA;    type                    : INTEGER&#xA;    name                    : "Contrast"&#xA;    minimum                 : 0&#xA;    maximum                 : 255&#xA;    step                    : 1&#xA;    default_value           : 128&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;2)&#xA;    id                      : 9963778&#xA;    type                    : INTEGER&#xA;    name                    : "Saturation"&#xA;    minimum                 : 0&#xA;    maximum                 : 255&#xA;    step                    : 1&#xA;    default_value           : 128&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;12)&#xA;    id                      : 9963788&#xA;    type                    : BOOLEAN&#xA;    name                    : "White Balance Temperature, Auto"&#xA;    minimum                 : 0&#xA;    maximum                 : 1&#xA;    step                    : 1&#xA;    default_value           : 1&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;19)&#xA;    id                      : 9963795&#xA;    type                    : INTEGER&#xA;    name                    : "Gain"&#xA;    minimum                 : 0&#xA;    maximum                 : 255&#xA;    step                    : 1&#xA;    default_value           : 0&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;24)&#xA;    id                      : 9963800&#xA;    type                    : MENU&#xA;    name                    : "Power Line Frequency"&#xA;    minimum                 : 0&#xA;    maximum                 : 2&#xA;    step                    : 1&#xA;    default_value           : 2&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;26)&#xA;    id                      : 9963802&#xA;    type                    : INTEGER&#xA;    name                    : "White Balance Temperature"&#xA;    minimum                 : 2000&#xA;    maximum                 : 7500&#xA;    step                    : 1&#xA;    default_value           : 4000&#xA;    flags                   : INACTIVE&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;27)&#xA;    id                      : 9963803&#xA;    type                    : INTEGER&#xA;    name                    : "Sharpness"&#xA;    minimum                 : 0&#xA;    maximum                 : 255&#xA;    step                    : 1&#xA;    default_value           : 128&#xA;    flags                   : unknown&#xA;    VIDIOC_QUERYCTRL(BASE&#x2B;28)&#xA;    id                      : 9963804&#xA;    type                    : INTEGER&#xA;    name                    : "Backlight Compensation"&#xA;    minimum                 : 0&#xA;    maximum                 : 1&#xA;    step                    : 1&#xA;    default_value           : 0&#xA;    flags                   : unknown&#xA;&#xA;~$ sudo ffmpeg -y -t 5 -f video4linux2  -i /dev/video0  out.mov&#xA;ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)&#xA;  configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared&#xA;  libavutil      55. 78.100 / 55. 78.100&#xA;  libavcodec     57.107.100 / 57.107.100&#xA;  libavformat    57. 83.100 / 57. 83.100&#xA;  libavdevice    57. 10.100 / 57. 10.100&#xA;  libavfilter     6.107.100 /  6.107.100&#xA;  libavresample   3.  7.  0 /  3.  7.  0&#xA;  libswscale      4.  8.100 /  4.  8.100&#xA;  libswresample   2.  9.100 /  2.  9.100&#xA;  libpostproc    54.  7.100 / 54.  7.100&#xA;/dev/video0: Input/output error&#xA;&#xA;~$ ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -frames 1 out.jpg&#xA;ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)&#xA;  configuration: --prefix=/usr --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared&#xA;  libavutil      55. 78.100 / 55. 78.100&#xA;  libavcodec     57.107.100 / 57.107.100&#xA;  libavformat    57. 83.100 / 57. 83.100&#xA;  libavdevice    57. 10.100 / 57. 10.100&#xA;  libavfilter     6.107.100 /  6.107.100&#xA;  libavresample   3.  7.  0 /  3.  7.  0&#xA;  libswscale      4.  8.100 /  4.  8.100&#xA;  libswresample   2.  9.100 /  2.  9.100&#xA;  libpostproc    54.  7.100 / 54.  7.100&#xA;/dev/video0: Input/output error&#xA;

    &#xA;
    &#xA;

    I'm not sure if I don't have a specific library, driver, random other thing, but everything I've tried so far seems to not solve the problem.

    &#xA;Question
    &#xA;Linux sees the web camera, knows that it is a web camera, but is not processing the camera feed. What would you recommend I do to be able to process the video feed ? I think this is an issue with my settings when I originally set up linux with menuconfig.&#xA;Any help would be appreciated :)

    &#xA;

  • ffmpeg performance on raspberry pi

    20 août 2021, par Rudi

    I'm running ffmpeg on a rasperry pi 4. I'm capturing the signal of an usb device.

    &#xA;

    ffprobes output is :

    &#xA;

    pi@skycam:~ $ ffprobe /dev/video0&#xA;ffprobe version 4.1.4-1&#x2B;rpt7~deb10u1 Copyright (c) 2007-2019 the FFmpeg developers&#xA;  built with gcc 8 (Raspbian 8.3.0-6&#x2B;rpi1)&#xA;  configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --libdir=/usr/lib/arm-linux-gnueabihf --cpu=arm1176jzf-s --arch=arm&#xA;  WARNING: library configuration mismatch&#xA;  avutil      configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  avcodec     configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  avformat    configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  avdevice    configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  avfilter    configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  avresample  configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  swscale     configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  swresample  configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  postproc    configuration: --prefix=/usr --extra-version=&#x27;1&#x2B;rpt7~deb10u1&#x27; --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-neon --enable-rpi --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --libdir=/usr/lib/arm-linux-gnueabihf/neon/vfp --cpu=cortex-a7 --arch=armv6t2 --disable-thumb --enable-shared --disable-doc --disable-programs&#xA;  libavutil      56. 22.100 / 56. 22.100&#xA;  libavcodec     58. 35.100 / 58. 35.100&#xA;  libavformat    58. 20.100 / 58. 20.100&#xA;  libavdevice    58.  5.100 / 58.  5.100&#xA;  libavfilter     7. 40.101 /  7. 40.101&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  3.100 /  5.  3.100&#xA;  libswresample   3.  3.100 /  3.  3.100&#xA;  libpostproc    55.  3.100 / 55.  3.100&#xA;Input #0, video4linux2,v4l2, from &#x27;/dev/video0&#x27;:&#xA;  Duration: N/A, start: 1230.660915, bitrate: 1990656 kb/s&#xA;    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 1990656 kb/s, 60 fps, 60 tbr, 1000k tbn, 1000k tbc&#xA;

    &#xA;

    the ffmpeg call i'm using is :

    &#xA;

    bin/ffmpeg -loglevel quiet -re -f v4l2 -i /dev/video0 -tune zerolatency -preset ultrafast -pix_fmt yuv420p out.mkv&#xA;

    &#xA;

    put the framerate starts at around 20 and increases slowly to 36. Also when reviewing the output videos i feel like i see a bit of a framedrop so the video is not as smooth as the input.

    &#xA;

    Is this due to a lack of power of the raspberry or are there any tweaks i could use to improve performance ? I don't care about the output format, framerate or resolution

    &#xA;

    thank you very much

    &#xA;