質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

0回答

1975閲覧

publicフォルダにあるffmpegをnode.jsで使用したい

NikuLove

総合スコア0

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

0クリップ

投稿2022/01/03 01:29

前提・実現したいこと

Next.jsのAPI Routesでffmpegを使用しています。
現在ローカルマシンに保存してあるffmpeg.exeまでのパスを下記のようにprocess.env.PATHに設定すれば、ffmpegが使えます。

typescript

1const path = "C:/User/.../ffmpeg.exeがあるフォルダ"; 2process.env.PATH = path; 3 4execSync(`ffmpeg -i input.mp4 -c copy public/output.mp4`);

プロジェクトのルートにあるpublicフォルダにffmpegを格納し、パスをpublicフォルダに設定して、ローカルマシンに保存してあるffmepgを使わずに、ffmpegを実行できるようにしたいです。
現状、パスにpublicフォルダに設定しても次項のエラーがターミナルに表示されます。

発生している問題・エラーメッセージ

process.env.PATHに"/public"を設定した場合

'ffmpeg' �́A�Ք�R�}���h�܂��͊O���R�}���h�A ����\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B Error: Command failed: ffmpeg -i input.mp4 -c copy public/output.mp4 'ffmpeg' �́A�����R�}���h�܂��͊O���R�}���h�A ����\�ȃv���O�����܂��̓o�b�` �t�@�C���Ƃ��ĔF������Ă��܂���B at checkExecSyncError (child_process.js:790:11) at execSync (child_process.js:863:15) at downloadVideo (webpack-internal:///./pages/api/convert-video.ts:23:81) at Object.apiResolver (C:\Users\user\project\node_modules\next\dist\server\api-utils.js:102:15) at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async DevServer.handleApiRequest (C:\Users\user\project\node_modules\next\dist\server\next-server.js:1064:9) at async Object.fn (C:\Users\user\project\node_modules\next\dist\server\next-server.js:951:37) at async Router.execute (C:\Users\user\project\node_modules\next\dist\server\router.js:222:32) at async DevServer.run (C:\Users\user\project\node_modules\next\dist\server\next-server.js:1135:29) { status: 1, signal: null, output: [ null, <Buffer >, <Buffer 27 66 66 6d 70 65 67 27 20 82 cd 81 41 93 e0 95 94 83 52 83 7d 83 93 83 68 82 dc 82 bd 82 cd 8a 4f 95 94 83 52 83 7d 83 93 83 68 81 41 0d 0a 91 80 8d ... 66 more bytes> ], pid: 159304, stdout: <Buffer >, stderr: <Buffer 27 66 66 6d 70 65 67 27 20 82 cd 81 41 93 e0 95 94 83 52 83 7d 83 93 83 68 82 dc 82 bd 82 cd 8a 4f 95 94 83 52 83 7d 83 93 83 68 81 41 0d 0a 91 80 8d ... 66 more bytes> }

該当のソースコード

typescript

1import type { NextApiRequest, NextApiResponse } from "next"; 2import { downloadVideoRes } from "lib/types"; 3import { execSync } from "child_process"; 4 5const path = "/public"; 6 7const convertVideo = async ( 8 req: NextApiRequest, 9 res: NextApiResponse<downloadVideoRes> 10) => { 11 try { 12 process.env.PATH = path; 13 execSync(`ffmpeg -i input.mp4 -c copy public/output.mp4`); 14 res.status(200).end(); 15 } catch (e: any) { 16 console.log(e); 17 res.status(500).send({ err: e }); 18 } 19}; 20 21export default convertVideo;

ディレクトリ

. ├── pages │ └── api │ └── convert-video.ts └── public ├── ffmpeg └── ffmpeg.exe

publicフォルダのffmpegは、Next.jsのAPI RoutesがAWSのLambdaで実行されるという情報を目にしたことがあったので、↓のページを参考にしてダウンロードしたffmpegです。
AWS Lambda(Node.js) + ffmpeg でエンコード

ffmpegLinux Static Buildsffmpeg-git-amd64-static.tar.xz に入っていたffmpegです。

ただし、ローカルマシンに保存してあるのはffmpeg.exeであり、これにパスを通すとAPI Routesでffmpegが実行できるので、現状publicのffmpegは意味を成していない可能性があります。

補足情報(FW/ツールのバージョンなど)

  • OS Windows10
  • Next.js 12.0.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/01/04 05:16 編集

普通は public には css や画像などの、直接ダウンロードされるものを置くのでは…。 あと、ffmpeg のような実行ファイルは、OS や CPU ごとにディレクトリやファイルの名前を分けたるのが一般的かも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問