UNPKG

@ooit/media-tools

Version:

Various media tools: smart archive and more.

95 lines 3.86 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addFfmpegData = exports.addExifParserData = exports.info = void 0; const fluent_ffmpeg_1 = __importDefault(require("fluent-ffmpeg")); const exifParser = require('exif-parser'); const fs = require('fs'); const moment = require('moment'); function getInfo(filePath) { return __awaiter(this, void 0, void 0, function* () { const fileInfo = []; try { const s = fs.statSync(filePath); fileInfo.push({ name: 'ctime', value: _toDate(s.ctime) }); fileInfo.push({ name: 'atime', value: _toDate(s.atime) }); fileInfo.push({ name: 'mtime', value: _toDate(s.mtime) }); fileInfo.push({ name: 'birthtime', value: _toDate(s.birthtime) }); addExifParserData(filePath, fileInfo); yield addFfmpegData(filePath, fileInfo); return fileInfo; } catch (e) { fileInfo.push({ name: 'exception', value: e.message }); } return fileInfo; }); } function info(filePath) { return __awaiter(this, void 0, void 0, function* () { if (!fs.existsSync(filePath)) { console.log(`File '${filePath}' does not exist!`); return; } const fileInfo = yield getInfo(filePath); console.log('File Info:', JSON.stringify(fileInfo, null, ' ')); }); } exports.info = info; function _toDate(value) { if (value) { return moment(value.getTime()).format('YYYY-MM-DD HH:mm:ss'); } return ''; } function addExifParserData(file, data) { try { const buff = fs.readFileSync(file); const parser = exifParser.create(buff); const result = parser.parse(); const keys = Object.keys(result.tags); keys.forEach((k) => { data.push({ name: 'exif.tag.' + k, value: (result.tags[k] || '').toString() }); }); //data.push({ name: 'exif.tag.DateTimeOriginal', value: (result.tags.DateTimeOriginal || '').toString() }); if (result.tags.DateTimeOriginal) { data.push({ name: 'exif.tag.DateTimeOriginal.date', value: _toDate(new Date(+result.tags.DateTimeOriginal * 1000)) }); } } catch (e) { } } exports.addExifParserData = addExifParserData; function addFfmpegData(file, data) { return new Promise((resolve) => { fluent_ffmpeg_1.default.ffprobe(file, function (err, metadata) { if (!err) { try { const keys = Object.keys(metadata.format.tags); keys.forEach((k) => { data.push({ name: 'metadata.format.tag.' + k, value: (metadata.format.tags[k] || '').toString() }); }); resolve(); } catch (e) { resolve(); } } }); }); } exports.addFfmpegData = addFfmpegData; //# sourceMappingURL=info.js.map