Node.js使用ffmpeg查找WAV音频文件

时间:2019-04-26 15:22:11

标签: node.js ffmpeg audio-streaming waveform ffprobe

我正在使用public class RootObject { public string amount { get; set; } public string resptext { get; set; } public string cvvresp { get; set; } public string respcode { get; set; } public string avsresp { get; set; } public string merchid { get; set; } public string token { get; set; } public string authcode { get; set; } public string respproc { get; set; } public string emvTagData { get; set; } public string retref { get; set; } public string respstat { get; set; } public string account { get; set; } } 来查找mp3文件上的位置,并且工作正常。这是我在ffprobe node.js包装器中所做的事情:

ffprobe

因此,您可以在几秒钟内寻找到指定的seek = function (fpath, seconds) { var self = this; return new Promise((resolve, reject) => { //ffprobe -i /myfile.mp3 -show_frames -show_entries frame=pkt_pos -of default=noprint_wrappers=1:nokey=1 -hide_banner -loglevel panic -read_intervals 20%+#1 var loglevel = self.logger.isDebug() ? 'debug' : 'panic'; const args = [ '-hide_banner', '-loglevel', loglevel, '-show_frames',//Display information about each frame '-show_entries', 'frame=pkt_pos',// Display only information about byte position '-of', 'default=noprint_wrappers=1:nokey=1',//Don't want to print the key and the section header and footer '-read_intervals', seconds + '%+#1', //Read only 1 packet after seeking to position 01:23 '-print_format', 'json', '-v', 'quiet', '-i', fpath ]; const opts = { cwd: self._options.tempDir }; const cb = (error, stdout) => { if (error) return reject(error); try { const outputObj = JSON.parse(stdout); return resolve(outputObj); } catch (ex) { self.logger.error("seek failed %s", ex); return reject(ex); } }; cp.execFile('ffprobe', args, opts, cb) .on('error', reject); }); }//seek 位置

startTime

然后看seek(path,startTime) 中第一帧的数据包,您将得到等价的字节,如:

frames

因此,当在position = function() { if(this.raw.frames) { if(this.raw.frames.length>0) {// get first stream ref if(this.raw.frames[0].pkt_pos) {// get first stream ref return this.raw.frames[0].pkt_pos; } } } return ''; }//position 文件上进行查找时,它工作正常,范围查询为

mp3

问题是,当我在rangeBytes bytes=80685-8000685 { "url": "", "path": "", "raw": { "frames": [ { "pkt_pos": "80685" } ] } } { "url": "", "path": "", "raw": { "frames": [ { "pkt_pos": "8000685" } ] } } 文件上使用它时,对wave文件进行范围查询:

wave

在标准HTML5音频播放器中无法使用。

注意 我与上面的包装程序一起使用的rangeBytes bytes=768058-76800058 { "url": "", "path": "", "raw": { "frames": [ { "pkt_pos": "768058" } ] } } { "url": "", "path": "", "raw": { "frames": [ { "pkt_pos": "76800058" } ] } } 命令行命令是:

ffprobe

我的猜测是,这是否适用于ffprobe -i /myfile.mp3 -show_frames -show_entries frame=pkt_pos -of default=noprint_wrappers=1:nokey=1 -hide_banner -loglevel panic -read_intervals 20%+#1 mp3文件。

0 个答案:

没有答案