prism-media
prism-media copied to clipboard
How to debug the ffmpeg execution?
Issue:
I am trying to implement the converter into wav. It works pretty fine for mp3/ogg files. But then I wanted to use the same implementation for mp4 file (ie cut the video, convert it into wav) But the output is always empty.
How do I debug the execution and understand what goes wrong?
Steps to reproduce:
To simplify the process, I first tried the convertation with ffmpeg cli:
./node_modules/ffmpeg-static/ffmpeg -i ~/Downloads/file_97.mp4 -vn -ac 1 -ar 16000 test.wav
it works good ^^
Then in the code, I do almost the same, but do a GET request to download the file rather than read the file from the file system. the result is empty...
import { FFmpeg } from "prism-media";
const getMpegDecoder = (): FFmpeg =>
new FFmpeg({
args: [
"-analyzeduration",
"0",
"-loglevel",
"0",
"-vn",
"-ar",
"16000",
"-ac",
"1",
],
});
const getWavBuffer = (fileLink: string): Promise<Buffer> => { // buffer is empty
logger.info("Converting into wav 💿");
return new Promise<Buffer>((resolve, reject) => {
runGet(fileLink, (response) => {
const wavBuffer: Buffer[] = [];
const wavStream = response.pipe(getMpegDecoder());
wavStream.on("data", (bufferPart) => wavBuffer.push(bufferPart));
wavStream.on("error", (err) => reject(err));
wavStream.on("end", () => resolve(Buffer.concat(wavBuffer)));
}).on("error", (err) => reject(err));
});
};
conversion maybe goes well by specifying '-f' and '-acodec'
exclude 'loglevel' from your args, write as following then you can see ffmpeg logs
const ffmpeg = new FFmpeg({/* options */});
ffmpeg.process.stderr.on("data", chunk => console.debug(chunk.toString()));