批量为多文件夹MKV添加适配电视的音视频轨工具求助
适合批量更新MKV音视频轨的工具及PowerShell实现方案
推荐工具:MKVToolNix
MKVToolNix是一套专门针对MKV文件的开源处理工具集,其中的mkvmerge命令行工具完全匹配你的需求:
- 无损封装:仅合并音视频轨,不重新编码原有内容,速度快且保留画质音质
- 精准控制:可指定保留原文件所有轨的同时,新增目标格式的音视频轨,不会覆盖原有内容
- 脚本友好:所有操作通过命令行参数实现,完美适配PowerShell批量处理场景
核心实现思路
- 遍历目标文件夹及子文件夹下的所有MKV文件
- 用
mediainfo提取每个MKV的音视频轨编码信息,判断是否已存在电视支持的格式(如AAC音轨、H.264视频轨) - 若缺少目标轨,调用
mkvmerge将原MKV与新增轨合并,完成后替换原文件(或保留备份)
示例PowerShell脚本片段
# 定义电视支持的目标编码格式 $targetAudioCodec = "AAC" $targetVideoCodecID = "V_MPEG4/ISO/AVC" # H.264的标准CodecID # 遍历指定路径下所有MKV文件(包含子文件夹) Get-ChildItem -Path "你的目标文件夹路径" -Recurse -Filter "*.mkv" | ForEach-Object { $mkvFullPath = $_.FullName $tempOutputPath = "$mkvFullPath.temp.mkv" # 用mediainfo提取音轨编码列表 $existingAudioCodecs = mediainfo --Inform="Audio;%Codec%" "$mkvFullPath" -split "`n" # 提取视频轨CodecID列表 $existingVideoCodecIDs = mediainfo --Inform="Video;%CodecID%" "$mkvFullPath" -split "`n" # 判断是否需要添加AAC音轨 $needAddAudio = !$existingAudioCodecs.Contains($targetAudioCodec) # 判断是否需要添加H.264视频轨 $needAddVideo = !$existingVideoCodecIDs.Contains($targetVideoCodecID) # 构建mkvmerge命令参数 $mkvmergeCmdArgs = @("-o", "$tempOutputPath", "$mkvFullPath") if ($needAddAudio) { # 假设AAC音轨文件与MKV同名(如xxx.aac),可根据实际路径调整 $audioTrackPath = [System.IO.Path]::ChangeExtension($mkvFullPath, ".aac") if (Test-Path $audioTrackPath) { $mkvmergeCmdArgs += @("--audio-tracks", "0", "$audioTrackPath") } } if ($needAddVideo) { # 假设H.264视频轨文件与MKV同名(如xxx.h264),可根据实际路径调整 $videoTrackPath = [System.IO.Path]::ChangeExtension($mkvFullPath, ".h264") if (Test-Path $videoTrackPath) { $mkvmergeCmdArgs += @("--video-tracks", "0", "$videoTrackPath") } } # 执行合并操作(仅当需要添加轨时) if ($needAddAudio -or $needAddVideo) { & mkvmerge $mkvmergeCmdArgs # 替换原文件(建议先备份原文件,可注释以下两行) if (Test-Path $tempOutputPath) { Remove-Item $mkvFullPath -Force Rename-Item $tempOutputPath $mkvFullPath -Force } } }
注意事项
- 确保MKVToolNix和mediainfo已添加至系统环境变量,或在脚本中使用工具的完整路径调用
- 处理前务必备份原MKV文件,避免操作失误导致数据丢失
- 若没有现成的目标格式音视频轨,可先通过FFmpeg编码生成对应轨文件,再用上述脚本合并
内容的提问来源于stack exchange,提问作者Anders
相关产品推荐
相关产品推荐

