Recherche avancée

Médias (3)

Mot : - Tags -/collection

Autres articles (107)

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

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

Sur d’autres sites (9304)

  • How can I crop and encode a video using flutter natively, now that flutter_ffmpeg is discontinued with no alternatives ? [closed]

    13 mars, par Rageh Azzazy

    As of January 6, 2025, FFmpegKit is officially retired (Taner's article).

    


    This also affects the flutter_ffmpeg and ffmpeg_kit_flutter packages.

    


    Most packages for executing video editing commands were built depending on them and so won't work after April 1, 2025 as mentioned in the package documentation and Taner's article. Some packages that depend on flutter_ffmpeg or ffmpeg_kit_flutter are :

    


      

    • video_trimmer
    • 


    • zero_video_trimmer
    • 


    • flutter_video_trimmer
    • 


    • video_trim
    • 


    • bemeli_compress
    • 


    • video_trimmer_pro
    • 


    • ... others
    • 


    


    Editing video using video_editor or video_editor_2 or video_editor_pits has become a problem.

    


    I believe downloading the binaries and doing the whole thing locally is not just tedious but illegal as well.

    


    I broke down exactly what I need to edit videos in my flutter app and I found those package but have not yet tested them.

    


      

    • Trimming : flutter_native_video_trimmer

      


    • 


    • Compression : video_compress or video_compress_plus

      


    • 


    • Muting : video_compress handles this

      


    • 


    • Encoding : Not sure, I just need a simple MP4 video files

      


    • 


    • Cropping : I can't find a solution for video cropping

      


    • 


    


    I don't need to rotate, reverse or do any fancy stuff to the videos, just those five functions.

    


    Now the only way forward is to find a simple video cropping function and an encoder that work on flutter IOS & Android

    


    My question is not looking for external library recommendations but :

    


    Do you have any ideas how to crop a video in flutter natively ?

    


  • Can I use the file buffer or stream as input for fluent-ffmpeg ? I am trying to avoid saving the video locally to get its path before removing

    22 avril 2023, par Moath Thawahreh

    I am receiving the file via an api, I was trying to process the file.buffer as input for FFmpeg but it did not work, I had to save the video locally first and then process the path and remove the saved video later on.
I don't want to believe that there is no other way to solve this and I have been looking for solutions and workarounds but it was all about ffmpeg input as a path.

    


    I would love to find a solution using fluent-ffmpeg because it has some other great features, but I won't mind any suggestions for compressing the video using any different approaches if it's more efficient

    


    Again my code below works fine but I have to save the video and then remove it I am hoping for a more efficient solution :

    


      fs.writeFileSync(&#x27;temp.mp4&#x27;, file.buffer);&#xA;&#xA;    // Resize the temporary file using ffmpeg&#xA;    ffmpeg(&#x27;temp.mp4&#x27;) // here I tried pass file.buffer as readable stream,it receives paths only &#xA;      .format(&#x27;mp4&#x27;)&#xA;      .size(&#x27;50%&#x27;)&#xA;      .save(&#x27;resized.mp4&#x27;)&#xA;      .on(&#x27;end&#x27;, async () => {&#xA;        // Upload the resized file to Firebase&#xA;        const resizedFileStream = bucket.file(`video/${uniqueId}`).createWriteStream();&#xA;        fs.createReadStream(&#x27;resized.mp4&#x27;).pipe(resizedFileStream);&#xA;&#xA;        await new Promise<void>((resolve, reject) => {&#xA;          resizedFileStream&#xA;            .on(&#x27;finish&#x27;, () => {&#xA;              // Remove the local files after they have been uploaded&#xA;              fs.unlinkSync(&#x27;temp.mp4&#x27;);&#xA;              fs.unlinkSync(&#x27;resized.mp4&#x27;);&#xA;              resolve();&#xA;            })&#xA;            .on(&#x27;error&#x27;, reject);&#xA;        });&#xA;&#xA;        // Get the URL of the uploaded resized version&#xA;        const resizedFile = bucket.file(`video/${uniqueId}`);&#xA;        const url = await resizedFile.getSignedUrl({&#xA;          action: &#x27;read&#x27;,&#xA;          expires: &#x27;03-17-2025&#x27;, // Change this to a reasonable expiration date&#xA;        });&#xA;&#xA;        console.log(&#x27;Resized file uploaded successfully.&#x27;);&#xA;      })&#xA;      .on(&#x27;error&#x27;, (err) => {&#xA;        console.log(&#x27;An error occurred: &#x27; &#x2B; err.message);&#xA;      });&#xA;</void>

    &#xA;

  • NumPy array of a video changes from the original after writing into the same video

    29 mars 2021, par Rashiq

    I have a video (test.mkv) that I have converted into a 4D NumPy array - (frame, height, width, color_channel). I have even managed to convert that array back into the same video (test_2.mkv) without altering anything. However, after reading this new, test_2.mkv, back into a new NumPy array, the array of the first video is different from the second video's array i.e. their hashes don't match and the numpy.array_equal() function returns false. I have tried using both python-ffmpeg and scikit-video but cannot get the arrays to match.

    &#xA;

    Python-ffmpeg attempt :

    &#xA;

    import ffmpeg&#xA;import numpy as np&#xA;import hashlib&#xA;&#xA;file_name = &#x27;test.mkv&#x27;&#xA;&#xA;# Get video dimensions and framerate&#xA;probe = ffmpeg.probe(file_name)&#xA;video_stream = next((stream for stream in probe[&#x27;streams&#x27;] if stream[&#x27;codec_type&#x27;] == &#x27;video&#x27;), None)&#xA;width = int(video_stream[&#x27;width&#x27;])&#xA;height = int(video_stream[&#x27;height&#x27;])&#xA;frame_rate = video_stream[&#x27;avg_frame_rate&#x27;]&#xA;&#xA;# Read video into buffer&#xA;out, error = (&#xA;    ffmpeg&#xA;        .input(file_name, threads=120)&#xA;        .output("pipe:", format=&#x27;rawvideo&#x27;, pix_fmt=&#x27;rgb24&#x27;)&#xA;        .run(capture_stdout=True)&#xA;)&#xA;&#xA;# Convert video buffer to array&#xA;video = (&#xA;    np&#xA;        .frombuffer(out, np.uint8)&#xA;        .reshape([-1, height, width, 3])&#xA;)&#xA;&#xA;# Convert array to buffer&#xA;video_buffer = (&#xA;    np.ndarray&#xA;        .flatten(video)&#xA;        .tobytes()&#xA;)&#xA;&#xA;# Write buffer back into a video&#xA;process = (&#xA;    ffmpeg&#xA;        .input(&#x27;pipe:&#x27;, format=&#x27;rawvideo&#x27;, s=&#x27;{}x{}&#x27;.format(width, height))&#xA;        .output("test_2.mkv", r=frame_rate)&#xA;        .overwrite_output()&#xA;        .run_async(pipe_stdin=True)&#xA;)&#xA;process.communicate(input=video_buffer)&#xA;&#xA;# Read the newly written video&#xA;out_2, error = (&#xA;    ffmpeg&#xA;        .input("test_2.mkv", threads=40)&#xA;        .output("pipe:", format=&#x27;rawvideo&#x27;, pix_fmt=&#x27;rgb24&#x27;)&#xA;        .run(capture_stdout=True)&#xA;)&#xA;&#xA;# Convert new video into array&#xA;video_2 = (&#xA;    np&#xA;        .frombuffer(out_2, np.uint8)&#xA;        .reshape([-1, height, width, 3])&#xA;)&#xA;&#xA;# Video dimesions change&#xA;print(f&#x27;{video.shape} vs {video_2.shape}&#x27;) # (844, 1080, 608, 3) vs (2025, 1080, 608, 3)&#xA;print(f&#x27;{np.array_equal(video, video_2)}&#x27;) # False&#xA;&#xA;# Hashes don&#x27;t match&#xA;print(hashlib.sha256(bytes(video_2)).digest()) # b&#x27;\x88\x00\xc8\x0ed\x84!\x01\x9e\x08 \xd0U\x9a(\x02\x0b-\xeeA\xecU\xf7\xad0xa\x9e\\\xbck\xc3&#x27;&#xA;print(hashlib.sha256(bytes(video)).digest()) # b&#x27;\x9d\xc1\x07xh\x1b\x04I\xed\x906\xe57\xba\xf3\xf1k\x08\xfa\xf1\xfaM\x9a\xcf\xa9\t8\xf0\xc9\t\xa9\xb7&#x27;&#xA;

    &#xA;

    Scikit-video attempt :

    &#xA;

    import skvideo.io as sk&#xA;import numpy as np&#xA;&#xA;video_data = sk.vread(&#x27;test.mkv&#x27;)&#xA;&#xA;sk.vwrite(&#x27;test_2_ski.mkv&#x27;, video_data)&#xA;&#xA;video_data_2 = sk.vread(&#x27;test_2_ski.mkv&#x27;)&#xA;&#xA;# Dimensions match but...&#xA;print(video_data.shape) # (844, 1080, 608, 3)&#xA;print(video_data_2.shape) # (844, 1080, 608, 3)&#xA;&#xA;# ...array elements don&#x27;t&#xA;print(np.array_equal(video_data, video_data_2)) # False&#xA;&#xA;# Hashes don&#x27;t match either&#xA;print(hashlib.sha256(bytes(video_2)).digest()) # b&#x27;\x8b?]\x8epD:\xd9B\x14\xc7\xba\xect\x15G\xfaRP\xde\xad&amp;EC\x15\xc3\x07\n{a[\x80&#x27;&#xA;print(hashlib.sha256(bytes(video)).digest()) # b&#x27;\x9d\xc1\x07xh\x1b\x04I\xed\x906\xe57\xba\xf3\xf1k\x08\xfa\xf1\xfaM\x9a\xcf\xa9\t8\xf0\xc9\t\xa9\xb7&#x27;&#xA;

    &#xA;

    I don't understand where I'm going wrong and both the respective documentations do not highlight how to do this particular task. Any help is appreciated. Thank you.

    &#xA;