#!/bin/bash
# extract_media.sh
# 功能：从MP4文件中自动提取YUV视频数据和PCM音频数据
# 使用方法: ./extract_media.sh <输入MP4文件路径> [视频宽度] [视频高度]

# 设置默认参数
RESOURCES_DIR="resources"
INPUT_FILE="$1"
VIDEO_WIDTH="${2:-1280}"  # 默认视频宽度1280
VIDEO_HEIGHT="${3:-720}"  # 默认视频高度720
SAMPLE_RATE="44100"       # 音频采样率
AUDIO_CHANNELS="2"        # 音频声道数

# 输出文件名
OUTPUT_YUV="$RESOURCES_DIR/raw_video.yuv"
OUTPUT_PCM="$RESOURCES_DIR/raw_audio.pcm"

# 检查ffmpeg是否安装
command -v ffmpeg >/dev/null 2>&1 || { echo "错误: 需要ffmpeg但未找到，请安装ffmpeg后再试。"; exit 1; }

# 检查输入参数
if [ -z "$INPUT_FILE" ]; then
    echo "使用方法: $0 <输入MP4文件路径> [视频宽度] [视频高度]"
    echo "例如: $0 resources/test.mp4 1280 720"
    exit 1
fi

# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "错误: 输入文件 '$INPUT_FILE' 不存在。"
    exit 1
fi

# 确保resources目录存在
mkdir -p "$RESOURCES_DIR"

# 提取视频数据为YUV格式
echo "正在从 '$INPUT_FILE' 提取YUV视频数据 (${VIDEO_WIDTH}x${VIDEO_HEIGHT})..."
ffmpeg -i "$INPUT_FILE" -pixel_format yuv420p -s ${VIDEO_WIDTH}x${VIDEO_HEIGHT} -v quiet -y "$OUTPUT_YUV"
if [ $? -eq 0 ]; then
    echo "✓ 成功提取YUV视频数据到 '$OUTPUT_YUV'"
else
    echo "✗ 提取YUV视频数据失败。"
    exit 1
fi

# 提取音频数据为PCM格式
echo "正在从 '$INPUT_FILE' 提取PCM音频数据 (${SAMPLE_RATE}Hz, ${AUDIO_CHANNELS}声道)..."
ffmpeg -i "$INPUT_FILE" -ar $SAMPLE_RATE -ac $AUDIO_CHANNELS -f s16le -v quiet -y "$OUTPUT_PCM"
if [ $? -eq 0 ]; then
    echo "✓ 成功提取PCM音频数据到 '$OUTPUT_PCM'"
else
    echo "✗ 提取PCM音频数据失败。"
    exit 1
fi

echo "======================="
echo "媒体提取完成！"
echo "YUV视频文件: $OUTPUT_YUV"
echo "PCM音频文件: $OUTPUT_PCM"
echo "您现在可以运行编码器程序了："
echo "  ./bin/video_encoder - 将YUV编码为H.264"
echo "  ./bin/audio_encoder - 将PCM编码为AAC"
echo "======================="

exit 0