diff options
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 |