python avi 转换 jpg_我是如何用python+小程序实现延时摄影的

以下是详细步骤

  1. 打开手机,使用下面图片小程序码“定时间隔拍照”拍照得到一大堆图片。手机每隔n秒拍一张图片,得到很多张图片(通过手机小程序可以实现,你也可以用其他软件)

0560d42157c4c295125f23f28523020e.png
  1. 把这些图片拷贝到“Camera”文件夹下。
  2. 运行python文件,就会在“add_text”文件夹下得到添加了时间的图片,并在python所在的文件夹生成了视频。
  3. 视频演示如下:https://www.bilibili.com/video/BV1La4y1E7Kv/

缺点

  1. 步骤繁琐:没有手机自带的延时摄影方便。
  2. 画质差:手机小程序“定时间隔拍照”保存的图片不够清晰,图片偏小,适合对画质不高的人群。这个缺点可以通过去找其他软件代替把他规避掉。

优点

  1. DIY程度高:可以控制视频的时间,帧数,图片水印等效果。
  2. 省空间:视频小,一千张小图片生成后视频约100兆大小。

fa2304a464d3318c5d6e80eca72642ec.png

上面的图片转成下面的视频

d3a3e72dbd87d26c86eeb56fbff5a4a4.png

代码地址:

https://github.com/dxp432/time_lapse_pic_2_video

# @author: 公众账号:小鹏同学
import time
import os
import cv2


def sort_file_by_time(file_path):
    # 文件排序
    #./Camera/mmexport1598752339323.jpg
    files = os.listdir(file_path)
    if not files:
        return
    else:
        files = sorted(files, key=lambda x: os.path.getmtime(
            os.path.join(file_path, x)))  # 格式解释:对files进行排序.x是files的元素,:后面的是排序的依据.   x只是文件名,所以要带上join.
        return files


def jpg_avi():
    # 图片转换为视频
    # 保存视频的FPS,可以适当调整
    fps = 24

    # 可以用(*'DVIX')或(*'X264'),如果都不行先装ffmepg: sudo apt-get install ffmepg
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')

    # myVideoName.avi是要生成的视频名称
    saveVideoName = 'myVideoName.mp4'

    # (256,341)是图片尺寸,与图片尺寸不符合会报错
    frameSize = (1080, 787)

    # videoWriter = cv2.VideoWriter(saveVideoName='myvideoname.avi',
    # fourcc=cv2.VideoWriter_fourcc(*'MJPG'), fps=1, frameSize=(256,341)))
    videoWriter = cv2.VideoWriter(saveVideoName, fourcc, fps, frameSize)

    my_sort_files = sort_file_by_time("./add_text/")
    for i in range(len(my_sort_files)):
        img = cv2.imread("./add_text/%s" % str(my_sort_files[i]), -1)
        print('生成视频帧: ' + str(my_sort_files[i]))
        videoWriter.write(img)
    # for i in range(1, 189):
    #     img = cv2.imread("./add_text/%s.jpg" % i, -1)
    #     print(i)
    #     videoWriter.write(img)
    videoWriter.release()


def add_text():
    # 给图片的左下角添加时间文字
    my_sort_files = sort_file_by_time("./Camera/")
    for i in range(len(my_sort_files)):

        my_old_name = './Camera/' + str(my_sort_files[i])
        print('add text : ' + my_old_name)
        # my_new_name = './sun/' + str(i + 1) + ".jpg"
        # os.rename(my_old_name, my_new_name)
        # 加载背景图片
       
        # 显示图片
        # cv2.imshow("add_text", bk_img)
        # cv2.waitKey()
        # 保存图片
        # cv2.imwrite("./add_text/" + my_old_name[13:24] + '' + my_old_name[24:26] + '' + my_old_name[26:], bk_img)
        # 如果是时间戳./Camera/mmexport1598752339323.jpg
        timestamp = my_old_name[17:-7] # 1598752187266转int时太大,需要截掉末尾3位 所以是-7

        # timeArray = time.strptime(my_time_from_str, r"%Y-%m-%d %H:%M:%S")
        # my_left_botton_time = time.strftime(r"%Y%m%d-%H:%M:%S",timeArray)
        # print(timeArray)
        # cv2.imwrite("./add_text/" + my_left_botton_time, bk_img)

        #转换成localtime
        time_local = time.localtime(int(timestamp))
        #转换成新的时间格式(2016-05-05 20:28:54)
        dt = time.strftime(r"%Y-%m-%d %H:%M:%S",time_local)
        my_str_dt = str(dt)
        my_str_dt = my_str_dt.replace(' ', '___')
        my_str_dt = my_str_dt.replace(':', '_')

        bk_img = cv2.imread(my_old_name)# 读取图片的路径加名字
        # 在图片上添加文字信息
        cv2.putText(bk_img, my_str_dt, (50, 760), cv2.FONT_HERSHEY_SIMPLEX,
                    1, (255, 255, 255), 1, cv2.LINE_AA)
        cv2.imwrite("./add_text/" + str(my_str_dt) + '.jpg', bk_img)
        print(dt)


if __name__ == '__main__':
    add_text()
    jpg_avi()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值