批量递归转换 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 "处理完成!"
相关推荐
高林雨露6 分钟前
kotlin 相关code
开发语言·kotlin
我还记得那天10 分钟前
函数的递归调用
c语言·开发语言·visualstudio
zhangfeng113310 分钟前
ThinkPHP5 事件系统的标准最佳实践 事件系统的完整设计逻辑tags.php tags.php(事件地图)
android·开发语言·php
xyq202413 分钟前
HTML 标签简写及全称
开发语言
tongluowan00714 分钟前
数据结构 Bitmap(位图)示例 - 用户签到系统
开发语言·数据结构·bitmap·用户签到系统
就叫_这个吧14 分钟前
Java线程池应用的四种方式+线程池底层实现原理
java·开发语言
Rust研习社17 分钟前
Rust 官方拟定 LLM 政策,防止 LLM 污染开源社区?
开发语言·后端·ai·rust·开源
muqsen18 分钟前
Java 分布式相关面试题总结
java·开发语言·分布式
fenglllle29 分钟前
JDK8升级JDK17使用CompletableFuture在线程中classloader的变化
java·开发语言·jvm
froginwe1130 分钟前
Scala 正则表达式
开发语言