-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.js
More file actions
113 lines (96 loc) · 3.32 KB
/
index.js
File metadata and controls
113 lines (96 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const express = require("express");
const fs = require("fs");
const path = require("path");
const multer = require("multer");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
// To laod environment variables
const dotenv = require("dotenv");
dotenv.config({ path: ".env" });
const Video = require("./models/video");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const uri = process.env.URI;
mongoose
.connect(uri)
.then(() => console.log("Connected"))
.catch((error) => console.log("error"));
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, path.join(__dirname, "uploads"));
},
filename: function (req, file, cb) {
cb(null, file.originalname);
},
});
const upload = multer({ storage: storage }).single("video");
const { exec } = require("node:child_process");
const { log } = require("console");
app.get("/", (req, res) => {
res.send("MPD generator");
});
app.get("/getVideos", async (req, res) => {
const videoList = await Video.find();
if (!videoList) {
res.status(500).json({
success: false,
});
}
res.send(videoList);
});
app.post("/upload", (req, res) => {
upload(req, res, async (err) => {
console.log(req.body);
const vidRecordObj = {
title: req.body.title,
description: req.body.description,
};
const video = new Video(vidRecordObj);
var fileid;
fileid = (await video.save())._id.toString();
console.log(fileid);
const file = req.file.filename;
if (err) {
console.log("Error while uploading");
}
let filename = file.split(".")[0];
const folderName = `segments/${fileid}`;
try {
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName);
}
} catch (err) {
console.error(err);
}
filename = filename.split(".")[0];
let aspectsetting = `ffmpeg -y -i ./uploads/${filename}.mp4 -aspect 16:9 -c copy ./uploads/processed/${filename}.mp4`;
let thumbnailcmd = `ffmpeg -i ./uploads/${filename}.mp4 -vframes 1 ./segments/thumbnails/${fileid}.jpg`;
let cmd = `ffmpeg -re -i ./uploads/processed/${filename}.mp4 -map 0 -map 0 -map 0 -c:a aac -c:v libx264 -b:v:1 20000k -b:v:2 20000k -b:v:2 20000k -s:v:0 1920x1080 -s:v:1 1280x720 -s:v:2 720x480 -profile:v:1 baseline -profile:v:2 baseline -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash ./segments/${fileid}/${fileid}_out.mpd`;
exec(aspectsetting, (err, output) => {
if (err) {
console.error("could not execute command: ", err);
return;
}
exec(cmd, (err, output) => {
if (err) {
console.error("could not execute command: ", err);
return;
}
console.log("Mpd file has been generated");
exec(thumbnailcmd, (err, output) => {
if (err) {
console.error("could not execute command: ", err);
return;
}
console.log("Thumbnail has been created");
fs.unlinkSync(`uploads/${filename}.mp4`);
res.status(200).send("Video has processed");
});
});
});
});
});
app.listen(4000, () => {
console.log(`Listening on http://localhost:4000`);
});