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

CV_*_*ser 7 video ffmpeg avisynth

我搜索过互联网并没有找到解决方案.我希望这个问题不会重复.

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

  • 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 Code Online (Sandbox Code Playgroud)

内文RUN_AVS.bat:

ffmpeg -i "SCRIPT.avs" -c:v libx264 -crf 24 -c:a libmp3lame -aq 2 OUT.mp4
Run Code Online (Sandbox Code Playgroud)

SCRIPT.avs(3行)内的文字:

LoadPlugin("D:\MSharpen.dll")

DirectShowSource("D:\IN.MP4")

MSharpen(15,150) 
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用外部程序(如媒体播放器classic)加载avisynth脚本,它可以正常工作(并锐化视频帧).

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

错误信息

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

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

See*_*anc 6

您是否尝试使用Google搜索屏幕截图中的红线?

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

我会把这个发布到评论的回答中,但我还没有被允许发表评论.


CV_*_*ser 1

嗯……看来这毕竟是版本问题。

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

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

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

Avisynth 2.5.8(从官方版本下载)

avisynth 的 MSharpen 插件(从MSharpen 官方链接下载)。

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

顺便说一句,我正在运行 Windows 7 Ultimate SP1(64 位),配有 Intel i5-3570K、16GB 内存等。也许我应该在 OP 中说明这一点。

对于它的价值,这是我的解决方案。

文件夹和文件布局如下:

我有一个主文件夹;名称并不重要——我们称之为“MAIN”。在“MAIN”中,我有 2 个文件和 2 个文件夹。

这 2 个文件是:

  1. ffmpeg.exe(版本 2.5.2,32 位)
  2. 批量转换.bat

这 2 个文件夹是:

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

文件 BatchConvert.bat 具有以下文本:

对于 ("Source*.*") 中的 %%a 执行 @echo DirectShowSource("%%a") >> "b​​atchScript.avs" && @echo MSharpen(10,120) >> "b​​atchScript.avs" && ffmpeg -i " batchScript.avs" -n -c:v libx264 -crf 24 -c:a libmp3lame -b:a 192k "Target\%%~na.mp4" && del "batchScript.avs" 暂停

批处理文件基本上扫描“源”中的所有文件并将它们编码到“目标”中,并跳过已经编码的文件。它根本不会改变“源”中的文件,以防万一。

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