123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /* eslint-disable @typescript-eslint/no-var-requires */
- // generate mock videos metadata for all the files in scripts/videos directory
- const path = require('path')
- const fs = require('fs')
- const { promisify } = require('util')
- const ffmpeg = require('fluent-ffmpeg')
- const faker = require('faker')
- const { saveToFile } = require('./utils')
- const readdir = promisify(fs.readdir)
- const ffprobe = promisify(ffmpeg.ffprobe)
- const HOSTED_ASSET_PREFIX = 'https://eu-central-1.linodeobjects.com/atlas-assets/videos/'
- const VIDEOS_DIR = 'videos'
- const OUTPUT_FILENAME = 'videosMedia.json'
- const videosPath = path.join(__dirname, VIDEOS_DIR)
- const CODEC_MAP = {
- h264: 'H264_mpeg4',
- vp8: 'VP8_WEBM',
- }
- const getVideoInfo = async (videoName) => {
- const videoPath = path.join(videosPath, videoName)
- const metadata = await ffprobe(videoPath)
- const stream = metadata.streams.find((s) => s.codec_type === 'video')
- return {
- id: faker.random.uuid(),
- codec: CODEC_MAP[stream.codec_name],
- pixelWidth: stream.width,
- pixelHeight: stream.height,
- duration: Math.floor(metadata.format.duration),
- size: metadata.format.size,
- location: {
- URL: HOSTED_ASSET_PREFIX + videoName,
- },
- }
- }
- const main = async () => {
- const videos = await readdir(videosPath)
- const promises = videos.map(getVideoInfo)
- const infos = await Promise.all(promises)
- await saveToFile(infos, OUTPUT_FILENAME)
- }
- main()
|