Дополнение по скрипту "пакетная обработка MOV to MKV":
Для работы с разрешением 1920x1080 в связи с нехваткой памяти нужно уменьшить количество предыдущих и последующих кадров до 30 (в бат файле 60|60 заменить на 30|30 )
Этот вариант работает более стабильно (так как нет имитации нажатия клавиш), но если применять в нем сложные фильтры avisynth будет медленнее предыдущего варианта.
Пути к x264.exe, ffmpeg.exe, oggenc.exe, mkvmerge.exe и временной папке как и в предыдущем варианте, путь к Virtualdub "c:\Program Files\1\VirtualDub\VirtualDub.exe"
1. Создаем файл настроек внешних энкодеров следующего содержания с расширением *.vdprof:
2. Выбираем его из VirtualDub: Options/Exsternal encoders/ кнопка Import...
3. Создаем bat файл и запускаем его в папке с MOV файлами:
Краткое описание:
Для каждого MOV файла в папке D:\temp создаются и после обработки удаляются следующие файлы:
input.avs - файл для открытия mov в VirtualDube, сюда можно добавить обработку фильтрами avisynth (резкость, шумодав, и т.д.)
vd_job_settings.jobs - файл заданий VirtualDub, в нем параметры для 3-х проходов
Deshaker.log - файл статистики перемещений фильтра Deshaker.vdf
out_video.mkv - обработанное видео без аудио дорожки
.stats - файл статистики x264.exe
В папке с MOV файлами создается папка out в которую помещаются готовые MKV файлы.
Для работы с разрешением 1920x1080 в связи с нехваткой памяти нужно уменьшить количество предыдущих и последующих кадров до 30 (в бат файле 60|60 заменить на 30|30 )
Добавление от 20.12.2014 22:33:
2-й вариант пакетной обработки MOV to MKV с использованием фильтра Deshaker.Этот вариант работает более стабильно (так как нет имитации нажатия клавиш), но если применять в нем сложные фильтры avisynth будет медленнее предыдущего варианта.
Пути к x264.exe, ffmpeg.exe, oggenc.exe, mkvmerge.exe и временной папке как и в предыдущем варианте, путь к Virtualdub "c:\Program Files\1\VirtualDub\VirtualDub.exe"
1. Создаем файл настроек внешних энкодеров следующего содержания с расширением *.vdprof:
01 | { |
02 | "description" : "VirtualDub external encoder profile collection" , |
03 | "externalEncoders" : { |
04 | "sets" : { |
05 | "MKV two pass 2 pass no audio" : { |
06 | "videoEncoder" : "x264 pass 2" , |
07 | "audioEncoder" : "" , |
08 | "multiplexer" : "" , |
09 | "description" : "mkv" , |
10 | "extension" : "mkv" , |
11 | "processPartial" : false, |
12 | "useOutputAsTemp" : false |
13 | }, |
14 | "MKV two pass 1 pass" : { |
15 | "videoEncoder" : "x264 pass 1" , |
16 | "audioEncoder" : "" , |
17 | "multiplexer" : "" , |
18 | "description" : "" , |
19 | "extension" : "" , |
20 | "processPartial" : false, |
21 | "useOutputAsTemp" : false |
22 | } |
23 | }, |
24 | "profiles" : { |
25 | "x264 pass 2" : { |
26 | "name" : "x264 pass 2" , |
27 | "program" : "C:\\Program Files\\1\\clienc\\x264.exe" , |
28 | "commandArguments" : "--pass 2 --stats \"D:\\temp\\.stats\" --demuxer raw --input-csp i420 --input-res %(width)x%(height) --fps %(fpsnum)/%(fpsden) --sar 1:1 --bitrate 5000 --deblock -1:-1 --keyint 500 --min-keyint 25 --ref 9 --range pc --input-range pc --no-interlace --no-psy --no-fast-pskip --no-dct-decimate --deadzone-inter 5 --deadzone-intra 10 --qpmin 16 --qpstep 8 --merange 32 --me umh --subme 9 --partitions all --threads 4 --trellis 1 --open-gop --sync-lookahead 0 --weightp 2 --direct spatial --no-mbtree --bframes 4 --b-pyramid=normal --output \"%(tempvideofile)\" -" , |
29 | "outputFilename" : "%(outputname)" , |
30 | "type" : 0, |
31 | "inputFormat" : 0, |
32 | "checkReturnCode" : true, |
33 | "logStdout" : true, |
34 | "logStderr" : true, |
35 | "bypassCompression" : false, |
36 | "predeleteOutputFile" : true |
37 | }, |
38 | "x264 pass 1" : { |
39 | "name" : "x264 pass 1" , |
40 | "program" : "C:\\Program Files\\1\\clienc\\x264.exe" , |
41 | "commandArguments" : "--pass 1 --slow-firstpass --stats \"D:\\temp\\.stats\" --demuxer raw --input-csp i420 --input-res %(width)x%(height) --fps %(fpsnum)/%(fpsden) --sar 1:1 --deblock -1:-1 --keyint 500 --min-keyint 25 --ref 9 --range pc --input-range pc --no-interlace --no-psy --no-fast-pskip --no-dct-decimate --deadzone-inter 5 --deadzone-intra 10 --qpmin 16 --qpstep 8 --merange 32 --me umh --subme 9 --partitions all --threads 4 --trellis 1 --open-gop --sync-lookahead 0 --weightp 2 --direct spatial --no-mbtree --bframes 4 --b-pyramid=normal --output nul -" , |
42 | "outputFilename" : "%(outputname)" , |
43 | "type" : 0, |
44 | "inputFormat" : 0, |
45 | "checkReturnCode" : true, |
46 | "logStdout" : true, |
47 | "logStderr" : true, |
48 | "bypassCompression" : false, |
49 | "predeleteOutputFile" : true |
50 | } |
51 | } |
52 | } |
53 | } |
2. Выбираем его из VirtualDub: Options/Exsternal encoders/ кнопка Import...
3. Создаем bat файл и запускаем его в папке с MOV файлами:
001 | @ echo off |
002 | chcp 1251 |
003 | :start |
004 | setlocal enabledelayedexpansion |
005 | if not exist "d:\Temp" md "d:\Temp" |
006 | if not exist "%CD%\out" md "%CD%\out" |
007 | echo . |
008 | echo . |
009 | set number=0 |
010 | for %%i in (*.mov) do ( |
011 | set /A number=!number!+1 |
012 | call echo %% DATE %% %%TIME%% start convert video ***** !number! ***** %%i ***** |
013 | echo . |
014 | echo . |
015 | echo . |
016 | echo Make d:\Temp\input.avs |
017 | echo . |
018 | echo . |
019 | |
020 | echo LoadPlugin( "C:\Program Files\XviD4PSP 5\dlls\AviSynth\plugins\QTSource.dll" ^) >> "d:\Temp\input.avs" |
021 | echo qtinput( "%CD%\%%~ni.mov" , color=2^) >> "d:\Temp\input.avs" |
022 | echo # >> "d:\Temp\input.avs" |
023 | echo # >> "d:\Temp\input.avs" |
024 | echo # >> "d:\Temp\input.avs" |
025 | |
026 | echo . |
027 | echo . |
028 | echo Make d:\Temp\vd_job_settings.jobs |
029 | echo . |
030 | echo . |
031 | |
032 | |
033 | echo VirtualDub.Open( "D:\\Temp\\input.avs" , "" ,0^); >> "d:\Temp\vd_job_settings.jobs" |
034 | echo VirtualDub.audio.SetSource(0^); >> "d:\Temp\vd_job_settings.jobs" |
035 | echo VirtualDub.audio.SetMode(0^); >> "d:\Temp\vd_job_settings.jobs" |
036 | echo VirtualDub.audio.SetInterleave(1,500,1,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
037 | echo VirtualDub.audio.SetClipMode(1,1^); >> "d:\Temp\vd_job_settings.jobs" |
038 | echo VirtualDub.audio.SetEditMode(1^); >> "d:\Temp\vd_job_settings.jobs" |
039 | echo VirtualDub.audio.SetConversion(0,0,0,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
040 | echo VirtualDub.audio.SetVolume(^); >> "d:\Temp\vd_job_settings.jobs" |
041 | echo VirtualDub.audio.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
042 | echo VirtualDub.audio.EnableFilterGraph(0^); >> "d:\Temp\vd_job_settings.jobs" |
043 | echo VirtualDub.video.SetInputFormat(0^); >> "d:\Temp\vd_job_settings.jobs" |
044 | echo VirtualDub.video.SetOutputFormat(7^); >> "d:\Temp\vd_job_settings.jobs" |
045 | echo VirtualDub.video.SetMode(3^); >> "d:\Temp\vd_job_settings.jobs" |
046 | echo VirtualDub.video.SetSmartRendering(0^); >> "d:\Temp\vd_job_settings.jobs" |
047 | echo VirtualDub.video.SetPreserveEmptyFrames(0^); >> "d:\Temp\vd_job_settings.jobs" |
048 | echo VirtualDub.video.SetFrameRate2(0,0,1^); >> "d:\Temp\vd_job_settings.jobs" |
049 | echo VirtualDub.video.SetIVTC(0, 0, 0, 0^); >> "d:\Temp\vd_job_settings.jobs" |
050 | echo VirtualDub.video.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
051 | echo VirtualDub.video.filters.BeginUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
052 | echo VirtualDub.video.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
053 | echo VirtualDub.video.filters.Add( "Deshaker v3.1" ^); >> "d:\Temp\vd_job_settings.jobs" |
054 | echo VirtualDub.video.filters.instance[0].Config( "19|1|16|4|1|0|1|0|640|480|0|1|1000|1000|1000|1000|4|0|0|2|0|50|300|4|d:\\Temp\\Deshaker.log|0|0|0|0|0|0|0|0|0|0|0|0|0|1|15|15|5|15|0|0|30|30|0|0|0|0|1|1|0|10|1000|0|88|1|0|20|5000|100|20|0|0|ff00ff" ^); >> "d:\Temp\vd_job_settings.jobs" |
055 | echo VirtualDub.video.filters.EndUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
056 | echo VirtualDub.audio.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
057 | echo VirtualDub.video.SetRange(^); >> "d:\Temp\vd_job_settings.jobs" |
058 | echo VirtualDub.project.ClearTextInfo(^); >> "d:\Temp\vd_job_settings.jobs" |
059 | echo VirtualDub.RunNullVideoPass(^); >> "d:\Temp\vd_job_settings.jobs" |
060 | echo VirtualDub.audio.SetSource(1^); >> "d:\Temp\vd_job_settings.jobs" |
061 | echo VirtualDub.Close(^); >> "d:\Temp\vd_job_settings.jobs" |
062 | echo // >> "d:\Temp\vd_job_settings.jobs" |
063 | echo // >> "d:\Temp\vd_job_settings.jobs" |
064 | echo VirtualDub.Open( "D:\\Temp\\input.avs" , "" ,0^); >> "d:\Temp\vd_job_settings.jobs" |
065 | echo VirtualDub.audio.SetSource(0^); >> "d:\Temp\vd_job_settings.jobs" |
066 | echo VirtualDub.audio.SetMode(0^); >> "d:\Temp\vd_job_settings.jobs" |
067 | echo VirtualDub.audio.SetInterleave(1,500,1,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
068 | echo VirtualDub.audio.SetClipMode(1,1^); >> "d:\Temp\vd_job_settings.jobs" |
069 | echo VirtualDub.audio.SetEditMode(1^); >> "d:\Temp\vd_job_settings.jobs" |
070 | echo VirtualDub.audio.SetConversion(0,0,0,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
071 | echo VirtualDub.audio.SetVolume(^); >> "d:\Temp\vd_job_settings.jobs" |
072 | echo VirtualDub.audio.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
073 | echo VirtualDub.audio.EnableFilterGraph(0^); >> "d:\Temp\vd_job_settings.jobs" |
074 | echo VirtualDub.video.SetInputFormat(0^); >> "d:\Temp\vd_job_settings.jobs" |
075 | echo VirtualDub.video.SetOutputFormat(7^); >> "d:\Temp\vd_job_settings.jobs" |
076 | echo VirtualDub.video.SetMode(3^); >> "d:\Temp\vd_job_settings.jobs" |
077 | echo VirtualDub.video.SetSmartRendering(0^); >> "d:\Temp\vd_job_settings.jobs" |
078 | echo VirtualDub.video.SetPreserveEmptyFrames(0^); >> "d:\Temp\vd_job_settings.jobs" |
079 | echo VirtualDub.video.SetFrameRate2(0,0,1^); >> "d:\Temp\vd_job_settings.jobs" |
080 | echo VirtualDub.video.SetIVTC(0, 0, 0, 0^); >> "d:\Temp\vd_job_settings.jobs" |
081 | echo VirtualDub.video.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
082 | echo VirtualDub.video.filters.BeginUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
083 | echo VirtualDub.video.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
084 | echo VirtualDub.video.filters.Add( "Deshaker v3.1" ^); >> "d:\Temp\vd_job_settings.jobs" |
085 | echo VirtualDub.video.filters.instance[0].Config( "19|2|16|4|1|0|1|0|640|480|0|1|1000|1000|999|0|4|0|0|2|0|50|300|4|d:\\Temp\\Deshaker.log|0|0|0|0|0|0|0|0|0|0|0|0|0|1|29|31|45|0.0001|1|1|30|30|0|0|0|0|1|1|1|16|1000|0|88|1|0|20|5000|100|20|0|0|ff00ff" ^); >> "d:\Temp\vd_job_settings.jobs" |
086 | echo VirtualDub.video.filters.EndUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
087 | echo VirtualDub.audio.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
088 | echo VirtualDub.video.SetRange(^); >> "d:\Temp\vd_job_settings.jobs" |
089 | echo VirtualDub.project.ClearTextInfo(^); >> "d:\Temp\vd_job_settings.jobs" |
090 | echo VirtualDub.ExportViaEncoderSet( "D:\\Temp\\out_video" , "MKV two pass 1 pass" ^); >> "d:\Temp\vd_job_settings.jobs" |
091 | echo VirtualDub.audio.SetSource(1^); >> "d:\Temp\vd_job_settings.jobs" |
092 | echo VirtualDub.Close(^); >> "d:\Temp\vd_job_settings.jobs" |
093 | echo // >> "d:\Temp\vd_job_settings.jobs" |
094 | echo // >> "d:\Temp\vd_job_settings.jobs" |
095 | echo VirtualDub.Open( "D:\\Temp\\input.avs" , "" ,0^); >> "d:\Temp\vd_job_settings.jobs" |
096 | echo VirtualDub.audio.SetSource(0^); >> "d:\Temp\vd_job_settings.jobs" |
097 | echo VirtualDub.audio.SetMode(0^); >> "d:\Temp\vd_job_settings.jobs" |
098 | echo VirtualDub.audio.SetInterleave(1,500,1,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
099 | echo VirtualDub.audio.SetClipMode(1,1^); >> "d:\Temp\vd_job_settings.jobs" |
100 | echo VirtualDub.audio.SetEditMode(1^); >> "d:\Temp\vd_job_settings.jobs" |
101 | echo VirtualDub.audio.SetConversion(0,0,0,0,0^); >> "d:\Temp\vd_job_settings.jobs" |
102 | echo VirtualDub.audio.SetVolume(^); >> "d:\Temp\vd_job_settings.jobs" |
103 | echo VirtualDub.audio.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
104 | echo VirtualDub.audio.EnableFilterGraph(0^); >> "d:\Temp\vd_job_settings.jobs" |
105 | echo VirtualDub.video.SetInputFormat(0^); >> "d:\Temp\vd_job_settings.jobs" |
106 | echo VirtualDub.video.SetOutputFormat(7^); >> "d:\Temp\vd_job_settings.jobs" |
107 | echo VirtualDub.video.SetMode(3^); >> "d:\Temp\vd_job_settings.jobs" |
108 | echo VirtualDub.video.SetSmartRendering(0^); >> "d:\Temp\vd_job_settings.jobs" |
109 | echo VirtualDub.video.SetPreserveEmptyFrames(0^); >> "d:\Temp\vd_job_settings.jobs" |
110 | echo VirtualDub.video.SetFrameRate2(0,0,1^); >> "d:\Temp\vd_job_settings.jobs" |
111 | echo VirtualDub.video.SetIVTC(0, 0, 0, 0^); >> "d:\Temp\vd_job_settings.jobs" |
112 | echo VirtualDub.video.SetCompression(^); >> "d:\Temp\vd_job_settings.jobs" |
113 | echo VirtualDub.video.filters.BeginUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
114 | echo VirtualDub.video.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
115 | echo VirtualDub.video.filters.Add( "Deshaker v3.1" ^); >> "d:\Temp\vd_job_settings.jobs" |
116 | echo VirtualDub.video.filters.instance[0].Config( "19|2|16|4|1|0|1|0|640|480|0|1|1000|1000|999|0|4|0|0|2|0|50|300|4|d:\\Temp\\Deshaker.log|0|0|0|0|0|0|0|0|0|0|0|0|0|1|29|31|45|0.0001|1|1|30|30|0|0|0|0|1|1|1|16|1000|0|88|1|0|20|5000|100|20|0|0|ff00ff" ^); >> "d:\Temp\vd_job_settings.jobs" |
117 | echo VirtualDub.video.filters.EndUpdate(^); >> "d:\Temp\vd_job_settings.jobs" |
118 | echo VirtualDub.audio.filters.Clear(^); >> "d:\Temp\vd_job_settings.jobs" |
119 | echo VirtualDub.video.SetRange(^); >> "d:\Temp\vd_job_settings.jobs" |
120 | echo VirtualDub.project.ClearTextInfo(^); >> "d:\Temp\vd_job_settings.jobs" |
121 | echo VirtualDub.ExportViaEncoderSet( "D:\\Temp\\out_video.mkv" , "MKV two pass 2 pass no audio" ^); >> "d:\Temp\vd_job_settings.jobs" |
122 | echo VirtualDub.audio.SetSource(1^); >> "d:\Temp\vd_job_settings.jobs" |
123 | echo VirtualDub.Close(^); >> "d:\Temp\vd_job_settings.jobs" |
124 | |
125 | |
126 | echo . |
127 | echo . |
128 | echo Start VirtualDub |
129 | echo . |
130 | echo . |
131 | |
132 | start "" /wait /min "c:\Program Files\1\VirtualDub\VirtualDub.exe" /i "d:\Temp\vd_job_settings.jobs" /x |
133 | echo . |
134 | echo . |
135 | call echo %% DATE %% %%TIME%% start convert audio |
136 | echo . |
137 | echo . |
138 | "C:\Program Files\1\clienc\ffmpeg\old\ffmpeg.exe" -i "%%~ni.MOV" -f wav -ac 2 - | "C:\Program Files\1\clienc\oggenc2.exe" - --ignorelength --discard-comments -q 4 -o "%CD%\out\%%~ni.ogg" |
139 | echo . |
140 | echo . |
141 | call echo %% DATE %% %%TIME%% start muxing |
142 | echo . |
143 | echo . |
144 | "C:\Program Files\1\clienc\MKVtoolnix\mkvmerge.exe" --disable-track-statistics-tags --no-cues -o "%CD%\out\%%~ni.mkv" --no- global -tags --no-chapters "D:\Temp\out_video.mkv" --no- global -tags --no-chapters "%CD%\out\%%~ni.ogg" |
145 | if not exist "%CD%\out\%%~ni.mkv" goto one |
146 | del "%CD%\out\%%~ni.ogg" |
147 | del "D:\Temp\.stats" |
148 | del "D:\Temp\out_video.mkv" |
149 | del "D:\Temp\Deshaker.log" |
150 | del "D:\Temp\input.avs" |
151 | del "d:\Temp\vd_job_settings.jobs" |
152 | echo . |
153 | echo . |
154 | echo . |
155 | call echo %% DATE %% %%TIME%% finish |
156 | echo . |
157 | echo . |
158 | ) |
159 | pause |
160 | exit |
161 | :one |
162 | echo . |
163 | echo . |
164 | echo . |
165 | echo . ERROR! |
166 | echo . |
167 | echo . |
168 | echo Обработанные исходные файлы убрать из папки и нажать Enter для продолжения |
169 | echo . |
170 | pause |
171 | goto start |
Краткое описание:
Для каждого MOV файла в папке D:\temp создаются и после обработки удаляются следующие файлы:
input.avs - файл для открытия mov в VirtualDube, сюда можно добавить обработку фильтрами avisynth (резкость, шумодав, и т.д.)
vd_job_settings.jobs - файл заданий VirtualDub, в нем параметры для 3-х проходов
Deshaker.log - файл статистики перемещений фильтра Deshaker.vdf
out_video.mkv - обработанное видео без аудио дорожки
.stats - файл статистики x264.exe
В папке с MOV файлами создается папка out в которую помещаются готовые MKV файлы.