ホームページ  >  記事  >  バックエンド開発  >  Python に基づいて複数の写真を MP4 ビデオに結合する方法

Python に基づいて複数の写真を MP4 ビデオに結合する方法

WBOY
WBOY転載
2023-05-15 22:22:042658ブラウズ

1. 転送が必要なモジュール

1. Imageio モジュール

Python モジュール imageio は、画像およびビデオ データを読み書きするためのライブラリです。さまざまな形式をサポートし、NumPy 配列を操作できます。

以下は重要な関数の一部です:

  • imageio.imread(): ファイルから画像データを読み取り、NumPy 配列を返します。

  • imageio.imwrite(): NumPy 配列をファイルに書き込みます。

  • imageio.mimsave(): 複数の画像フレームのリストをアニメーション ファイル (GIF など) として保存します。

  • imageio.get_reader(): 指定されたファイル内のアニメーション画像をフレームごとに読み取るために使用されるオブジェクトを取得します。

  • imageio.get_writer(): 指定されたファイルにフレームごとにアニメーション画像を書き込むために使用されるオブジェクトを取得します。

これらの関数を使用すると、さまざまな画像およびビデオ データ形式の読み取り、書き込み、処理が簡単に行えます。

2. 画像モジュール

PIL は Python でよく使われる画像処理ライブラリで、Image モジュールはさまざまな画像操作や処理機能を提供する重要なモジュールです。

以下は、Image モジュール内のいくつかの主要な関数とその関数です:

  • open(): 指定されたファイル パスの画像オブジェクトを開いて返します。

  • fromarray(): numpy 配列または PIL イメージ オブジェクトを PIL イメージ オブジェクトに変換します。

  • new(): 指定されたサイズ、モード、色の新しい空の画像オブジェクトを作成します。

  • save(): 画像を指定された形式のファイルとして保存します。

  • resize(): 画像のサイズを変更します。

  • crop(): 画像の指定された領域をトリミングします。

  • rotate(): 指定された角度だけ画像を回転します。

  • show(): 画像を表示します。

そのほかにも、明るさやコントラストの調整、フィルターの適用など、よく使う機能がたくさんあります。これらの関数は、さまざまな複雑な画像処理タスクの実装に役立ちます。通常、関数の動作をさらに調整するために使用できるパラメーターがいくつかあります。具体的な使用方法については、関連ドキュメントを参照してください。

2. 複数の画像を mp4 ビデオに結合するには

PIL (Python Imaging Library) または Python の OpenCV を使用して各画像を読み取ります。

サードパーティのライブラリ imageio を使用して、複数の画像を 1 つのビデオ ファイルに結合します。

生成されたビデオ ファイルのビデオ フレーム数、ビデオ サイズ、ビデオ再生速度などのパラメータを構成します。

以下は簡単なサンプル コードです。

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)

ここでは、concurrent.futures ライブラリの ThreadPoolExecutor オブジェクトが並列処理に使用されます。まず、メイン スレッドで、現在の作業ディレクトリにマージする必要があるすべての PNG 画像を検索して読み取り、タスク リストを作成します。次に、タスクをスレッド プールに送信し、ターゲット ファイルが迅速かつ非同期で処理できることを確認します。すべての PNG 画像が処理された後、画像のリストに保存され、最終的にビデオに変換されます。

以上がPython に基づいて複数の写真を MP4 ビデオに結合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。