建站之视频处理
借助 ffmpeg
扩展处理视频。包括自动旋转、截图、转换格式等。
ubuntu 下安装扩展
sudo apt-get install ffmpeg
获取视频尺寸、旋转角度
/**
* /usr/bin/ffprobe video.mp4 -show_streams -print_format json
*/
public static function info($video)
{
$raw = shell_exec(sprintf('%s %s -show_streams -print_format json', self::ffprobe(), $video));
if (empty($raw) || !($raw = json_decode($raw, true)) || empty($raw['streams'])) {
return false;
}
foreach ($raw['streams'] as $v) {
if (VIDEO == $v['codec_type']) {
$data = $v;
break;
}
}
return [
WIDTH => format_integer($data[WIDTH]),
HEIGHT => format_integer($data[HEIGHT]),
ROTATE => isset($data[TAGS][ROTATE]) ? format_integer($data[TAGS][ROTATE]) : 0,
];
}
旋转视频
/**
* /usr/bin/ffmpeg -y -i video.mp4 -strict -2 video.mp4_new.mp4
*/
public static function rotate($video)
{
if (!($info = self::info($video))) {
return false;
}
if ($info[ROTATE]) {
$tmpVideo = $video . '_new.mp4';
shell_exec(sprintf('%s -y -i %s -strict -2 %s', self::ffmpeg(), $video, $tmpVideo));
if (File::exist($tmpVideo)) {
File::delete($video);
File::rename($tmpVideo, $video);
}
}
}
生成视频缩略图
/**
* /usr/bin/ffmpeg -i video.mp4 -y -f image2 -t 0.001 -s 800x600 video.mp4_tmp.jpg
*/
public static function createTmpImage($video)
{
if (!($info = self::info($video))) {
return false;
}
$image = self::getTmpImageFile($video);
shell_exec(sprintf('%s -i %s -y -f image2 -t 0.001 -s %dx%d %s', self::ffmpeg(), $video, $info[WIDTH], $info[HEIGHT], $image));
return File::exist($image) ? $image : false;
}
生成 webm
/**
* /usr/bin/ffmpeg -i video.mp4 video.webm
*/
public static function webm($video)
{
if (!($videoFile = File::exist($video))) {
return '';
}
$webmFile = self::getWebmFile($videoFile);
shell_exec(sprintf('%s -i %s %s', self::ffmpeg(), $videoFile, $webmFile));
}
标签: 建站