Слияние заставки и видео в каталоге в C#
(Обратите внимание, что этот пример был написан в Visual Studio 2010.)
В этом примере показано, как вы можете объединять заставки и видео в каталоге. Пример
Когда вы вводите путь к каталогу в текстовое поле и выбираете «Список», программа выполняет следующий код.
private void btnList_Click(object sender, EventArgs e) { lstSplash.Items.Clear(); try { foreach (string filename in Directory.GetFiles( txtDirectory.Text, "* splash.wmv")) { lstSplash.Items.Add(filename); } btnGo.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Этот код использует Directory.GetFiles, чтобы получить список файлов в каталоге с именами, содержащими текст «splash.wmv». Он просматривает файлы и добавляет их имена в lstSplash ListBox.
Затем, если вы нажмете кнопку Go, выполняется следующий код.
private void btnGo_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; Refresh(); for (int i = 0; i < lstSplash.Items.Count; i++) { lstSplash.SelectedIndex = i; lstSplash.Refresh(); MergeSplash(lstSplash.Items[i].ToString()); } Cursor = Cursors.Default; }
Обработчик событий Click кнопки зацикливается на имена файлов в списке и вызывает для каждого из них следующий метод MergeSplash.
private void MergeSplash(string splash_file) { prgEncode.Value = 0; prgEncode.Visible = true; Refresh(); try { // Создаем задание. using (Job job = new Job()) { // Создаем MediaItem, содержащий всплеск видео. MediaItem media_item = new MediaItem(splash_file); job.MediaItems.Add(media_item); // Использовать оригинальный размер. media_item.OutputFormat.VideoProfile.Size = media_item.OriginalVideoSize; // Ограничьте всплывающее видео до 5 секунд. media_item.Sources[0].Clips[0].EndTime = new TimeSpan(0, 0, 5); // Добавить фильм. string base_name = splash_file.Replace(" splash", " base"); media_item.Sources.Add(new Source(base_name)); // Установите качество. media_item.OutputFormat.VideoProfile.Bitrate = new VariableQualityBitrate(90); // Установите выходной каталог. FileInfo file_info = new FileInfo(splash_file); job.OutputDirectory = file_info.DirectoryName; // Задайте имя выходного файла. media_item.OutputFileName = file_info.Name.Replace(" splash", ""); // Не создавайте подкаталог. job.CreateSubfolder = false; // Установите обработчик события прогресса. job.EncodeProgress += job_EncodeProgress; // Кодировать. job.Encode(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } prgEncode.Visible = false; }
Метод MergeSplash создает новый Job, создает MediaItem, представляющий заставку, и добавляет его в задание. Затем он устанавливает размер MediaItem, чтобы он использовал размеры оригинального видео.
Далее код устанавливает EndTime для видео. MediaItem содержит единственный источник и только один клип в этом источнике, поэтому объект клипа, представляющий заставку, является media_item.Sources [0] .Clips [0]. Код устанавливает его свойство EndTime на 5 секунд, поэтому видео обрезается до 5 секунд.
Затем метод заменяет текст «всплеск» текстом «base», чтобы получить имя соответствующего видеофайла. Он создает новый объект Source для этого видеофайла и добавляет его в MediaItem.
Затем код завершает подготовку к созданию нового видеофайла. Он устанавливает качество битрейта 90, устанавливает выходной каталог и имя файла, устанавливает CreateSubfolder на false и устанавливает обработчик события прогресса. Наконец, код вызывает метод Encode задания для создания объединенного видео.