Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (70)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

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

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

Sur d’autres sites (9925)

  • What type file to pass to FFMPEG::Movie.new(file) in the gem ffmpeg (heroku)

    31 août 2020, par AlbertMunichMar

    I have a Rails app hosted in Heroku. I am using the gem ffmpeg to record screenshots.

    


    I get a video from a React App in my controller :

    


    video = params[:video].tempfile
# #tmp/RackMultipart20200831-4-zgw094.mp4>


    


    I try to pass this object, but does not work :

    


    Errno::ENOENT (No such file or directory - the ffprobe binary could not be found in /app/vendor/bundle/ruby/2.5.0/bin:/app/bin:/app/vendor/bundle/bin:/usr/local/bin:/usr/bin:/bin):


    


    I thought it should worked, since FFMPEG::Movie.new(file) is asking for the path, and I am providing it :

    


    Parameters: {"video"=>#, @original_filename="89.mp4", @content_type="video/mp4", @headers="Content-Disposition: form-data; name=\"video\"; filename=\"89.mp4\"\r\nContent-Type: video/mp4\r\n">}


    


    see : tmp/RackMultipart20200831-4-q2yi74.mp4>. This is the temp path right ?

    


    Maybe it's looking for the file in the wrong path, but how can I specify it ?

    


    I also tried :

    


    File.open(video, 'r') do |file|
  FFMPEG::Movie.new(file.path)
end


    


    But also wrong path. Could someone help me ?

    


    Buildpack is installed in heroku.

    


    I used the CLI installation :

    


    heroku create --buildpack https://github.com/FFmpeg/FFmpeg.git


    


    With following output :

    


    remote: -----> ffmpeg app detected
remote: -----> Install ffmpeg
remote:        DOWNLOAD_URL =  https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
remote:        exporting PATH
remote: -----> Discovering process types
remote:        Procfile declares types -> (none)


    


    It seems to be installed.

    


    But I keep getting this error :

    


    2020-08-31T15:56:24.157721+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=POST path="/nodes" host=wikisalsaapi.herokuapp.com request_id=35e23352-005a-4178-bda1-0bed65885c0d fwd="46.128.35.112" dyno= connect= service= status=503 bytes= protocol=https
2020-08-31T15:57:08.000000+00:00 app[api]: Build started by user albert.montolio@gmail.com
2020-08-31T15:57:31.843422+00:00 app[api]: Deploy 038e1b47 by user albert.montolio@gmail.com
2020-08-31T15:57:31.843422+00:00 app[api]: Release v76 created by user albert.montolio@gmail.com
2020-08-31T15:57:34.000000+00:00 app[api]: Build succeeded
2020-08-31T15:58:37.767157+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=POST path="/nodes" host=wikisalsaapi.herokuapp.com request_id=365fe1a2-091e-479a-b9b6-02c0b70ed754 fwd="46.128.35.112" dyno= connect= service= status=503 bytes= protocol=https


    


  • ffmpeg : error reading header pipe:0 : Invalid argument

    25 février 2021, par Дмитрий Бондаренко

    I need microservice (converter audio using streams), but have problem with ffmpeg

    


    my test ffmpeg

    


    package codec

import (
    "bytes"
    "os"
    "os/exec"
    "testing"
)

func Test1(t *testing.T) {
    in, err := os.Open("/mp4-mp3/src.m4a")
    if err != nil {
        t.Fatal(err.Error())
    }
    out, err := os.OpenFile("/mp4-mp3/out.mp3", os.O_RDWR|os.O_CREATE, 0666)
    if err != nil {
        t.Fatal(err.Error())
    }
    cmd := exec.Command(
        "ffmpeg",
        "-f", "m4a",
        "-i", "pipe:0",
        "-f", "mp3",
        "pipe:1")

    cmd.Stdin = in
    cmd.Stdout = out
    stderr := &bytes.Buffer{}
    cmd.Stderr = stderr
    if err := cmd.Run(); err != nil {
        t.Logf(stderr.String())
        t.Fatal(err.Error())
    }

}



    


    At the exit, I have the error invalid argument
i tried different options but the problem didn't change

    


    === RUN   Test1
    codec_test.go:31: ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers
          built with gcc 10.2.1 (GCC) 20200805
          configuration: hide...
          libavutil      56. 58.100 / 56. 58.100
          libavcodec     58.101.101 / 58.101.101
          libavformat    58. 51.101 / 58. 51.101
          libavdevice    58. 11.101 / 58. 11.101
          libavfilter     7. 87.100 /  7. 87.100
          libswscale      5.  8.100 /  5.  8.100
          libswresample   3.  8.100 /  3.  8.100
          libpostproc    55.  8.100 / 55.  8.100
        [mov,mp4,m4a,3gp,3g2,mj2 @ 0000019ccc3acb40] error reading header
        pipe:0: Invalid argument
    codec_test.go:32: exit status 1
--- FAIL: Test1 (0.07s)
FAIL

Process finished with exit code 1


    


    i decided to use cmd, but i have new problem
pipe:0 : Invalid data found when processing input

    


    cat src.m4a | ffmpeg -f m4a -i pipe:0 out.mp3
ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.1 (GCC) 20200805
  configuration: hide...
  libavutil      56. 58.100 / 56. 58.100
  libavcodec     58.101.101 / 58.101.101
  libavformat    58. 51.101 / 58. 51.101
  libavdevice    58. 11.101 / 58. 11.101
  libavfilter     7. 87.100 /  7. 87.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000019afa98d800] invalid STSD entries 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000019afa98d800] error reading header
