Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"npm run render" leads to "Error: Error: ffmpeg exited with code 1:" #182

Open
ullenboom opened this issue Jul 4, 2024 · 9 comments
Open

Comments

@ullenboom
Copy link

Next one :)

>npm run render

> my-revideo-project@0.0.0 render
> tsc && node dist/render.js

Rendering video...
Render progress, worker 0: 7%
Render progress, worker 0: 48%
Render progress, worker 0: 100%
Render progress, worker 0: 100%
Render progress, worker 0: 100%
Render progress, worker 0: 100%
Error: Error: ffmpeg exited with code 1:
    at ChildProcess.<anonymous> (C:\Users\christian\Dropbox\Eigene_Dokumente\maven\revideo\node_modules\fluent-ffmpeg\lib\processor.js:180:22)
    at ChildProcess.emit (node:events:519:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)
node:internal/process/promises:391
    triggerUncaughtException(err, true /* fromPromise */);
    ^

Error: ffmpeg exited with code 1:
    at ChildProcess.<anonymous> (C:\Users\christian\Dropbox\Eigene_Dokumente\maven\revideo\node_modules\fluent-ffmpeg\lib\processor.js:180:22)
    at ChildProcess.emit (node:events:519:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)

Node.js v20.15.0

I get an incomplete video-0.mp4 with audio in my output folder.

image

@justusmattern27
Copy link
Member

@ullenboom the error log is not very informative unfortunately. I would guess that this is something about your input file (video or audio file) or your ffmpeg installation (more likely). I think you are also one of our first users running revideo on windows, so I would think it has to do with system dependencies around ffmpeg :D

By default, revideo comes with an ffmpeg binary. Maybe you could try using your own installation. First, check that you have ffmpeg & ffprobe installed (run ffmpeg -v and ffprobe -v). If so, set the following environment variables:

FFMPEG_PATH=ffmpeg
FFPROBE_PATH=ffprobe

If you don't have ffmpeg and ffprobe installed, try doing that first and then set the environment variables

@ullenboom
Copy link
Author

Both tools are installed and in the PATH. Current versions. I found another problem, that ffmpeg-static\ffmpeg.exe was not installed. This seems to be a bug: eugeneware/ffmpeg-static#131. But solvable:

npm install --save @ffmpeg-installer/ffmpeg
npm install --save @ffprobe-installer/ffprobe

Now the EXE is at the right place. But the error is the same.

Setting *_PATH doesn't make any difference. Therefore, the issue lies with fluent-ffmpeg, not revideo.

@plylrnsdy
Copy link

plylrnsdy commented Jul 23, 2024

I have a similar issue with the project created by npm init @revideo@latest:

Executing task in folder revideo: npm run render 


> revideo@0.0.0 render
> tsc && node dist/render.js

Rendering video...
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Worker 0: JSHandle:Calling fullSource for logo.png
Worker 0: JSHandle:Setting assetRoot
Worker 0: JSHandle:/
Render progress, worker 0: 2% 
Render progress, worker 0: 18% 
Render progress, worker 0: 35% 
Render progress, worker 0: 51% 
Render progress, worker 0: 64% 
Render progress, worker 0: 78% 
Render progress, worker 0: 99% 
Error creating silent audio file: Error: ffmpeg exited with code 1: Invalid duration specification for t: N/A

    at ChildProcess.<anonymous> (xxx\my-revideo-project\revideo\node_modules\.pnpm\fluent-ffmpeg@2.1.3\node_modules\fluent-ffmpeg\lib\processor.js:180:22)
    at ChildProcess.emit (node:events:518:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)
node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: ffmpeg exited with code 1: Invalid duration specification for t: N/A

    at ChildProcess.<anonymous> (xxx\my-revideo-project\revideo\node_modules\.pnpm\fluent-ffmpeg@2.1.3\node_modules\fluent-ffmpeg\lib\processor.js:180:22)
    at ChildProcess.emit (node:events:518:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)

Node.js v20.11.0

Environment:

  • OS: Windows 10
  • Package Manager: pnpm 7.29.3

package.json

{
	"name": "revideo",
	"private": true,
	"version": "0.0.0",
	"scripts": {
		"start": "vite",
		"serve": "vite",
		"build": "tsc && vite build",
		"render": "tsc && node dist/render.js"
	},
	"dependencies": {
		"@revideo/core": "0.4.8",
		"@revideo/2d": "0.4.8",
		"@revideo/renderer": "0.4.8",
		"@revideo/vite-plugin": "0.4.8",
		"@revideo/ffmpeg": "0.4.8"
	},
	"devDependencies": {
		"@revideo/ui": "0.4.8",
		"@revideo/cli": "0.4.8",
		"typescript": "^5.2.2",
		"vite": "^4.5"
	}
}

