Ошибка использования скрипта avisynth в качестве входных данных для ffmpeg
Я искал в интернете и не нашел решения. Я надеюсь, что этот вопрос не снимается как дубликат.
У меня есть следующие файлы в той же папке:
- ffmpeg.exe (32-разрядная версия)
- IN.mp4 (видеокодек - AVC, аудиокодек - PCM)
- Пакетные файлы RUN_FILE.bat и RUN_AVS.bat
- SCRIPT.avs (файл сценария avisynth)
- MSharpen.dll (заточка фильтра для avisynth)
Текст внутри RUN_FILE.bat
:
ffmpeg -i "IN.mp4" -c:v libx264 -crf 24 -c:a libmp3lame -aq 2 OUT.mp4
Текст внутри RUN_AVS.bat
:
ffmpeg -i "SCRIPT.avs" -c:v libx264 -crf 24 -c:a libmp3lame -aq 2 OUT.mp4
Текст внутри SCRIPT.avs
(3 строки):
LoadPlugin("D:\MSharpen.dll")
DirectShowSource("D:\IN.MP4")
MSharpen(15,150)
Если я пытаюсь загрузить скрипт avisynth с помощью внешней программы, такой как media player classic, он работает нормально (и обостряет видеокадры).
Переход в командную строку и запуск RUN_FILE.bat
работает как положено, однако работает RUN_AVS.bat
Я получаю следующую ошибку (см. Скриншот):
Я нахожу это запутанным, так как ffmpeg настроен с --enable-avisynth
,
Я был бы признателен за помощь в этом - это часть более крупного и очень важного проекта (автоматическое сканирование папки с сотнями видеофайлов, повышение резкости и перекодирование их в другую папку с теми же именами файлов).
2 ответа
Ну... в конце концов это был вопрос версий.
Замечание rogerdpack заставило меня систематически пробовать старые версии ffmpeg и т. д. Я дал ему ответ +1, но я думаю, что ответ должен быть таким, чтобы это было полное решение вопроса, поэтому я пишу свой собственный ответ. Надеюсь, вы понимаете rogerdpack:-)
В любом случае, вот комбинация, которая сработала для меня (я надеюсь, что размещение URL-адресов в порядке):
FFMPEG 32-битная версия 2.5.2 (загружается с http://ffmpeg.zeranoe.com/)
Avisynth 2.5.8 (скачано с официальной сборки)
Плагин MSharpen для avisynth (загружается с официальной ссылки MSharpen).
Убедитесь, что вы скопировали MSharpen.dll в папку плагина avisynth и перезагрузили компьютер. В моем случае папка плагина C:\Program Files (x86)\AviSynth 2.5\plugins
,
Кстати, я использую Windows 7 Ultimate с SP1 (64 бит) с Intel i5-3570K, 16 ГБ оперативной памяти и т. Д. Возможно, я должен был заявить об этом в OP.
Для чего это стоит, вот мое решение.
Расположение папок и файлов выглядит следующим образом:
У меня есть основная папка; имя не имеет значения - давайте назовем его "ГЛАВНЫЙ". В "MAIN" у меня есть 2 файла и 2 папки.
2 файла:
- ffmpeg.exe (версия 2.5.2, 32-разрядная версия)
- BatchConvert.bat
2 папки:
- Источник (содержит все видео файлы)
- Цель (будет содержать закодированные выходные видеофайлы)
Файл BatchConvert.bat имеет следующий текст:
для %%a in ("Source*.*") do @echo DirectShowSource("%%a") >> "batchScript.avs" && @echo MSharpen(10,120) >> "batchScript.avs" && ffmpeg -i "batchScript.avs" -n -c:v libx264 -crf 24 -c: libmp3lame -b: пауза"Target\%%~na.mp4" && del "batchScript.avs"192k
Пакетный файл в основном сканирует все файлы из "Source" и кодирует их в "Target", и пропускает файлы, которые уже были закодированы. Это не меняет файлы в "Source" вообще, на всякий случай.
Все, что осталось сделать, это скопировать все видео в Source и запустить BatchConvert.bat!
Вы пробовали поискать линию, выделенную красным на скриншоте?
Из того, что я нашел здесь http://ffmpeg.zeranoe.com/forum/viewtopic.php?t=1084 и из других источников, неизвестная ошибка может быть связана с различием в 32/64-битных сборках либо в ffmpeg, либо в avisynth. Также может возникнуть проблема, если вы используете Avisynth 2.5.8 вместо 2.6 (откройте скрипт avisynth, содержащий "Version()" в качестве последней команды в любом плеере, чтобы найти, какой из них у вас есть). Наконец, вы можете попробовать открыть свой скрипт в x264.exe вместо ffmpeg и посмотреть, работает ли он.
Я бы опубликовал это в комментариях к ответу, но мне пока не разрешено комментировать.