批量递归转换 mp4 为 flac/m4a 的 bash 脚本

直接上代码。

【注意】转换成功后会删除原文件,如不希望删除请务必修改代码,否则后果自负!

bash 复制代码
#!/bin/bash

# 递归遍历所有 .mp4 文件
find . -type f -name "*.mp4" | while read -r mp4_file; do
    echo "检查文件: $mp4_file"
    
    # 检查音轨编码格式
    audio_codec=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$mp4_file" 2>/dev/null)
    
    if [ "$audio_codec" = "flac" ]; then
        echo "  -> 发现 FLAC 音轨"
        output_file="${mp4_file%.mp4}.flac"
        
        # 提取音轨
        if ffmpeg -i "$mp4_file" -vn -acodec copy "$output_file" -y 2>&1 | grep -q "error\|Error"; then
            echo "  -> 转换失败,保留原文件"
        else
            if [ -f "$output_file" ]; then
                echo "  -> 转换成功: $output_file"
                rm "$mp4_file"
                echo "  -> 已删除原文件: $mp4_file"
            else
                echo "  -> 转换失败(输出文件不存在),保留原文件"
            fi
        fi
    elif [ "$audio_codec" = "aac" ]; then
        echo "  -> 发现 AAC 音轨"
        output_file="${mp4_file%.mp4}.m4a"
        
        # 提取音轨
        if ffmpeg -i "$mp4_file" -vn -acodec copy "$output_file" -y 2>&1 | grep -q "error\|Error"; then
            echo "  -> 转换失败,保留原文件"
        else
            if [ -f "$output_file" ]; then
                echo "  -> 转换成功: $output_file"
                rm "$mp4_file"
                echo "  -> 已删除原文件: $mp4_file"
            else
                echo "  -> 转换失败(输出文件不存在),保留原文件"
            fi
        fi
    else
        echo "  -> 音轨编码为: $audio_codec (跳过)"
    fi
    echo ""
done

echo "处理完成!"
相关推荐
灰子学技术8 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰8 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码8 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚8 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂9 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1369 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐9 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
Monly219 小时前
Java:修改打包配置文件
java·开发语言
我命由我1234510 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
island131410 小时前
CANN ops-nn 算子库深度解析:核心算子(如激活函数、归一化)的数值精度控制与内存高效实现
开发语言·人工智能·神经网络