@MiniSuperDev
Copy link

Hi, I have the same error.
I only try tu run the youtube-shorts example.

I can see it work it in the preview mode with npm run start

But when I sue npm run render or trigger the render in the UI

I get this error

PS C:\revideo\examples\youtube-shorts> npm run render

> revideo@0.0.0 render
> tsc && node dist/render.js

Worker 0: JSHandle:finished downloading
Render progress, worker 0: 1% 
Render progress, worker 0: ...%
Render progress, worker 0: 100% 
Error: Error: ffmpeg exited with code 1: Output #0, mp4, to 'output\video-visuals.mp4':
Output file #0 does not contain any stream

    at ChildProcess.<anonymous> (C:\revideo\examples\youtube-shorts\node_modules\fluent-ffmpeg\lib\processor.js:182:22)
    at ChildProcess.emit (node:events:519:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)
node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: ffmpeg exited with code 1: Output #0, mp4, to 'output\video-visuals.mp4':
Output file #0 does not contain any stream

    at ChildProcess.<anonymous> (C:\revideo\examples\youtube-shorts\node_modules\fluent-ffmpeg\lib\processor.js:182:22)
    at ChildProcess.emit (node:events:519:28)
    at ChildProcess._handle.onexit (node:internal/child_process:294:12)

Node.js v20.13.1

Then I use my own installation of ffmpep and also don't work

PS C:\revideo\examples\youtube-shorts> npm run render

> revideo@0.0.0 render
> tsc && node dist/render.js
Worker 0: JSHandle:finished downloading
Error processing audio for asset key: example/Audio2[1] Error: spawn C:/ffmpeg/bin ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn C:/ffmpeg/bin',
  path: 'C:/ffmpeg/bin',
  spawnargs: [ '-formats' ]
}
error in request handler Error: spawn C:/ffmpeg/bin ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn C:/tools/ffmpeg-master-latest-win64-gpl/bin',
  path: 'C:/tools/ffmpeg-master-latest-win64-gpl/bin',
  spawnargs: [ '-formats' ]
}
Render progress, worker 0: 3% 
Render progress, worker ...%
Render progress, worker 0: 100% 
Error creating silent audio file: Error: sp/ffmpeg/bin ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn C:/ffmpeg/bin',
  path: 'C:/ffmpeg/bin',
  spawnargs: [ '-formats' ]
}
node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: spawn C:/ffmpeg/bin ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'spawn C:/ffmpeg/bin',
  path: 'C:/ffmpeg/bin',
  spawnargs: [ '-formats' ]
}

Node.js v20.13.1

Thanks

@AmitDJagtap
Copy link

AmitDJagtap commented Sep 24, 2024

Yeep still getting error on Windows. Here's my render.mjs

import { renderVideo } from '@revideo/renderer';

process.env.FFMPEG_PATH = 'ffmpeg';
process.env.FFPROBE_PATH = 'ffprobe';

function logProgressToConsole(id, progress) {
    console.log(`[${id}] Progress: ${(progress * 100).toFixed(1)}%`);
}

renderVideo({
    projectFile: './src/project.ts',
    variables: { color: 'white' },
    settings: {
        outFile: 'video.mp4',
        workers: 1,
        range: [1, 3],
        dimensions: [1080, 1792],
        logProgress: true,
        ffmpeg: {
            ffmpegLogLevel: 'error',
            ffmpegPath: 'ffmpeg',
        },
        puppeteer: {
            args: ['--no-sandbox'],
        },
        progressCallback: logProgressToConsole
    }
});

@Auties00
Copy link

Same error, any fixes?

@AidanWelch
Copy link

Still getting the same issue on Windows. From what I can gather the issue isn't with ffmpeg but is instead with the rendered visuals- because the visuals.mp4 in my temp folder before concatenation is unreadable.

@AidanWelch
Copy link

Okay I figured it out, mp4-wasm which is used by WasmExporter is broken on Windows mattdesl/mp4-wasm#6

@AidanWelch
Copy link

AidanWelch commented Jan 13, 2025

You can get around it by using the ffmpeg exporter though it seems relatively slow for me:

// project.tsx

export default makeProject({
  scenes: [scene],
  settings: {
    shared: {
      size: {x: 1920, y: 2400},
    },
    rendering: {
      exporter: {
        name: '@revideo/core/ffmpeg',
        options: {
          format: 'mp4'
        }
      }
    }
  },
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants