diff options
author | Florrie <towerofnix@gmail.com> | 2019-02-25 11:27:11 -0400 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2019-02-25 11:27:11 -0400 |
commit | 75251bb2309505c20dc7500117a17649d41412d8 (patch) | |
tree | 97c646cb2ccb224a456147aaec8c4a5854990bb5 /metadata-readers.js | |
parent | 4eee44f7d92dcdf2c8bccea78723ba0b194eb2d7 (diff) |
Metadata (in memory)
Diffstat (limited to 'metadata-readers.js')
-rw-r--r-- | metadata-readers.js | 46 |
1 files changed, 46 insertions, 0 deletions
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 |