После выполнения Deshaker in batch mode (программа для стабилизации видео) у меня получился файл 2.txt вложен внизу (ПЕРЕМЕЩЕНИЯ блоков заданий) файл 1.txt вложен внизу (БЕЗ ПЕРЕМЕЩЕНИЯ блоков заданий) В какой программе и с каким кодом регулярных выражений осуществить масштабную перестановку заданий 1.txt и сделать как в 2.txt Рассмотрены для примера 3 файла (2 задачи на один файл), но может быть и свыше 1000. С уважением к неравнодушным.
Ну так в чем глобально они отличаются, суть проблемы? в 1 хоть по порядку идут во 2 нет, что происходить то должно ?
В Папке S:\01 находятся видеофайлы с именами СегодняDR00090000.mp4, СегодняDR00090004.mp4, СегодняDR00090006.mp4нужно их стабилизировать, перевести в формат mov и поместить в папку S:\02. Deshaker выполняет эти операции в 2 прохода, в первом проходе анализирует видеофайлы, во 2 проходе конвертирует и записывает в папку S:\02. 1.txt и 2.txt это примеры JOB LIST для пакетной обработки Deshaker. 1.txt - НЕПРАВИЛЬНЫЙ а 2.txt - ПРАВИЛЬНЫЙ. Поэтому задача -- из 1.txt получить 2.txt В какой программе и с каким кодом регулярных выражений?
Что же такое ) В Папке S:\01 находятся видеофайлы с именами СегодняDR00090000.mp4, СегодняDR00090004.mp4, СегодняDR00090006.mp4нужно их стабилизировать, перевести в формат mov и поместить в папку Здесь лежит 1.txt ? Здесь создается и лежит 2.txt ? (который получается с правильными данными после обработки?) Что не правильно в 1.txt, что именно, надо переносить. Подробней о файлах что с ними происходит? Какая нам разница о том что ты там делаешь с mp4. Опиши подробно что делать надо с txt. Надо было родится медиумом.
видимо, нужно сделать файл шаблон для этих операций обработки. а потом просканировать каталог с видео-файлами, и просто сделать для них реальные JOB-листы, заменив в шаблоне имена файлов на реальные.(+ может ещё какуюто мета информацию, вижу там ID ещё меняются..)
В 1.txt // $job "Job 613" // $input "S:\01\СегодняDR00090000.mp4" // $job "Job 614" // $input "S:\01\СегодняDR00090004.mp4" // $job "Job 615" // $input "S:\01\СегодняDR00090006.mp4" // $job "Job 616" // $input "S:\01\СегодняDR00090000.mp4" // $output "S:\03\СегодняDR00090000.mov" // $job "Job 617" // $input "S:\01\СегодняDR00090004.mp4" // $output "S:\03\СегодняDR00090004.mov" // $job "Job 618" // $input "S:\01\СегодняDR00090006.mp4" // $output "S:\03\СегодняDR00090006.mov" нужно переставить чтобы стало как в 2.txt: // $job "Job 613" // $input "S:\01\СегодняDR00090000.mp4" следовал: // $job "Job 616" // $input "S:\01\СегодняDR00090000.mp4" // $output "S:\03\СегодняDR00090000.mov" и далее: // $job "Job 614" // $input "S:\01\СегодняDR00090004.mp4" // $job "Job 617" // $input "S:\01\СегодняDR00090004.mp4" // $output "S:\03\СегодняDR00090004.mov" // $job "Job 615" // $input "S:\01\СегодняDR00090006.mp4" // $job "Job 618" // $input "S:\01\СегодняDR00090006.mp4" // $output "S:\03\СегодняDR00090006.mov"
PHP: $input = '1.txt'; $output = '1_fix.txt'; $text = preg_replace_callback( '~^// \$job .*^//-+\r?\n~ms', function ($match) { preg_match_all('~^// \$job .*?\$input "([^"]*).*?\$output "([^"]*).*?^//-+\r?\n~ms', $match[0], $jobs, PREG_SET_ORDER); usort($jobs, function ($a, $b) { return strcmp($a[1].$a[2], $b[1].$b[2]); }); return implode(array_column($jobs, 0)); }, file_get_contents($input) ); file_put_contents($output, $text);
Для проверки этого скрипта, я должен скомпилировать дистрибутив PHP под свою Win10? Или есть такая возможность в другой программе? Попробовать сделать .cmd из этого скрипта?
Всё уже скомпилировано https://windows.php.net/download#php-7.3 Или реализовать на PowerShell. Файл sort.ps1 Код (Text): $input = "1.txt" $output = "1_.fix.txt" $enc = [system.text.encoding]::GetEncoding('windows-1251') $txt = [system.io.file]::ReadAllText($input, $enc) $callback = { $m = [regex]::matches($args[0], '(?ms)^// \$job .*?\$input "([^"]*).*?\$output "([^"]*).*?^//-+\r?\n') $m = $m | Sort-Object { $_.Groups[1].Value + $_.Groups[2].Value } -join $m } $re = [regex]'(?ms)^// \$job .*^//-+\r?\n' [system.io.file]::WriteAllText($output, $re.Replace($txt, $callback), $enc) И файл sort.bat для запуска. Код (Text): powershell.exe -ExecutionPolicy bypass -File sort.ps1