#!/bin/bash

  

# 检查当前目录下是否存在ffmpeg

if [ ! -f "./ffmpeg" ]; then

echo "错误: 当前目录下未找到ffmpeg可执行文件"

exit 1

fi

  

# 检查ffmpeg是否可执行

if [ ! -x "./ffmpeg" ]; then

echo "正在设置ffmpeg可执行权限..."

chmod +x ./ffmpeg

fi

  

# 创建输出目录

output_dir="merged_output"

if [ ! -d "$output_dir" ]; then

mkdir -p "$output_dir"

echo "创建输出目录: $output_dir"

fi

  

# 计数器

success_count=0

error_count=0

  

echo "开始处理同名的mp4和m4a文件..."

echo "=================================="

  

# 遍历当前目录下的所有mp4文件

for mp4_file in *.mp4; do

# 跳过不存在的文件(防止通配符没有匹配到文件的情况)

[ ! -f "$mp4_file" ] && continue

# 获取文件名(不含扩展名)

base_name="${mp4_file%.*}"

# 对应的m4a文件名

m4a_file="${base_name}.m4a"

# 检查是否存在对应的m4a文件

if [ -f "$m4a_file" ]; then

# 输出文件名

output_file="${output_dir}/${base_name}_merged.mp4"

echo "正在处理: $base_name"

echo " 视频文件: $mp4_file"

echo " 音频文件: $m4a_file"

echo " 输出文件: $output_file"

# 使用ffmpeg合并文件

# -i: 输入文件

# -c copy: 复制流,不重新编码(速度快)

# -map 0:v: 使用第一个输入文件的视频流

# -map 1:a: 使用第二个输入文件的音频流

# -y: 覆盖输出文件(如果存在)

if ./ffmpeg -i "$mp4_file" -i "$m4a_file" -c copy -map 0:v -map 1:a -y "$output_file" 2>/dev/null; then

echo " ✅ 合并成功"

((success_count++))

else

echo " ❌ 合并失败"

((error_count++))

fi

echo ""

else

echo "跳过 $mp4_file (未找到对应的m4a文件)"

fi

done

  

echo "=================================="

echo "处理完成!"

echo "成功合并: $success_count 个文件"

echo "失败: $error_count 个文件"

echo "输出目录: $output_dir"

  

if [ $success_count -gt 0 ]; then

echo ""

echo "合并后的文件:"

ls -la "$output_dir"/*.mp4 2>/dev/null | awk '{print " " $9 " (" $5 " bytes)"}'

fi
ffmpeg -i input.mp4 -i input.m4a -c:v copy -c:a aac output.mp4