Скрипт VirtualDub для объединения серии видеороликов

Я работаю над видео по частям, сохранено с именами файлов scene1.avi, scene2.avi и так далее.

Я хочу простой способ встроить видео в один блок и перезаписать звуковую дорожку. Для этого я использую VirtualDub.

Теперь для меня достаточно просто открыть VirtualDub, перейти через File => Open, загрузить первую сцену, перейти в File => Append видео фрагмент, выбрать вторую сцену, проверить опцию "автоопределение дополнительных сегментов по имени файла", установить видео в Direct Stream Copy, установите звук "из другого файла" и выберите саундтрек, затем сохраните все как out.avi... но для объяснения всего этого нужны четыре строки!

То, что я хотел бы, является сценарием VCF, чтобы собрать все эти файлы вместе. К сожалению, язык кодирования отстой.

Я не знаю, о чем думал, когда создавал этот язык сценариев. Это очень слабо основано на C, но больше отстой. Должно быть, я смотрел Кризис Bubblegum, прежде чем я создал его.
Все операторы являются либо объявлениями, либо выражениями, и все операторы должны заканчиваться точкой с запятой. Нет управления потоком - нет функций, нет процедур, нет, если, нет, нет, нет, нет переключателя, нет перехода.

нет ifнет whileнет for... так что я думаю while file exists("scene"+i+".avi") {VirtualDub.Append("scene"+i+".avi"); i++;} полностью исключено.

Я использую пакетный сценарий для проверки существования файла VCF и запускаю VirtualDub с правильной командной строкой для запуска сценария, поэтому, возможно, я смогу использовать этот сценарий для "сборки" файла VCF, необходимого для включения всех файлы? Есть ли какой-либо способ автоматического определения сегментов в файле VCF, или мне придется настраивать VCF, используя сценарий пакетной обработки?

2 ответа

Я только что наткнулся на этот вопрос после исследования способов сделать что-то очень похожее. Мне кажется, что лучше всего написать небольшой скрипт или программу, которая генерирует файл скрипта VirtualDub для одноразового использования, а затем выполняет его.

Например, я написал следующий скрипт для объединения трех файлов.avi:

// Set Video and Audio to Direct Stream Copy
VirtualDub.video.SetMode(0);
VirtualDub.audio.SetMode(0);

VirtualDub.Open(U"D:\path\to\file1.avi");
VirtualDub.Append(U"D:\path\to\file2.avi");
VirtualDub.Append(U"D:\path\to\file3.avi");

VirtualDub.SaveAVI(U"D:\path\to\concatenatedFile.avi");
VirtualDub.Close();

Вы можете использовать это как шаблон и перейти оттуда.

Я только что написал что-то связанное / похожее, что должно помочь вам начать писать код. это командный файл, поэтому скопируйте следующее в нечто.bat:

Set Mfps=23.976
Set Bpath="E:\- Video Extractions\Virtualdub\1920x1280 (23.976fps pure,93%%,MPEG2,deinterlaced)auto openNsave.vcf"
rem Set Bpath="E:\- Video Extractions\Virtualdub\852x480 DAR3 (16x9) (24fps,96%%,MPEG2,deinterlaced).vcf"
Set Vdpath="E:\- Video Extractions\Virtualdub\VirtualDub-1.8.8\"
Set Svpath="D:\"
for %%A in (*.mkv *.avi *.mpg *.mpeg *.m2ts *.vob) do >%%~nA.avs echo # M2ts file & >>%%~nA.avs echo SetMemoryMax(128) & >>%%~nA.avs echo DirectShowSource("%%~dA%%~pA%%~nA%%~xA", fps=%Mfps%, audio=true, seekzero = true, convertfps=true) & >>%%~nA.avs echo EnsureVBRMP3Sync() & start /d %Vdpath% VirtualDub.exe /i %Bpath% "%%~dA%%~pA%%~nA.avs" "%Svpath%%%~nA.avi"
rem ---Notes---
rem code requires: Avisynth, virtualdub, pre-existing (.vcf) config file
rem most people prefer to use virtualdub with jobs in queue; run them in sequence. This runs jobs in parallel by searching the directory of the script, finding all listed wildcard masked files below, generating a simple avisynth script file for each file, then opening virtualdub and autosaving the video to .avi
rem caution, this will stress your system. you may only be able to handle 1 file at a time. I can input 30 blueray .m2ts files just fine, so long as i set vdub process to idle or low. Modify the code to your hearts content  ~  TigerWild
rem create a unique .vcf that you will use with this batch file only. Do this by running Virtualdub, opening a video file, configuring all your settings as you want them, then selecting File->save processing settings->.vcf
rem use a text editor to open the vcf file you made, and add these 2 lines:      VirtualDub.Open(VirtualDub.params[0]); VirtualDub.SaveAVI(VirtualDub.params[1]);
rem ---References---
rem http://stackru.com/questions/8749637/dos-command-to-sperate-file-name-and-extension-into-variables
rem http://forum.doom9.org/archive/index.php/t-152842.html     with a nod to stax76
Другие вопросы по тегам