七牛云4:上传后自动添加水印、视频转码

蛰伏已久 蛰伏已久 2018-01-10

为了不让别人盗取资源盗的那么爽,我们有时候需要对图片/视频添加水印,也有可能对视频进行一些转码,这在七牛云中都比较容易实现。


在七牛云上传文件之前,是需要先进行一些配置的,如配置scope,上传token的截至时间deadline,返回的数据returnBody,回调地址callbackUrl等等,图片水印设置需要设置persistentOps 和persistentPipeline。

  1. {


  2. "scope":               "<Bucket                   string>",

  3. "deadline":            "<UnixTimestamp            uint32>",

  4. "insertOnly":          "<AllowFileUpdating        int>",


  5. "endUser":             "<EndUserId                string>",


  6. "returnUrl":           "<RedirectURL              string>",

  7. "returnBody":          "<ResponseBodyForAppClient string>",


  8. "callbackUrl":         "<RequestUrlForAppServer   string>",

  9. "callbackHost":        "<RequestHostForAppServer  string>",

  10. "callbackBody":        "<RequestBodyForAppServer  string>",

  11. "callbackBodyType":    "<RequestBodyTypeForAppServer  string>",

  12. "callbackFetchKey":    "<RequestKeyForApp         int>",


  13. "persistentOps":       "<persistentOpsCmds        string>",

  14. "persistentNotifyUrl": "<persistentNotifyUrl      string>",

  15. "persistentPipeline":  "<persistentPipeline       string>",

  16. "saveKey":             "<SaveKey                  string>",

  17. "fsizeMin":            "<FileSizeMin              int64>",

  18. "fsizeLimit":          "<FileSizeLimit            int64>",


  19. "detectMime":          "<AutoDetectMimeType       int>",


  20. "mimeLimit":           "<MimeLimit                string>",

  21. "deleteAfterDays":     "<deleteAfterDays          int>",

  22. "fileType":           "<fileType                  int>"

  23. }



persistentOps 

  • 资源上传成功后触发执行的预转持久化处理指令列表。每个指令是一个 API 规格字符串,多个指令用;分隔。

  • 实际就是指定文件上传成功后,还需要做什么,比如添加水印/视频转码

  • 格式为 指令1;指令2;....;指令n|saveas/要保存的地址

  • 具体的指令格式稍后再看

  • 要保存的地址:对"bucket:key"进行URL安全的Base64编码,bucket是你的存储空间名称,key是要保存的文件名,两个用冒号链接,然后进行URL安全的Base64编码



添加水印指令

七牛分图片水印和文字水印

图片水印命令

  1. watermark/1

  2. /image/<encodedImageURL>

  3. /dissolve/<dissolve>

  4. /gravity/<gravity>

  5. /dx/<distanceX>

  6. /dy/<distanceY>

  7. /ws/<watermarkScale>


参数名称必填说明
/image/<encodedImageURL>水印源图片网址(经过URL安全的Base64编码),必须有效且返回一张图片。
/dissolve/<dissolve>
透明度,取值范围1-100,默认值为100(完全不透明)。
/gravity/<gravity>
水印位置,参考水印锚点参数表,默认值为SouthEast(右下角)。
/dx/<distanceX>
横轴边距,单位:像素(px),默认值为10。
/dy/<distanceY>
纵轴边距,单位:像素(px),默认值为10。
/ws/<watermarkScale>
水印图片自适应原图的短边比例,取值范围0-1。


水印锚点参数表


  1. |  NorthWest     |     North      |     NorthEast

  2. |                |

  3. |                |

  4. -----------------+----------------+--------------

  5. |                |

  6. |  West          |     Center     |          East

  7. |                |

  8. -----------------+----------------+--------------

  9. |                |

  10. |                |

  11. |  SouthWest     |     South      |     SouthEast



文字水印可选指令:


  1. watermark/2

  2. /text/<encodedText>

  3. /font/<encodedFontName>

  4. /fontsize/<fontSize>

  5. /fill/<encodedTextColor>

  6. /dissolve/<dissolve>

  7. /gravity/<gravity>

  8. /dx/<distanceX>

  9. /dy/<distanceY>


