资讯专栏INFORMATION COLUMN

PHP-FFMpeg 视频水印 Encoding failed | Unknown encoder

Juven / 1174人阅读

摘要:个人博客地址使用做视频水印遇到的,关于的处理使用做视频水印如下方法时候时候会报错错误位置这边是了,去掉报错如下。直接使用命令行生成设置水印位置参考资料

个人博客地址: http://www.xixinice.com

PHP 使用 PHP-FFMpeg 做视频水印 遇到的keng,

关于 "Encoding failed", "Unknown encoder "libfaac"" 的处理

使用 PHP-FFMpeg 做视频水印
demo 如下:

$ffmpeg = FFMpegFFMpeg::create(array(
    "ffmpeg.binaries"  => "/opt/local/ffmpeg/bin/ffmpeg",
    "ffprobe.binaries" => "/opt/local/ffmpeg/bin/ffprobe",
    "timeout"          => 3600, // The timeout for the underlying process
    "ffmpeg.threads"   => 12,   // The number of threads that FFMpeg should use
));

$video = $ffmpeg->open("video.mpg");

$relative = array(
    "position"=>"relative",
    "bottom"=>50,
    "right"=>50
);

$image = "/xxx/watermarkMark.png";

$video->filters()->watermark($image, $relative);

$video->save(new FFMpegFormatVideoX264(), "export-x264.mp4")

error:
1.save() 方法时候 时候会报错:

Encoding failed
错误位置
FILE: /xxx/vendor/php-ffmpeg/php-ffmpeg/src/FFMpeg/Media/AbstractVideo.php  LINE: 106

2.这边是catch 了 error,去掉 try catch,报错如下。

ffmpeg failed to execute command "/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];in overlay=50:80 [out]" "-pass" "1" "-passlogfile" "/var/tmp/ffmpeg-passesabcdefg/pass-abcdf" "/xxx/output.mp4"

错误位置
FILE: /xxx/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php  LINE: 100

从 "-acodec" "libfaac",可以看出 这边encode 使用了 "libfaac"

把它放到命令行去执行,会报错:
Unknown encoder "libfaac"

至此,也就找打了关键所在,是少了"libfaac"

但是,去查找这个配置的时候,会发现找不到这个。
configuration: --prefix=
Options --with
这2个都没有。

3.原因是官方已经移除了,现在用 "libfdk_aac" 来代替了,但是 github 库没有更新

libfaac is a crappy encoder; there are better alternatives.
FFmpeg removed libfaac support.

4.所以代码这边需要自己传参数,不能使用默认
同时安装的时候,option 必须带上参数 --with-fdk-aac

原代码:

public function __construct($audioCodec = "libfaac", $videoCodec = "libx264")
{
    $this
        ->setAudioCodec($audioCodec)
        ->setVideoCodec($videoCodec);
}

所以new 的时候需要传参数:
new FFMpegFormatVideoX264("libfdk_aac")

这样即可以。

ps:
直接使用ffmpeg 命令行 生成:

ffmpeg -i input.mp4 -i watermark.jpg -filter_complex "overlay" output.mp4

//设置水印位置
ffmpeg -i input.mp4 -i watermark.jpg -filter_complex "overlay=x=10:y=10" output.mp4

参考资料:

https://stackoverflow.com/que...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29654.html

相关文章

  • 也谈 “FFMPEG获取视频播放时长”

    摘要:背景因为工作中有部分内容是使用来获取音视频信息以及对音视频文件进行处理,遇到了一些问题,所以一路搜过来。因为视频处理必然离不开,网上抄了一段是领先的多媒体框架。 背景: 因为工作中有部分内容是使用PHP来获取音/视频信息以及对音视频文件进行处理,遇到了一些问题,所以一路搜过来。 FFmpeg 因为视频处理必然离不开FFmpeg,网上抄了一段: FFmpeg是领先的多媒体框架。 在这个框...

    BingqiChen 评论0 收藏0
  • 一行代码搞定人脸识别

    摘要:什么,只要一行代码就能搞定人脸识别当然是假的啦。虽然不能一行就搞定,依靠强大的人脸识别包,只要十多行代码完全可以实现人脸识别的功能。经测试识别正确率高达。下安装比较简单,命令行下几行代码就搞定,安装见这里。 什么,只要一行代码就能搞定人脸识别?当然是假的啦。 虽然不能一行就搞定,依靠python强大的人脸识别包,只要十多行代码完全可以实现人脸识别的功能。这就叫站在巨人的肩膀上,看得更高...

    Tony 评论0 收藏0

发表评论

0条评论

Juven

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<