使用 avisynth 脚本作为 ffmpeg 的输入时出错

Error using avisynth script as input to ffmpeg

我已经在互联网上搜索过,但没有找到解决方案。我希望这个问题不会重复出现。

我在同一文件夹中有以下文件:

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) 

如果我尝试使用外部程序(例如 media player classic)加载 avisynth 脚本,它工作正常(并锐化视频帧)。

转到命令行,运行 RUN_FILE.bat 按预期工作,但是 运行 RUN_AVS.bat 我收到以下错误(见屏幕截图):

我发现这令人困惑,因为 ffmpeg 配置为 --enable-avisynth

非常感谢您的帮助 - 这是一个更大且非常重要的项目的一部分(自动扫描包含数百个视频文件的文件夹,锐化并将它们重新编码到另一个具有相同文件名的文件夹)。

您是否尝试使用谷歌搜索屏幕截图中的红色线条?

根据我在此处 http://ffmpeg.zeranoe.com/forum/viewtopic.php?t=1084 和其他来源中发现的内容,未知错误可能是由于 ffmpeg 或 avisynth 中 32/64 位构建的差异造成的。如果您使用的是 Avisynth 2.5.8 而不是 2.6,也可能会出现问题(在任何播放器中打开一个包含 "Version()" 作为最后一个命令的 avisynth 脚本,以找到您拥有的那个)。 最后,您可能想尝试在 x264.exe 而不是 ffmpeg 中打开您的脚本,看看它是否有效。

我本可以将其发布到评论而不是答案,但我还不能发表评论。

嗯……看来还是版本问题

rogerdpack 的评论让我系统地尝试旧版本的 ffmpeg 等。 我给他的答案+1,但我认为答案应该是问题的完整解决方案,所以我正在写自己的答案。 希望您了解 rogerdpack :-)

无论如何,这是对我有用的组合(我希望发布 URL 没问题):

FFMPEG 32 位版本 2.5.2(从 http://ffmpeg.zeranoe.com/ 下载)

Avisynth 2.5.8(从 official build 下载)

avisynth 的 MSharpen 插件(从 MSharpen official link 下载)。

确保您事先将 MSharpen.dll 复制到 avisynth 插件文件夹并重新启动计算机。在我的例子中,插件文件夹是 C:\Program Files (x86)\AviSynth 2.5\plugins.

顺便说一句,我正在 运行ning Windows 7 Ultimate with SP1 (64 bit) with Intel i5-3570K, 16GB ram etc. 也许我应该在 OP 中说明这一点。

不管怎样,这是我的解决方案。

文件夹和文件布局如下:

我有一个主文件夹;名称无关紧要 - 让我们称它为 'MAIN'。 在 'MAIN' 我有 2 个文件和 2 个文件夹。

这 2 个文件是:

  1. ffmpeg.exe(版本 2.5.2,32 位)
  2. BatchConvert.bat

这 2 个文件夹是:

  1. 来源(包含所有视频文件)
  2. 目标(将包含编码后的输出视频文件)

文件 BatchConvert.bat 包含以下文本:

for %%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:a libmp3lame -b:a 192k "Target\%%~na.mp4" && del "batchScript.avs" pause

批处理文件基本上扫描 'Source' 中的所有文件并在 'Target' 中对它们进行编码,它会跳过已经编码的文件。它根本不会改变 'Source' 中的文件,以防万一。

剩下要做的就是将所有视频复制到源和 运行 BatchConvert.bat !