
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (10)
-
Les statuts des instances de mutualisation
13 mars 2010, parPour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...) -
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...) -
Supporting all media types
13 avril 2011, parUnlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)
Sur d’autres sites (4300)
-
Electron and NodeJS : Execute shell command asyncronously with live stream
28 septembre 2020, par Bruno FreireElectron : get file conversion percent in real-time :


I wanna run the command
ffmpeg -i video.mp4
(example) to convert a video into another format. But I want to get the conversion percent that is streamed in the process output and get it in my Electron App or NodeJS.

I've tried all methods :
spawn
fork
exec
and all of them return me the last line of the process output. I want a LIVE Stream of each line that is been written, to show the percent progress.

I've tried :


Fork


const {fork} = require('child_process')
 const forked = fork('ffmpeg -i video.mp4');
 forked.on('message', (msg) => {
 console.log(msg);
})



Exec Alternative 1


const execFile = require('child_process').execFile;
 execFile('ffmpeg -i video.mp4', [], (e, stdout, stderr) => {
 if (e instanceof Error){
 console.error(e);
 
 }
 console.log('stdout ', stdout)
 console.log('stderr ', stderr);
})



Exec Alternative 2


const exec = require('child_process').exec;
 exec('ffmpeg -i video.mp4', (error, stdout, stderr) => { 
 console.log(stdout); 
});

/*EXEC Alternative 2*/
const exec = require('child_process').exec;
const proccessing = exec('ffmpeg -i video.mp4');
proccessing.stdout.on('data', function(data) {
 console.log(data); 
});
proccessing.stdout.pipe(process.stdout);



Spawn


const spawn = require('child_process').spawn,
const processing = spawn('ffmpeg -i video.mp4');

processing .stdout.on('data', function (data) {
 console.log('stdout: ' + data.toString());
});

processing .stderr.on('data', function (data) {
 console.log('stderr: ' + data.toString());
});

processing .on('exit', function (code) {
 console.log('code ' + code.toString());
});



SUMMARY :


럎
-
electron fluent-ffmpeg mergeToFile() command promise not triggering
12 septembre 2020, par MartinI am trying to use fluent-ffmpeg with my electron app to concatenate multiple audio files together with an image in a video. So if i have three files :


song1.mp3 1:00
song2.mp3 0:30
song3.mp3 2:00
front.jpg


I could create
output.mp4
which would be 3:30 seconds long, and play each file one after the other in order. With front.jpg set as the background image.

I am trying to create the concatenated audio file first for this video, then I can just render a vid with two inputs ; image and the 3:30second long concatenated audio file. But I'm having difficulty getting my electron app to wait for the ffmpeg job to run and complete.


I know how to do all of these ffmpeg jobs on the command-line, but I've been following this guide for how to package ffmpeg into an electron app that can run on mac/win10/linux environments. I'm developing it on win10 right now.
gur.com/LtykP.png


I have a button :

<button>FULLALBUM</button>


that when I click runs the
fullAlbum()
function that callscombineMp3FilesOrig
to run the actual ffmpeg job :

async function fullAlbum(uploadName) {
 //document.getElementById("buttonId").disabled = true;

 //get table
 var table = $(`#upload_${uploadNumber}_table`).DataTable()
 //get all selected rows
 var selectedRows = table.rows( '.selected' ).data()
 //get outputFile location
 var path = require('path');
 var outputDir = path.dirname(selectedRows[0].audioFilepath)
 //create outputfile
 var timestamp = new Date().getUTCMilliseconds();
 let outputFilepath = `${outputDir}/output-${timestamp}.mp3` 

 
 console.log('fullAlbum() button pressed: ', timestamp)

 await combineMp3FilesOrig(selectedRows, outputFilepath, '320k', timestamp);
 //document.getElementById("buttonId").disabled = false;

 console.log(`fullAlbum() /output-${timestamp}.mp3 should be created now`)
}

function combineMp3FilesOrig(selectedRows, outputFilepath, bitrate, timestamp) {
 console.log(`combineMp3FilesOrig(): ${outputFilepath}`)
 
 //begin get ffmpeg info
 const ffmpeg = require('fluent-ffmpeg');
 //Get the paths to the packaged versions of the binaries we want to use
 const ffmpegPath = require('ffmpeg-static').replace('app.asar','app.asar.unpacked');
 const ffprobePath = require('ffprobe-static').path.replace('app.asar','app.asar.unpacked');
 //tell the ffmpeg package where it can find the needed binaries.
 ffmpeg.setFfmpegPath(ffmpegPath);
 ffmpeg.setFfprobePath(ffprobePath);
 //end set ffmpeg info

 //create ffmpeg command
 console.log(`combineMp3FilesOrig(): create command`)
 const command = ffmpeg();
 //set command inputs
 command.input('C:\\Users\\marti\\Documents\\martinradio\\uploads\\CharlyBoyUTurn\\5. Akula (Club Mix).flac')
 command.input('C:\\Users\\marti\\Documents\\martinradio\\uploads\\CharlyBoyUTurn\\4. Civilian Barracks.flac')

 return new Promise((resolve, reject) => {
 console.log(`combineMp3FilesOrig(): command status logging`)
 command.on('progress', function(progress) {
 console.info(`Processing : ${progress.percent} % done`);
 })
 .on('codecData', function(data) {
 console.log('codecData=',data);
 })
 .on('end', function() {
 console.log('file has been converted succesfully; resolve() promise');
 resolve();
 })
 .on('error', function(err) {
 console.log('an error happened: ' + err.message, ', reject()');
 reject(err);
 })
 console.log(`combineMp3FilesOrig(): add audio bitrate to command`)
 command.audioBitrate(bitrate)
 console.log(`combineMp3FilesOrig(): tell command to merge inputs to single file`)
 command.mergeToFile(outputFilepath);
 console.log(`combineMp3FilesOrig(): end of promise`)
 });
 console.log(`combineMp3FilesOrig(): end of function`)
}



