批量递归转换 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 "处理完成!"
相关推荐
我是一颗柠檬13 分钟前
【Java项目技术亮点】覆盖索引与索引下推优化
android·java·开发语言
2601_9624408425 分钟前
计算机毕业设计之健身房管理系统的设计与实现
java·开发语言·课程设计·旅游·宠物
旖-旎1 小时前
QT系统篇(5)(下)
开发语言·c++·qt
摇滚侠1 小时前
方法 A 等方法 B 执行完再执行 叫同步调用还是异步调用 JS 默认是同步调用还是异步调用
开发语言·javascript·ecmascript
liulun1 小时前
C++ WinRT中的事件
开发语言·c++
whitelbwwww1 小时前
c++运行onnx模型
开发语言·c++
码来的小朋友2 小时前
手把手教你用 Python + PyQt5 做一个可视化图片切图工具
开发语言·python·microsoft
aaaameliaaa2 小时前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法
m0_547486662 小时前
《模式识别:使用MATLAB分析与实现》全套PPT课件
开发语言·matlab·模式识别
Tim_102 小时前
【C++】009、extern关键字
java·开发语言