pipe:0: Invalid data found when processing input



    


    How to properly set ffmpeg parameters to convert from stream to stream ?

    


  • ffmpeg exit code 429496724 when opening file with {} in name

    16 février, par Holly Wilson

    I'm trying to write a program that will read the names of files in a directory, and parse them for info which it will then write into that file's metadata (seems pointless, I know, but it's more of a trial run for a larger project. If I can figure this out, then I'll be ready to move on to what I actually want to do).
All of my filenames are formatted :

    


    Title, Article* - Subtitle* Cut* [Year]
*if present

    


    The four test videos I'm using are titled :

    


    Test Video 1 [2000]

    


    Test Video 2, A [2000]

    


    Test Video 3 Test Cut [2000]

    


    Test Video 4 - The Testening [2000]

    


    The code seems to be working fine on videos 1, 2, & 4 ; but video 3 is causing me a lot of headache.

    


    //node C:\Users\User\Documents\Coding\Tools\testMDG.js
const fs = require('fs');
const path = require('path');
const ffmpeg = require('fluent-ffmpeg');
const async = require('async');
const directory = path.normalize('F:\\Movies & TV\\Movies\\testDir');
let x = 0;
const fileArray = [];
const succArray = [];
const failArray = [];
// Set the path to the ffmpeg executable
ffmpeg.setFfmpegPath(path.normalize('C:\\ffmpeg\\bin\\ffmpeg.exe'));

// Add this near the start of your script
const tempDir = path.join(directory, 'temp');
if (!fs.existsSync(tempDir)) {
    fs.mkdirSync(tempDir, { recursive: true });
}

const progresscsv = path.normalize('C:\\Users\\User\\Documents\\Coding\\Tools\\progress.csv');
if (fs.existsSync(progresscsv)) {
    fs.unlinkSync(progresscsv);
};

const csvStream = fs.createWriteStream(progresscsv);
csvStream.write('File Name,Status\n');

const CONCURRENCY_LIMIT = 3; // Adjust based on your system capabilities

// Add at the start of your script
const processedFiles = new Set();

function sanitizeFilePath(filePath) {
    return filePath.replace(/([{}])/g, '\\$1');
}

// Create a queue
const queue = async.queue(async (task, callback) => {
    const { file, filePath, tempFilePath, movieMetadata } = task;
    try {
        await new Promise((resolve, reject) => {
            console.log(`ffmpeg reading: ${sanitizeFilePath(filePath)}`);
            ffmpeg(sanitizeFilePath(filePath))
                .outputOptions([
                    '-y',
                    '-c', 'copy',
                    '-map', '0',
                    '-metadata', `title=${movieMetadata.title}`,
                    '-metadata', `subtitle=${movieMetadata.subtitle || ''}`,
                    '-metadata', `comment=${movieMetadata.cut || ''}`,
                    '-metadata', `year=${movieMetadata.year}`
                ])
                .on('error', (err) => reject(err))
                .on('end', () => resolve())
                .saveToFile(tempFilePath);
        });
        
        // Handle success
        console.log(`Successfully processed: ${file}`);
        succArray.push(file);
        // Only call callback once
        if (callback && typeof callback === 'function') {
            callback();
        }
    } catch (err) {
        // Handle error
        console.error(`Error processing ${file}: ${err.message}`);
        failArray.push(file);
        // Only call callback once with error
        if (callback && typeof callback === 'function') {
            callback(err);
        }
    }
}, CONCURRENCY_LIMIT);

