File size: 2,118 Bytes
d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 4713649 d5360e3 | 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 | const express = require("express");
const { spawn } = require("child_process");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const app = express();
const PORT = 7860;
// TEMP folder
const TMP = "/tmp";
// simple cleanup helper
const cleanup = (file) => {
try {
if (fs.existsSync(file)) fs.unlinkSync(file);
} catch {}
};
app.get("/", async (req, res) => {
const url = req.query.url;
if (!url) {
return res.json({
status: false,
message: "Use ?url=video_link"
});
}
const id = crypto.randomBytes(6).toString("hex");
const outputFile = path.join(TMP, `${id}.mp4`);
// 🔥 IMPORTANT: NO ENCODING (LOW CPU)
const ffmpegArgs = [
"-y",
"-user_agent", "Mozilla/5.0",
"-i", url,
"-c", "copy",
"-bsf:a", "aac_adtstoasc",
"-movflags", "+faststart",
outputFile
];
const ffmpeg = spawn("ffmpeg", ffmpegArgs);
let timeout = setTimeout(() => {
ffmpeg.kill("SIGKILL");
cleanup(outputFile);
}, 1000 * 60 * 8); // 8 min safety timeout
ffmpeg.stderr.on("data", () => {});
ffmpeg.on("close", (code) => {
clearTimeout(timeout);
if (code !== 0 || !fs.existsSync(outputFile)) {
cleanup(outputFile);
return res.json({
status: false,
error: "Download failed or blocked stream"
});
}
// pretend HF space file hosting
const fileUrl = `https://${req.headers.host}/file/${id}`;
return res.json({
status: true,
download: fileUrl
});
});
});
// serve temp files
app.get("/file/:id", (req, res) => {
const file = path.join(TMP, `${req.params.id}.mp4`);
if (!fs.existsSync(file)) {
return res.json({
status: false,
error: "File expired or not found"
});
}
res.download(file, "video.mp4", () => {
cleanup(file);
});
});
app.listen(PORT, () => {
console.log("Running on", PORT);
}); |