PythonのPPTプレゼンテーションでビデオを追加、置換、および抽出する方法

教室、会議室、または仮想会議のいずれであっても、PowerPointプレゼンテーションは影響力のある視覚的コンテンツを提供するための必須のツールとなっています。PowerPointにはプレゼンテーションを強化するためのさまざまな機能が備わっており、その中にはビデオを追加する機能も含まれています。ビデオを利用することで、複雑な概念を伝えたり、製品の機能をデモンストレーションしたり、観客を引きつける要素を追加することができます。しかし、PowerPointプレゼンテーションでビデオを手動で管理するのは手間がかかります。このような場合、Pythonのような汎用プログラミング言語が役立ち、**PowerPointプレゼンテーション内のビデオを挿入、置換、または抽出する**ための簡単な方法を提供します。本記事では、**Pythonを使用してPowerPointでビデオを管理する方法**、つまりPPTにビデオを挿入する方法、PPT内のビデオを置換する方法、およびPPTからビデオを抽出する方法について説明します。

- **[Pythonを使用して指定したスライドの指定した位置にビデオを追加する方法](#pythonを使用して指定したスライドの指定した位置にビデオを追加する方法)**
- **[Pythonを使用して指定したビデオを新しいビデオで置換する方法](#pythonを使用して指定したビデオを新しいビデオで置換する方法)**
- **[Pythonを使用してPPTのスライドからビデオを抽出する方法](#pythonを使用してPPTのスライドからビデオを抽出する方法)**

この記事で説明する方法には、[Spire.Presentation for Python](https://www.e-iceblue.com/Download/Spire-Presentation-Python.html)が必要です。公式ウェブサイトからダウンロードするか、PyPIを通じてインストールすることができます：`pip install Spire.Presentation`。

## Pythonを使用して指定したスライドの指定した位置にビデオを追加する方法
PPTに挿入されたビデオは、追加のプラグインは不要でPPT内で直接再生することができます。また、ビデオはPPTに埋め込まれるため、追加の保存先は必要ありません。以下に詳細な手順を示します：

- **Presentation** クラスのインスタンスを作成する。
- **Presentation.LoadFromFile()** メソッドを使用してPowerPointドキュメントをロードする。
- **Presentation.Slides[]** メソッドを使用して特定のスライドをインデックスで取得する。
- **RectangleF** クラスのインスタンスを作成する。
- **ISlide.Shapes.AppendVideoMedia(String, RectangleF)** メソッドを使用してスライドにビデオを追加する。
- **IVideo.PictureFill.Picture.Url** プロパティを使用してビデオのサムネイルを設定する。
- **Presentation.SaveToFile()** メソッドを使用して結果のドキュメントを保存する。

**コード例**
```python
from spire.presentation.common import *
import math
from spire.presentation import *

# Presentationオブジェクトを作成する
presentation = Presentation()

# プレゼンテーションをロードする
presentation.LoadFromFile("Sample.pptx")

# タイトルの矩形を作成する
rec_title = RectangleF.FromLTRB(50, 280, 160+50, 50+280)
shape_title = presentation.Slides[1].Shapes.AppendShape(
    ShapeType.Rectangle, rec_title)
shape_title.ShapeStyle.LineColor.Color = Color.get_Transparent()

shape_title.Fill.FillType = FillFormatType.none
para_title = TextParagraph()
para_title.Text = "ビデオ:"
para_title.Alignment = TextAlignmentType.Center
para_title.TextRanges[0].LatinFont = TextFont("HarmonyOS Sans SC")
para_title.TextRanges[0].FontHeight = 32
para_title.TextRanges[0].IsBold = TriState.TTrue
para_title.TextRanges[0].Fill.FillType = FillFormatType.Solid
para_title.TextRanges[0].Fill.SolidColor.Color = Color.FromArgb(
    255, 68, 68, 68)
shape_title.TextFrame.Paragraphs.Append(para_title)

# ビデオを追加する
left = math.trunc(presentation.SlideSize.Size.Width / float(2)) - 125
videoRect = RectangleF.FromLTRB(left, 300, 150+left, 150+240)
video = presentation.Slides[1].Shapes.AppendVideoMedia(
    "Cat1.mp4", videoRect)
video.PictureFill.Picture.Url = "https://i.postimg.cc/zfspqJKC/Cat1.png"

# ドキュメントを保存する
presentation.SaveToFile("output/ビデオの追加.pptx", FileFormat.Pptx2010)
presentation.Dispose()
```

**挿入の結果**
![Pythonを使用して指定したスライドの指定した位置にビデオを追加する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/f02fb395-af14-09ed-9d52-ccee57c7c0d6.png)

## Pythonを使用して指定したビデオを新しいビデオで置換する方法
操作手順は以下の通りです：
- **Presentation** クラスのインスタンスを作成する。
- **Presentation.LoadFromFile()** メソッドを使用してPowerPointドキュメントをロードする。
- **Presentation.Videos** プロパティを使用してドキュメント内の埋め込みビデオを取得する。
- **Presentation.Slides[]** プロパティを使用してスライドを取得する。
- スライド内のシェイプを反復処理し、シェイプが **IVideo** インスタンスであるかどうかを判断します。もしもそうであれば、置換操作を行います。
- **VideoCollection.AppendByStream()** メソッドを使用してビデオデータをドキュメントに埋め込みます。
- **IVideo.EmbeddedVideoData** プロパティを使用してビデオデータを指定したビデオシェイプのデータに設定します。
- **IVideo.PictureFill.Picture.Url** を使用して新しいプレビュー画像を設定します。
- **Presentation.SaveToFile()** メソッドを使用してプレゼンテーションを保存します。

**コード例**
```python
from spire.presentation.common import *
from spire.presentation import *

# Presentationオブジェクトを作成する
presentation = Presentation()

# プレゼンテーションをロードする
presentation.LoadFromFile("output/ビデオの追加.pptx")

# 埋め込まれたビデオを取得する
videos = presentation.Videos

# ビデオが存在するスライドを取得する
sld = presentation.Slides[1]

# スライド内のシェイプを反復処理する
for sp in sld.Shapes:
    # シェイプがIVideoインスタンスであるかどうかを確認する
    if isinstance(sp, IVideo):
        video = sp if isinstance(sp, IVideo) else None
        # ビデオをロードする
        stream = Stream("Cat2.mp4")
        # ビデオをプレゼンテーションに埋め込む
        videoData = videos.AppendByStream(stream)
        # シェイプのビデオを設定する
        video.EmbeddedVideoData = videoData
        # 新しいプレビュー画像を設定する
        video.PictureFill.Picture.Url = "https://i.postimg.cc/kX1fGrbp/Cat2.png"

# ドキュメントを保存する
presentation.SaveToFile("output/ビデオの置換.pptx", FileFormat.Pptx2016)
presentation.Dispose()
```

**置換の結果**
![Pythonを使用して指定したビデオを新しいビデオで置換する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ec422306-089f-c006-0d97-721397c2e0e4.png)

## Pythonを使用してPPTのスライドからビデオを抽出する方法
このAPIを使用すると、プレゼンテーション内のすべてのビデオを簡単に抽出して指定されたフォルダに保存することができます。以下は手順です：
- **Presentation** クラスのインスタンスを作成します。
- **Presentation.LoadFromFile()** メソッドを使用してPowerPointドキュメントをロードします。
- プレゼンテーションのスライドを反復処理し、スライド内のシェイプを反復処理します。シェイプがビデオであるかどうかを判断します。
- シェイプがビデオである場合、**IVideo.EmbeddedVideoData.SaveToFile()** メソッドを使用してビデオを指定した場所に保存します。

**コード例**
```python
from spire.presentation.common import *
from spire.presentation import *

# Presentationオブジェクトを作成する
presentation = Presentation()

# プレゼンテーションをロードする
presentation.LoadFromFile("output/ビデオの置換.pptx")

i = 0
result = "output/Videos/" + "ExtractVideo_"+str(i)+".mp4"

# プレゼンテーションのスライドを反復処理する
for slide in presentation.Slides:
    # スライド内のシェイプを反復処理する
    for shape in slide.Shapes:
        # シェイプがビデオであるかどうかを確認する
        if isinstance(shape, IVideo):
            # ビデオを保存する
            shape.EmbeddedVideoData.SaveToFile(result)
            i += 1
presentation.Dispose()
```

**抽出の結果**
![Pythonを使用してPPTのスライドからビデオを抽出する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/0d8b08cd-6a61-ffa7-ff79-c2e7b9ffb741.png)

### 総括
本記事では、Pythonコードを使用してPowerPointプレゼンテーション内のビデオを処理する方法、ビデオの追加、置換、抽出について説明しました。これにより、開発者はプレゼンテーション内のビデオをより簡単に操作することができます。

Spire.Presentation for Pythonでは、他にも多くのPowerPointドキュメント操作がサポートされています。[Spire.Presentation for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.Presentation-for-Python/Program-Guide/Spire.Presentation-for-Python-Program-Guide-Content.html)にアクセスしてください。問題が発生した場合は、[Spire.Presentationフォーラム](https://www.e-iceblue.com/forum/spire-presentation-f14.html)で技術サポートを受けることができます。

[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)