PHP ffmpeg将GIF转换为MP4

PHP ffmpeg将GIF转换为MP4,php,ffmpeg,Php,Ffmpeg,我使用此代码将GIF转换为MP4: $videoname = str_replace('.gif', '.mp4', $picname); $ffmpeg = FFMpeg\FFMpeg::create(array( 'ffmpeg.binaries' => 'ffmpeg/bin/ffmpeg.exe', 'ffprobe.binaries' => 'ffmpeg/bin/ffprobe.exe', 'timeout' => 660

我使用此代码将GIF转换为MP4:

$videoname = str_replace('.gif', '.mp4', $picname);
$ffmpeg = FFMpeg\FFMpeg::create(array(
    'ffmpeg.binaries'  => 'ffmpeg/bin/ffmpeg.exe',
    'ffprobe.binaries' => 'ffmpeg/bin/ffprobe.exe',
    'timeout'          => 6600, // The timeout for the underlying process
    'ffmpeg.threads'   => 12,   // The number of threads that FFMpeg should use
), $logger);

$video = $ffmpeg->open('memes/' . $folder . '/' . $picname);

$format = new \FFMpeg\Format\Video\X264('libvo_aacenc', 'libx264');
$format->setAdditionalParameters(array('-profile:v', 'baseline', '-pix_fmt', 'yuv420p'));

$video
    ->save($format, 'memes/' . $folder . '/' . $videoname);
有些GIF正在转换,但有些未转换,这是错误消息:

[16-Aug-2020 14:47:21 Europe/Berlin] PHP Fatal error:  Uncaught Alchemy\BinaryDriver\Exception\ExecutionFailureException: ffmpeg failed to execute command "ffmpeg/bin/ffmpeg.exe" -y -i "memes/38/Dr5W6yzR_gif_38.gif" -threads 12 -vcodec libx264 -acodec libvo_aacenc -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 128k -profile:v baseline -pix_fmt yuv420p -pass 1 -passlogfile "C:\Windows\TEMP\ffmpeg-passes5f392ad8ba750qewzr/pass-5f392ad8bb9b7" "memes/38/Dr5W6yzR_gif_38.mp4":

Error Output:

 ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --e in C:\Inetpub\vhosts\yolol.de\vendor\php-ffmpeg\php-ffmpeg\src\FFMpeg\Media\AbstractVideo.php on line 106
这些废话是什么

请帮忙

编辑:

这是我在cmd中运行此代码时得到的结果:

ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, gif, from 'C://ttt.gif':
  Duration: 00:00:03.08, start: 0.000000, bitrate: 10411 kb/s
    Stream #0:0: Video: gif, bgra, 636x357, 14.25 fps, 14.29 tbr, 100 tbn, 100 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (gif (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0000021dca771a40] height not divisible by 2 (636x357)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
所以误差是高度不能被2整除的(636x357)

$format->setAdditionalParameters(array('-profile:v', 'baseline', '-pix_fmt', 'yuv420p', '-vf', 'scale=trunc(iw/2)*2:trunc(ih/2)*2'));
解决方案:

$format->setAdditionalParameters(array('-profile:v', 'baseline', '-pix_fmt', 'yuv420p', '-vf', 'scale=trunc(iw/2)*2:trunc(ih/2)*2'));

那不是全部的错误信息。请尝试cmd/powershell中显示的命令。查看是否获得更多详细信息(可能缺少库),或提交错误报告(输出中缺少errno)。该命令到底是什么样子的?它是“执行命令失败”后的整个字符串:
ffmpeg/bin/…
@mario请检查我的编辑听起来像什么(但不知道如何将其应用于PHP ffmpeg咒语)那不是全部的错误信息。请尝试cmd/powershell中显示的命令。查看是否获得更多详细信息(可能缺少库),或提交错误报告(输出中缺少errno)。该命令到底是什么样子的?它是“执行命令失败”后的整个字符串:
ffmpeg/bin/…
@mario请检查我的编辑听起来像什么(但不知道如何将其应用于PHP ffmpeg咒语)