fs.readdir(directory, (err, files) => {
    if (err) {
        console.error(`Error reading directory: ${err.message}`);
        return;
    }
    console.log(directory);

    // Filter for files only
    files = files.filter(file => fs.statSync(path.join(directory, file)).isFile());
    console.log(files);

    for (const file of files) {
        x++;
        const filePath = path.join(directory, file);
        let desort = file.replace(/(.*),\s(the\s|an\s|a\s)/i, '$2'+'$1 ') || file;
        
        // Create task object for queue
        const task = {
            file,
            filePath: filePath,
            tempFilePath: path.join(directory, 'temp', `temp_${x}_${path.parse(file).name
                .replace(/[^a-zA-Z0-9]/g, '_')}${path.extname(file)}`),
            movieMetadata: {
                title: desort.replace(/(\s[\-\{\[].*)/gi, ``),
                subtitle: desort.includes('-') ? desort.replace(/(.*)\-\s(.*?)[\{\[].*/gi, '$2') : null,
                cut: desort.includes('{') ? desort.replace(/.*\{(.*)\}.*/gi, '$1') : null,
                year: desort.replace(/.*\[(.*)\].*/gi, '$1')
            }
        };
        
        // Add to processing queue
        queue.push(task, (err) => {
            if (!processedFiles.has(task.file)) {
                processedFiles.add(task.file);
                if (err) {
                    csvStream.write(`${task.file},Failed\n`);
                } else {
                    csvStream.write(`${task.file},Processed\n`);
                }
            }
        });
    }
});

// Add queue completion handler
queue.drain(() => {
    console.log('All files have been processed');
    console.log(`Success: ${succArray.length} files: ${succArray}`);
    console.log(`Failed: ${failArray.length} files: ${failArray}`);
});

//node C:\Users\User\Documents\Coding\Tools\testMDG.js


    


    And the console is logging :

    


    PS C:\Users\User> node C:\Users\User\Documents\Coding\Tools\testMDG.js
F:\Movies & TV\Movies\testDir
[
  'Test Video 1 [2020].mp4',
  'Test Video 2, A [2020].mp4',
  'Test Video 3 {Test Cut} [2020].mp4',
  'Test Video 4 - The Testening [2020].mp4'
]
ffmpeg reading: F:\Movies & TV\Movies\testDir\Test Video 1 [2020].mp4
ffmpeg reading: F:\Movies & TV\Movies\testDir\Test Video 2, A [2020].mp4
ffmpeg reading: F:\Movies & TV\Movies\testDir\Test Video 3 \{Test Cut\} [2020].mp4
Error processing Test Video 3 {Test Cut} [2020].mp4: ffmpeg exited with code 4294967294: Error opening input file F:\Movies & TV\Movies\testDir\Test Video 3 \{Test Cut\} [2020].mp4.
Error opening input files: No such file or directory

ffmpeg reading: F:\Movies & TV\Movies\testDir\Test Video 4 - The Testening [2020].mp4
Successfully processed: Test Video 1 [2020].mp4
Successfully processed: Test Video 2, A [2020].mp4
Successfully processed: Test Video 4 - The Testening [2020].mp4
All files have been processed
Success: 3 files: Test Video 1 [2020].mp4,Test Video 2, A [2020].mp4,Test Video 4 - The Testening [2020].mp4
Failed: 1 files: Test Video 3 {Test Cut} [2020].mp4


    


    I've tried so many different solutions in the sanitizeFilePath function. Escaping the {} characters (as included below), escaping all non-alphanumeric characters, putting the filepath in quotes, etc. VSCode's CoPilot is just pulling me round in circles, suggesting solutions I've already tried.