Python mkvtoolnix批量删除音频曲目
我想在NAS上节省一些空间并删除不必要的磁道。 我发现 但是我的debian(nas操作系统)不支持mkvtoolnix 6.6.0及更高版本 描述了我的输出。 脚本使用新的输出 我认为剧本中的“音频”必须重新定义以适应我的需要Python mkvtoolnix批量删除音频曲目,python,audio,mkv,awk,Python,Audio,Mkv,Awk,我想在NAS上节省一些空间并删除不必要的磁道。 我发现 但是我的debian(nas操作系统)不支持mkvtoolnix 6.6.0及更高版本 描述了我的输出。 脚本使用新的输出 我认为剧本中的“音频”必须重新定义以适应我的需要 AUDIO_RE = re.compile(r"Track ID (\d+): audio \([A-Z0-9_/]+\) [language:[a-z]{3}?") 这就是我到目前为止得到的。。。但是剧本不起作用 我能做什么呢?我用一种旧的Unix脚本语言编写
AUDIO_RE = re.compile(r"Track ID (\d+): audio \([A-Z0-9_/]+\) [language:[a-z]{3}?")
这就是我到目前为止得到的。。。但是剧本不起作用
我能做什么呢?我用一种旧的Unix脚本语言编写了脚本,该语言也可用于。我想,你可以得到一个Debian awk软件包。用法:
awk -f script.awk [video.mkv] [audio-langs-to-keep] [subtitle-langs-to-keep] [keep-chapters]
示例:
- 保留英语和西班牙语音频,保留法语和德语字幕,无章节
awk -f script.awk video.mkv :eng:spa :fre:ger
- 保留英语音频,没有潜艇,保留章节
awk -f script.awk video.mkv :eng "" chapters
awk -f script.awk video.mkv "" "" chapters
- 没有音频,没有潜艇,只有章节
awk -f script.awk video.mkv :eng "" chapters
awk -f script.awk video.mkv "" "" chapters
在每种语言代码前面放一个冒号
:
。一些有效代码是:
English language name | ISO639-2 code
----------------------------------------------+---------------
Afrikaans | afr
Arabic | ara
Australian languages | aus
Baltic languages | bat
Catalan; Valencian | cat
Caucasian languages | cau
Chinese | chi
Corsican | cos
Croatian | hrv
Czech | cze
Dutch; Flemish | dut
English | eng
French | fre
Georgian | geo
German | ger
Greek, Modern (1453-) | gre
Hebrew | heb
Hindi | hin
Hungarian | hun
Irish | gle
Italian | ita
Japanese | jpn
Javanese | jav
Korean | kor
Kurdish | kur
Norwegian | nor
Persian | per
Polish | pol
Portuguese | por
Romanian; Moldavian; Moldovan | rum
Russian | rus
Serbian | srp
Spanish; Castillan | spa
Swedish | swe
Thai | tha
Turkish | tur
Ukrainian | ukr
Vietnamese | vie
Walloon | wln
Yiddish | yid
- 窗户
Result=("\""MKVMerge"\" --ui-language en --identify-verbose \""MKVVideo"\"" | getline Line);
Result=system("\"" MKVMerge "\" -o \"" NewVideo "\" " CommandLine " \"" MKVVideo "\"")
- Unix(?)
script.awk
开始{
MKVMerge=“/bin/MKVMerge”#适用于Linux
MKVMerge=“C:\\Program Files\\mkvtoolnix\\MKVMerge.exe”#用于Win32
MKVMerge=“C:\\Program Files(x86)\\mkvtoolnix\\MKVMerge.exe”#用于Win64
FS=“[\t\n:]”
IGNORECASE=1
MKVVideo=ARGV[1]
AudioKeep=ARGV[2]
SubsKeep=ARGV[3]
ChaptersKeep=ARGV[4]
NewVideo=substr(MKVVideo,1,长度(MKVVideo)-4)“.new.mkv”
做{
结果=(“\”MKVMerge“\”--ui语言en--Identification verbose\”MKVVideo“\”getline);
如果(结果>0){
FieldCount=拆分(行、字段)
如果(字段[1]=“轨迹”){
诺特++
磁道[NoTr,“id”]=字段[3]
轨迹[NoTr,“典型”]=字段[5]
对于(i=6;i0)
如果(NoTr==0){
打印“错误!在\”“MKVVideo”“中找不到曲目”
出口
}否则{print“\”MKVVideo“\”:“,NoTr,“tracks found.”
对于(i=1;i1)打印“错误”结果“muxing\”“MKVVideo”\!”
}
您可以下载mkvtoolnix的旧版本。您不能将“原始”版本的脚本与您的工作mkvtoolnix一起使用吗?如果您需要,我可能会在未来几天更准确地研究它。这是实际的问题-我有mkvtoolnix的旧版本,并且由于我使用debian 3.2 backport,我一直在使用它。因此我需要“AUDIO_RE”适合我以前的输出曲目ID 2:AUDIO(A_AAC)[语言:eng Track_name:HE-AAC\s50-70 default_Track:0 forced_Track:0]请告诉我,您使用的是什么mkvtoolnix版本。我可以在Windows环境中使用python。因此,请将mkvmerge--ui language en--标识详细视频.mkv
打包(zip,rar,tar…)到dropbox或其他文件宿主(pastebin无效)。我知道了。我还需要一些时间,现在是圣诞节,你知道:)
BEGIN {
MKVMerge="/bin/MKVMerge" # for Linux
MKVMerge="C:\\Program Files\\mkvtoolnix\\MKVMerge.exe" # for Win32
MKVMerge="C:\\Program Files (x86)\\mkvtoolnix\\MKVMerge.exe" # for Win64
FS="[\t\n: ]"
IGNORECASE=1
MKVVideo=ARGV[1]
AudioKeep=ARGV[2]
SubsKeep=ARGV[3]
ChaptersKeep=ARGV[4]
NewVideo=substr(MKVVideo, 1, length(MKVVideo)-4)".new.mkv"
do {
Result=("\""MKVMerge"\" --ui-language en --identify-verbose \""MKVVideo"\"" | getline Line);
if (Result>0) {
FieldCount=split(Line, Fields)
if (Fields[1]=="Track") {
NoTr++
Track[NoTr, "id"]=Fields[3]
Track[NoTr, "typ"]=Fields[5]
for (i=6; i<=FieldCount; i++) {
if (Fields[i]=="language") Track[NoTr, "lang"]=Fields[++i]
}
}
}
} while (Result>0)
if (NoTr==0) {
print "Error! No tracks found in \""MKVVideo"\"."
exit
} else {print "\""MKVVideo"\":", NoTr, "tracks found."}
for (i=1; i<=NoTr; i++) {
if (Track[i, "typ"]=="audio") {
if (AudioKeep~Track[i, "lang"]) {
print "Keep", Track[i, "typ"], "Track", Track[i, "id"], Track[i, "lang"]
if (AudioCommand=="") {AudioCommand=Track[i, "id"]
} else AudioCommand=AudioCommand","Track[i, "id"]
} else {
print "\tRemove", Track[i, "typ"], "Track", Track[i, "id"], Track[i, "lang"]
}
} else {
if (Track[i, "typ"]=="subtitles") {
if (SubsKeep~Track[i, "lang"]) {
print "Keep", Track[i, "typ"], "Track", Track[i, "id"], Track[i, "lang"]
if (SubsCommand=="") {SubsCommand=Track[i, "id"]
} else SubsCommand=SubsCommand","Track[i, "id"]
} else {
print "\tRemove", Track[i, "typ"], "Track", Track[i, "id"], Track[i, "lang"]
}
}
}
}
if (AudioCommand=="") {CommandLine="-A"
} else {CommandLine="-a "AudioCommand}
if (SubsCommand=="") {CommandLine=CommandLine" -S"
} else {CommandLine=CommandLine" -s "SubsCommand}
if (!ChaptersKeep) CommandLine=CommandLine" --no-chapters"
print "\"" MKVMerge "\" -o \"" NewVideo "\" " CommandLine " \"" MKVVideo "\""
Result=system("\"" MKVMerge "\" -o \"" NewVideo "\" " CommandLine " \"" MKVVideo "\"")
if (Result>1) print "Error "Result" muxing \""MKVVideo"\"!"
}