Задачи для ffmpeg и медиафайлов активного каталога

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Keeper
Сообщения: 8
Зарегистрирован: Пт окт 02, 2015 13:57

Задачи для ffmpeg и медиафайлов активного каталога

Сообщение Keeper »

Привет, подскажите, пожалуйста код кнопки, для объединения выделенных mp4 файлов в новый и присвоения ему имени последнего выбранного.
Строка ffmpeg:

Код: Выделить всё

ffmpeg -f concat -i mylist.txt -c copy output
, где mylist.txt имеет вид:

Код: Выделить всё

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'
Очень важно присваивать имя последнего выбранного файла, согласно сортировке, если это возможно.
PS: mencoder, хоть и имеет синтаксис приемлемый для написания конопки через %S, неподходит для меня ибо имеет проблемы с h264 и AAC, короче не объединяет оно с такими исходными данными как у меня, а ffmpeg оъединяет :D
Wiki ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
Спасибо.

[mod="Avada"]Замечание за оффтоп в теме "Обмен кнопками". Где запрашиваются кнопки, говорилось многократно. Сообщение перенесено. [/mod]

[mod="CaptainFlint"]По запросу Flasher'а обсуждение задач про ffmpeg вынесено в самостоятельную ветку.[/mod]
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Keeper
Если нужно сразу списком без перебора по отдельности, то через кнопку не очень удобно, т.к. реплейсинг в cmd в чистом виде не предусмотрен. Лучше vbs-ник.
Последний раз редактировалось Flasher Чт апр 21, 2016 01:00, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Keeper
Сообщения: 8
Зарегистрирован: Пт окт 02, 2015 13:57

Сообщение Keeper »

Flasher
Привет, спасибо за ответ! Если вас не затруднит, то выложите, пожалуйста, ваш VBS скрипт.
Вообще, мне нужна реализация вот такой схемы: https://yadi.sk/i/kpdEzNCZr5nZh
но, так как я не совсем понял про перебор по отдельности и реплейсинг, то я думаю у меня не составит труда, взяв за основу ваш VBS, придать скрипту нужный мне функционал. :)
Еще раз спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Keeper

Код: Выделить всё

'======================================================================
' Склеить выбранные видеофрагменты в файл с именем последнего фрагмента
' Условие: путь запуска пустой
' Параметры: %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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Keeper
Сообщения: 8
Зарегистрирован: Пт окт 02, 2015 13:57

Сообщение Keeper »

Flasher, большое спасибо вам за скрипт. Очень помогли мне!
Подскажите, если не трудно, последнюю вещь - где ему сказать чтобы окошко cmd'шное открывал в котором виден был бы процесс (что конкретно ffmpeg делает), если это возможно.
Спасибо.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Keeper
Пож-та. 3 строка снизу, в конце 0 меняем на 1 (с активацией) или на 2 (свёрнутое).
А зачем? Тут после отработки курсор в ТС встаёт на полученный файл. Что ffmpeg делает и так понятно - склеивает. :)
Также обращу внимание, что случайно выделенные папки или неподдерживаемые файлы в отработку не попадут. Если файл в группе один, то ничего не произойдёт. Если выделены только неподдерживаемые файлы, то скрипт сообщит об этом. При повторных попытках склеить файлы с тем же именем будут создаваться новые с счётчиком.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Keeper
Сообщения: 8
Зарегистрирован: Пт окт 02, 2015 13:57

Сообщение Keeper »

Flasher писал(а):А зачем?
Дело в том, что я пользовался, до этого скрипта, решением от MP4Tools, который крайне ревностно относился к разному FPS и разрешению у файлов, брался их сам перекодировать в итоге выдавая невоспроизводимый файл. Из-за этого я испортил пару файлов и теперь, для спокойствия, хочу следить за выводом в консоли.
Но, как я выяснил, ffmpeg очень спокойно клеит разный битрейт|разрешение, чему очень рад, но всеже поглядывать на вывод будет не лишним, задача ведь еще и в том чтобы не проверять выходящий результат, или не весь, а выборочно.
Незнаю, канонично ли такое положение или нет, но PotPlayer нормально относится с склеенным в ffmpeg'e файлам с разным битрейтом|разрешением, в отличие от результата из mp4joiner'a. Вообще, подозреваю, исходя из изысканий в сети, что выбранная мною связка h264+AAC с вариативным битрейтом - не по стандарту, но уже поздно что-то менять, да и не относится это к теме.

Еще раз спасибо огромное.
Mailk
Сообщения: 251
Зарегистрирован: Сб янв 16, 2010 20:19

Сообщение Mailk »

у меня ошибку дает =строка 34 символ 22, не могу найти указанный фаил.
Куда скопировать FFMpeg? Где свой путь прописать в скрипте?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ошибки не будет при стандартной установке в системную папку.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
Почему бы не добавить возможность указать путь, как в других скриптах? Ни разу не ставил FFmpeg, при необходимости использовал версию из MeGUI, про фанатов портативности и говорить нечего...:)
Dimsok
Сообщения: 664
Зарегистрирован: Вс авг 17, 2014 00:45

Сообщение Dimsok »

Я тоже не понимаю выражение "ставить ffmpeg". Распаковал куда нужно и пользуйся.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off
Keeper указал строку без пути, что и подразумевало системную привязку. Да и про фанатов малоразмерности не забываем. Ладно, добавил в скрипт.

Dimsok
Распаковка или установка - не суть дела. Хотя что-то мне подсказывать, что кое-чьи "исправленные" c:\Program Files\makedict\makedict.exe и т.п. к распаковке ровным счётом никакого отношения не имеют.

P.S.: А чего только сейчас сбежались? Раньше этот вопрос не мучал?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher писал(а):Keeper указал строку без пути, что и подразумевало системную привязку. Да и про фанатов малоразмерности не забываем.
Мне показалось, подразумевало краткость, сестру таланта, но спорить не буду :) К слову о малоразмерности - UPX сжимает чуть ли не в 2 раза (2.х).

И нашим, и вашим - что-нибудь типа
[cut]

Код: Выделить всё

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 писал(а):А чего только сейчас сбежались? Раньше этот вопрос не мучал?
Не пользовался, но даже мысли не возникало, что для этого скрипта было сделано такое исключение :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Skif_off писал(а):К слову о малоразмерности - UPX сжимает чуть ли не в 2 раза (2.х).
Всё равно многовато.
Skif_off писал(а):И нашим, и вашим - что-нибудь типа
В этом не вижу смысла. Достаточно "ffmpeg" указать вместо пути.
Skif_off писал(а):Не пользовался
А, просто покритиковать пришёл, по-о-онятно...
    • Изображение
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Skif_off
Сообщения: 1252
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Flasher
1. Тем не менее - спорно.
2. Ага, просто привычка указывать полный путь, а тут ещё System32/SysWOW64...
3. Спросить, почему в этом скрипте со сторонней утилитой нет возможности задать свой путь сразу после шапки скрипта, как у тебя обычно, - это "покритиковать"? :))
Ответить