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

时间:2015-03-30 08:56:18

标签: 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_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) 

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

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

error message

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

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

无论如何,这是适用于我的组合(我希望发布网址没问题):

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

BTW我正在运行带有SP1(64位)的Windows 7 Ultimate和Intel i5-3570K,16GB ram等。也许我应该在OP中说明。

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

文件夹和文件布局如下:

我有一个主文件夹;这个名字并不重要 - 我们称之为'MAIN'。 在'MAIN'中我有2个文件和2个文件夹。

这2个文件是:

  1. ffmpeg.exe(版本2.5.2,32位)
  2. BatchConvert.bat
  3. 这两个文件夹是:

    1. 来源(包含所有视频文件)
    2. 目标(将包含编码的输出视频文件)
    3. 文件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:libmp3lame -b:192k“Target \ %% ~na.mp4”&& del“batchScript.avs”   暂停

      批处理文件基本上扫描来自“Source”的所有文件,并将它们编码为“Target”,并跳过已经编码的文件。它根本不会改变'Source'中的文件。以防万一。

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