Skip to content

Commit 50f6ea0

Browse files
authored
fix: gracefully shutdown FFmpeg on signals (#112)
1 parent cd98e37 commit 50f6ea0

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

Diff for: src/index.ts

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { execSync } from 'node:child_process'
1+
import { spawn } from 'node:child_process'
22

33
import * as puppeteer from 'puppeteer-core'
44

@@ -87,11 +87,27 @@ async function main() {
8787
' ',
8888
)
8989

90-
execSync(ffmpegCmd)
90+
const ffmpeg = spawn(ffmpegCmd, { shell: true })
9191

92-
await browser.close()
92+
const forwardSignal = (signal: NodeJS.Signals | number) => {
93+
ffmpeg.kill(signal)
94+
}
9395

94-
await exporter.finalizeExport()
96+
process.on('SIGINT', forwardSignal)
97+
process.on('SIGTERM', forwardSignal)
98+
99+
await new Promise((resolve, reject) => {
100+
ffmpeg.on('exit', async (code) => {
101+
await browser.close()
102+
await exporter.finalizeExport()
103+
104+
if (code === 0 || code === null) {
105+
resolve(null)
106+
} else {
107+
reject(new Error(`FFmpeg exited with code ${code}`))
108+
}
109+
})
110+
})
95111
}
96112

97113
main().catch((err) => {

0 commit comments

Comments
 (0)