Я создал код на Laravel, чтобы добавить водяной знак в мое видео с пакетом ffmpeg. Эта функция прекрасно работает при работе с контроллером.
Из-за трудоемкой задачи я перемещаю код в систему очередей Laravel, и она успешно отправляется в таблицу очередей. но когда я запускаю php artisan queue: работаю с кодом, получающим ошибку вроде
Alchemy\BinaryDriver\Exception\ExecutionFailureException: ffmpeg failed to execute command '/usr/bin/ffmpeg' '-y' '-i' '/home/forge/demosite/public/frontend/video/1276841041584344642.mp4' '-threads' '12' '-vcodec' 'libx264' '-acodec' 'libmp3lame' '-b:v' '1000k' '-refs' '6' '-coder' '1' '-sc_threshold' '40' '-flags' '+loop' '-me_range' '16' '-subq' '7' '-i_qfactor' '0.71' '-qcomp' '0.6' '-qdiff' '4' '-trellis' '1' '-b:a' '256k' '-ac' '2' '-pass' '1' '-passlogfile' '/tmp/ffmpeg-passes5e6f2f04cec372bg0z/pass-5e6f2f04cecc2' '/home/forge/demosite/frontend/posts/video/org-post/n-w-post-video-org/17957037231584344836.mp4' in /home/forge/demosite/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php:10
Во многих ссылках я вижу, что эта проблема связана с проблемой разрешения папки publi c. поэтому я даю 777 разрешение на публикацию папки c, и она не будет работать ...
Рабочий код ..
$ffmpeg = FFMpeg\FFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe' ,
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
]);
$video = $ffmpeg->open($this->file);
$random = rand().''.time();
$randomFileName = $random . ".$this->extension";
/*-------------------------------original video----------------------------------------------*/
$format = new FFMpeg\Format\Video\X264('libmp3lame', 'libx264');
$format->setKiloBitrate(1000)->setAudioChannels(2)->setAudioKiloBitrate(256);
// $saveLocation = getcwd() . '/frontend/video/uploads/n_w_org_vd/' . $randomFileName;
$saveLocation = getcwd() . '/frontend/posts/video/org-post/n-w-post-video-org/' . $randomFileName;
$video->save($format, $saveLocation);
$filepath = 'frontend/posts/video/org-post/n-w-post-video-org/' . $randomFileName;
Storage::put($filepath, file_get_contents($saveLocation),'public');