install ffmpeg in docker file
Browse files- Dockerfile +4 -0
- doc/pushhg.md +2 -0
- src/services/audioConversionService.js +9 -2
Dockerfile
CHANGED
|
@@ -2,6 +2,10 @@ FROM node:20-slim
|
|
| 2 |
|
| 3 |
WORKDIR /app
|
| 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
COPY package.json package-lock.json ./
|
| 6 |
RUN npm ci --omit=dev
|
| 7 |
|
|
|
|
| 2 |
|
| 3 |
WORKDIR /app
|
| 4 |
|
| 5 |
+
RUN apt-get update \
|
| 6 |
+
&& apt-get install -y --no-install-recommends ffmpeg \
|
| 7 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 8 |
+
|
| 9 |
COPY package.json package-lock.json ./
|
| 10 |
RUN npm ci --omit=dev
|
| 11 |
|
doc/pushhg.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#facepush
|
| 2 |
+
git push -u origin main --force-with-lease
|
src/services/audioConversionService.js
CHANGED
|
@@ -22,7 +22,9 @@ function runFfmpeg(inputPath, outputPath, outputArgs) {
|
|
| 22 |
stderr += chunk.toString();
|
| 23 |
});
|
| 24 |
|
| 25 |
-
child.on("error",
|
|
|
|
|
|
|
| 26 |
child.on("close", (code) => {
|
| 27 |
if (code === 0) {
|
| 28 |
resolve();
|
|
@@ -91,15 +93,20 @@ export function createAudioConversionService({ fetchImpl = fetch, maxAudioDownlo
|
|
| 91 |
const outputPath = path.join(tempDir, "output.mp3");
|
| 92 |
|
| 93 |
try {
|
| 94 |
-
console.log(`
|
| 95 |
await fs.writeFile(inputPath, audioBuffer);
|
| 96 |
await runFfmpeg(inputPath, outputPath, ffmpegOutputArgs());
|
| 97 |
const convertedBuffer = await fs.readFile(outputPath);
|
|
|
|
| 98 |
|
| 99 |
return {
|
| 100 |
data: convertedBuffer.toString("base64"),
|
| 101 |
format: "mp3"
|
| 102 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
} finally {
|
| 104 |
await fs.rm(tempDir, { force: true, recursive: true });
|
| 105 |
}
|
|
|
|
| 22 |
stderr += chunk.toString();
|
| 23 |
});
|
| 24 |
|
| 25 |
+
child.on("error", (error) => {
|
| 26 |
+
reject(new HttpError(400, "Failed to convert audio to mp3.", error.message));
|
| 27 |
+
});
|
| 28 |
child.on("close", (code) => {
|
| 29 |
if (code === 0) {
|
| 30 |
resolve();
|
|
|
|
| 93 |
const outputPath = path.join(tempDir, "output.mp3");
|
| 94 |
|
| 95 |
try {
|
| 96 |
+
console.log(`audio conversion started: format=${normalizedInputFormat}, target=mp3`);
|
| 97 |
await fs.writeFile(inputPath, audioBuffer);
|
| 98 |
await runFfmpeg(inputPath, outputPath, ffmpegOutputArgs());
|
| 99 |
const convertedBuffer = await fs.readFile(outputPath);
|
| 100 |
+
console.log(`audio conversion successful: format=${normalizedInputFormat}->mp3`);
|
| 101 |
|
| 102 |
return {
|
| 103 |
data: convertedBuffer.toString("base64"),
|
| 104 |
format: "mp3"
|
| 105 |
};
|
| 106 |
+
} catch (error) {
|
| 107 |
+
const detail = error instanceof Error ? error.message : String(error);
|
| 108 |
+
console.error(`audio conversion failed: format=${normalizedInputFormat}, target=mp3, error=${detail}`);
|
| 109 |
+
throw error;
|
| 110 |
} finally {
|
| 111 |
await fs.rm(tempDir, { force: true, recursive: true });
|
| 112 |
}
|