Maison  >  Article  >  développement back-end  >  Comment fusionner plusieurs images dans des vidéos mp4 basées sur Python

Comment fusionner plusieurs images dans des vidéos mp4 basées sur Python

WBOY
WBOYavant
2023-05-15 22:22:042726parcourir

1. Modules qui doivent être transférés

1. Module Imageio

Le module Python imageio est une bibliothèque pour lire et écrire des données d'images et de vidéos. Il prend en charge plusieurs formats et peut fonctionner avec les tableaux NumPy.

Voici quelques fonctions clés :

  • imageio.imread() : lit les données d'image du fichier et renvoie un tableau NumPy.

  • imageio.imwrite() : Écrivez un tableau NumPy dans un fichier.

  • imageio.mimsave() : enregistrez une liste de plusieurs images sous forme de fichier d'animation (tel que GIF).

  • imageio.get_reader() : Obtient un objet utilisé pour lire l'image animée dans le fichier donné image par image.

  • imageio.get_writer() : obtient un objet utilisé pour écrire des images animées dans le fichier spécifié image par image.

Utilisez ces fonctions pour lire, écrire et traiter facilement divers formats de données d'image et vidéo.

2. Module Image

PIL est une bibliothèque de traitement d'image couramment utilisée en Python. Le module Image est un module important parmi eux. Il fournit diverses fonctions d'exploitation et de traitement d'image.

Voici quelques fonctions principales et leurs fonctions dans le module Image :

  • open() : ouvre et renvoie l'objet image du chemin de fichier spécifié.

  • fromarray() : convertit un tableau numpy ou un objet image PIL en objet image PIL.

  • new() : Créez un nouvel objet image vierge avec une taille, un mode et une couleur spécifiés.

  • save() : Enregistrez l'image sous forme de fichier au format spécifié.

  • resize() : Modifie la taille de l'image.

  • crop() : Recadrez la zone spécifiée de l'image.

  • rotate() : Faites pivoter l'image d'un angle spécifié.

  • show() : Afficher l'image.

De plus, il existe de nombreuses autres fonctions couramment utilisées, telles que le réglage de la luminosité et du contraste, l'application de filtres, etc. Ces fonctions peuvent nous aider à mettre en œuvre diverses tâches de traitement d'image complexes, et certains paramètres peuvent généralement être utilisés pour ajuster davantage le comportement de la fonction. Vous pouvez vous référer à la documentation appropriée pour une utilisation spécifique.

2. Pour fusionner plusieurs images dans une vidéo mp4

Utilisez PIL (Python Imaging Library) ou OpenCV en Python pour lire chaque image.

Utilisez la bibliothèque tierce imageio pour fusionner plusieurs images en un seul fichier vidéo.

Configurez des paramètres tels que le nombre d'images vidéo, la taille de la vidéo et la vitesse de lecture vidéo du fichier vidéo généré.

Ce qui suit est un exemple de code simple :

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)

Le principe de mise en œuvre est de lire tous les fichiers image qui doivent être fusionnés et de les stocker dans une liste. Utilisez ensuite la fonction get_writer() de la bibliothèque imageio pour créer un objet enregistreur vidéo et définir la vitesse de lecture (fps) de la vidéo. Ensuite, pendant la boucle, chaque image de la liste est lue et ajoutée à l'image vidéo après l'avoir convertie dans un format avec mode couleur RVB. Le résultat final est un fichier vidéo qui combine toutes les images cibles.

3. Optimiser et améliorer

Parallélisez le programme pour accélérer le traitement de plusieurs images. Remarque : La méthode suivante n'est peut-être pas la méthode optimale

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)

L'objet ThreadPoolExecutor de la bibliothèque concurrent.futures est utilisé ici pour le traitement parallèle. Tout d'abord, dans le fil de discussion principal, recherchez et lisez toutes les images PNG qui doivent être fusionnées dans le répertoire de travail actuel, puis créez une liste de tâches. Soumettez ensuite la tâche au pool de threads et assurez-vous que le fichier cible peut être traité rapidement et de manière asynchrone. Une fois toutes les images PNG traitées, elles sont stockées dans une liste d'images et finalement converties en vidéos.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer