@ooit/media-tools
Version:
Various media tools: smart archive and more.
95 lines • 3.86 kB
JavaScript
;
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