powerpointでは簡単にビデオをスライドに載せられます
WORDではどうでしょうか

アイコンしか表示されません
アイコンではビデオの中身が見られません
クリックすると別ウインドウでビデオが表示されます

もっといい方法は

mp4をgifに変換して画像を貼り付けます
そうするとビデオがwordの中で動きます
本当ならクリックするとビデオが動いてくれればいいのですが



aiにプログラムをつくてもらいました
ffmpegを使って変換するようです
buildしてexeにしたので使いやすいです
exeにmp4をドロップすると変換を行います

 

 

package main

import (
    "flag"
    "fmt"
    "os"
    "os/exec"
    "path/filepath"
)

// 画質設定を管理する構造体
type QualitySettings struct {
    FPS       int
    Scale     int    // 幅 (px)
    MaxColors int    // 最大色数 (最大256)
    Dither    string // ディザリング手法 (floyd_steinberg, bayer, none)
}

func main() {
    // コマンドライン引数の定義
    inputFile := flag.String("i", "", "入力するMP4ファイルパス (必須)")
    outputFile := flag.String("o", "", "出力するGIFファイルパス (省略時は入力ファイル名.gif)")
    preset := flag.String("q", "medium", "画質プリセット: low, medium, high")
    customFPS := flag.Int("fps", 0, "カスタムFPS (指定しない場合はプリセットに従う)")
    customWidth := flag.Int("width", 0, "カスタム画像幅 (指定しない場合はプリセットに従う)")

    flag.Parse()
//---
    *inputFile=os.Args[1]

    // 必須チェック
    if *inputFile == "" {
        fmt.Println("エラー: 入力ファイル (-i) を指定してください。")
        flag.Usage()
        os.Exit(1)
    }

    // ffmpeg の存在確認
    if _, err := exec.LookPath("./ffmpeg"); err != nil {
        fmt.Println("エラー: ffmpeg がシステムに見つかりません。パスが通っているか確認してください。")
        os.Exit(1)
    }

    // 出力ファイル名が指定されていない場合の処理
    if *outputFile == "" {
        ext := filepath.Ext(*inputFile)
        *outputFile = (*inputFile)[:len(*inputFile)-len(ext)] + ".gif"
    }

    // 画質設定の取得
    settings := getQualitySettings(*preset)

    // カスタム値が指定されていれば上書き
    if *customFPS > 0 {
        settings.FPS = *customFPS
    }
    if *customWidth > 0 {
        settings.Scale = *customWidth
    }

    fmt.Printf("変換を開始します: %s -> %s\n", *inputFile, *outputFile)
//    fmt.Printf("設定: FPS=%d, 幅=%dpx, 最大色数=%d, ディザリング=%s\n",
//        settings.FPS, settings.Scale, settings.MaxColors, settings.Dither)

    // FFmpeg フィルター文字列の作成 (高品質化のための2パスパレット処理)
    vfFilter := fmt.Sprintf(
        "fps=%d,scale=%d:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=%d[p];[s1][p]paletteuse=dither=%s",
        settings.FPS, settings.Scale, settings.MaxColors, settings.Dither,
    )

    // ffmpeg コマンドの構築
    cmd := exec.Command("./ffmpeg",
        "-y",                 // 同名ファイルが存在する場合の上書きを許可
        "-i", *inputFile,    // 入力ファイル
        "-vf", vfFilter,      // ビデオフィルター
                "-loglevel","quiet",
        *outputFile,          // 出力ファイル
    )

    // 標準出力と標準エラーをCLIに出力する設定
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    // 実行
    if err := cmd.Run(); err != nil {
        fmt.Printf("変換エラー: %v\n", err)
        os.Exit(1)
    }

//    fmt.Println("変換が完了しました!")
}

// プリセットに応じた設定を返す関数
func getQualitySettings(preset string) QualitySettings {
    switch preset {
    case "low":
        return QualitySettings{
            FPS:       10,
            Scale:     320,
            MaxColors: 128,
            Dither:    "bayer:bayer_scale=5", // 容量削減重視のディザリング
        }
    case "high":
        return QualitySettings{
            FPS:       20,
            Scale:     800,
            MaxColors: 256,
            Dither:    "floyd_steinberg", // 高画質グラデーション重視
        }
    case "medium":
        fallthrough
    default:
        return QualitySettings{
            FPS:       15,
            Scale:     480,
            MaxColors: 256,
            Dither:    "floyd_steinberg",
        }
    }
}