When I click my button once, my console.logs show the promise is entered, the command is created, but the function just ends without waiting for a resolve() ;
Waiting a couple minutes doesnt change anything.




If I press the button again :




A new command gets created, reaches the end of the promise, but this time actually starts, and triggers the previous command to start. Both jobs then run and their files are rendered at the correct length (12:08) and the correct quality (320k)


Is there something with my promise I need to fix involving async functions and promises in an electron app ? I tried editing my ffmpeg command to include


command.run()


At the end of my promise to ensure it gets triggered ; but that leads to an err in console saying
Uncaught (in promise) Error: No output specified
because apparently in fluent-ffmpegcommand.mergeToFile(outputFilepath);
isnt good enough and I need to include.output(outputFilepath)
as well. If I changecommand.run()
tocommand.output(outputFilepath).run()
, when i click my button, the ffmpeg job gets triggered and rendered perfectly fine. EXCEPT THAT THE FILE IS ALWAYS 128kbps

So I'm trying to figure out why my included code block, my ffmpeg command doesn't run the first time when its created.


-
rtmp stream error with ffmpeg desktop capture on electron js
9 septembre 2020, par Berk CoşarI'm making a program that captures the desktop converts it to rtmp stream.


Working logic of the program.


- 

-
users will click the stream button on electron js window


-
The program will run ffmpeg shell code that captures the desktop as rtmp stream on the backend.


my ffmpeg command to run for macOS Catalina on the backend :


ffmpeg -f avfoundation -i 1:0 -pixel_format nv12 -vcodec libx264 -preset ultrafast -pix_fmt yuv422p -s 1280x800 -r 30 -b:v 1500k -bufsize 1500k -maxrate 7000k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp ://192.168.0.109/live


-
And It will play stream on vlc










Okay. this Ffmpeg command is running successfully on terminal but unsuccessfully on electron js.


Error code :




stream.js:172 Error : Command failed :
/Users/macbook/Pictures/relteco/ffmpeg.sh ffmpeg version 4.3.1
Copyright (c) 2000-2020 the FFmpeg developers built with Apple clang
version 11.0.3 (clang-1103.0.32.62) configuration :
—prefix=/usr/local/Cellar/ffmpeg/4.3.1 —enable-shared —enable-pthreads —enable-version3 —enable-avresample —cc=clang —host-cflags= —host-ldflags= —enable-ffplay —enable-gnutls —enable-gpl —enable-libaom —enable-libbluray —enable-libdav1d —enable-libmp3lame —enable-libopus —enable-librav1e —enable-librubberband —enable-libsnappy —enable-libsrt —enable-libtesseract —enable-libtheora —enable-libvidstab —enable-libvorbis —enable-libvpx —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxml2 —enable-libxvid —enable-lzma —enable-libfontconfig —enable-libfreetype —enable-frei0r —enable-libass —enable-libopencore-amrnb —enable-libopencore-amrwb —enable-libopenjpeg —enable-librtmp —enable-libspeex —enable-libsoxr —enable-videotoolbox —disable-libjack —disable-indev=jack libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 /
58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 /
3. 7.100 libpostproc 55. 7.100 / 55. 7.100 [AVFoundation indev @ 0x7fd3a8e0ce80] Configuration of video device failed, falling back
to default. [avfoundation @ 0x7fd3a900ea00] Selected pixel format
(yuv420p) is not supported by the input device. [avfoundation @
0x7fd3a900ea00] Supported pixel formats : [avfoundation @
0x7fd3a900ea00] uyvy422 [avfoundation @ 0x7fd3a900ea00] yuyv422
[avfoundation @ 0x7fd3a900ea00] nv12 [avfoundation @ 0x7fd3a900ea00]
0rgb [avfoundation @ 0x7fd3a900ea00] bgr0 [avfoundation @
0x7fd3a900ea00] Overriding selected pixel format to use uyvy422
instead. /Users/macbook/Pictures/relteco/ffmpeg.sh : line 3 : 10253
Abort trap : 6 ffmpeg -f avfoundation -i 1:0 -vcodec libx264
-preset ultrafast -pix_fmt yuv422p -s 1280x800 -r 30 -b:v 1500k -bufsize 1500k -maxrate 7000k -c:a aac -b:a 128k -ac 2 -ar 44100 -f flv rtmp ://192.168.0.109/live


at ChildProcess.exithandler (child_process.js:312)
at ChildProcess.emit (events.js:310)
at maybeClose (internal/child_process.js:1021)
at Socket.<anonymous> (internal/child_process.js:443)
at Socket.emit (events.js:310)
at Pipe.<anonymous> (net.js:672)
</anonymous></anonymous>




when command is running in terminal :




My tried javascript library's


- 

- Child_process

- 

- exec
- execfile
- spawn








- shelljs
- fluent-ffmpeg








last i wrote this ffmpeg command on .sh file and saved and i tried run ffmpeg.sh file with this librarys but they all gave the same error.


My idea :
yuv420p caught my attention and i searched it but i learned yuv420p is not error , this was a ffmpeg warning.That's why js see the warning as a error and it send response me stdout as stderr ?


Thanks..


-