缩略视频 C#

7

是否可以在C#中创建视频的缩略图(如第一帧)?

小更新:由于我使用Flex显示视频,因此我需要在C#中创建FLV视频的缩略图。是的,链接到一些库可能会有用。


是的,这是你问题的简短回答。 - sshow
3个回答

7
我可以想到两个选项:
  1. 使用外部工具,如ffmpeg,生成缩略图。这可能是解决此问题最常用的解决方案。
  2. 解析FLV文件,并仅将文件发送到第一个I帧的结尾。(您可以在允许您按时间标记跳转到FLV中间的代码中找到解析逻辑)。

FFMPEG是我能找到的唯一解决方案。虽然有一些.NET库提供了对FFMPEG的托管包装,但我找不到任何关于如何使用它们的文档。我很想听听您想出的解决方案! - Kevin Babcock
我只是调用了ffmpeg并解析了输出。这对我来说很有效,而且并不像听起来那么复杂或者hacky。我已经阅读了关于使用C API来操作ffmpeg的文章,但是那似乎需要太多的努力。 - Stu Thompson

4

我的第一印象是它只支持avi格式...而我需要支持flv格式。但我必须检查一下以确保。 - Lieven Cardoen

1
这个有效:

ShellFile thumbNail = ShellFile.FromFilePath(<fullpath and filename>);
Bitmap thumbSmall = thumbNail.Thumbnail.MediumBitmap;
Bitmap thumbLarge = thumbNail.Thumbnail.LargeBitmap;
videoThumb_Small.Images.Add(thumbSmall);
videoThumb_Large.Images.Add(thumbLarge);

当 'videoThumb_?????' = ImageList 时(用于控制要显示的图像大小),它会变得非常缓慢,尤其是在搜索不同的 MIME 格式时。但是,在相同类型的情况下速度足够快。需要:

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack;

你可以从同名的nuget包中获取Microsoft.WindowsAPICodePack。至于FFMpeg、Vlc.Dotnet或aXMediaPlayer(WMP),据我测试,它们都很糟糕(Vlc甚至不能正常工作,FFmpeg需要500万行代码才能得到相同的结果,而aXMediaPlayer则是Windows本地播放器)。例如,如果你正在使用带有子项的ListView:
for(int mememe = 0; mememe < stuff_counter; mememe++)
{
listview1.Items.Add("strings", mememe).SubItems.Add("strings" + mememe.ToString());
}

那么将从ImageList中读取正确的索引号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接