视频到音频文件通过节点 js 中的 FFMPEG 转换和保存

Posted

技术标签:

【中文标题】视频到音频文件通过节点 js 中的 FFMPEG 转换和保存【英文标题】:video to audio file convert & save through FFMPEG in node js 【发布时间】:2015-08-30 18:43:39 【问题描述】:

我正在节点 js 上开发 FFMPEG。我想使用节点 js 从视频文件中检索音轨。我也想保存这样的文件,但我不知道如何。

虽然这行代码对我有帮助:

ffmpeg('/path/to/file.avi').noVideo();

我在 npm 包中得到了这个。我不太明白如何使用它以及如何实际保存音频文件。

其他一些代码行:

try 
    var process = new ffmpeg('/path/to/your_movie.avi');
    process.then(function (video) 
        // Callback mode
        video.fnExtractSoundToMP3('/path/to/your_audio_file.mp3', function (error, file) 
            if (!error)
                console.log('Audio file: ' + file);
        );
    , function (err) 
        console.log('Error: ' + err);
    );
 catch (e) 
    console.log(e.code);
    console.log(e.msg);

我的问题是:

如何从 FFMPEG 视频中检索音频?如何保存?

【问题讨论】:

你想要demux 视频.. 这将音频、字幕和视频相互分离.. 使用 ffmpeg 命令将是:ffmpeg -i file.avi -acodec copy -vn file.ac3 -> 假设 AC3 是当然的音频编解码器! ~ 但是我想用 node js 来做这个 这个问题值得一票 【参考方案1】:

我会这样做:

var ffmpeg = require('fluent-ffmpeg');
/**
 *    input - string, path of input file
 *    output - string, path of output file
 *    callback - function, node-style callback fn (error, result)        
 */
function convert(input, output, callback) 
    ffmpeg(input)
        .output(output)
        .on('end', function()                     
            console.log('conversion ended');
            callback(null);
        ).on('error', function(err)
            console.log('error: ', e.code, e.msg);
            callback(err);
        ).run();


convert('./df.mp4', './output.mp3', function(err)
   if(!err) 
       console.log('conversion complete');
       //...

   
);

只要确保ffmpeg 已安装并且是系统路径的一部分,还要确保所有必要的代码都存在。

更新:

对于没有音频的视频,只需 .noAudio().videoCodec('copy'):

function copyWitoutAudio(input, output, callback) 
    ffmpeg(input)
        .output(output)
        .noAudio().videoCodec('copy')
        .on('end', function()                     
            console.log('conversion ended');
            callback(null);
        ).on('error', function(err)
            console.log('error: ', err);
            callback(err);
        ).run();


更新 2:

用于将视频和音频合并为单个:

function mergeMedia(aud, vid, output, callback) 
    ffmpeg()
        .input(aud)
        .input(vid)
        .output(output)
        .outputOptions(
          '-strict', '-2',
          '-map', '0:0',
          '-map', '1:0'
        ).on('end', function()                     
            console.log('conversion ended');
            callback(null);
        ).on('error', function(err)
            console.log('error: ', err);
            callback(err);
        ).run();

【讨论】:

谢谢它的工作。这可以创建音频 mp3 文件。但是如何创建没有音频的视频并将其保存为 file.mp4 ?你能帮帮我吗? 谢谢...你真是太棒了。谢谢你的帮助。我想在脸书上见到你。可以给我facebook id吗?谢谢 你能帮我添加一个没有声音的视频的mp3音频吗?我想在节点 js 中制作这个 ffmpeg。 我已经做到了。但是我遇到了一些问题。如果我的音频比视频长,我该如何删除多余的音频? 尝试将'-shortest' 添加到 outputOptions

以上是关于视频到音频文件通过节点 js 中的 FFMPEG 转换和保存的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 合并音频和视频流并将其通过管道传输到客户端

ffmpeg_拼接并提取flv视频文件中的音频生成mp3文件

第十章 视频播放器开发之音频播放

将 webm 视频中的音频提取到 m4a 音频文件中

FFmpeg 命令行工具ffmpeg

怎么通过ffmpeg将音频文件转换成Mp3 转