<?php namespace Api\Video\Handle\Filter;
use Dever;
/**
 * 视频过滤器
 * 
 * 变量：
 *  color    十六进制形式的RGB颜色值：0xRRGGBB [@AA]，其中AA的范围是（0,1）中的十进制值或任何有效的颜色名称，如白色，蓝色，黄色等，默认值为黑色，请参见颜色有关详细信息，请参阅FFmpeg基本介绍章节中的名称部分
width, height   带填充的输出帧的宽度和高度，宽度的值可以从高度导出，反之亦然，两个参数的默认值都是0
    x, y    输入左上角的坐标（偏移量）与输出帧的左上角有关，两个参数的默认值均为0
    *   参数的高度，宽度，x, y的表达式的可用变量
    a   纵横比，与iw/ih相同
    dar 输入显示宽比，与*sar相同
    hsub, vsub  水平和垂直的色度子样本值，对于像素格式yuv422p, hsub的值为2,vsub为1
    in_h, ih    输入的高度
    in_w, iw    输入的宽度
    n   输入框的数目，从0开始
    out_h, oh   输出高度，默认值=高度
    out_w, ow   输出宽度，默认值=宽度
    pos 位置在输入框的文件中，如果不知道NAN
    sar 输入样本比例
    t   时间戳以秒表示，如果输入时间戳未知
    x, y    x和y的偏移量由x和y表示，或者NAN如果没有指定
 */
class Video
{
    # 增加文字水印
    public function text($text, $fontsize = 25, $fontcolor = 'white', $alpha = 1, $x = 0, $y = 0)
    {
        $font = Dever::data() . 'assets/font/PingFang_Bold.ttf';
        return 'drawtext=fontfile='.$font.':text=\''.$text.'\':fontsize='.$fontsize.':fontcolor='.$fontcolor.':alpha='.$alpha.':shadowy=2:x='.$x.':y='.$y;
    }

    # 增加文字水印跑马灯
    public function textmove($text, $fontsize = 25, $fontcolor = 'white', $alpha = 1, $move = 200)
    {
        $x = 'if(eq(mod(trunc(t*'.$move.'/(w-text_w))\,2)\,0)\,mod(t*'.$move.'\,w-text_w)\,w-text_w-mod(t*'.$move.'\,w-text_w))';
        $y = 'if(eq(mod(trunc(t*'.$move.'/(h-text_h))\,2)\,0)\,mod(t*'.$move.'\,h-text_h)\,h-text_h-mod(t*'.$move.'\,h-text_h))';
        return $this->text($text, $fontsize, $fontcolor, $alpha, $x, $y);
    }

    # 旋转 0 顺时针旋转90°后再水平翻转 1 顺时针旋转90° 2 逆时针旋转90° 3 逆时针旋转90°后再水平翻转
    public function transpose($type = 1)
    {
        return 'transpose=' . $type;
    }

    # 翻转 - 镜像 1 水平翻转 2垂直翻转
    public function flip($type = 1)
    {
        return $type == 1 ? 'hflip' : 'vflip';
    }

    # 填充视频
    public function pad($width, $height = 0, $x = 0, $y = 0, $color = '')
    {
        //width[:height[:x[:y[:color]]]]
        return 'pad='.$width.':'.$height.':'.$x.':'.$y.':'.$color;
    }

    # 模糊视频
    public function boxblur($luma_r, $luma_p)
    {
        //boxblur=luma_r:luma_p[:chroma_r:chroma_p[:alpha_r:alpha_p]]
        return 'boxblur='.$luma_r.':'.$luma_p;
    }

    # 去水印
    public function delogo($x, $y, $w, $h)
    {
        //delogo=x=714:y=28:w=130:h=50
        return 'delogo=x=714:y=28:w=130:h=50';
    }

    # 去马赛克
    public function minterpolate($mi_mode = 'mci',$mc_mode = 'aobmc', $mb_size = 8)
    {
        //minterpolate=mi_mode=mci:mc_mode=aobmc:mb_size=8
        return 'minterpolate=mi_mode='.$mi_mode.':mc_mode='.$mc_mode.':mb_size=' . $mbsize;
    }

    # 变速
    public function setpts($v)
    {
        //setpts=2.0*PTS
        return 'setpts='.$v.'*PTS';
    }
}