Я пытаюсь перекодировать видеофайл размером 1,2 Мб, загруженный на сервер моего веб-сайта с помощью загрузки php / html, но получаю сообщение об ошибке:
Неустранимая ошибка PHP: необработанное исключение ‘Alchemy \ BinaryDriver \ Exception \ ExecutionFailureException’ с сообщением ‘ffmpeg не удалось выполнить команду’ / usr / local / bin / ffmpeg » -y » -i » / home / user / public_html / contents /videos/1490719990_MP4_360p_Short_video_clip_nature_mp4.mp4 » -async » 1 » -метаданные: s: v: 0 » start_time = 0 » -r » 16 » -b_strategy » 1 » -bf » 3 ‘ ‘-g’ ‘9’ ‘-vcodec’ ‘libx264’ ‘-acodec’ ‘libmp3lame’ ‘-b: v’ ‘128k’ ‘-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 » 8k » -ac » 1 » -pass » 1 » -passlogfile » / tmp / ffmpeg-pass58dab05a323b6eknk4 / pass-58dab05a32465 » / home / user / public_html / contents / videos / 1490719990_MP4_360p_Short_video_clip_nature_mp4_22995.mp4 » в /home/user/public_html/app/ffmpeg/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php
Трассировки стека:
Забавно, что один и тот же сервер извлекает фреймы и получает длительность одного и того же файла с помощью ffprobe и ffmpeg.
Вот код, который я использую для транскодирования:
$ffmpeg = $ffmpeg = FFMpeg\FFMpeg::create(['timeout'=>3600, 'ffmpeg.thread'=>12, 'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe']);
$ffprobe_prep = FFMpeg\FFProbe::create(['ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe']);
$ffprobe = $ffprobe_prep->format($video_file);
$video = $ffmpeg->open($video_file);
// Get video duration to ensure our videos are never longer than our video limit.
$duration = $ffprobe->get('duration');
// Use mp4 format and set the audio bitrate to 56Kbit and Mono channel.
// TODO: Try stereo later...
$format = new FFMpeg\Format\Video\X264('libmp3lame', 'libx264');
$format
-> setKiloBitrate(128)
-> setAudioChannels(1)
-> setAudioKiloBitrate(8);
$first = $ffprobe_prep
->streams($video_file)
->videos()
->first();
$width = $first->get('width');
if($width > VIDEO_WIDTH){
// Resize to 558 x 314 and resize to fit width.
$video
->filters()
->resize(new FFMpeg\Coordinate\Dimension(VIDEO_WIDTH, ceil(VIDEO_WIDTH / 16 * 9)));
}
// Trim to videos longer than three minutes to 3 minutes.
if($duration > MAX_VIDEO_PLAYTIME){
$video
->filters()
->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(0), FFMpeg\Coordinate\TimeCode::fromSeconds(MAX_VIDEO_PLAYTIME));
}
// Change the framerate to 16fps and GOP as 9.
$video
->filters()
->framerate(new FFMpeg\Coordinate\FrameRate(16), 9);
// Synchronize audio and video
$video->filters()->synchronize();
$video->save($format, $video_file_new_2);
Я связался с моим хозяином без какой-либо жизненно важной помощи. Единственная полезная информация, которую они могут предоставить мне, это то, что ffmpeg был скомпилирован на сервере с поддержкой libmp3lame.
Этот код прекрасно работает на локальном хосте
Любая помощь в том, почему я могу получить ошибку и как ее исправить, приветствуется.
Задача ещё не решена.
Других решений пока нет …