为输出流打开编码器时出现PHP FFMpeg错误



我正在尝试使用这个PHP FFMpeg库,但我一直收到类似的错误

Error while opening encoder for output stream #0:0

这是我的PHP代码

private function createTeaserVideos($fullVideoPath, $databasePath, $uploadPath) {
$ffmpeg = FFMpeg::create([
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe',
'timeout'          => 0,
]);
$ffmpeg->getFFMpegDriver()->listen(new AlchemyBinaryDriverListenersDebugListener());
$ffmpeg->getFFMpegDriver()->on('debug', function ($message) {
var_dump($message);
});
// Create teaser_video_thumb
$videoNameThumb = $this->randomTimeString() . '-thumb.mp4';
$video = $ffmpeg->open($fullVideoPath);
$video
->filters()
->resize(new FFMpegCoordinateDimension(400, 280))
->synchronize();
$video->save(new FFMpegFormatVideoX264('aac', 'libx264'), $uploadPath . $videoNameThumb);
}

所以我想在这里做什么。用户上传了他的视频,我正在尝试调整它的大小,并创建一个较小的视频预览。我一直得到的问题是

ffmpeg version 2.8.15-0ubuntu0.16.04.1' (length=46)
Copyright (c) 2000-2018 the FFmpeg developers' (length=54)
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609' (length=72)
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv' (length=1135)
WARNING: library configuration mismatch' (length=49)
avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc' (length=1413)
libavutil      54. 31.100 / 54. 31.100' (length=48)
libavcodec     56. 60.100 / 56. 60.100' (length=48)
libavformat    56. 40.101 / 56. 40.101' (length=48)
libavdevice    56.  4.100 / 56.  4.100' (length=48)
libavfilter     5. 40.101 /  5. 40.101' (length=48)
libavresample   2.  1.  0 /  2.  1.  0' (length=48)
libswscale      3.  1.101 /  3.  1.101' (length=48)
libswresample   1.  2.101 /  1.  2.101' (length=48)
libpostproc    53.  3.100 / 53.  3.100' (length=48)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/vagrant/workspace/spot-scouting-adminpage/static/locations/MjY5MjI2Y2E0NDExOWNmZmQwN/teaser/f4095e9eeb364fe187bf1ed42eedc198.mp4':' (length=185)
Metadata:' (length=19)
major_brand     : mp42' (length=34)
minor_version   : 0' (length=31)
compatible_brands: mp42mp41' (length=39)
creation_time   : 2019-01-04 12:46:43' (length=49)
Duration: 00:00:08.41, start: 0.000000, bitrate: 10261 kb/s' (length=69)
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 9982 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)' (length=153)
Metadata:' (length=21)
creation_time   : 2019-01-04 12:46:43' (length=51)
handler_name    : Alias Data Handler' (length=50)
encoder         : AVC Coding' (length=42)
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)' (length=109)
Metadata:' (length=21)
creation_time   : 2019-01-04 12:46:43' (length=51)
handler_name    : Alias Data Handler' (length=50)
-async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0.' (length=107)
[libx264 @ 0x136f620] height not divisible by 2 (400x225)' (length=65)
Output #0, mp4, to '/home/vagrant/workspace/spot-scouting-adminpage/static/locations/MjY5MjI2Y2E0NDExOWNmZmQwN/teaser/gY0RfV9c0y06592770015466174550YfY9-thumb.mp4':' (length=172)
Metadata:' (length=19)
major_brand     : mp42' (length=34)
minor_version   : 0' (length=31)
compatible_brands: mp42mp41' (length=39)
Stream #0:0(eng): Video: h264, none, q=2-31, 128 kb/s, 25 fps (default)' (length=83)
Metadata:' (length=21)
creation_time   : 2019-01-04 12:46:43' (length=51)
handler_name    : Alias Data Handler' (length=50)
start_time      : 0' (length=33)
encoder         : Lavc56.60.100 libx264' (length=53)
Stream #0:1(eng): Audio: aac, 0 channels, 128 kb/s (default)' (length=72)
Metadata:' (length=21)
creation_time   : 2019-01-04 12:46:43' (length=51)
handler_name    : Alias Data Handler' (length=50)
encoder         : Lavc56.60.100 aac' (length=49)
Stream mapping:' (length=23)
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))' (length=63)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))' (length=60)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height' (length=127)
' (length=8)

我不知道问题出在哪里,也不知道如何解决。有人能帮我吗?我使用的是Ubuntu 16,我已经通过apt-get-install安装了ffmpeg。如果你需要任何额外的信息,请告诉我,我会提供。谢谢

我的解决方案如下。首先,我用最新版本重新安装了我的ffmpeg。我做了以下

cd
wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar xvf ffmpeg-git-amd64-static.tar.xz
sudo mv ffmpeg-git-20190101-amd64-static/ffmpeg ffmpeg-git-20190101-amd64-static/ffprobe /usr/local/bin/
whereis ffmpeg
rm -f ffmpeg-git-amd64-static.tar.xz

然后我更改了代码,看起来像下面的

private function createTeaserVideos($fullVideoPath, $databasePath, $uploadPath) {
$ffmpeg = FFMpeg::create([
'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe',
'timeout'          => 0,
]);
// Create teaser_video_thumb
$videoNameThumb = $this->randomTimeString() . '-thumb.mp4';
$video = $ffmpeg->open($fullVideoPath);
$video
->filters()
->resize(new FFMpegCoordinateDimension(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT))
->synchronize();
$format = new FFMpegFormatVideoX264();
$format->setVideoCodec('libx264');
$format->setAudioCodec('aac');
$format->setAdditionalParameters( [ '-crf', '10'] );
$video->save($format, $uploadPath . $videoNameThumb);
return [
'thumb' => $databasePath . $videoNameThumb,
];
}

我遇到的另一个问题是,我的新视频高度不能除以/2。所以看起来,ffmpeg需要有一个可以除以2的高度。

最新更新