视频抓取图片

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;
}
发布了98 篇原创文章 · 获赞 0 · 访问量 2670

猜你喜欢

转载自blog.csdn.net/qq_22017379/article/details/104679603