AviSynth 中 DirectShowSource() 和 FFmpegSource2() 的区别
Difference between DirectShowSource() and FFmpegSource2() in AviSynth
对于非 .avi
A/V 源(如 .mp3
、.mp4
等),在 AviSynth 中(至少)有 2 种读取这些媒体文件的可能性(在 Windows):
- 内置媒体过滤器
DirectShowSource()
,使用 Microsoft's DirectShow 媒体架构。
- AviSynth 插件
FFmpegSource2()
别名 FFMS2()
using FFmpeg 别无其他。
它们的优缺点是什么?
哪个更可靠,框架/样本准确等?
DirectShowSource() 使用当前为系统中的特定文件类型安装和启用的编解码器。通常这意味着当您在媒体播放器中打开该视频文件时会启动相同的编解码器,包括音频流。如果您启用了一些特殊的后处理选项,它们也会生效。
正如您提到的,FFmpegSource2() 不依赖于系统编解码器,而是使用 FFMPEG。默认情况下,它也会忽略音频,即使它存在于源容器中。
一个显着的区别是 DirectShowSource() 没有帧精确搜索,如果您尝试以每帧精度进行一些修剪,或者说,混合同一事件的两个记录,那么这一点就变得至关重要每一帧都会匹配。 FFMPEG 可以选择生成 .ffindex 文件以改进搜索功能(默认情况下启用)。
然而,根据我的经验,当打开一些以 H264 FFmpegSource2 编码的隔行扫描 HDTV 流时会产生双倍帧率,因此您可能需要注意这一点。
还有一个名为 DSS2 的外部插件可以修复原始框架不准确的问题。
我个人通常使用 DirectShow/DSS2 除非我需要帧精确搜索,因为 FFMS 在首次启动时可能需要一些时间来进行索引。
对于非 .avi
A/V 源(如 .mp3
、.mp4
等),在 AviSynth 中(至少)有 2 种读取这些媒体文件的可能性(在 Windows):
- 内置媒体过滤器
DirectShowSource()
,使用 Microsoft's DirectShow 媒体架构。 - AviSynth 插件
FFmpegSource2()
别名FFMS2()
using FFmpeg 别无其他。
它们的优缺点是什么?
哪个更可靠,框架/样本准确等?
DirectShowSource() 使用当前为系统中的特定文件类型安装和启用的编解码器。通常这意味着当您在媒体播放器中打开该视频文件时会启动相同的编解码器,包括音频流。如果您启用了一些特殊的后处理选项,它们也会生效。
正如您提到的,FFmpegSource2() 不依赖于系统编解码器,而是使用 FFMPEG。默认情况下,它也会忽略音频,即使它存在于源容器中。
一个显着的区别是 DirectShowSource() 没有帧精确搜索,如果您尝试以每帧精度进行一些修剪,或者说,混合同一事件的两个记录,那么这一点就变得至关重要每一帧都会匹配。 FFMPEG 可以选择生成 .ffindex 文件以改进搜索功能(默认情况下启用)。
然而,根据我的经验,当打开一些以 H264 FFmpegSource2 编码的隔行扫描 HDTV 流时会产生双倍帧率,因此您可能需要注意这一点。
还有一个名为 DSS2 的外部插件可以修复原始框架不准确的问题。
我个人通常使用 DirectShow/DSS2 除非我需要帧精确搜索,因为 FFMS 在首次启动时可能需要一些时间来进行索引。