我正在尝试通过 php/html 上传对上传到我的网站服务器的 1.2mb 文件的视频文件进行转码,但我不断收到错误消息:
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''-metadata: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 ''+循环''-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-passes58dab05a323b6eknk4/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:100在 /home/user/public_html/app/ffmpeg/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php:100在 /home/user/public_html/app/ffmpeg/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php:100
堆栈跟踪:
0 /home/user/public_html/app/ffmpeg/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php(72):
在第 168 行的 /home/user/public_html/app/ffmpeg/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/Video.php 中
有趣的是,同一台服务器正在提取帧并使用 and 获取同一文件的持续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
。
此代码在本地主机上完美运行
任何关于为什么我可能会收到错误以及如何纠正它的帮助表示赞赏。