参数名称必填说明
/text/<encodedText>水印文字内容(经过URL安全的Base64编码
/font/<encodedFontName>
水印文字字体(经过URL安全的Base64编码),默认为黑体,详见支持字体列表
注意:中文水印必须指定中文字体。
/fontsize/<fontSize>
水印文字大小,单位: 缇 ,等于1/20磅,默认值是240缇,参考DPI为72。
/fill/<encodedTextColor>
水印文字颜色,RGB格式,可以是颜色名称(例如 red)或十六进制(例如 #FF0000),参考RGB颜色编码表,默认为黑色。经过URL安全的Base64编码。
/dissolve/<dissolve>
透明度,取值范围1-100,默认值100(完全不透明)。
/gravity/<gravity>
水印位置,参考水印位置参数表,默认值为SouthEast(右下角)。
/dx/<distanceX>
横轴边距,单位:像素(px),默认值为10。
/dy/<distanceY>
纵轴边距,单位:像素(px),默认值为10。



persistentPipeline

  • 转码队列名。资源上传成功后,触发转码时指定独立的队列进行转码。为空则表示使用公用队列,处理速度比较慢


这样就很明白了,通过persistentOps设置进行哪些指令,通过persistentPipeline设置通过那个队列来执行这些指令。



添加文字水印范例核心代码(php-YII框架)


$policy=[

    "persistentOps"=> "watermark/2/text/".\Qiniu\base64_urlSafeEncode("珊瑚学院")."/dissolve/30|saveas/".\Qiniu\base64_urlSafeEncode($bucket.":$(key)") ,
    "persistentPipeline"=>"",
          
];
  • watermark/2/text/".\Qiniu\base64_urlSafeEncode("珊瑚学院"):可以参考上面文字水印的指令,可以看出这条语句的意思是,添加一个文字水印,内容为“珊瑚学院”,内容必须进行url安全的base64编码

  • /dissolve/30:设置文字水印透明度为30

  • |saveas/".\Qiniu\base64_urlSafeEncode($bucket.":$(key)")  :图片打完水印后保存到指定的bucket中,文件名称为key,保存路径需要进行url安全的base64编码

  • persistentPipeline"=>"",设置persistentPipeline为空,指明使用公用队列



视频转码

视频相关可用指令

  1. avthumb/<Format>

  2. /ab/<BitRate>

  3. /aq/<AudioQuality>

  4. /ar/<SamplingRate>

  5. /r/<FrameRate>

  6. /vb/<VideoBitRate>

  7. /vcodec/<VideoCodec>

  8. /acodec/<AudioCodec>

  9. /scodec/<SubtitleCodec>

  10. /subtitle/<SubtitleURL>

  11. /ss/<SeekStart>

  12. /t/<Duration>

  13. /s/<Resolution>

  14. /autoscale/<Autoscale>

  15. /aspect/<Aspect>

  16. /stripmeta/<StripMeta>

  17. /h264Crf/<H264Crf>

  18. /rotate/<Degree>

  19. /wmImage/<EncodedRemoteImageUrl>

  20. /wmGravity/<Gravity>

  21. /wmText/<text>

  22. /wmGravityText/<gravity_text>

  23. /wmFont/<font>

  24. /wmFontColor/<fontcolor>

  25. /wmFontSize/<fontsize>

  26. /writeXing/<Xing>

  27. /an/<AudioNo>

  28. /vn/<VideoNo>

  29. /sn/<SubtitleNo>


参数名称类别必填说明
<Format>A/V封装格式,如avi,flv,mp3,mp4,mpeg
/ab/<BitRate>A
音频码率,单位:比特每秒(bit/s),常用码率:64k,128k,192k,256k,320k等。在不改变音频编码格式时,若指定码率大于原音频码率,则使用原音频码率进行转码。
/aq/<AudioQuality>A
音频质量,取值范围为0-9(mp3),10-500(aac),仅支持mp3和aac,值越小越高。不能与上述码率参数共用。
/ar/<SamplingRate>A
音频采样频率,单位:赫兹(Hz),常用采样频率:8000,12050,22050,44100等。
/r/<FrameRate>V
视频帧率,每秒显示的帧数,单位:赫兹(Hz),常用帧率:24,25,30等,一般用默认值。
/vb/<VideoBitRate>V
视频码率,单位:比特每秒(bit/s),常用视频码率:128k,1.25m,5m等。在不改变视频编码格式时,若指定码率大于原视频码率,则使用原视频码率进行转码。
/vcodec/<VideoCodec>V
视频编码格式,具体细节请参考支持转换的视频编码格式
/acodec/<AudioCodec>A
音频编码格式,具体细节请参考支持转换的音频编码格式
/audioProfile/<profile>A
设置音频的profile等级,支持:aac_he。注:需配合 libfdk_aac 编码方案使用,如 avthumb/m4a/acodec/libfdk_aac/audioProfile/aac_he
/scodec/<SubtitleCodec>V
字幕编码方案,支持方案:mov_text。该参数仅用于修改带字幕视频的字幕编码。
/ss/<SeekStart>A/V
指定音视频截取的开始时间,单位:秒,支持精确到毫秒,例如3.345s。用于视频截取,从一段视频中截取一段视频。
/t/<Duration>A/V
指定视频截取的长度,单位:秒,支持精确到毫秒,例如1.500s。用于视频截取,从一段视频中截取一段视频。
/s/<Resolution>V
指定视频分辨率,格式为<width>x<height>或者预定义值,width 取值范围 [20,3840],height 取值范围 [20,2160]。
/autoscale/<Autoscale>V
配合参数/s/使用,指定为1时,把视频按原始比例缩放到/s/指定的矩形框内,0或者不指定会强制缩放到对应分辨率,可能造成视频变形。
/aspect/<Aspect>V
该参数为视频在播放器中显示的宽高比,格式为<width>:<height>。例如:取值3:4表示视频在播放器中播放是宽:高=3:4(注:此处取值仅为体现演示效果)。
/stripmeta/<StripMeta>A/V
是否清除文件的metadata,1为清除,0为保留。
/h264Crf/<H264Crf>V
设置h264的crf值,整数,取值范围[18,28],值越小,画质更清晰。注意:不可与vb共用
/rotate/<Degree>V
指定顺时针旋转的度数,可取值为90180270auto,默认为不旋转。
/wmImage/<EncodedRemoteImageUrl>V
水印图片的源路径,目前仅支持远程路径,需要经过urlsafe_base64_encode。水印具体介绍见视频水印
/wmGravity/<Gravity>V
视频图片水印位置,存在/wmImage/时生效。
/wmText/<EncodedText>V
水印文本内容,需要经过urlsafe_base64_encode
/wmGravityText/<GravityText>V
文本位置(默认NorthEast)
/wmFont/<Font>V
文本字体,需要经过urlsafe_base64_encode,默认为黑体,注意:中文水印必须指定中文字体。
/wmFontColor/<FontColor>V
水印文字颜色,需要经过urlsafe_base64_encode,RGB格式,可以是颜色名称(例如红色)或十六进制(例如#FF0000),参考RGB颜色编码表,默认为黑色。
/wmFontSize<FontSize>V
水印文字大小,单位: 缇,等于1/20磅,默认值0(默认大小)
/writeXing/<Xing>A
转码成mp3时是否写入xing header,默认1写入,写入会导致 fileafinfo 等命令识别出错误的码率。好处是在需要音频时长、帧数的时候只需要获取header。
/an/<AudioNo>A
是否去除音频流,0为保留,1为去除。
默认值为0。
/vn/<VideoNo>V
是否去除视频流,0为保留,1为去除。
默认值为0。
/subtitle/<SubtitleURL>V
添加字幕,支持:srt 格式字幕(uft-8 编码和和 utf-8 BOM 编码)、带有字幕的 mkv 文件、embed(将原视频的字幕流嵌入目标视频)。基于 base64 编码。
/sn/<SubtitleNo>V
是否去除字幕,0为保留,1为去除。默认值为0。


假如我们想让视频上传后都转为mp4格式,则可以进行如下设置


"persistentOps"=> "avthumb/mp4|saveas/".\Qiniu\base64_urlSafeEncode($bucket.":$(key)") ,
"persistentPipeline"=>"",




参考资料:七牛上传策略  

分享到

点赞(2)