前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片与视频互转(python)

图片与视频互转(python)

原创
作者头像
用户4363240
修改2020-05-06 11:47:30
1.9K0
修改2020-05-06 11:47:30
举报
文章被收录于专栏:VisonVison

视频转图片

usage example: python video2jpg.py --video 1574393815.avi --out_dir 1574393815

代码语言:txt
复制
# video2jpg.py
import os
import cv2
import argparse

def video2jpg(video_name, out_dir):
    cap = cv2.VideoCapture(video_name)
    i = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if frame is None:
            break
        cv2.imwrite(f'{out_dir}/%05d.jpg' % i, frame)
        i += 1
    cap.release()

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--video', type=str, help='example.avi')
    parser.add_argument('--out_dir', type=str, help='./example')
    args = parser.parse_args()
    if not os.path.exists(args.out_dir):
        os.makedirs(args.out_dir)
    video2jpg(args.video, args.out_dir)

图片合成avi视频

usage example: python jpg2video.py --in_dir 1574393815 --out_dir ./ --fps 25 --out_height 640 --out_width 480

代码语言:txt
复制
# jpg2video.py
import os
from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize
import argparse

def write(images, outimg=None, fps=5, size=None, is_color=True, format="XVID", outvid='demo.avi'):
    fourcc = VideoWriter_fourcc(*format)
    vid = None
    for image in images:
        if image.split('.')[-1] != 'jpg':
            continue
        img = imread(image)
        if vid is None:
            if size is None:
                size = img.shape[1], img.shape[0]
            vid = VideoWriter(outvid, fourcc, float(fps), size, is_color)
        if size[0] != img.shape[1] and size[1] != img.shape[0]:
            img = resize(img, size)
        vid.write(img)
    vid.release()
    return vid

def jpg2video(in_dir, out_dir, fps, out_size):
    filenames = os.listdir(in_dir)
    filenames = sorted(filenames)
    filenamex = [os.path.join(in_dir, x) for x in filenames]
    video_name = in_dir.split('/')[-1] + '.avi'
    write(filenamex, fps=fps, size=out_size, outvid=os.path.join(out_dir, video_name))

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--in_dir', type=str, help='./example')
    parser.add_argument('--out_dir', type=str, help='./')
    parser.add_argument('--fps', type=int, help='25')
    parser.add_argument('--out_height', type=int, help='640')
    parser.add_argument('--out_width', type=int, help='480')
    args = parser.parse_args()
    jpg2video(args.in_dir, args.out_dir, args.fps, (args.out_width, args.out_height))

合成好的视频如果打不开,可能是电脑上缺少合适的视频解码器。在mac上推荐使用IINA player。

使用ffmpeg将图像转为视频

参考 https://blog.csdn.net/xiangxianghehe/article/details/104562437

cat *.jpg | ffmpeg -f image2pipe -vcodec mjpeg -i - -c:v h264 -r 24 output.mp4

注意会按字典序对图像名进行排列并生成视频。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 视频转图片
  • 图片合成avi视频
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档