听说闲鱼流量挺高,于是搞了一下。还真别说,搞了一个月,输入了一千大洋。搞过闲鱼的应该知道,如果你上传视频,闲鱼会给予很高的权重。但是手上只有商品的图片,有没有办法转成视频呢?
有人说ffmpeg可以,确实我也试了,但是不能满足我的需求。咋办,自己造轮子吧,谁让咱是程序员呢。
思路如下:
- 读取图片
- 计算时长,组装图片数组
- 通过pyav将图片转成视频
import logging
import numpy as np
import av
import cv2 as cv
LOGGER = logging.getLogger()
logging.basicConfig(level="DEBUG")
def generate_video(images, out_path, per_photo_second=0.8, fps = 24):
"""
:param images: 图片路径
:param out_path: 视频输出路径
:param per_photo_second: 每幅图片时长
:param fps: fps
:return:
"""
try:
cv_images = []
for i in images:
cv_images.extend([i]*int(fps*per_photo_second))
cv_images = [cv.imread(i) for i in cv_images]
# 获取图片的size, 所以图片最好尺寸一致
width, height, _ = cv_images[0].shape
container = av.open(out_path, mode='w')
# mp4格式
stream = container.add_stream('mpeg4', rate=fps)
stream.width = width
stream.height = height
stream.pix_fmt = 'yuv420p'
stream.bit_rate = 1024*1024*8
for i in cv_images:
# 转成pyav 的frame
frame = av.VideoFrame.from_ndarray(i, format='bgr24')
for packet in stream.encode(frame):
container.mux(packet)
for packet in stream.encode():
container.mux(packet)
container.close()
except Exception as e:
LOGGER.error("generate video error", exc_info=True)