Dai Chong's blog

一、首先介绍一下这个功能的使用场景

 如优酷视频网站,某些视频的封面图就使用的这样的功能。

 大概有4种:

  (1)自有封面图(这类可能是自己手动上传的封面图,如一些宣传图)。
  (2)截取视频第一帧(可以理解为0.001秒)时的视频内容作为封面图。
  (3)截取视频某一时刻的内容作为封面图,如截取视频的第1分钟。
  (4)截取视频某一段的内容(gif)作为封面图,如截取视频的第1分20秒到1分30秒。

PS:只是单纯的拿来做例子,并不是指优酷就是使用这样的技术。

二、将会使用到的技术

 (1)FFmpeg:FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。—百度百科注意:‘需要安装’,不同的系统安装、使用的方法不同。

 (2)PHPExecSystem等函数(当然任何能执行外部程序的语言都能实现)。

三、Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
// 安装路径
$ffmpeg = "C:\\Users\user\\Desktop\\ffmpeg\\bin\\ffmpeg.exe";
// 待处理视频的地址
$video_route = "D:\\phpstudy_pro\\WWW\a.mp4";
//存储地址
$store_path = "./2.jpg";

// 把视频的前30帧截取为gif
system($ffmpeg . " -i ".$video_route." -vframes 30 -y -f gif 1.gif");
// 把视频的第一帧截取为图片 -r 1 表示为图宽度、高度自适应
system($ffmpeg . " -i ".$video_route." -y -f image2 -t 0.001 -r 1 1.png");
// 把视频的第8.01秒处截取为图片
system($ffmpeg . " -i ".$video_route." -y -f image2 -ss 08.010 -t 0.001 -s 1920x1080 " .$store_path. ");

三、更多

PHP+FFmpeg仅能实现这样功能吗?当然不是!还有更多的功能等待探索…
 如:
  (1)视频转码。
  (2)视频加密。
  (3)视频剪切。
  (4)视频合成。
  (5)多张图片合成一个视频。
  (6)字幕。
  (7)音频处理。
  等等等….


 评论