Mencoder не склеивает файлы AVI по маске файлов
Здратси.
Имеется много файлов (одинакjвые кодеки и все прочие параметры) в каталоге: vid1-0000.avi vid1-00a1.avi vid1-00b7.avi ...
Их требуется склеить последовательно, ка кони представлены.
Новые версии mencoder не работают со строкой
Код:
mencoder -forceidx vid1-*.avi -ovc copy -oac copy -o v1.avi
Ошибку выдаёт такую.
Код:
File not found 'vid1-*.avi'
Failed to open vid1-*.avi.
Cannot open file/device.
Exiting...
Помогите решить проблему и заставить новую версию склеивать.
Старая версия mencoder'а , примерно 2009 года, прекрасно работала, но она утеряна навсегда и в инете нет её.
|
DJ Mogarych |
08-07-2025 10:28 3038806 |
Если у вас Линукс, попробуйте указать полный путь к mencoder.
|
Здрасти, но у меня Windows.
Path прописаны.
Очень прошу помочь! Дело важное.
|
DJ Mogarych |
08-07-2025 10:40 3038809 |
Судя по сообщению об ошибке, менкодер не воспринимает маску, а пытается открыть файл как он написан. Прочтите где-нибудь в справке, как ему теперь указывать несколько файлов на входе.
|
В мануале написано, что указывать так, как и ранее, т.е. files*.avi.
Для картинок указывается через mf://*.jpg, но только для картинок.
Найти бы старую версию, года так 2009-2011. Она отлично работала по маске.
Если не получится потоком соединить, то как тогда?
В папке за неделю скапливается около 30000 файлов (по 1-2 минуты avi 1280*720 25фпс 4:2:0) в 40-60 категориях.
Конкатенация делалась так.
Far manager:
1) выделялись первые файлы каждой серии по маске '*-0000.avi'
2) Gtrl+G и вводилось echo mencoder -forceidx !*.avi -ovc copy -oac copy -O d:\out\!all.avi>>0.bat
3) каждая строка в полученном батнике приводилась к виду mencoder -forceidx vid01-*.avi -ovc copy -oac copy -O d:\out\vid01all.avi
Далее start 0.bat и занятия другими делами.
Теперь сделать это с минимальными затратами на зрение невозможно.
Т.к. приходится создавать сперва списки файлов, далее создавать батник для ffmpeg.
Ранее тратилась 1 минута максимум на подготовку, теперь час.
Извините, но это дичь!
А когда будет под миллион файлов и под тыщщу категорий? Тогда всю жизнь тратить?
|
DJ Mogarych |
08-07-2025 13:00 3038812 |
Вот примерный вариант для Powershell и ffmpeg.
Код:
$path = "D:\temp"
$list = (gci "$path\vid1-*.avi").fullname |% {"file '$_'"}
$list > "$path\list.txt"
& ffmpeg -f concat -safe 0 -i "$path\list.txt" -c copy "$path\v1.avi"
Можно автоматизировать перекодировку так, что руками вообще ничего делать не надо будет. Скрипт может и формировать списки, и кодировать, и удалять, и называть конечные файлы по дате, и все остальное. Главное задачу сформулировать.
|
Это ясно. Но каждый разх названия файлов раные и придётся вручную вводить маску.
Мой способо универсален, т.к. мгновенно и просто выделяются файлы одной серии по стартовому видео маской *-0000.avi.
Ваш вариант требует листать все сотни тыщ файлов, чтобы определить маску.
Вот щас такие расклады: 3500 файлов начиная с gthnj-0000.avi, 1200 файлов начиная с gtkop-0000.avi и т.п.
Это придётся для каждой маски проводить создание скрипта, сперва их выделив и выведя стартовые файлы (как образец маски) в текстовый файл.
С менкодером это элементарно, как было описано мной. Дело минуты на любой объём файлов, хоть миллиард.
Очень прошу помочь с менкодером. Буду признателен и чистые белые 30 usdt trc20 на счёт тому кто реально поможет с менкодером (т.к. это моя работа и я получаю бабло за это всё).
Или старую древнюю версию, которая работала или синтаксис строки к новым версиям.
|
DJ Mogarych |
08-07-2025 18:48 3038819 |
Код:
придётся для каждой маски проводить создание скрипта, сперва их выделив и выведя стартовые файлы
Ничего не придется, файлы просто группируются по буквенному индексу и затем файлы в каждом индексе скармливаются ffmpeg по очереди. Скрипт будет ровно один, и небольшой. Я, к сожалению, до пятницы не имею доступа к компу, поэтому прямо сейчас не напишу.
А несколько десятков тысяч файлов обработать - это пустяки, и будет быстрее, чем выделять всё это руками.
|
Цитата:
Цитата DJ Mogarych
файлы просто группируются по буквенному индексу »
|
Невозможно сгруппировать по буквенному, не зная какие буквы в каждой серии в начале имени файла.
Чтобы знать все начала имён (соответственно серию), надо сперва выделить все файлы по маске -0000.avi, т.к. в каждой серии гарантированно имеется один такой файл.
|
DJ Mogarych |
08-07-2025 19:14 3038821 |
Это все возможно и довольно просто.
Вот индексы в powershell
Код:
(dir d:\temp\*-0000.avi).basename -replace '(.*)-0000$', '$1'
Надеюсь, правильно написал, проверить мне не на чем.
|
Проблема решена.
Нашёлся менкодер 2006 года и он прекрасно клеит что угодно.
Как всегда новый софт user not friendly, а всё старое - это топчик!
|
DJ Mogarych |
11-07-2025 11:04 3038836 |
Вот автоматизированное решение на базе powershell + ffmpeg.
Безо всяких выделений руками, просто надо указать путь к каталогу с файлами и расширение в двух первых переменных.
Код:
# Каталог с видеофайлами
$path = "C:\temp\in\mencoder"
# Расширение видеофайлов, которые нужно склеить
$ext = 'mp4'
# Список всех файлов без уже склеенных (*-all) + индексы
$index = (dir "$path\*.$ext" -Exclude "*-all.$ext" -OutVariable allVideos |? basename -match '-0000$').basename -replace '0000$'
# Кол-во индексов
$ic = $index.count
Write-Host -fore Cyan "Нашлось индексов: $ic"
# Обработка каждого индекса
for ($c = 0;$c -lt $ic;$c++) {
$i = $index[$c]
try {
Write-Host -fore Yellow "Обработка индекса `"$i`" ($($c+1) из $ic)..."
# Текстовый список для ffmpeg
($allVideos |? basename -match "^$i" -OutVariable list).fullname |% {"file '$_'"} |Out-File "$path\list.txt" -Encoding default
# Объединение файлов на основе текстового списка
& ffmpeg -hide_banner -loglevel error -y -f concat -safe 0 -i "$path\list.txt" -c copy "$path\${i}all.$ext"
Write-Host -fore Green "Индекс `"$i`" успешно обработан (файлов: $($list.count))"
}
catch {
Write-Host -fore Red "Ошибка обработки индекса `"$i`"!"
}
}
pause
Пример работы. Вот каталог с файлами:
Код:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 02.04.2025 12:54 7336387 aaaaa-0000.mp4
-a--- 02.04.2025 12:54 5794553 aaaaa-0001.mp4
-a--- 02.04.2025 12:54 5418298 aaaaa-0002.mp4
-a--- 02.04.2025 12:54 6730884 aaaaa-0003.mp4
-a--- 02.04.2025 12:54 3357691 aaaaa-0004.mp4
-a--- 02.04.2025 12:54 2696222 aaaaa-0005.mp4
-a--- 02.04.2025 12:54 2821749 aaaaa-0006.mp4
-a--- 02.04.2025 12:54 11963415 aaaaa-0007.mp4
-a--- 02.04.2025 12:54 4725513 aaaaa-0008.mp4
-a--- 02.04.2025 12:54 3767305 aaaaa-0009.mp4
-a--- 02.04.2025 12:54 10368113 aaaaa-0010.mp4
-a--- 02.04.2025 12:54 4522590 aaaaa-0011.mp4
-a--- 02.04.2025 12:54 3663561 aaaaa-0012.mp4
-a--- 02.04.2025 12:54 3923716 aaaaa-0013.mp4
-a--- 02.04.2025 12:54 9504516 aaaaa-0014.mp4
-a--- 02.04.2025 12:54 2480729 aaaaa-0015.mp4
-a--- 02.04.2025 12:54 7336387 bdfsj-0000.mp4
-a--- 02.04.2025 12:54 5794553 bdfsj-0001.mp4
-a--- 02.04.2025 12:54 5418298 bdfsj-0002.mp4
-a--- 02.04.2025 12:54 6730884 bdfsj-0003.mp4
-a--- 02.04.2025 12:54 3357691 bdfsj-0004.mp4
-a--- 02.04.2025 12:54 2696222 bdfsj-0005.mp4
-a--- 02.04.2025 12:54 2821749 bdfsj-0006.mp4
-a--- 02.04.2025 12:54 11963415 bdfsj-0007.mp4
-a--- 02.04.2025 12:54 7336387 fhoer-0000.mp4
-a--- 02.04.2025 12:54 5794553 fhoer-0001.mp4
-a--- 02.04.2025 12:54 5418298 fhoer-0002.mp4
-a--- 02.04.2025 12:54 6730884 fhoer-0003.mp4
-a--- 02.04.2025 12:54 3357691 fhoer-0004.mp4
-a--- 02.04.2025 12:54 2696222 fhoer-0005.mp4
-a--- 02.04.2025 12:54 2821749 fhoer-0006.mp4
-a--- 02.04.2025 12:54 11963415 fhoer-0007.mp4
-a--- 02.04.2025 12:54 4725513 fhoer-0008.mp4
-a--- 02.04.2025 12:54 3767305 fhoer-0009.mp4
-a--- 02.04.2025 12:54 10368113 fhoer-0010.mp4
-a--- 02.04.2025 12:54 4522590 fhoer-0011.mp4
-a--- 02.04.2025 12:54 3663561 fhoer-0012.mp4
-a--- 02.04.2025 12:54 3923716 fhoer-0013.mp4
-a--- 02.04.2025 12:54 9504516 fhoer-0014.mp4
-a--- 02.04.2025 12:54 2480729 fhoer-0015.mp4
-a--- 02.04.2025 12:54 5794553 geltt-0001.mp4
-a--- 02.04.2025 12:54 5418298 geltt-0002.mp4
-a--- 02.04.2025 12:54 6730884 geltt-0003.mp4
-a--- 02.04.2025 12:54 3357691 geltt-0004.mp4
-a--- 02.04.2025 12:54 2696222 geltt-0005.mp4
-a--- 02.04.2025 12:54 2821749 geltt-0006.mp4
-a--- 02.04.2025 12:54 11963415 geltt-0007.mp4
-a--- 02.04.2025 12:54 4725513 geltt-0008.mp4
-a--- 02.04.2025 12:54 3767305 geltt-0009.mp4
-a--- 02.04.2025 12:54 10368113 geltt-0010.mp4
-a--- 02.04.2025 12:54 4522590 geltt-0011.mp4
-a--- 02.04.2025 12:54 3663561 geltt-0012.mp4
-a--- 02.04.2025 12:54 3923716 geltt-0013.mp4
-a--- 02.04.2025 12:54 9504516 geltt-0014.mp4
-a--- 02.04.2025 12:54 2480729 geltt-0015.mp4
Запускаем скрипт. Файлы "geltt-" не были обработаны, т. к. нет файла с номером 0000:
Код:
Нашлось индексов: 3
Обработка индекса "aaaaa-" (1 из 3)...
Индекс "aaaaa-" успешно обработан (файлов: 16)
Обработка индекса "bdfsj-" (2 из 3)...
Индекс "bdfsj-" успешно обработан (файлов: 8)
Обработка индекса "fhoer-" (3 из 3)...
Индекс "fhoer-" успешно обработан (файлов: 16)
Результат:
Код:
dir *all.mp4
Directory: C:\temp\in\mencoder
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11.07.2025 10:50 88933372 aaaaa-all.mp4
-a--- 11.07.2025 10:50 46050221 bdfsj-all.mp4
-a--- 11.07.2025 10:50 88933372 fhoer-all.mp4
|
Время: 13:00.
© OSzone.net 2001-