>백엔드 개발 >파이썬 튜토리얼 >Python을 기반으로 여러 사진을 mp4 비디오로 병합하는 방법

Python을 기반으로 여러 사진을 mp4 비디오로 병합하는 방법

WBOY
WBOY앞으로
2023-05-15 22:22:042812검색

1. 전송이 필요한 모듈

1. Imageio 모듈

Python 모듈 imageio는 이미지 및 비디오 데이터를 읽고 쓰는 라이브러리입니다. 다양한 형식을 지원하며 NumPy 배열과 함께 작동할 수 있습니다.

다음은 몇 가지 주요 기능입니다:

  • imageio.imread(): 파일에서 이미지 데이터를 읽고 NumPy 배열을 반환합니다.

  • imageio.imwrite(): NumPy 배열을 파일에 씁니다.

  • imageio.mimsave(): 여러 이미지 프레임 목록을 애니메이션 파일(예: GIF)로 저장합니다.

  • imageio.get_reader(): 주어진 파일의 애니메이션 이미지를 프레임별로 읽는 데 사용되는 개체를 가져옵니다.

  • imageio.get_writer(): 지정된 파일에 프레임별로 애니메이션 이미지를 쓰는 데 사용되는 객체를 가져옵니다.

이 기능을 사용하면 다양한 이미지 및 비디오 데이터 형식을 쉽게 읽고 쓰고 처리할 수 있습니다.

2. 이미지 모듈

PIL은 Python에서 흔히 사용되는 이미지 처리 라이브러리입니다. 그 중 이미지 모듈은 다양한 이미지 처리 기능을 제공합니다.

다음은 이미지 모듈의 일부 주요 기능과 해당 기능입니다.

  • open(): 지정된 파일 경로의 이미지 객체를 열고 반환합니다.

  • fromarray(): numpy 배열 또는 PIL 이미지 객체를 PIL 이미지 객체로 변환합니다.

  • new(): 지정된 크기, 모드 및 색상을 사용하여 새로운 빈 이미지 개체를 만듭니다.

  • save(): 이미지를 지정된 형식의 파일로 저장합니다.

  • resize(): 이미지의 크기를 수정합니다.

  • crop(): 이미지의 지정된 영역을 자릅니다.

  • rotate(): 지정된 각도로 이미지를 회전합니다.

  • show(): 이미지를 표시합니다.

이 외에도 밝기 및 대비 조정, 필터 적용 등 일반적으로 사용되는 기능이 많이 있습니다. 이러한 함수는 다양하고 복잡한 이미지 처리 작업을 구현하는 데 도움이 될 수 있으며 일반적으로 함수의 동작을 추가로 조정하는 데 사용할 수 있는 몇 가지 매개변수가 있으며 특정 용도에 대해서는 관련 문서를 참조할 수 있습니다.

2. 여러 사진을 mp4 비디오로 병합하려면

PIL(Python Imaging Library) 또는 Python의 OpenCV를 사용하여 각 사진을 읽습니다.

타사 라이브러리 imageio를 사용하여 여러 사진을 하나의 비디오 파일로 병합하세요.

생성된 비디오 파일의 비디오 프레임 수, 비디오 크기, 비디오 재생 속도와 같은 매개변수를 구성합니다.

다음은 간단한 샘플 코드입니다.

import os
import imageio
from PIL import Image

# 设置生成的视频文件名和路径
filename = 'output.mp4'
filepath = os.path.join(os.getcwd(), filename)

# 读取所有 PNG 图片
images = []
for file_name in sorted(os.listdir()):
    if file_name.endswith('.png'):
        images.append(Image.open(file_name))

# 将图片转换为视频
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:
    for image in images:
        frame = image.convert('RGB')
        video.append_data(frame)

구현 원칙은 병합이 필요한 모든 이미지 파일을 읽어서 목록에 저장하는 것입니다. 그런 다음 imageio 라이브러리의 get_writer() 함수를 사용하여 비디오 기록기 개체를 만들고 비디오의 재생 속도(fps)를 설정합니다. 그런 다음 루프 중에 목록의 각 이미지를 읽고 RGB 색상 모드를 사용하는 형식으로 변환한 후 비디오 프레임에 추가합니다. 최종 출력은 모든 대상 이미지를 결합한 비디오 파일입니다.

3. 최적화 및 개선

여러 사진의 처리 속도를 높이려면 프로그램을 병렬화하세요. 참고: 다음 방법은 최적의 방법이 아닐 수 있습니다

import os
import concurrent.futures
import imageio
from PIL import Image

# 设置生成的视频文件名和路径
filename = "output.mp4"
filepath = os.path.join(os.getcwd(), filename)


def process_image(file_name):
    if file_name.endswith(".png"):
        image = Image.open(file_name)
    return image.convert("RGB")


with concurrent.futures.ThreadPoolExecutor() as executor:
    # 寻找所有 png 文件
    image_files = [file for file in os.listdir() if file.endswith(".png")]

    # 利用线程池并行处理图像
    images = list(executor.map(process_image, image_files))


# 将图片转换为视频文件
fps = 30  # 每秒钟30帧
with imageio.get_writer(filepath, fps=fps) as video:
    for image in images:
        video.append_data(image)

여기에서는 동시 처리 라이브러리의 ThreadPoolExecutor 객체가 병렬 처리에 사용됩니다. 먼저 메인 스레드에서 현재 작업 디렉터리에 병합해야 하는 모든 PNG 이미지를 검색하고 읽고 작업 목록을 만듭니다. 그런 다음 작업을 스레드 풀에 제출하고 대상 파일이 빠르고 비동기적으로 처리될 수 있는지 확인합니다. 모든 PNG 이미지가 처리된 후 이미지 목록에 저장되고 최종적으로 비디오로 변환됩니다.

위 내용은 Python을 기반으로 여러 사진을 mp4 비디오로 병합하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제