PHP-FFMpeg打开输出流的编码器时出错

时间:2019-01-04 16:03:54

标签: 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 \Alchemy\BinaryDriver\Listeners\DebugListener());
        $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 \FFMpeg\Coordinate\Dimension(400, 280))
            ->synchronize();
        $video->save(new \FFMpeg\Format\Video\X264('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。 如果您需要任何其他信息,请告诉我,我会提供。谢谢

1 个答案:

答案 0 :(得分:0)

对我来说,解决方案如下。首先,我用更多最新版本重新安装了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 \FFMpeg\Coordinate\Dimension(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT))
        ->synchronize();

    $format = new \FFMpeg\Format\Video\X264();
    $format->setVideoCodec('libx264');
    $format->setAudioCodec('aac');
    $format->setAdditionalParameters( [ '-crf', '10'] );

    $video->save($format, $uploadPath . $videoNameThumb);

    return [
        'thumb' => $databasePath . $videoNameThumb,
    ];
}

我遇到的另一个问题是我的新视频高度不能被/ 2划分。因此,ffmpeg的高度必须可以除以2。