2026/04/10
Media Agent

Media Agentは、動画の音声を吹き替えや、字幕、同時に翻訳もできます。作成した動画のコンテンツの自分の音声を標準の音声や、特別音声に吹き替えできます。同時に次のファイルを生成します。

また音声からテキストに変換した結果を確認して、間違ったところを修正して再吹き替えもできます。

  1. 元音声ファイル
  2. 吹き替え音声ファイル
  3. 吹き替え動画ファイル
  4. 吹き替え中間データファイル

Media Agentは、Job形式稼働なので、別のEC2のSpot Instanceに設定し、docker コンテナーで稼働します。次は稼働環境構築手順です。

Spot instanceのEC2を立ち上げる

注意ところ:

  1. Spot request type: persistent
  2. Spot interruption behaviorstop: stop
  3. Shutdown behavior: stop


#!/bin/bash

# Configuration
INSTANCE_ID=${1:-"i-0d5ddd7271102c535"}
USER="ubuntu"
SSH_KEY="your-key.pem" # Change this to your .pem file path
EBS_PATH="/var/lib/ghost-next/media-jobs"
CONTAINER_NAME="media-job-runner"

echo "--- Target Instance: $INSTANCE_ID ---"

# 1. Start Instance if stopped
STATE=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].State.Name' --output text)

if [ "$STATE" == "stopped" ]; then
    echo "Instance is stopped. Starting now..."
    aws ec2 start-instances --instance-ids $INSTANCE_ID
    echo "Waiting for instance to pass initialization..."
    aws ec2 wait instance-running --instance-ids $INSTANCE_ID
    # Give SSH a few seconds to breathe
    sleep 10
elif [ "$STATE" == "running" ]; then
    echo "Instance is already running."
else
    echo "Instance state is: $STATE. Please check AWS console."
    exit 1
fi

# Get Public IP
PUBLIC_IP=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)
echo "Public IP: $PUBLIC_IP"

# 2, 3, 4. Run internal checks via SSH
echo "--- Running Internal Checks ---"
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "$USER@$PUBLIC_IP" << EOF
  # 2. Check EBS Mount
  if findmnt "$EBS_PATH" > /dev/null; then
    echo "SUCCESS: EBS is mounted correctly at $EBS_PATH"
  else
    echo "FAILURE: EBS is NOT mounted! Attempting sudo mount -a..."
    sudo mount -a || echo "ERROR: Mount failed."
  fi

  # 3. Check Container
  if [ "\$(sudo docker ps -q -f name=$CONTAINER_NAME)" ]; then
    echo "SUCCESS: Container $CONTAINER_NAME is running."
  else
    echo "WARNING: Container $CONTAINER_NAME is NOT running."
  fi

  # 4. Run Deploy Script (Updates image/app)
  DEPLOY_SCRIPT="$EBS_PATH/deploy/deploy-on-ec2.sh"
  if [ -f "\$DEPLOY_SCRIPT" ]; then
    echo "Executing deploy script: \$DEPLOY_SCRIPT"
    chmod +x "\$DEPLOY_SCRIPT"
    # Execute as docker group to avoid permission issues
    sudo sg docker -c "bash \$DEPLOY_SCRIPT"
  else
    echo "Skip: Deploy script not found at \$DEPLOY_SCRIPT"
  fi
EOF

echo "--- All tasks completed ---"

  1. aws cliの環境を設定
  2. docker & docker compose の環境と権限を設定
  3. ジョブ稼働の一時保存先EBSをmount、再起動の設定
#!/bin/bash
# ------------------------------------------------------------------
# 自動セットアップ・スクリプト
# ------------------------------------------------------------------
set -e

echo "--- 1. インストール (CLI, Docker, Compose) ---"
sudo apt-get update -y
sudo apt-get install -y ca-certificates curl gnupg unzip xfsprogs

# AWS CLI
if ! command -v aws &> /dev/null; then
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip -q awscliv2.zip && sudo ./aws/install && rm -rf awscliv2.zip aws/
fi

# Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

echo "--- 2. 権限設定 & EBSマウント ---"
sudo usermod -aG docker $USER

MOUNT_POINT="/var/lib/ghost-next/media-jobs"
DEVICE="/dev/nvme1n1"
sudo mkdir -p $MOUNT_POINT

# フォーマット(未設定時のみ) & マウント
if [ "$(sudo file -s $DEVICE)" == "$DEVICE: data" ]; then
    sudo mkfs -t xfs $DEVICE
fi
UUID=$(sudo blkid -s UUID -o value $DEVICE)
if ! grep -q "$UUID" /etc/fstab; then
    echo "UUID=$UUID  $MOUNT_POINT  xfs  defaults,nofail  0  2" | sudo tee -a /etc/fstab
fi
sudo systemctl daemon-reload
sudo mount -a
sudo chown -R $USER:$USER $MOUNT_POINT

echo "--- 3. Docker実行 (ここがポイント) ---"

# この方法なら、これ以降のコマンドは 'sg' を付けずに書けます
# bash -c の中に、実行したいコマンドを全部詰め込みます
exec sg docker -c "
  echo 'Docker権限で実行中...'
  docker run hello-world
  
  # ここにあなたの docker compose などの起動コマンドを書く
  # cd /home/ubuntu/your-repo && docker compose up -d
  
  echo 'すべてのデプロイが完了しました!'
  bash # 最後にこれを入れれば、Docker権限を持ったままシェルに残れます
"