Recherche avancée

Médias (0)

Mot : - Tags -/utilisateurs

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

Autres articles (101)

  • Gestion générale des documents

    13 mai 2011, par

    MédiaSPIP ne modifie jamais le document original mis en ligne.
    Pour chaque document mis en ligne il effectue deux opérations successives : la création d’une version supplémentaire qui peut être facilement consultée en ligne tout en laissant l’original téléchargeable dans le cas où le document original ne peut être lu dans un navigateur Internet ; la récupération des métadonnées du document original pour illustrer textuellement le fichier ;
    Les tableaux ci-dessous expliquent ce que peut faire MédiaSPIP (...)

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

Sur d’autres sites (13561)

  • Xvfb records a black screen

    11 mai 2024, par Vivek

    I am trying a record a video by running xvfb inside a docker image. No matter what I do it gives me black screen.

    


    Screen size same in xvfb and ffmpeg and puppeteer.

    


    It will would really great if someone can help.

    


    
start-xvfb.sh
---------------------------------------------------------------------
# Start Xvfb
Xvfb :99 -screen 0 1280x720x24 &

# Set the display environment variable
export DISPLAY=:99

# Run the application (assuming it starts with npm start)
npm run dev


    


    Dockerfile

    


    FROM node:lts-alpine3.19

# Install dependencies using apk
RUN apk update && \
    apk add --no-cache \
    gnupg \
    ffmpeg \
    libx11 \
    libxcomposite \
    libxdamage \
    libxi \
    libxtst \
    nss \
    cups-libs \
    libxrandr \
    alsa-lib \
    pango \
    gtk+3.0 \
    xvfb \
    bash \
    curl \
    udev \
    ttf-freefont \
    chromium \
    chromium-chromedriver

# Set working directory
WORKDIR /app

# Copy package.json and install dependencies
COPY package.json .
RUN npm install --force

# Copy remaining source code
COPY . .

# Add a script to start Xvfb
COPY start-xvfb.sh /app/start-xvfb.sh
RUN chmod +x /app/start-xvfb.sh

# Expose the port
EXPOSE 4200
EXPOSE 3000

