#!/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