个人博客地址:http://www.xixinice.comPHP使用PHP-FFMpeg做视频水印keng遇到,关于“Encodingfailed”,“UnknownEncoder'libfaac'”使用PHP-FFMpeg做视频水印演示如下:$ffmpeg=FFMpegFFMpeg::create(array('ffmpeg.binaries'=>'/opt/local/ffmpeg/bin/ffmpeg','ffprobe.binaries'=>'/opt/local/ffmpeg/bin/ffprobe','timeout'=>3600,//底层进程的超时时间'ffmpeg.threads'=>12,//FFMpeg应该使用的线程数));$video=$ffmpeg->open('video.mpg');$relative=array('position'=>'relative','bottom'=>50,'right'=>50);$image='/xxx/watermarkMark.png';$video->filters()->watermark($image,$relative);$video->save(newFFMpegFormatVideoX264(),'export-x264.mp4')error:1.save()方法会报错:EncodingfailederrorlocationFILE:/xxx/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/AbstractVideo.php LINE:1062这边是catch报错,去掉trycatch,报错如下:ffmpegfailedtoexecutecommand'/usr/local/bin/ffmpeg''-y''-i''/xxx/input.mp4''-vcodec''libx264''-acodec''libfaac''-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''-vf''movie=/xxx/waterMark.png[watermark];inoverlay=50:80[out]''-pass''1''-passlogfile''/var/tmp/ffmpeg-passesabcdefg/pass-abcdf''/xxx/输出。mp4'错误位置FILE:/xxx/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php LINE:100从'-acodec''libfaac'可以看出这里的encode使用“libfaac”放在命令行执行,会报错:Unknownencoder'libfaac'至此,我找到了关键点,因为缺少'libfaac',但是当我搜索这个配置时,我会发现我找不到这个。配置:--prefix=Options--withNoneofthese2.3.原因是官方已经下架了,现在换成了'libfdk_aac',但是github库没有更新。libfaac是一个蹩脚的编码器;有更好的选择。FFmpeg删除了libfaac支持。4.所以代码端需要自己传参,当默认安装不能同时使用时,选项必须带上参数--with-fdk-aac原代码:publicfunction__construct($audioCodec='libfaac',$videoCodec='libx264'){$this->setAudioCodec($audioCodec)->setVideoCodec($videoCodec);}所以new的时候需要传参:newFFMpegFormatVideoX264('libfdk_aac')就这样。ps:直接使用ffmpeg命令行生成:ffmpeg-iinput.mp4-iwatermark.jpg-filter_complex'overlay'output.mp4//设置水印位置ffmpeg-iinput.mp4-iwatermark.jpg-filter_complex"overlay=x=10:y=10"output.mp4参考:https://stackoverflow.com/que...
