diff --git a/Config.kasu b/Config.kasu index 57a1243..8667553 100644 --- a/Config.kasu +++ b/Config.kasu @@ -1,5 +1,14 @@ ! Only change the values inside the quotes. +! Here are some few samples for backgrounds for you :> +! "Samples/Genshin.png" +! "Samples/Andromeda.png" +! "Samples/Yato.png" +! "Samples/Tenki no ko.png" +! "Samples/Tenki no ko 2.png" +! "Samples/Senku.png" +! "Samples/ILLEGAL.png" + ! change the background. BackgroundName: "background.png" @@ -8,6 +17,7 @@ BackgroundName: "background.png" GlowColor: "#FFFF8282" ! Default output folder +! default is "output" DefaultOutput: "output" ! Default File Type/ Download Type on Start up. diff --git a/Global.cs b/Global.cs index 9f7e80e..150494e 100644 --- a/Global.cs +++ b/Global.cs @@ -25,9 +25,11 @@ namespace Launcher_DL_v6; public partial class MainWindow { - readonly static string YDL_link = $"{Directory.GetCurrentDirectory()}\\uVad_Data\\ydl.bin"; + readonly static string YDL_link = $"{Directory.GetCurrentDirectory()}\\LauncherDL_Data\\ydl.bin"; + private static string Ffmpeg = $"{Directory.GetCurrentDirectory()}\\LauncherDL_Data"; + private List ext = new() { "mp4", "mkv", "webm", "mp3", "m4a" }; - readonly string Version = "Build Version:\nDevelopment Build"; + readonly string Version = "Build Version:\nBeta Build v6"; readonly string HiddenButtonText = "LauncherDL buildver6.0\n\nOMG this is so E P I C!!\n\nNew GUI/Layout, Animations!?!\n\nThe OLD Button Hover Animation from ver3 is even back!??\n\n\nCreated by Kasura."; diff --git a/Images/Samples/Andromeda.png b/Images/Samples/Andromeda.png new file mode 100644 index 0000000..40e6768 Binary files /dev/null and b/Images/Samples/Andromeda.png differ diff --git a/Images/Samples/Genshin.png b/Images/Samples/Genshin.png new file mode 100644 index 0000000..ddda754 Binary files /dev/null and b/Images/Samples/Genshin.png differ diff --git a/Images/Samples/ILLEGAL.png b/Images/Samples/ILLEGAL.png new file mode 100644 index 0000000..8524d1b Binary files /dev/null and b/Images/Samples/ILLEGAL.png differ diff --git a/Images/Samples/Senku.png b/Images/Samples/Senku.png new file mode 100644 index 0000000..a16fc06 Binary files /dev/null and b/Images/Samples/Senku.png differ diff --git a/Images/Samples/Tenki no ko 2.png b/Images/Samples/Tenki no ko 2.png new file mode 100644 index 0000000..a6b6227 Binary files /dev/null and b/Images/Samples/Tenki no ko 2.png differ diff --git a/Images/Samples/Tenki no ko.png b/Images/Samples/Tenki no ko.png new file mode 100644 index 0000000..2b495a4 Binary files /dev/null and b/Images/Samples/Tenki no ko.png differ diff --git a/Images/Samples/Yato.png b/Images/Samples/Yato.png new file mode 100644 index 0000000..ecb3e1e Binary files /dev/null and b/Images/Samples/Yato.png differ diff --git a/Launcher DL v6.csproj b/Launcher DL v6.csproj index 74efdcf..be61fe7 100644 --- a/Launcher DL v6.csproj +++ b/Launcher DL v6.csproj @@ -3,12 +3,31 @@ WinExe net6.0-windows + 6.0.0 Launcher_DL_v6 enable true Images\Icon.ico disable - false + False + AnyCPU;x64 + 7.0 + Downloads any audio or video + embedded + LauncherDL + LauncherDL + Ichimaki Kasura + Ichimaki Kasura + Copyright © 2022 + uVad + + + + True + + + + True @@ -18,46 +37,88 @@ Always - + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + Always diff --git a/Launcher DL v6.sln b/Launcher DL v6.sln index 6df879f..0f84809 100644 --- a/Launcher DL v6.sln +++ b/Launcher DL v6.sln @@ -1,22 +1,31 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31919.166 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher DL v6", "Launcher DL v6.csproj", "{AC322D54-A9A9-422D-BCD8-74B6F9223CBB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Launcher DL v6", "Launcher DL v6.csproj", "{AC322D54-A9A9-422D-BCD8-74B6F9223CBB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Debug|x64.ActiveCfg = Debug|x64 + {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Debug|x64.Build.0 = Debug|x64 {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Release|Any CPU.ActiveCfg = Release|Any CPU {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Release|Any CPU.Build.0 = Release|Any CPU + {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Release|x64.ActiveCfg = Release|x64 + {AC322D54-A9A9-422D-BCD8-74B6F9223CBB}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {00024FFD-76C1-4B30-B45D-030229AE1A17} EndGlobalSection EndGlobal diff --git a/uVad_Data/avcodec-58.dll b/LauncherDL_Data/avcodec-58.dll similarity index 100% rename from uVad_Data/avcodec-58.dll rename to LauncherDL_Data/avcodec-58.dll diff --git a/uVad_Data/avdevice-58.dll b/LauncherDL_Data/avdevice-58.dll similarity index 100% rename from uVad_Data/avdevice-58.dll rename to LauncherDL_Data/avdevice-58.dll diff --git a/uVad_Data/avfilter-7.dll b/LauncherDL_Data/avfilter-7.dll similarity index 100% rename from uVad_Data/avfilter-7.dll rename to LauncherDL_Data/avfilter-7.dll diff --git a/uVad_Data/avformat-58.dll b/LauncherDL_Data/avformat-58.dll similarity index 100% rename from uVad_Data/avformat-58.dll rename to LauncherDL_Data/avformat-58.dll diff --git a/uVad_Data/avutil-56.dll b/LauncherDL_Data/avutil-56.dll similarity index 100% rename from uVad_Data/avutil-56.dll rename to LauncherDL_Data/avutil-56.dll diff --git a/uVad_Data/ffmpeg.exe b/LauncherDL_Data/ffmpeg.exe similarity index 100% rename from uVad_Data/ffmpeg.exe rename to LauncherDL_Data/ffmpeg.exe diff --git a/LauncherDL_Data/ffmpeg.txt b/LauncherDL_Data/ffmpeg.txt new file mode 100644 index 0000000..dca1668 --- /dev/null +++ b/LauncherDL_Data/ffmpeg.txt @@ -0,0 +1,2 @@ +Download the ffmpeg on: +https://github.com/yt-dlp/FFmpeg-Builds/releases \ No newline at end of file diff --git a/uVad_Data/ffplay.exe b/LauncherDL_Data/ffplay.exe similarity index 100% rename from uVad_Data/ffplay.exe rename to LauncherDL_Data/ffplay.exe diff --git a/uVad_Data/ffprobe.exe b/LauncherDL_Data/ffprobe.exe similarity index 100% rename from uVad_Data/ffprobe.exe rename to LauncherDL_Data/ffprobe.exe diff --git a/uVad_Data/postproc-55.dll b/LauncherDL_Data/postproc-55.dll similarity index 100% rename from uVad_Data/postproc-55.dll rename to LauncherDL_Data/postproc-55.dll diff --git a/uVad_Data/swresample-3.dll b/LauncherDL_Data/swresample-3.dll similarity index 100% rename from uVad_Data/swresample-3.dll rename to LauncherDL_Data/swresample-3.dll diff --git a/uVad_Data/swscale-5.dll b/LauncherDL_Data/swscale-5.dll similarity index 100% rename from uVad_Data/swscale-5.dll rename to LauncherDL_Data/swscale-5.dll diff --git a/uVad_Data/ydl.bin b/LauncherDL_Data/ydl.bin similarity index 100% rename from uVad_Data/ydl.bin rename to LauncherDL_Data/ydl.bin diff --git a/Lib/OutputText/Comment.cs b/Lib/Console Output/ConsoleOutputHandler.cs similarity index 92% rename from Lib/OutputText/Comment.cs rename to Lib/Console Output/ConsoleOutputHandler.cs index 4f78800..8a043da 100644 --- a/Lib/OutputText/Comment.cs +++ b/Lib/Console Output/ConsoleOutputHandler.cs @@ -2,6 +2,7 @@ public partial class MainWindow { + string AudioOnly; public void FileFormatOutput(object s, DataReceivedEventArgs e) { string StringData = e.Data; @@ -11,6 +12,8 @@ public void FileFormatOutput(object s, DataReceivedEventArgs e) { ProgressBarShow(); + if (StringData.Contains("https | unknown")) return; + // ProgressBar lmao if (StringData.Contains("[")) { @@ -45,9 +48,13 @@ public void FileFormatOutput(object s, DataReceivedEventArgs e) string fps = LauncherDL_Regex.Info.Match(StringData).Groups["fps"].Value.Trim(); string format = LauncherDL_Regex.Info.Match(StringData).Groups["format"].Value.Trim(); - if (resolution == string.Empty) resolution = LauncherDL_Regex.Info.Match(StringData).Groups["audioOnly"].Value.Trim(); + if (resolution == string.Empty) + { + resolution = LauncherDL_Regex.Info.Match(StringData).Groups["audioOnly"].Value.Trim(); + if(format == "m4a") AudioOnly = id; + } - if (size.Contains("~")) size.Replace("~ ", "~"); + if (size.Contains("~")) size.Replace("~ ", "~"); if (Regex.IsMatch(resolution, @".*x.*", RegexOptions.Compiled)) { @@ -55,7 +62,7 @@ public void FileFormatOutput(object s, DataReceivedEventArgs e) switch (format) { case "mp4": - id += "+140"; + id += $"+{AudioOnly}"; break; case "webm": id += "+bestaudio"; diff --git a/Lib/Core/OutputComments.cs b/Lib/Core/OutputComments.cs index 29f1d23..9ee86ca 100644 --- a/Lib/Core/OutputComments.cs +++ b/Lib/Core/OutputComments.cs @@ -4,7 +4,8 @@ public class OutputComments : MainWindow { public static void DownloadOutputComments() { - string Name = string.Empty; + MW.Input_Name.Text = MW.Input_Name.Text.Trim(); + string Name = MW.Input_Name.Text; string FileFormatName; // Check the ComboBox if any changes made to the File Format Text @@ -23,7 +24,7 @@ public static void DownloadOutputComments() } - if (MW.Input_Name.Text == "Unavailable") Name = "N/A"; + if (MW.Input_Name.Text == "Unavailable" && MW.Input_Name.Text == string.Empty) Name = "N/A"; MW.Output_text.Break("gray"); MW.Output_text.AddFormattedText($"[] Download Type: {MW.Input_Type.Text}"); @@ -31,7 +32,7 @@ public static void DownloadOutputComments() MW.Output_text.AddFormattedText($"[] Format: {FileFormatName}"); MW.Output_text.AddFormattedText($"[] Link: {MW.Input_Link.Text}"); MW.Output_text.AddFormattedText($"[] Force MP3: {MW.Input_MpThreeFormat.IsChecked}"); - MW.Output_text.AddFormattedText($"[] Playlist?: {MW.Config.EnablePlaylist}<>"); + MW.Output_text.AddFormattedText($"[] Playlist?: {MW.Config.EnablePlaylist}"); MW.Output_text.Break("gray"); MW.Output_text.AddFormattedText("[INFO] <>Downloading..."); } diff --git a/Lib/Core/StartUp.cs b/Lib/Core/StartUp.cs index 2721dd5..69c32f1 100644 --- a/Lib/Core/StartUp.cs +++ b/Lib/Core/StartUp.cs @@ -13,12 +13,25 @@ private void Initialize() // EDIT: Turns out its just my CPU (2.4Ghz) is slow thats why the animations are choppy when my CPU is on full load. // like If chrome is opened the animation is choppy because of chrome using too much cpu. // my current cpu is 12 yrs old and have no money to buy new one. + // + // EDIT 3/25/22: Got a new CPU which is faster (Xeon E5 2640) I know its still old but its still works, + // 6C/12T 2.5Ghz Turbo to 3Ghz (2.8Ghz). if((RenderCapability.Tier >> 16) != 2) { MessageBox.Show("Sorry it needs DX9+ cuz I'm not that good at optimizing performance.\nIf you want to get rid of this Go to the Repository/SourceCode and remove this \"IF\" statement and try ur luck\nIf it runs well on your PC","lmao",MessageBoxButton.OK,MessageBoxImage.Exclamation); Environment.Exit(0); } + if(Config.DefaultOutput == "output") + { + if (Directory.Exists($"{Directory.GetCurrentDirectory()}\\{Config.DefaultOutput}")) Open_Folder.Visibility = Visibility.Visible; + } + else + { + if (Directory.Exists(Config.DefaultOutput)) Open_Folder.Visibility = Visibility.Visible; + } + + #region EventHandlers Input_Type.SelectionChanged += InputType; Button_Format.Click += FileFormat; @@ -26,6 +39,19 @@ private void Initialize() Button_Update.Click += Update; Closing += Window_Close; KeyDown += Window_PreviewKeyDown; + + #region Open Folder thing + Open_Folder.Click += delegate { OpenFolder(Config.DefaultOutput); }; + + OpenDir_Audio.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\Audio"); }; + OpenDir_Video.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\Video"); }; + + OpenDir_webm.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\formatted\\webm"); }; + OpenDir_mFourA.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\formatted\\m4a"); }; + OpenDir_mpFour.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\formatted\\mp4"); }; + OpenDir_mpThree.Click += delegate { OpenFolder($"{Config.DefaultOutput}\\formatted\\mp3"); }; + #endregion + #endregion #region Output Log Startup Texts diff --git a/Lib/Core/Work.cs b/Lib/Core/Work.cs index 4ee803d..1af2f8f 100644 --- a/Lib/Core/Work.cs +++ b/Lib/Core/Work.cs @@ -17,9 +17,9 @@ private async Task StartProcess(YTDL_object YT) } else { - Output_text.AddFormattedText($"[INFO] Fetching format failed:\r" + - "1. Link is not supported?" + - "If link is not supported try downloading it using \"Video\" type\r or setting the Format option to \"best\"\r" + + Output_text.AddFormattedText($"[ERROR] <>Fetching format failed:\n" + + "1. Link is not supported?\n" + + "If link is not supported try downloading it using \"Video\" type\n or setting the Format option to \"best\"\n" + "2. Slow internet might caused the problem."); } } @@ -40,7 +40,54 @@ private void ProcessEnds(bool IsDownload) if (IsDownload) Output_text.LoadText(DocumentTemp); - } + // Renaming process + if (TemporaryEncodedName != string.Empty) + { + string DefaultName = Encoding.UTF8.GetString(Convert.FromBase64String(TemporaryEncodedName)); + switch (Input_Type.SelectedIndex) + { + case 0: + foreach (string exts in ext) + { + foreach (string folder in ext) + { + try { File.Move($"{Config.DefaultOutput}\\formatted\\{folder}\\{TemporaryEncodedName}.{exts}", $"{Config.DefaultOutput}\\formatted\\{folder}\\{DefaultName}.{exts}"); } catch { } + } + } + break; + case 1: + foreach (string s in ext) + { + try { File.Move($"{Config.DefaultOutput}\\Video\\{TemporaryEncodedName}.{s}", $"{Config.DefaultOutput}\\Video\\{DefaultName}.{s}"); } catch { } + } + break; + case 2: + foreach (string s in ext) + { + try { File.Move($"output\\Audio\\{TemporaryEncodedName}.{s}", $"output\\Audio\\{DefaultName}.{s}"); } catch { } + } + break; + } + TemporaryEncodedName = string.Empty; + } + + + if (Config.DefaultOutput == "output") + { + if (Directory.Exists($"{Directory.GetCurrentDirectory()}\\{Config.DefaultOutput}")) Open_Folder.Visibility = Visibility.Visible; + } + else + { + if (Directory.Exists(Config.DefaultOutput)) Open_Folder.Visibility = Visibility.Visible; + } + + // DEBUG // + //foreach (var item in TemporaryFormatList) + //{ + // Console.WriteLine(item); + //} + + } private void FormatAdder(dynamic options) { diff --git a/Lib/Core/YTDL.cs b/Lib/Core/YTDL.cs index 180935d..8374b48 100644 --- a/Lib/Core/YTDL.cs +++ b/Lib/Core/YTDL.cs @@ -14,7 +14,6 @@ public class YTDL_object public partial class MainWindow { - public YTDL_object YTDL_Update() { return new () @@ -38,17 +37,51 @@ public YTDL_object YTDL_FileFormat() public YTDL_object YTDL_Download() { string arguments = string.Empty; + string name = string.Empty; + + if(Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + { + TemporaryEncodedName = name = Convert.ToBase64String(Encoding.UTF8.GetBytes(Input_Name.Text)); + } + // Custom if(Input_Type.SelectedIndex == 0) { - arguments = $"-f \"{TemporarySelectedFileFormat}\" {Input_Link.Text}"; - if(TemporarySelectedFileFormat.Contains("Best")) - arguments = $"-f b {Input_Link.Text}"; + arguments = $"-f \"{TemporarySelectedFileFormat}\" {Input_Link.Text} -o {Config.DefaultOutput}/formatted/%(ext)s/%(title)s.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + if (Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + arguments = $"-f \"{TemporarySelectedFileFormat}\" {Input_Link.Text} -o {Config.DefaultOutput}/formatted/%(ext)s/{name}.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + + if (TemporarySelectedFileFormat.Contains("Best")) + { + arguments = $"-f b {Input_Link.Text} -o {Config.DefaultOutput}/formatted/%(ext)s/%(title)s.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + if (Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + arguments = $"-f b {Input_Link.Text} -o {Config.DefaultOutput}/formatted/%(ext)s/{name}.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + } + } + // Video if (Input_Type.SelectedIndex == 1) { - arguments = $"-f b {Input_Link.Text}"; + arguments = $"-f b {Input_Link.Text} -o {Config.DefaultOutput}/Video/%(title)s.%(ext)s --no-part"; + if(Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + arguments = $"-f b {Input_Link.Text} -o {Config.DefaultOutput}/Video/{name}.%(ext)s --no-part"; + } + + + // Audio + if (Input_Type.SelectedIndex == 2) + { + arguments = $"-f bestaudio {Input_Link.Text}/Audio/%(title)s.%(ext)s"; + if (Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + arguments = $"-f bestaudio {Input_Link.Text}/Audio/{name}.%(ext)s"; + + if (Input_MpThreeFormat.IsChecked.Value) + { + arguments = $"-x --audio-format mp3 {Input_Link.Text}/Audio/%(title)s.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + if (Input_Name.Text != string.Empty && Input_Name.Text != "Unavailable") + arguments = $"-x --audio-format mp3 {Input_Link.Text}/Audio/{name}.%(ext)s --ffmpeg-location \"{Ffmpeg}\" --no-part"; + } } return new() diff --git a/Lib/MainWindow/ButtonHandler.cs b/Lib/MainWindow/ButtonHandler.cs index 49650b7..9ff0805 100644 --- a/Lib/MainWindow/ButtonHandler.cs +++ b/Lib/MainWindow/ButtonHandler.cs @@ -26,6 +26,12 @@ public async void FileFormat(object s, RoutedEventArgs e) public async void Download(object s, RoutedEventArgs e) { + if (Input_Name.Text == "Unavailable") + { + MessageBox.Show("This specific Text is reserved!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); + return; + } + ValidateLink ValidLink = new(Input_Link.Text); Output_text.AddFormattedText("[INFO] <>Validating Link..."); @@ -54,4 +60,29 @@ public async void Update(object s, RoutedEventArgs e) OutputComments.UpdateOutputComments(); await StartProcess(YTDL_Update()); } + + public void OpenFolder(string output) + { + bool IsExist; + + if (Config.DefaultOutput == "output") + { + IsExist = Directory.Exists($"{Directory.GetCurrentDirectory()}\\{output}"); + } + else + { + IsExist = Directory.Exists(output); + } + + if (!IsExist) + { + output = Directory.GetCurrentDirectory(); + } + + Process.Start(new ProcessStartInfo + { + Arguments = output, + FileName = "explorer.exe" + }); + } } \ No newline at end of file diff --git a/Lib/MainWindow/RichTextBoxHandler.cs b/Lib/RichTextBoxHandler.cs similarity index 98% rename from Lib/MainWindow/RichTextBoxHandler.cs rename to Lib/RichTextBoxHandler.cs index 70df40e..acf90cd 100644 --- a/Lib/MainWindow/RichTextBoxHandler.cs +++ b/Lib/RichTextBoxHandler.cs @@ -36,7 +36,10 @@ public static void AddText(this RichTextBox box, string text, string color = def public static void AddFormattedText(this RichTextBox rt, string Input, bool DontAddNewline = false) { - if(!DontAddNewline) Input = Input + "\r"; + // resets the Format + Input = Input + "<>"; + + if (!DontAddNewline) Input = Input + "\r"; TextRange range; foreach (Match textMatch in LauncherDL_Regex.RTBregex.Matches(Input)) { diff --git a/MainWindow.xaml b/MainWindow.xaml index aac7bfa..a564eda 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -227,7 +227,6 @@ - diff --git a/uVad_Data/ffmpeg.txt b/uVad_Data/ffmpeg.txt deleted file mode 100644 index 743e5ee..0000000 --- a/uVad_Data/ffmpeg.txt +++ /dev/null @@ -1,6 +0,0 @@ -Download the ffmpeg on: -https://github.com/BtbN/FFmpeg-Builds/releases - -only copy the bin folder inside the ffmpeg folder. - -to use the command [ --ffmpeg-location "bin" ] when using "160+249" or "bestvideo+bestaudio" commands. \ No newline at end of file