jupyter notebook 视频抓取图片
"""
视频抓取图片
"""
import os
import cv2
import time
from PIL import Image
def Video_to_image(srcPath,dstPath):
cap = cv2.VideoCapture(srcPath)
suc =cap.isOpened()
frame_count = 0
dstPath =srcPath.strip()+str(int(time.time()))
isExists =os.path.exists(dstPath)
timeF =25600000
if not isExists:
os.makedirs(dstPath)
while suc:
frame_count+=1
if(frame_count%timeF==0):
suc,frame = cap.read()
params = []
params.append(20)
#time.sleep(5)
filePath = dstPath+ "\ " + str(frame_count)+".jpg"
cv2.imwrite(filePath,frame,params)
cap.release()
print("unlock image:",frame_count)
Video_to_image("J:\Timescapes.2012.1080p.BluRay.x264.AC3-HDChina.mkv","J:\ ")
FFmpeg处理视频命令大全
来源:
https://blog.csdn.net/qq_41211900/article/details/81698088
/*生成图片*/
$name = "ld123.png";
$from = "/uploadsvideo/20180516/video_1526442974.mp4";
$to = $name;
$str = "ffmpeg -i ".$from." -y -f mjpeg -ss 3 -t 1 -s 740x500 ".$to.$name;
system($str,$res);
echo $res;
//更改视频格式MP4
$cmd = 'FFMPEG -i video/1.flv -c:v libx264 -strict -2 video/huangeshi.mp4';
system($cmd,$res);
echo $res;
//更改格式有压缩视频的效果,但是更改格式时,ffmpeg运行耗时比较长,占cpu达80%左右。用php调用这个命令请谨慎。
//这个命令,是压缩视频的命令,主要是复制视频流文件、复制音频文件、复制时间流。
$cmd = 'ffmpeg -i video/video-000.ts -c:v libx264 -c:a aac -copyts -strict -2 video/yasuo.ts -y';
exec($cmd,$ary,$state);
var_dump($ary);
echo $state;
$cmd="ffmpeg -threads 4 -i video/1.flv -ab 32 -ar 22050 -vcodec libx264 -qscale 6 -r 25 -s 716x374 -flags +loop -crf 24 -bt 256k -vol 200 -vf yadif video/1s.mp4";
system($cmd,$res);
echo $res;
//截取视频 -ss time_off set the start time offset 设置从视频的哪个时间点开始截取,上文从视频的第10s开始截取
//-to 截到视频的哪个时间点结束。上文到视频的第15s结束。截出的视频共5s.
//如果用-t 表示截取多长的时间如 上文-to 换位-t则是截取从视频的第10s开始,截取15s时长的视频。即截出来的视频共15s.
$cmd='ffmpeg -ss 00:00:00 -i video/xinxinsn.mp4 -vcodec copy -acodec copy -t 00:02:00 video/xinxinsn_1.mp4 -y';
shell_exec($cmd);
$cmd='ffmpeg -ss 00:02:00 -i video/xinxinsn.mp4 -vcodec copy -acodec copy -t 00:03:00 video/xinxinsn_2.mp4 -y';
shell_exec($cmd);
//给视频加水印
$cmd='ffmpeg -i video/2.mp4 -i video/login-logo.png -filter_complex "overlay=5:5" video/3_shuiying.mp4';
system($cmd);
//视频压缩:这个压缩不好用,控制码特率来压缩视频,码特率不好算,设置高了,视频质量会变大,设置小了,视频失真好严重,还不如转换格式压缩的视频好。
$cmd="ffmpeg -i video/1.flv -b:v 384k -s 640x480 video/2yasuo.flv";
system($cmd);
echo $cmd;
//播放器ffplay
$cmd="ffplay -autoexit ../uploadsvideo/video/201806151529046553-yasuo/index.m3u8";
system($cmd,$res);
echo $res;
/*********获取视频信息*********/
//方法一
$cmd="ffprobe -print_format json -show_format -show_streams -i ../uploadsvideo/video/201806141528942831/video-000.ts";
$info=exec($cmd,$ary,$res);
print_r($ary);
echo $res;
//方法二
$cmd='ffprobe -print_format json -show_error -show_format -show_streams -i "%s" ';
ob_start();
$flie="../uploadsvideo/video/201806151529046553/video-000.ts";
passthru(sprintf($cmd,$flie));
$info = ob_get_contents();
ob_end_clean();
$infoary=json_decode($info,true);
print_r($infoary);
//echo $infoary['format']['duration'];
//方法三
$flie="../uploadsvideo/video/201806151529046553/video-000.ts";
$info=getVideoInfo($flie);
//echo $info['duration'];
print_r($info);
function getVideoInfo($file) {
$cmd='ffmpeg -i "%s" 2>&1';
$command = sprintf($cmd, $file);
ob_start();
passthru($command);
$info = ob_get_contents();
ob_end_clean();
$data = array();
if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) {
$data['duration'] = $match[1]; //播放时间
$arr_duration = explode(':', $match[1]);
$data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数
$data['start'] = $match[2]; //开始时间
$data['bitrate'] = $match[3]; //码率(kb)
}
if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match)) {
$data['vcodec'] = $match[1]; //视频编码格式
$data['vformat'] = $match[2]; //视频格式
$data['resolution'] = $match[3]; //视频分辨率
$arr_resolution = explode('x', $match[3]);
$data['width'] = $arr_resolution[0];
$data['height'] = $arr_resolution[1];
}
if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match)) {
$data['acodec'] = $match[1]; //音频编码
$data['asamplerate'] = $match[2]; //音频采样频率
}
if (isset($data['seconds']) && isset($data['start'])) {
$data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
}
$data['size'] = filesize($file); //文件大小
return $data;
}