/////////////////////////////////////////////////////////////////////////////// function OnInit(data){ data.name = "Command.File: JoinMP3"; data.desc = "Join mp3 music files (and other?) with ffmpeg.exe."; data.copyright = "DOS - Directory Opus Society 2o14. o)"; data.version = "0.1"; data.default_enable = false; data.config["FFMpegExe"] = "c:\\program files\\ffmpeg\\bin\\ffmpeg.exe"; data.config["PauseAtEnd"] = true; var cmd = data.AddCommand(); cmd.name = "JoinMP3"; cmd.method = "Command_JoinMP3"; cmd.desc = data.desc; cmd.label = "JoinMP3"; cmd.template = "FFMPEGEXE/K,TARGETFILE/K,FILES/M,PAUSEATEND/K"; } /////////////////////////////////////////////////////////////////////////////// function Command_JoinMP3(data) { DOpus.Output("JoinMP3:"); var files = GetFiles(data); if (!files || files.count==1){ DOpus.Output("Not enough files given."); return false; } data.func.command.ClearFiles(); data.func.command.SetType("msdos"); var pause = ForceBoolean(GetParameter(data, "pauseatend", "PauseAtEnd", true)); var ffmpegExe = GetParameter(data, "ffmpegexe", "FFMpegExe", "c:\\program files\\ffmpeg\\bin\\ffmpeg.exe"); if (!DOpus.FSUtil.Exists(ffmpegExe)){ DOpus.Output("FFMpeg.exe not found ["+ffmpegExe+"]. Check FFMPEGEXE cmdline parameter or script-config."); return false; } var firstFile = ""; var fileNamesJoined = ""; for(var file;!files.enumerator.atEnd();) { file=files.enumerator.item(); files.enumerator.moveNext(); DOpus.Output("File to join: "+file); fileNamesJoined+=file; if (firstFile=="") firstFile=file; if (!files.enumerator.atEnd()) fileNamesJoined+="|"; } if (!(targetFile = GetParameter(data, "targetfile", "targetfile", firstFile.path+"\\joined_"+firstFile.name_stem+"_joined"+firstFile.ext))){ DOpus.Output("No targetfile given. Check TARGETFILE cmdline parameter or script-config."); return false; } DOpus.Output("Target: " + targetFile); var cmd = '"'+ffmpegExe+'" -i "concat:'+fileNamesJoined+'" -acodec copy "'+targetFile+'"'; DOpus.Output("Command: "+cmd); data.func.command.AddLine(cmd); if (pause===true) data.func.command.AddLine("Pause"); data.func.command.Run(); return true; } /////////////////////////////////////////////////////////////////////////////// function GetFiles(data){ if (data.func.args.got_arg.files) var files = data.func.args.files; else if (data.func.sourcetab.selected_files.count) var files = data.func.sourcetab.selected_files; else var files = data.func.sourcetab.files; return { enumerator:new Enumerator(files), count:files.count}; } /////////////////////////////////////////////////////////////////////////////// function GetParameter( data, templateName, configName, defaultValue){ if (templateName && data.func.args.got_arg[templateName]) return data.func.args[templateName] if (configName && Script.config[configName]!=undefined){ switch(typeof(Script.config[configName])){ case "string": if(Script.config[configName]!=="") return Script.config[configName]; break; case "boolean": return Script.config[configName]; } } return defaultValue; } /////////////////////////////////////////////////////////////////////////////// function ForceBoolean(variant){ switch(variant+"".toLowerCase()){ case "true": case "yes": case "1": return true; case "false": case "no": case "0": case null: return false; default: return Boolean(string); } }