Recherche avancée

Médias (91)

Autres articles (80)

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

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

Sur d’autres sites (11573)

  • I created a Python code to capture live video using FFmpeg, but the output screen only shows noise

    16 octobre 2024, par chun3 hyun

    The code below is Python code that made my computer screen video capture in real time via ffmpeg.

    


    When I run the code below, it goes well until a new window named 'Captured Frame' is created. But this 'Captured Frame' window doesn't show the full screen of my computer, and the gray screen is generating a lot of noise.

    


    import cv2
import numpy as np
import subprocess

def frame_capture():
    # Set FFmpeg command (capture desired window or area)
    ffmpeg_command = [
        'ffmpeg',
        '-f', 'gdigrab',  # Windows screen capture (using gdigrab)
        '-framerate', '30',  # Setting the Frame Speed
        '-i', 'desktop',  # What to capture (for example, full screen)
        '-pix_fmt', 'bgr0',
        '-vcodec', 'rawvideo',  # Video codec settings
        '-tune', 'zerolatency',
        '-an',  # Disable audio
        '-sn',  # Disable Caption
        '-f', 'rawvideo', '-'
    ]

    # Running the FFmpeg process
    process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE, bufsize=10**8)

    while True:
        # Read Frame from FFmpeg (Resolution Example: 1920x1080)
        raw_frame = process.stdout.read(1920 * 1080 * 3)  # 1920x1080 resolution, BGR format
        if not raw_frame:
            break  # Shut down the loop when you can no longer receive frames

        # Converting frame data to a numpy array
        frame = np.frombuffer(raw_frame, np.uint8).reshape((1080, 1920, 3))

        # Add frame processing code here
        # Example: Showing a frame on the screen
        cv2.imshow('Captured Frame', frame)

        # Press the 'q' key to end
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # End of process and release of resources
    process.stdout.close()
    process.wait()
    cv2.destroyAllWindows()
frame_capture()


    


    What could I have done wrong ? When I directly input the FFmpeg command in the Windows command prompt(knows as 'cmd') as shown below to save the video (in .mp4 format), I can see that the screen is output normally in the saved file. It seems that FFmpeg itself is installed correctly, but I don't know what the cause is.

    


    hwnd=132554 -pix_fmt yuv420p -vf "scale=iw-mod(iw\,2):ih-mod(ih\,2)" -draw_mouse 1 -t 10 output.mp4


    


    The handle number written above was the handle of the active Chrome window on my computer.

    


    My ffmpeg version is 2024-10-10-git-0f5592cfc7-full_build-www.gyan.dev My Python version is 3.12.4
