Очень важно присваивать имя последнего выбранного файла, согласно сортировке, если это возможно. PS: mencoder, хоть и имеет синтаксис приемлемый для написания конопки через %S, неподходит для меня ибо имеет проблемы с h264 и AAC, короче не объединяет оно с такими исходными данными как у меня, а ffmpeg оъединяет
Wiki ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
Спасибо.
[mod="Avada"]Замечание за оффтоп в теме "Обмен кнопками". Где запрашиваются кнопки, говорилось многократно. Сообщение перенесено. [/mod]
[mod="CaptainFlint"]По запросу Flasher'а обсуждение задач про ffmpeg вынесено в самостоятельную ветку.[/mod]
Keeper
Если нужно сразу списком без перебора по отдельности, то через кнопку не очень удобно, т.к. реплейсинг в cmd в чистом виде не предусмотрен. Лучше vbs-ник.
Последний раз редактировалось Flasher Чт апр 21, 2016 01:00, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Привет, спасибо за ответ! Если вас не затруднит, то выложите, пожалуйста, ваш VBS скрипт.
Вообще, мне нужна реализация вот такой схемы: https://yadi.sk/i/kpdEzNCZr5nZh
но, так как я не совсем понял про перебор по отдельности и реплейсинг, то я думаю у меня не составит труда, взяв за основу ваш VBS, придать скрипту нужный мне функционал.
Еще раз спасибо.
'======================================================================
' Склеить выбранные видеофрагменты в файл с именем последнего фрагмента
' Условие: путь запуска пустой
' Параметры: %F "<путь целевого каталога>" "<добавка к базовому имени>"
' Пример: %F "%T" _joined
'======================= Путь к утилите FFmpeg ========================
Prog = """%COMMANDER_PATH%\Utils\FFmpeg\ffmpeg.exe"""
'======================================================================
With WScript.Arguments
Title = " Объединение видео" : C = .Count : If C = 0 Then WScript.Quit
If C <> 3 Then MsgBox "Укажите 3 параметра!", 4144, Title : WScript.Quit
List = .Item(0) : T = .Item(1) : PFix = .Item(2)
End With
Dim WSH : Set WSH = CreateObject("WScript.Shell")
With CreateObject("Scripting.FileSystemObject")
All = .OpenTextFile(List).ReadAll : T = .BuildPath(T, "\")
With New Regexp
.IgnoreCase = True : .Multiline = True : .Global = True
.Pattern = "^.*\.(3g[2p]2?|4xm|avi|asf|dat|dvr-ms|fl[iv]|film" &_
"_cpk|gif|h26[134]|qtm2ts?|m4v|mkv|mo[dv]|mp4|mpe?g|mxf|nuv|" &_
"og[gm]|pva|rm|roq|swf|ts|tp|t[ox]d|vcd|vivo|vob|webm|wmv)(?!\\)$"
If Not .Test(All) Then MsgBox "В выбранном списке нет " &_
"поддерживаемых файлов!", 4144, Space(22) & Title : WScript.Quit
With .Execute(All)
If .Count = 1 Then WScript.Quit
For i = 0 To .Count - 1
S = S & "file '" & .Item(i).Value & "'" & VbCrLf
Next : F = .Item(i - 1).Value End With
End With
With .OpenTextFile(List, 2) : .Write Left(S, Len(S) - 2) : .Close
End With : If WSH.CurrentDirectory & "\" = T Then P = "L" Else P = "R"
BN = .GetBaseName(F) & PFix : Ext = "." & .GetExtensionName(F)
i = 0 : F = BN & Ext
While .FileExists(T & F) Or .FolderExists(T & F)
i = i + 1 : F = BN & " (" & i & ")" & Ext
Wend : F = T & F: WSH.Run Prog & " -f concat -i " & List & " -c copy """ & F & """",0, True
If .FileExists(F) Then WSH.Exec "%COMMANDER_EXE% /S /O /A /" & P & "=""" & F & """ /P=" & P
End With
Последний раз редактировалось Flasher Вс май 08, 2016 23:17, всего редактировалось 2 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher, большое спасибо вам за скрипт. Очень помогли мне!
Подскажите, если не трудно, последнюю вещь - где ему сказать чтобы окошко cmd'шное открывал в котором виден был бы процесс (что конкретно ffmpeg делает), если это возможно.
Спасибо.
Keeper
Пож-та. 3 строка снизу, в конце 0 меняем на 1 (с активацией) или на 2 (свёрнутое).
А зачем? Тут после отработки курсор в ТС встаёт на полученный файл. Что ffmpeg делает и так понятно - склеивает.
Также обращу внимание, что случайно выделенные папки или неподдерживаемые файлы в отработку не попадут. Если файл в группе один, то ничего не произойдёт. Если выделены только неподдерживаемые файлы, то скрипт сообщит об этом. При повторных попытках склеить файлы с тем же именем будут создаваться новые с счётчиком.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Дело в том, что я пользовался, до этого скрипта, решением от MP4Tools, который крайне ревностно относился к разному FPS и разрешению у файлов, брался их сам перекодировать в итоге выдавая невоспроизводимый файл. Из-за этого я испортил пару файлов и теперь, для спокойствия, хочу следить за выводом в консоли. Но, как я выяснил, ffmpeg очень спокойно клеит разный битрейт|разрешение, чему очень рад, но всеже поглядывать на вывод будет не лишним, задача ведь еще и в том чтобы не проверять выходящий результат, или не весь, а выборочно.
Незнаю, канонично ли такое положение или нет, но PotPlayer нормально относится с склеенным в ffmpeg'e файлам с разным битрейтом|разрешением, в отличие от результата из mp4joiner'a. Вообще, подозреваю, исходя из изысканий в сети, что выбранная мною связка h264+AAC с вариативным битрейтом - не по стандарту, но уже поздно что-то менять, да и не относится это к теме.
Еще раз спасибо огромное.
Ошибки не будет при стандартной установке в системную папку.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Почему бы не добавить возможность указать путь, как в других скриптах? Ни разу не ставил FFmpeg, при необходимости использовал версию из MeGUI, про фанатов портативности и говорить нечего...
Skif_off
Keeper указал строку без пути, что и подразумевало системную привязку. Да и про фанатов малоразмерности не забываем. Ладно, добавил в скрипт.
Dimsok
Распаковка или установка - не суть дела. Хотя что-то мне подсказывать, что кое-чьи "исправленные" c:\Program Files\makedict\makedict.exe и т.п. к распаковке ровным счётом никакого отношения не имеют.
P.S.: А чего только сейчас сбежались? Раньше этот вопрос не мучал?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
If Not .FileExists(Prog) Then
If .FileExists("""%WinDir%\System32\ffmpeg.exe""") Then
Prog = """%WinDir%\System32\ffmpeg.exe"""
Else
Prog = """%WinDir%\SysWOW64\ffmpeg.exe"""
End If
End If
[/cut]
(Или .FileExists(Prog) нужно брать в скобки?) У себя в некоторых случаях делаю подобным образом.
Flasher писал(а):А чего только сейчас сбежались? Раньше этот вопрос не мучал?
Не пользовался, но даже мысли не возникало, что для этого скрипта было сделано такое исключение
Skif_off писал(а):К слову о малоразмерности - UPX сжимает чуть ли не в 2 раза (2.х).
Всё равно многовато.
Skif_off писал(а):И нашим, и вашим - что-нибудь типа
В этом не вижу смысла. Достаточно "ffmpeg" указать вместо пути.
Skif_off писал(а):Не пользовался
А, просто покритиковать пришёл, по-о-онятно...
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
1. Тем не менее - спорно.
2. Ага, просто привычка указывать полный путь, а тут ещё System32/SysWOW64...
3. Спросить, почему в этом скрипте со сторонней утилитой нет возможности задать свой путь сразу после шапки скрипта, как у тебя обычно, - это "покритиковать"? )