3

我正在尝试以编程方式确定文件的真实类型。看来我必须为此使用例如 FFMPeg。

我想确定上传的文件实际上是 MP4 还是 FLV(用于 Flash 视频)[或 WebM(用于 HTML5)]。我知道 FFMPeg 中的 -i 运算符,但我不知道要检查什么。

例如:

Input #0, flv, from 'c:\www\data.aspbooru\image\0\40c24ba424d1334ef81c88c416ce794e.flv':

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'c:\www\data.aspbooru\image\0\8c1a747b5188349d92cca17a502d2d57.mp4':

这些是 FFMPeg 输出。这就是我在为 Flash 过滤视频时必须检查的全部内容吗?

所以,如果这些都不适用。如何检查 swf 文件?

Input #0, swf, from 'c:\www\data.aspbooru\image\0\90447bd30d30ccb1474c0433e948d438.swf':
Duration: 00:07:16.08, start: 0.000000, bitrate: 63 kb/s
Stream #0.0: Audio: mp3, 44100 Hz, 2 channels, s16, 64 kb/s
Stream #0.1: Video: flv, yuv420p, 320x240, 25 fps, 25 tbr, 25 tbn, 25 tbc

检查是否Input #0, swf,足够?它提取了一个我不想要的包含的 flv。

现在我还需要检查完全不是视频的文件类型和视频文件类型,但可以使用 h.264(或 Webm?)转换为 mp4 我完全不知道如何做到这一点。

可以管理转换的东西,但提示也很酷(转换 h.264 和 webm?)。

我输入一个随机文件。是这个吗? c:\web.config: Invalid data found when processing input

编辑:没有指定编程语言,因为它独立于任何编程语言。但我会感谢语言特定的输入:VB.NET。您可以假设我已经有了流程逻辑,并且输出作为字符串存在!正则表达式也会很酷:)

4

2 回答 2

2

确定类型

使用MediaInfo可能会更好。

获取命令行版本并像这样使用它:

mediainfo --full --language=raw --output=xml

这给出了 XML 输出,然后您可以使用 XPath 来获取 Codec 字段。或者,如果 XML 不是你的东西,请删除“--output=xml”,然后编写一个正则表达式来解析文本输出。

对于无法识别的文件,它看起来会提供一些输出,但肯定不会有 Codec 字段。

转换视频

对于实际转换视频,FFmpeg 是视频编码的瑞士军刀,可能是您的最佳选择。

只要您知道所需的输出编解码器,您就不需要真正知道输入。

这样的事情可以让你开始:

ffmpeg -i input.mov -vcodec libx264 -acodec libfaac -f mov out.mp4

这将为您提供带有 H.264 视频和 AAC 音频的 MPEG-4。尽管有许多选项可用于调整它以获得您想要的。

该站点对于调整 H.264 选项很有用。

祝你好运!

于 2011-06-21T20:16:16.000 回答
0

我会尝试一些库,因为您将获得比 Regex 更好的结果并自己确定:

用于 C#/.NET 的实体 FFmpeg 包装器

于 2010-11-07T09:35:35.590 回答