# Command to start Xvfb and run the application
CMD ["./start-xvfb.sh"]


    


    Below

    


    this is code code that launches puppeteer and from a nodejs application and create spawns a process for ffmpeg

    


    export class UnixBrowserRecorder implements Recorder {&#xA;&#xA;  url = &#x27;https://stackoverflow.com/questions/3143698/uncaught-syntaxerror-unexpected-token&#x27;; // Replace with your URL&#xA;  outputFilePath = `/app/output_video.mp4`; // Output file path within the container&#xA;  durationInSeconds = 6; // Duration of the video in seconds&#xA;  resolution = &#x27;1280x720&#x27;;&#xA;&#xA;  public async capture(): Promise<string> {&#xA;    const browser = await puppeteer.launch({&#xA;      args: [&#xA;        &#x27;--no-sandbox&#x27;, // Required in Docker&#xA;        &#x27;--disable-setuid-sandbox&#x27;, // Required in Docker&#xA;        &#x27;--disable-dev-shm-usage&#x27;, // Required in Docker&#xA;        &#x27;--headless&#x27;, // Run browser in headless mode&#xA;        &#x27;--disable-gpu&#x27;, // Disable GPU acceleration&#xA;        `--window-size=${this.resolution}` // Set window size&#xA;      ],&#xA;      executablePath: &#x27;/usr/bin/chromium&#x27; // Specify the path to Chromium executable&#xA;    });&#xA;&#xA;    const page = await browser.newPage();&#xA;    await page.goto(this.url);&#xA;&#xA;    await page.screenshot({&#xA;      "type": "png", // can also be "jpeg" or "webp" (recommended)&#xA;      "path": `/app/screenshot.png`,  // where to save it&#xA;      "fullPage": true,  // will scroll down to capture everything if true&#xA;    });&#xA;&#xA;    //ffmpeg -video_size `DISPLAY=:5 xdpyinfo | grep &#x27;dimensions:&#x27;|awk &#x27;{print $2}&#x27;` -framerate 30 -f x11grab -i :5.0&#x2B;0,0 output.mpg&#xA;&#xA;    const ffmpegProcess = spawn(&#x27;ffmpeg&#x27;, [&#xA;      &#x27;-video_size&#x27;, this.resolution,&#xA;      &#x27;-framerate&#x27;, &#x27;30&#x27;,&#xA;      &#x27;-f&#x27;, &#x27;x11grab&#x27;,&#xA;      &#x27;-i&#x27;, &#x27;:99&#x27;, // Use display :99 (assuming Xvfb is running on this display)&#xA;      &#x27;-t&#x27;, this.durationInSeconds.toString(),&#xA;      &#x27;-c:v&#x27;, &#x27;libx264&#x27;,&#xA;      &#x27;-loglevel&#x27;, &#x27;debug&#x27;,&#xA;      &#x27;-pix_fmt&#x27;, &#x27;yuv420p&#x27;,&#xA;      this.outputFilePath&#xA;    ]);&#xA;&#xA;    // Log ffmpeg output&#xA;    ffmpegProcess.stdout.on(&#x27;data&#x27;, data => {&#xA;      console.log(`ffmpegProcess stdout: ${data}`);&#xA;    });&#xA;&#xA;    ffmpegProcess.stderr.on(&#x27;data&#x27;, data => {&#xA;      console.error(`ffmpegProcess stderr: ${data}`);&#xA;    });&#xA;&#xA;    // Handle ffmpegProcess process exit&#xA;    ffmpegProcess.on(&#x27;close&#x27;, code => {&#xA;      console.log(`ffmpeg process exited with code ${code}`);&#xA;    });&#xA;&#xA;    // Wait for the duration to complete&#xA;    await new Promise(resolve => setTimeout(resolve, this.durationInSeconds * 1000));&#xA;&#xA;    // Close the FFmpeg stream and process&#xA;    ffmpegProcess.stdin.end();&#xA;    // Close Puppeteer&#xA;    await page.close();&#xA;    await browser.close();&#xA;&#xA;    return "Video generated successfully";&#xA;  }&#xA;}&#xA;</string>

    &#xA;

    enter image description here

    &#xA;

  • Transcode H264 to AV1

    17 février 2024, par Crear

    We have some roadside cameras deployed and due to the supply chain issue (also the cost) we installed 1080P@H264 encoder.

    &#xA;

    I know that AV1 is significantly more efficient than H264, but transcoding H264 to AV1 may result in quality loss.

    &#xA;

    My purpose is to reduce some space while minimizing the quality loss, is there a python or FFmpeg command that can do it ? My major concern is quality loss, but if I use the same bitrate, it won’t reduce the size.

    &#xA;

    We have years of data so we can’t really look into the videos one by one to determine the optimal bitrate, sometimes when the weather is extreme, the higher dynamic in the frames results in a bigger H264 file size. I don’t want to lose those details because it can help fine-tone the detection models.

    &#xA;

  • AVFrame in AV_PIX_FMT_YUV420P format to H*W*3 data buffer conversion using sws_scale not accurate ?

    13 février 2024, par user3133806

    I have an AVFrame that is in YUV420 format and I am trying to convert to packed RGB in a data buffer :

    &#xA;

      // Allocate enough for 8 bits per color in RGB.&#xA;  // Note that I want packed, not planar. i.e. RGBRGBRGB...&#xA;  // Each pixel is 3 bytes of RGB in row-major order&#xA;  buffer = new unsigned char[frame->height * frame->width * 3];&#xA;&#xA;  enum AVPixelFormat frameFormat =&#xA;      static_cast<enum avpixelformat="avpixelformat">(frame->format);&#xA;&#xA;  // Make sure the input is in the expected format.&#xA;  CHECK_EQ(frameFormat, AV_PIX_FMT_YUV420P);&#xA;&#xA;  SwsContext* swsContext = sws_getContext(&#xA;      frame->width,&#xA;      frame->height,&#xA;      frameFormat,&#xA;      frame->width,&#xA;      frame->height,&#xA;      AV_PIX_FMT_RGB24,&#xA;&#xA;      // I played around with these flags but could not get an accurate image&#xA;      SWS_BICUBIC | SWS_ACCURATE_RND,&#xA;      nullptr,&#xA;      nullptr,&#xA;      nullptr);&#xA;&#xA;  // My understanding is that because I am using packed format, not planar&#xA;  // I only need to fill in the first pointer.&#xA;  unsigned char* out_planes[4];&#xA;  out_planes[0] = buffer;&#xA;  out_planes[1] = nullptr;&#xA;  out_planes[2] = nullptr;&#xA;  out_planes[3] = nullptr;&#xA;&#xA;  sws_scale(&#xA;      swsContext,&#xA;      frame->data,&#xA;      frame->linesize,&#xA;      0,&#xA;      frame->height,&#xA;      &amp;out_planes,&#xA;&#xA;      // My understanding is that the stride of each plane is frame->width * 3&#xA;      (const int[4]){frame->width * 3, 0, 0, 0});&#xA;  sws_freeContext(swsContext);&#xA;&#xA;</enum>

    &#xA;

    This code does produce an image but the image appears to be wrong.

    &#xA;

    On a 300x200 video, the right few columns are wrong.

    &#xA;

    On a bigger resolution video the image seems correct, but on a smaller video it is not :

    &#xA;

    image produced by code

    &#xA;

    expected image

    &#xA;

    EDIT : It appears this is a bug in sws_scale (bug or expected feature). Turning off vector instructions causes it to work as expected :

    &#xA;

    // Adding this line before sws_scale causes the images to be bit exact.&#xA;av_set_cpu_flags_mask(0);&#xA;

    &#xA;

    I got that idea from this answer on SO : Turn off sw_scale conversion to planar YUV 32 byte alignment requirements

    &#xA;