@fuzigiwa2 (義将 藤極)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ダウンロードしたffmpegバイナリを呼び出した際にPermission deniedがでて起動することができない。

Unityで開発しております。
OSX向けのアプリのStreamingAssetsフォルダにダウンロードしてきたffmpegバイナリを入れ、こちらを呼び出して圧縮を行おうとしました。
以下作成したコードになります。

private IEnumerator ffmpeg( string a_path )
{
 input = "\'"+a_path+"\'";https://qiita.com/drafts/new
 output = "\'"+UnityEngine.Application.persistentDataPath + "/work/"+"hoge.mp4"+"\'";

 string ffmpegExePath = Application.streamingAssetsPath + "/KirinUtil/ffmpeg_mac/ffmpeg";
 Process process = new Process();


 string option = "-i";
 option += " "+input;
 option += " -vf";
 option += " scale=480:270";
 option += " -an";
 option += " -preset veryfast";
 option += " -tune film";
 option += " -crf 23";
 option += " -threads 2";
 option += " "+output;

 string l_cmd = ffmpegExePath + option;

 process.StartInfo.FileName = "/bin/bash";
 process.StartInfo.Arguments = "-c \" " + l_cmd + " \"";
 process.StartInfo.CreateNoWindow = true;
 process.StartInfo.UseShellExecute = false;
 process.StartInfo.RedirectStandardError = true;
 process.StartInfo.RedirectStandardOutput = true;

 process.EnableRaisingEvents = true;
 process.ErrorDataReceived += new DataReceivedEventHandler(ProcessErrorDataReceived);
 process.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputDataReceived);
 process.Exited += new EventHandler(ProcessExited);

 process.Start();
 process.BeginOutputReadLine();
 process.BeginErrorReadLine();
}

こちら動かした際にPermission deniedが出て起動できませんでした。
こちら何かご存じでしょうか。

Homebrewでインストールしたffmpegは呼び出すことには成功しております。
配布することを考えておりますので、インストールさせることはしたくありません。

よろしくお願いします。

0 likes

1Answer

Permission denied は権限がない場合に出るエラーです。

Unityエミュレーターが、ログインユーザーとは別のユーザーで動いていて、そのユーザーには ffmpeg を実行する権限がないのではないでしょうか?

ffmpeg の実行ファイルの権限をチェックしてみてください。
例えば以下のようにしたら、現状のファイルの実行権限があるかないかがわかります。
(パスは実際の ffmpeg のおいてある場所に修正してください)

ls -l /path/ffmpeg

おそらく(細かいところは違うはずですが)以下のような結果が出ると思います。

-rwxr--r-- 1 user user SIZE DATE /path/ffmpeg

例えば上記のように出た場合には user というアカウントでしか実行ができません。
その場合には chmod コマンドで、ほかユーザでも実行可能にしてあげれば動くと思います。

上記の例だったら、group と other に x をつけてあげればよいはずです(読み込み権限 r と実行権限 x が必要)。
chmod go+rx /path/ffmpeg などで読み込み権限と実行権限がつけられると思います。

-rwxr-xr-x 1 user user SIZE DATE /path/ffmpeg

あるいは、ffmpeg がおいてあるディレクトリ(のどこか)の権限がないという可能性もあります。その場合にはフォルダに権限を付与してあげる必要があります。

その他 ffmpeg が使うフォルダやファイルの権限がない場合には、そこでもエラーが起きる可能性はありますので、もしあれば(ro エラーが起きたら)そちらも権限をつける必要があります。

1Like

Your answer might help someone💌