OS: Windows 10
I need help...
I'm using this script to download the video and audio fragments from the vimeo server.
''js
// 1. Open the browser developper console on the network tab
// 2. Start the video
// 3. In the dev tab, locate the load of the "master.json" file, copy its full URL
// 4. Run: node vimeo-downloader.js ""
// 5. Combine the m4v and m4a files with mkvmerge
const fs = require('fs');
const url = require('url');
const https = require('https');
let masterUrl = process.argv[2];
if (!masterUrl.endsWith('?base64_init=1')) {
masterUrl+= '?base64_init=1';
}
getJson(masterUrl, (err, json) => {
if (err) {
throw err;
}
const videoData = json.video.pop();
const audioData = json.audio.pop();
const videoBaseUrl = url.resolve(url.resolve(masterUrl, json.base_url), videoData.base_url);
const audioBaseUrl = url.resolve(url.resolve(masterUrl, json.base_url), audioData.base_url);
processFile('video', videoBaseUrl, videoData.init_segment, videoData.segments, json.clip_id + '.m4v', (err) => {
if (err) {
throw err;
}
processFile('audio', audioBaseUrl, audioData.init_segment, audioData.segments, json.clip_id + '.m4a', (err) => {
if (err) {
throw err;
}
});
});
});
function processFile(type, baseUrl, initData, segments, filename, cb) {
if (fs.existsSync(filename)) {
console.log(${type} already exists);
return cb();
}
const segmentsUrl = segments.map((seg) => baseUrl + seg.url);
const initBuffer = Buffer.from(initData, 'base64');
fs.writeFileSync(filename, initBuffer);
const output = fs.createWriteStream(filename, {flags: 'a'});
combineSegments(type, 0, segmentsUrl, output, (err) => {
if (err) {
return cb(err);
}
output.end();
cb();
});
}
function combineSegments(type, i, segmentsUrl, output, cb) {
if (i >= segmentsUrl.length) {
console.log(${type} done);
return cb();
}
console.log(Download ${type} segment ${i});
https.get(segmentsUrl[i], (res) => {
res.on('data', (d) => output.write(d));
res.on('end', () => combineSegments(type, i+1, segmentsUrl, output, cb));
}).on('error', (e) => {
cb(e);
});
}
function getJson(url, cb) {
let data = '';
https.get(url, (res) => {
res.on('data', (d) => data+= d);
res.on('end', () => cb(null, JSON.parse(data)));
}).on('error', (e) => {
cb(e);
});
}
As you can see the script creates the .m4v file for video and .m4a for audio separately.
I know ffmpeg can combine both files with a simple command line such as:
"ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv"
I would like to know how to make the script run the ffmpeg command automatically, ie after downloading the .m4v and .m4a files, the script would execute the ffmpeg command and combine the files into a single .mkv by deleting the source files.
Another question is how to make the script download several URLs with a single command, as if it were a waiting list.
by the way I tried to add the following command line to the script to activate the ffmpeg function, but it did not work.
''ffmpeg command line
const exec = require('child_process').exec;
const child = exec('ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv', (error, stdout, stderr) => {
if (error) {
console.error('stderr: =============================', stderr);
throw error;
}
console.log('stdout: ==========================', stdout);
});
console.log('here');
Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays! or rip iTunes movies!
+ Reply to Thread
Results 1 to 1 of 1
Thread
Similar Threads
-
ffmpeg commands list or tutorials
By natty in forum Newbie / General discussionsReplies: 3Last Post: 23rd Oct 2017, 03:59 -
Will give 100$ for FFMPEG output formats related list
By alexander121 in forum Video ConversionReplies: 19Last Post: 9th Oct 2017, 17:55 -
Node.js
By Versus in forum ComputerReplies: 1Last Post: 26th Apr 2017, 15:27 -
FFMpeg : List of working sample formats per format and encoder.
By alexander121 in forum AudioReplies: 0Last Post: 31st Jul 2015, 13:17 -
List of available ffmpeg encoders for each container format
By alexander121 in forum Video ConversionReplies: 4Last Post: 8th Jan 2015, 07:53