Monday, 9 September 2019

How Azure functions can convert mp4 to mp3 with node using ffmpeg?


Pre-requisite
  1. You have created a function with with name "convert-audio"
  2. You have downloaded and uploaded ffmpeg files (ffmpeg.exe) in "site -> wwwroot-> bin"
  3. You have created a folder with name wav_to_mp3 "site -> wwwroot-> wav_to_mp3"


Source Code
//Download the Required module
const http = require('https');
const fs = require('fs');
const childProcess = require('child_process');
//Define constants
const VIDEO_PATH = 'wav_to_mp3/';
const ffmpegLib='bin/ffmpeg';

module.exports =  async function (context, req) {
    ////////////// params declaration
    let bodyData=req.body;
    let audioFile=bodyData.audio_file;
    let videoFile=bodyData.video_file;
    let extension=bodyData.extension;
    
    if (audioFile && videoFile && extension) {
        if(fs.existsSync(VIDEO_PATH+videoFile)){
            await ffmpegConvertVideoToAudio(VIDEO_PATH+videoFile,VIDEO_PATH+audioFile,extension).then(data=>{
                messageData(200,{success:1,'msg':'',result:{audio_file:data.filename}});
           });            
        }else{
            messageData(200,{success:0,msg:"video_file does not exist",'result':{}});
        }

                   
    } else {
        messageData(200,{success:0,msg:"Parameter missing (audio_file OR video_file OR extension)",'result':{}});
    }
    
    //for print the message
    function messageData(statusCode,message){
        context.res = {
            status: statusCode,
            body: message,
            headers: {
                'Content-Type': 'application/json'
            }
        };   
         context.done();
    } 
    
};



///////////////////////////// Other Functions ////////////////////////////////////
function ffmpegConvertVideoToAudio(sourcefile, destinationFile, extension) {
    return new Promise(function(resolve, reject) {
        let result={success:0,'msg':'',filename:destinationFile};
        console.log('ffmpegConvertVideoToAudio called '+destinationFile);
          var args = [
              '-i', sourcefile,
              '-f', extension, destinationFile
          ];
          var proc = childProcess.spawnSync(ffmpegLib, args);   
            result.success=1
            resolve(result);   
    });

}    
///////////////////////////// Other Functions ////////////////////////////////////


URL: https://function-name.azurewebsites.net/api/convert-audio
Method: POST
Request: {"video_file":"0_20190821064650782.mp4","audio_file":"arun.mp3","extension":"mp3"} Response:
{
    "success": 1,
    "msg": "",
    "result": {
        "audio_file": "wav_to_mp3/arun.mp3"
    }
}



URL:
https://function-name.azurewebsites.net/api/convert-audio
Method: POST
Request: {"video_file":"0_20190821064650782.mp4","audio_file":"arun.flac","extension":"flac"} Response:
{
    "success": 1,
    "msg": "",
    "result": {
        "audio_file": "wav_to_mp3/arun.flac"
    }
}