From 75251bb2309505c20dc7500117a17649d41412d8 Mon Sep 17 00:00:00 2001 From: Florrie Date: Mon, 25 Feb 2019 11:27:11 -0400 Subject: Metadata (in memory) --- metadata-readers.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 metadata-readers.js (limited to 'metadata-readers.js') diff --git a/metadata-readers.js b/metadata-readers.js new file mode 100644 index 0000000..1e6eb1b --- /dev/null +++ b/metadata-readers.js @@ -0,0 +1,46 @@ +const { promisifyProcess } = require('./general-util') +const { spawn } = require('child_process') + +const metadataReaders = { + ffprobe: async filePath => { + const ffprobe = spawn('ffprobe', [ + '-print_format', 'json', + '-show_entries', 'stream=codec_name:format', + '-select_streams', 'a:0', + '-v', 'quiet', + filePath + ]) + + let probeDataString = '' + + ffprobe.stdout.on('data', data => { + probeDataString += data + }) + + await promisifyProcess(ffprobe, false) + + let data + + try { + data = JSON.parse(probeDataString) + } catch (error) { + return null + } + + if (typeof data !== 'object' || typeof data.format !== 'object') { + return null + } + + return { + duration: parseFloat(data.format.duration), + fileSize: parseInt(data.format.size), + bitrate: parseInt(data.format.bit_rate) + } + }, + + getMetadataReaderFor: arg => { + return metadataReaders.ffprobe + } +} + +module.exports = metadataReaders -- cgit 1.3.0-6-gf8a5