My Windows version and build are as specified below.
:Windows 11 Home, 10.0.22631

    


    Capturing the computer screen with FFmpeg. I tried it, but the output screen shows only noise.

    


  • swscale/x86/input.asm : add x86-optimized planer rgb2yuv functions

    24 novembre 2021, par Mark Reid
    swscale/x86/input.asm : add x86-optimized planer rgb2yuv functions
    

    sse2 only operates on 2 lanes per loop for to_y and to_uv functions, due
    to the lack of pmulld instruction. Emulating pmulld with 2 pmuludq and shuffles
    proved too costly and made to_uv functions slower then the c implementation.

    For to_y on sse2 only float functions are generated,
    I was are not able outperform the c implementation on the integer pixel formats.

    For to_a on see4 only the float functions are generated.
    sse2 and sse4 generated nearly identical performing code on integer pixel formats,
    so only sse2/avx2 versions are generated.

    planar_gbrp_to_y_512_c : 1197.5
    planar_gbrp_to_y_512_sse4 : 444.5
    planar_gbrp_to_y_512_avx2 : 287.5
    planar_gbrap_to_y_512_c : 1204.5
    planar_gbrap_to_y_512_sse4 : 447.5
    planar_gbrap_to_y_512_avx2 : 289.5
    planar_gbrp9be_to_y_512_c : 1380.0
    planar_gbrp9be_to_y_512_sse4 : 543.5
    planar_gbrp9be_to_y_512_avx2 : 340.0
    planar_gbrp9le_to_y_512_c : 1200.5
    planar_gbrp9le_to_y_512_sse4 : 442.0
    planar_gbrp9le_to_y_512_avx2 : 282.0
    planar_gbrp10be_to_y_512_c : 1378.5
    planar_gbrp10be_to_y_512_sse4 : 544.0
    planar_gbrp10be_to_y_512_avx2 : 337.5
    planar_gbrp10le_to_y_512_c : 1200.0
    planar_gbrp10le_to_y_512_sse4 : 448.0
    planar_gbrp10le_to_y_512_avx2 : 285.5
    planar_gbrap10be_to_y_512_c : 1380.0
    planar_gbrap10be_to_y_512_sse4 : 542.0
    planar_gbrap10be_to_y_512_avx2 : 340.5
    planar_gbrap10le_to_y_512_c : 1199.0
    planar_gbrap10le_to_y_512_sse4 : 446.0
    planar_gbrap10le_to_y_512_avx2 : 289.5
    planar_gbrp12be_to_y_512_c : 10563.0
    planar_gbrp12be_to_y_512_sse4 : 542.5
    planar_gbrp12be_to_y_512_avx2 : 339.0
    planar_gbrp12le_to_y_512_c : 1201.0
    planar_gbrp12le_to_y_512_sse4 : 440.5
    planar_gbrp12le_to_y_512_avx2 : 286.0
    planar_gbrap12be_to_y_512_c : 1701.5
    planar_gbrap12be_to_y_512_sse4 : 917.0
    planar_gbrap12be_to_y_512_avx2 : 338.5
    planar_gbrap12le_to_y_512_c : 1201.0
    planar_gbrap12le_to_y_512_sse4 : 444.5
    planar_gbrap12le_to_y_512_avx2 : 288.0
    planar_gbrp14be_to_y_512_c : 1370.5
    planar_gbrp14be_to_y_512_sse4 : 545.0
    planar_gbrp14be_to_y_512_avx2 : 338.5
    planar_gbrp14le_to_y_512_c : 1199.0
    planar_gbrp14le_to_y_512_sse4 : 444.0
    planar_gbrp14le_to_y_512_avx2 : 279.5
    planar_gbrp16be_to_y_512_c : 1364.0
    planar_gbrp16be_to_y_512_sse4 : 544.5
    planar_gbrp16be_to_y_512_avx2 : 339.5
    planar_gbrp16le_to_y_512_c : 1201.0
    planar_gbrp16le_to_y_512_sse4 : 445.5
    planar_gbrp16le_to_y_512_avx2 : 280.5
    planar_gbrap16be_to_y_512_c : 1377.0
    planar_gbrap16be_to_y_512_sse4 : 545.0
    planar_gbrap16be_to_y_512_avx2 : 338.5
    planar_gbrap16le_to_y_512_c : 1201.0
    planar_gbrap16le_to_y_512_sse4 : 442.0
    planar_gbrap16le_to_y_512_avx2 : 279.0
    planar_gbrpf32be_to_y_512_c : 4113.0
    planar_gbrpf32be_to_y_512_sse2 : 2438.0
    planar_gbrpf32be_to_y_512_sse4 : 1068.0
    planar_gbrpf32be_to_y_512_avx2 : 904.5
    planar_gbrpf32le_to_y_512_c : 3818.5
    planar_gbrpf32le_to_y_512_sse2 : 2024.5
    planar_gbrpf32le_to_y_512_sse4 : 1241.5
    planar_gbrpf32le_to_y_512_avx2 : 657.0
    planar_gbrapf32be_to_y_512_c : 3707.0
    planar_gbrapf32be_to_y_512_sse2 : 2444.0
    planar_gbrapf32be_to_y_512_sse4 : 1077.0
    planar_gbrapf32be_to_y_512_avx2 : 909.0
    planar_gbrapf32le_to_y_512_c : 3822.0
    planar_gbrapf32le_to_y_512_sse2 : 2024.5
    planar_gbrapf32le_to_y_512_sse4 : 1176.0
    planar_gbrapf32le_to_y_512_avx2 : 658.5

    planar_gbrp_to_uv_512_c : 2325.8
    planar_gbrp_to_uv_512_sse2 : 1726.8
    planar_gbrp_to_uv_512_sse4 : 771.8
    planar_gbrp_to_uv_512_avx2 : 506.8
    planar_gbrap_to_uv_512_c : 2281.8
    planar_gbrap_to_uv_512_sse2 : 1726.3
    planar_gbrap_to_uv_512_sse4 : 768.3
    planar_gbrap_to_uv_512_avx2 : 496.3
    planar_gbrp9be_to_uv_512_c : 2336.8
    planar_gbrp9be_to_uv_512_sse2 : 1924.8
    planar_gbrp9be_to_uv_512_sse4 : 852.3
    planar_gbrp9be_to_uv_512_avx2 : 552.8
    planar_gbrp9le_to_uv_512_c : 2270.3
    planar_gbrp9le_to_uv_512_sse2 : 1512.3
    planar_gbrp9le_to_uv_512_sse4 : 764.3
    planar_gbrp9le_to_uv_512_avx2 : 491.3
    planar_gbrp10be_to_uv_512_c : 2281.8
    planar_gbrp10be_to_uv_512_sse2 : 1917.8
    planar_gbrp10be_to_uv_512_sse4 : 855.3
    planar_gbrp10be_to_uv_512_avx2 : 541.3
    planar_gbrp10le_to_uv_512_c : 2269.8
    planar_gbrp10le_to_uv_512_sse2 : 1515.3
    planar_gbrp10le_to_uv_512_sse4 : 759.8
    planar_gbrp10le_to_uv_512_avx2 : 487.8
    planar_gbrap10be_to_uv_512_c : 2382.3
    planar_gbrap10be_to_uv_512_sse2 : 1924.8
    planar_gbrap10be_to_uv_512_sse4 : 855.3
    planar_gbrap10be_to_uv_512_avx2 : 540.8
    planar_gbrap10le_to_uv_512_c : 2382.3
    planar_gbrap10le_to_uv_512_sse2 : 1512.3
    planar_gbrap10le_to_uv_512_sse4 : 759.3
    planar_gbrap10le_to_uv_512_avx2 : 484.8
    planar_gbrp12be_to_uv_512_c : 2283.8
    planar_gbrp12be_to_uv_512_sse2 : 1936.8
    planar_gbrp12be_to_uv_512_sse4 : 858.3
    planar_gbrp12be_to_uv_512_avx2 : 541.3
    planar_gbrp12le_to_uv_512_c : 2278.8
    planar_gbrp12le_to_uv_512_sse2 : 1507.3
    planar_gbrp12le_to_uv_512_sse4 : 760.3
    planar_gbrp12le_to_uv_512_avx2 : 485.8
    planar_gbrap12be_to_uv_512_c : 2385.3
    planar_gbrap12be_to_uv_512_sse2 : 1927.8
    planar_gbrap12be_to_uv_512_sse4 : 855.3
    planar_gbrap12be_to_uv_512_avx2 : 539.8
    planar_gbrap12le_to_uv_512_c : 2377.3
    planar_gbrap12le_to_uv_512_sse2 : 1516.3
    planar_gbrap12le_to_uv_512_sse4 : 759.3
    planar_gbrap12le_to_uv_512_avx2 : 484.8
    planar_gbrp14be_to_uv_512_c : 2283.8
    planar_gbrp14be_to_uv_512_sse2 : 1935.3
    planar_gbrp14be_to_uv_512_sse4 : 852.3
    planar_gbrp14be_to_uv_512_avx2 : 540.3
    planar_gbrp14le_to_uv_512_c : 2276.8
    planar_gbrp14le_to_uv_512_sse2 : 1514.8
    planar_gbrp14le_to_uv_512_sse4 : 762.3
    planar_gbrp14le_to_uv_512_avx2 : 484.8
    planar_gbrp16be_to_uv_512_c : 2383.3
    planar_gbrp16be_to_uv_512_sse2 : 1881.8
    planar_gbrp16be_to_uv_512_sse4 : 852.3
    planar_gbrp16be_to_uv_512_avx2 : 541.8
    planar_gbrp16le_to_uv_512_c : 2378.3
    planar_gbrp16le_to_uv_512_sse2 : 1476.8
    planar_gbrp16le_to_uv_512_sse4 : 765.3
    planar_gbrp16le_to_uv_512_avx2 : 485.8
    planar_gbrap16be_to_uv_512_c : 2382.3
    planar_gbrap16be_to_uv_512_sse2 : 1886.3
    planar_gbrap16be_to_uv_512_sse4 : 853.8
    planar_gbrap16be_to_uv_512_avx2 : 550.8
    planar_gbrap16le_to_uv_512_c : 2381.8
    planar_gbrap16le_to_uv_512_sse2 : 1488.3
    planar_gbrap16le_to_uv_512_sse4 : 765.3
    planar_gbrap16le_to_uv_512_avx2 : 491.8
    planar_gbrpf32be_to_uv_512_c : 4863.0
    planar_gbrpf32be_to_uv_512_sse2 : 3347.5
    planar_gbrpf32be_to_uv_512_sse4 : 1800.0
    planar_gbrpf32be_to_uv_512_avx2 : 1199.0
    planar_gbrpf32le_to_uv_512_c : 4725.0
    planar_gbrpf32le_to_uv_512_sse2 : 2753.0
    planar_gbrpf32le_to_uv_512_sse4 : 1474.5
    planar_gbrpf32le_to_uv_512_avx2 : 927.5
    planar_gbrapf32be_to_uv_512_c : 4859.0
    planar_gbrapf32be_to_uv_512_sse2 : 3269.0
    planar_gbrapf32be_to_uv_512_sse4 : 1802.0
    planar_gbrapf32be_to_uv_512_avx2 : 1201.5
    planar_gbrapf32le_to_uv_512_c : 6338.0
    planar_gbrapf32le_to_uv_512_sse2 : 2756.5
    planar_gbrapf32le_to_uv_512_sse4 : 1476.0
    planar_gbrapf32le_to_uv_512_avx2 : 908.5

    planar_gbrap_to_a_512_c : 383.3
    planar_gbrap_to_a_512_sse2 : 66.8
    planar_gbrap_to_a_512_avx2 : 43.8
    planar_gbrap10be_to_a_512_c : 601.8
    planar_gbrap10be_to_a_512_sse2 : 86.3
    planar_gbrap10be_to_a_512_avx2 : 34.8
    planar_gbrap10le_to_a_512_c : 602.3
    planar_gbrap10le_to_a_512_sse2 : 48.8
    planar_gbrap10le_to_a_512_avx2 : 31.3
    planar_gbrap12be_to_a_512_c : 601.8
    planar_gbrap12be_to_a_512_sse2 : 111.8
    planar_gbrap12be_to_a_512_avx2 : 41.3
    planar_gbrap12le_to_a_512_c : 385.8
    planar_gbrap12le_to_a_512_sse2 : 75.3
    planar_gbrap12le_to_a_512_avx2 : 39.8
    planar_gbrap16be_to_a_512_c : 386.8
    planar_gbrap16be_to_a_512_sse2 : 79.8
    planar_gbrap16be_to_a_512_avx2 : 31.3
    planar_gbrap16le_to_a_512_c : 600.3
    planar_gbrap16le_to_a_512_sse2 : 40.3
    planar_gbrap16le_to_a_512_avx2 : 30.3
    planar_gbrapf32be_to_a_512_c : 1148.8
    planar_gbrapf32be_to_a_512_sse2 : 611.3
    planar_gbrapf32be_to_a_512_sse4 : 234.8
    planar_gbrapf32be_to_a_512_avx2 : 183.3
    planar_gbrapf32le_to_a_512_c : 851.3
    planar_gbrapf32le_to_a_512_sse2 : 263.3
    planar_gbrapf32le_to_a_512_sse4 : 199.3
    planar_gbrapf32le_to_a_512_avx2 : 156.8

    Reviewed-by : Paul B Mahol <onemda@gmail.com>
    Signed-off-by : James Almer <jamrial@gmail.com>

    • [DH] libswscale/x86/input.asm
    • [DH] libswscale/x86/swscale.c
    • [DH] tests/checkasm/sw_gbrp.c
  • ffmpeg chains parameters and options while being used in a loop

    10 janvier 2024, par Simon Nazarenko

    I got a code that generates videos from scratch (got gifs, captions and audio). It works amazing when done once, however, when put in a loop and it should create more than 1 video it freezes being caused by memory leak. Upon investigation I realized that ffmpeg (v1.1.0) chains the loop iterations carrying the parameters and options from the first iteration to the second. It then breaks (overwrites) the first video and infinitely writes the second.

    &#xA;

    This is my dependency

    &#xA;

    const ffmpeg = require("fluent-ffmpeg")()&#xA;  .setFfprobePath(ffprobe.path)&#xA;  .setFfmpegPath(ffmpegInstaller.path)&#xA;

    &#xA;

    It looks like this

    &#xA;

    async function convertGifToVideo(&#xA;  gifFile,&#xA;  audioFile,&#xA;  subtitlesFile,&#xA;  tempDirectory&#xA;) {&#xA;  return new Promise((resolve, reject) => {&#xA;    const outputFile = `${tempDirectory}/video_${Date.now()}.mp4`&#xA;    &#xA;    ffmpeg&#xA;      .input(gifFile)&#xA;      .inputFormat("gif")&#xA;      .inputOptions("-stream_loop -1")&#xA;      .input(audioFile)&#xA;      .outputOptions("-shortest")&#xA;      .outputOptions(`-vf subtitles=${subtitlesFile}`)&#xA;      .outputOptions("-report")&#xA;      .output(outputFile)&#xA;      .on("end", () => {&#xA;        console.log(`Combined ${gifFile} and ${audioFile} into ${outputFile}`)&#xA;        resolve(outputFile)&#xA;      })&#xA;      .on("error", (err, stdout, stderr) => {&#xA;        console.error("Error combining GIF and audio:", err)&#xA;        console.error("ffmpeg stdout:", stdout)&#xA;        console.error("ffmpeg stderr:", stderr)&#xA;        reject(err)&#xA;      })&#xA;      .run()&#xA;  })&#xA;}&#xA;

    &#xA;

    And it's called in a loop

    &#xA;

    for (const key in script) {&#xA;    if (script.hasOwnProperty(key)) {&#xA;      ...stuff&#xA;&#xA;      const videoFileName = await convertGifToVideo(&#xA;        gifFileName,&#xA;        audioFileName,&#xA;        subtitlesFileName,&#xA;        tempDirectory&#xA;      )&#xA;    }&#xA;  }&#xA;

    &#xA;

    Here is a piece of log from the first video generation

    &#xA;

    &#xA;

    ffmpeg started on 2024-01-10 at 02:58:52&#xA;Report written to "ffmpeg-20240110-025852.log"&#xA;Command line :&#xA;/home/simon/Documents/AFYTUBE/node_modules/@ffmpeg-installer/linux-x64/ffmpeg -f gif -stream_loop -1 -i ./temp/gif_funny_frogs.gif -i ./temp/funny_frogs.mp3 -y -shortest -vf "subtitles=./temp/funny_frogs.srt" -report ./temp/video_1704880732780.mp4

    &#xA;

    &#xA;

    Here is a piece of log from the second one

    &#xA;

    &#xA;

    /home/simon/Documents/AFYTUBE/node_modules/@ffmpeg-installer/linux-x64/ffmpeg -f gif -stream_loop -1 -i ./temp/gif_funny_frogs.gif -i ./temp/funny_frogs.mp3 -f gif -stream_loop -1 -i ./temp/gif_leg_exercises.gif -i ./temp/leg_exercises.mp3 -y -shortest -vf "subtitles=./temp/funny_frogs.srt" -report -shortest -vf "subtitles=./temp/leg_exercises.srt" -report ./temp/video_1704880732780.mp4 ./temp/video_1704880750879.mp4

    &#xA;

    &#xA;

    Any ideas what I am doing wrong ?

    &#xA;