保存和读取带有透明通道的视频

这篇具有很好参考价值的文章主要介绍了保存和读取带有透明通道的视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

保存带有透明通道的视频:

import os

import imageio
from rembg import remove as removBg,new_session
from PIL import Image
import numpy as np
import cv2
from tqdm import tqdm


class cls_rembg():
    def __init__(self,model_pth):
        self.session = new_session(model_pth)
    # 替换img_src 背景图路径为img_back_path,img_back_path == None 为透明
    # 输入图片为 pil image 输出为替换好的 pil image
    def remove_background(self,img_src,bgcolor = None,img_back_path = None,needRemoveBg = True):
        imgret_newbg = img_src
        output_png = img_src
        if needRemoveBg:
            if img_back_path is not None:
                output_png = removBg(data = img_src,session=self.session,alpha_matting_erode_size = 5)
                imgret_newbg = self.replace_background(output_png,img_back_path=img_back_path)

            elif bgcolor is not None:
                output_png = removBg(data = img_src,session=self.session,bgcolor = bgcolor,alpha_matting_erode_size = 5)

        imgret_nobg = output_png
        return imgret_newbg,imgret_nobg

if __name__ == '__main__':
    rembg = cls_rembg('u2net_human_seg.onnx')
    video_stream = cv2.VideoCapture("1.mp4")
    face_nobg =  'test_nobg.mov'
    #face_nobg = 'test_nobg.webm'
    face_newbg = 'test_newbg.mp4'
    video_writer = imageio.get_writer(face_nobg, format='FFMPEG', mode='I', codec='png', fps=30,
                                      ffmpeg_params=['-pix_fmt', 'rgba'])
    #video_writer = imageio.get_writer(face_nobg, format='FFMPEG', mode='I', codec='libvpx-vp9', fps=30)
    frames_nobg = []
    frames_newbg = []
    full_frames = []
    fps = video_stream.get(cv2.CAP_PROP_FPS)
    while True:
        still_reading, frame = video_stream.read()
        if not still_reading:
            video_stream.release()
            break
        full_frames.append(frame)

    back_color = (255, 255, 255, 0)
    if len(full_frames) > 0:
        for idx in tqdm(range(len(full_frames)), 'remove/replace background'):
            frame_face = Image.fromarray(cv2.cvtColor(full_frames[idx], cv2.COLOR_BGRA2RGBA))
            frame_newbg, frame_nobg = rembg.remove_background(frame_face, back_color, None)
            frames_nobg.append(frame_nobg)
            image = np.array(frame_nobg)

            # 确保图像的尺寸与第一个图像相同
            #if image.shape[:2] != (700, 700):
                #raise ValueError("All images should have the same dimensions.")

            # 将图像的 alpha 通道分离出来
            #alpha_channel = image[:, :, 3]

            # 将图像的 alpha 通道与 RGB 通道合并,得到 RGBA 图像
            #rgba_image = np.dstack((image[:, :, :3], alpha_channel))
            video_writer.append_data(image)

    video_writer.close()
    #if len(frames_nobg) > 0:
        #frames_nobg[0].save(face_nobg, save_all=True, append_images=frames_nobg, fps=float(fps))


保存带有透明通道的视频:文章来源地址https://www.toymoban.com/news/detail-630772.html

from moviepy.editor import VideoFileClip, CompositeVideoClip
from moviepy.video.io.ffmpeg_reader import FFMPEG_VideoReader
import imageio

zm_video_path = "test_nobg.mov"

if __name__ == '__main__':

    #video_stream = imageio.get_reader("test_nobg.mov", format='FFMPEG', fps=30,
    #                                  ffmpeg_params=['-pix_fmt', 'rgba'])
    video_stream = VideoFileClip('test_nobg.mov', has_mask=True).reader
    frames_nobg = []
    frames_newbg = []
    full_frames = []
    for num, frame in enumerate(video_stream.read_frame()):
        full_frames.append(frame)

    print('{}'.format(len(full_frames)))

到了这里,关于保存和读取带有透明通道的视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包