批量递归转换 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 "处理完成!"
相关推荐
小二·3 分钟前
Go 语言系统编程与云原生开发实战(第10篇)性能调优实战:Profiling × 内存优化 × 高并发压测(万级 QPS 实录)
开发语言·云原生·golang
多多*6 分钟前
2月3日面试题整理 字节跳动后端开发相关
android·java·开发语言·网络·jvm·adb·c#
xyq202422 分钟前
jEasyUI 自定义分页
开发语言
.ZGR.26 分钟前
认识数据结构:图——无人机防空平台的“衍生品”
java·开发语言·数据结构
wasp52035 分钟前
Banana Slides 深度解析:AI Core 架构设计与 Prompt 工程实践
人工智能·prompt·bash
波波00736 分钟前
Native AOT 能改变什么?.NET 预编译技术深度剖析
开发语言·.net
wkm95639 分钟前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt
晚风吹长发1 小时前
初步了解Linux中的线程同步问题及线程安全和死锁与生产消费者模型
linux·运维·服务器·开发语言·数据结构·安全
学嵌入式的小杨同学1 小时前
【Linux 封神之路】进程进阶实战:fork/vfork/exec 函数族 + 作业实现(含僵尸进程解决方案)
linux·开发语言·vscode·嵌入式硬件·vim·软件工程·ux