使用 avisynth 脚本作为 ffmpeg 的输入时出错
Error using avisynth script as input to 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)
如果我尝试使用外部程序(例如 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 个文件是:
- ffmpeg.exe(版本 2.5.2,32 位)
- BatchConvert.bat
这 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 !
我已经在互联网上搜索过,但没有找到解决方案。我希望这个问题不会重复出现。
我在同一文件夹中有以下文件:
- 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)
如果我尝试使用外部程序(例如 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 个文件是:
- ffmpeg.exe(版本 2.5.2,32 位)
- BatchConvert.bat
这 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 !