65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 ffmpeg 在 asp.net 中转换和提取预览图像

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.47/5 (21投票s)

2007年12月12日

CPOL

10分钟阅读

viewsIcon

140182

downloadIcon

2957

如何使用 ffmpeg

引言

在这篇文章中,我将讨论如何在 asp.net 中使用 ffmpeg 进行视频转换、提取预览图像等。

在你的网站中有三种使用 ffmpeg 的方法

使用 sharpffmpeg ( http://sourceforge.net/projects/sharpffmpeg/ )

使用 ffmpeg dll

使用 ffmpeg 执行

最后一种是最简单的一种,在这篇文章中我将解释这种方法。

为什么选择 ffmpeg

首先,我不知道除了这个方法还有其他方法可以从 3gp 文件中提取预览帧。(但是对于视频转换,还有其他方法)

而且 ffmpeg 支持以下格式

2.1 文件格式

FFmpeg 通过 libavformat 库支持以下文件格式

支持的文件格式 编码 解码 注释
MPEG 音频 X X
MPEG-1 系统 X X 混合音频和视频
MPEG-2 PS X X 也称为 VOB 文件
MPEG-2 TS X 也称为 DVB Transport Stream
ASF X X
AVI X X
WAV X X
Macromedia Flash X X 仅解码嵌入式音频。
FLV X X Macromedia Flash 视频文件
Real 音频和视频 X X
原始 AC3 X X
原始 MJPEG X X
原始 MPEG 视频 X X
原始 PCM8/16 位,mulaw/Alaw X X
原始 CRI ADX 音频 X X
原始 Shorten 音频 X
SUN AU 格式 X X
NUT X X NUT Open Container Format
QuickTime X X
MPEG-4 X X MPEG-4 是 QuickTime 的一个变体。
原始 MPEG4 视频 X X
DV X X
4xm X 4X Technologies 格式,用于某些游戏。
Playstation STR X
Id RoQ X X 用于 Quake III、Jedi Knight 2 等电脑游戏。
Interplay MVE X 格式,用于各种 Interplay 电脑游戏。
WC3 Movie X 多媒体格式,用于 Origin 的 Wing Commander III 电脑游戏。
Sega FILM/CPK X 用于许多 Sega Saturn 主机游戏。
Westwood Studios VQA/AUD X 多媒体格式,用于 Westwood Studios 游戏。
Id Cinematic (.cin) X 用于 Quake II。
FLIC 格式 X .fli/.flc 文件
Sierra VMD X 用于 Sierra CD-ROM 游戏。
Sierra Online X .sol 文件,用于 Sierra Online 游戏。
Matroska X X
Electronic Arts Multimedia X 用于各种 EA 游戏;文件扩展名如 WVE 和 UV2。
Nullsoft Video (NSV) 格式 X
ADTS AAC 音频 X X
Creative VOC X X 为 Sound Blaster Pro 创建。
American Laser Games MM X 多媒体格式,用于 Mad Dog McCree 等游戏
AVS X 多媒体格式,用于 Creature Shock 游戏。
Smacker X 多媒体格式,用于许多游戏。
GXF X X General eXchange Format SMPTE 360M,用于 Thomson Grass Valley 播出服务器。
CIN X 多媒体格式,用于 Delphine Software 游戏。
MXF X Material eXchange Format SMPTE 377M,用于 D-Cinema、广播行业。
SEQ X Tiertex .seq 文件,用于 Flashback 游戏 DOS CDROM 版本。
DXA X 此格式用于 Feeble Files 游戏的非 Windows 版本,以及为 ScummVM 重新打包的各种游戏过场动画。
THP X 用于 Nintendo GameCube。
C93 X 用于 Interplay 的游戏 Cyberia。
Bethsoft VID X 用于 Bethesda Softworks 的一些游戏。
CRYO APC X 音频格式,用于 CRYO Interactive Entertainment 的一些游戏。

X 表示支持编码(或解码)。

2.2 图像格式

FFmpeg 可以为视频序列的每一帧读取和写入图像。支持以下图像格式

支持的图像格式 编码 解码 注释
PGM, PPM X X
PAM X X PAM 是 PNM 的扩展,支持 alpha 通道。
PGMYUV X X PGM 带有 YUV 4:2:0 的 U 和 V 分量
JPEG X X 不支持渐进式 JPEG。
.Y.U.V X X 每个分量一个原始文件
动画 GIF X X 仅生成未压缩的 GIF。
PNG X X 暂不支持 2 位和 4 位/像素。
Targa X Targa (.TGA) 图像格式。
TIFF X X 暂不支持 YUV、JPEG 和一些扩展。
SGI X X SGI RGB 图像格式
PTX X V.Flash PTX 格式

X 表示支持编码(或解码)。

2.3 视频编解码器

支持的编解码器 编码 解码 注释
MPEG-1 视频 X X
MPEG-2 视频 X X
MPEG-4 X X
MSMPEG4 V1 X X
MSMPEG4 V2 X X
MSMPEG4 V3 X X
WMV7 X X
WMV8 X X 不完全可用
WMV9 X 不完全可用
VC1 X
H.261 X X
H.263(+) X X 也称为 RealVideo 1.0
H.264 X
RealVideo 1.0 X X
RealVideo 2.0 X X
MJPEG X X
无损 MJPEG X X
JPEG-LS X X fourcc: MJLS,支持无损和近乎无损
Apple MJPEG-B X
Sunplus MJPEG X fourcc: SP5X
DV X X
HuffYUV X X
FFmpeg Video 1 X X 实验性无损编解码器 (fourcc: FFV1)
FFmpeg Snow X X 实验性小波编解码器 (fourcc: SNOW)
Asus v1 X X fourcc: ASV1
Asus v2 X X fourcc: ASV2
Creative YUV X fourcc: CYUV
Sorenson Video 1 X X fourcc: SVQ1
Sorenson Video 3 X fourcc: SVQ3
On2 VP3 X 仍处于实验阶段
On2 VP5 X fourcc: VP50
On2 VP6 X fourcc: VP60,VP61,VP62
Theora X X 仍处于实验阶段
Intel Indeo 3 X
FLV X X Flash 中使用的 Sorenson H.263
Flash Screen Video X X fourcc: FSV1
ATI VCR1 X fourcc: VCR1
ATI VCR2 X fourcc: VCR2
Cirrus Logic AccuPak X fourcc: CLJR
4X Video X 用于某些电脑游戏。
Sony Playstation MDEC X
Id RoQ X X 用于 Quake III、Jedi Knight 2 等电脑游戏。
Xan/WC3 X 用于 Wing Commander III .MVE 文件。
Interplay Video X 用于 Interplay .MVE 文件。
Apple Animation X X fourcc: 'rle '
Apple Graphics X fourcc: 'smc '
Apple Video X fourcc: rpza
Apple QuickDraw X fourcc: qdrw
Cinepak X
Microsoft RLE X
Microsoft Video-1 X
Westwood VQA X
Id Cinematic Video X 用于 Quake II。
Planar RGB X fourcc: 8BPS
FLIC 视频 X
Duck TrueMotion v1 X fourcc: DUCK
Duck TrueMotion v2 X fourcc: TM20
VMD Video X 用于 Sierra VMD 文件。
MSZH X LCL 的一部分
ZLIB X X LCL 的一部分,编码器实验性
TechSmith Camtasia X fourcc: TSCC
IBM Ultimotion X fourcc: ULTI
Miro VideoXL X fourcc: VIXL
QPEG X fourccs: QPEG, Q1.0, Q1.1
LOCO X
Winnov WNV1 X
Autodesk Animator Studio Codec X fourcc: AASC
Fraps FPS1 X
CamStudio X fourcc: CSCD
American Laser Games Video X 用于 Mad Dog McCree 等游戏
ZMBV X X 编码器仅在 PAL8 上工作
AVS Video X Creature Shock 游戏使用的视频编码。
Smacker Video X Smacker 中使用的视频编码。
RTjpeg X NuppelVideo 文件中使用的视频编码。
KMVC X Worms 游戏使用的编解码器。
VMware Video X VMware 捕获的视频中使用的编解码器。
Cin Video X Delphine Software 游戏中使用的编解码器。
Tiertex Seq Video X DOS CDROM FlashBack 游戏使用的编解码器。
DXA Video X Feeble Files 游戏最初使用的编解码器。
AVID DNxHD X 又名 SMPTE VC3
C93 Video X Cyberia 游戏使用的编解码器。
THP X 用于 Nintendo GameCube。
Bethsoft VID X 用于 Bethesda Softworks 的一些游戏。
Renderware TXD X Renderware Engine 使用的纹理字典。

X 表示支持编码(或解码)。

2.4 音频编解码器

支持的编解码器 编码 解码 注释
MPEG 音频层 2 IX IX
MPEG 音频层 1/3 IX IX MP3 编码通过外部库 LAME 支持。
AC3 IX IX liba52 在内部用于解码。
Vorbis X X
WMA V1/V2 X X
AAC X X 通过外部库 libfaac/libfaad 支持。
Microsoft ADPCM X X
MS IMA ADPCM X X
QT IMA ADPCM X
4X IMA ADPCM X
G.726 ADPCM X X
Duck DK3 IMA ADPCM X 用于某些 Sega Saturn 主机游戏。
Duck DK4 IMA ADPCM X 用于某些 Sega Saturn 主机游戏。
Westwood Studios IMA ADPCM X 用于 Westwood Studios 游戏,如 Command and Conquer。
SMJPEG IMA ADPCM X 用于某些 Loki 游戏端口。
CD-ROM XA ADPCM X
CRI ADX ADPCM X X 用于 Sega Dreamcast 游戏。
Electronic Arts ADPCM X 用于各种 EA 游戏。
Creative ADPCM X 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
THP ADPCM X 用于 Nintendo GameCube。
RA144 X Real 14400 位/秒编解码器
RA288 X Real 28800 位/秒编解码器
RADnet X IX Real 低比特率 AC3 编解码器,liba52 用于解码。
AMR-NB X X 通过外部库支持。
AMR-WB X X 通过外部库支持。
DV 音频 X
Id RoQ DPCM X X 用于 Quake III、Jedi Knight 2 等电脑游戏。
Interplay MVE DPCM X 用于各种 Interplay 电脑游戏。
Xan DPCM X 用于 Origin 的 Wing Commander IV AVI 文件。
Sierra Online DPCM X 用于 Sierra Online 游戏音频文件。
Apple MACE 3 X
Apple MACE 6 X
FLAC 无损音频 X X
Shorten 无损音频 X
Apple 无损音频 X QuickTime fourcc 'alac'
FFmpeg Sonic X X 实验性有损/无损编解码器
Qdesign QDM2 X 仍然存在一些失真
Real COOK X 支持所有版本,除了 5.1
DSP Group TrueSpeech X
True Audio (TTA) X
Smacker Audio X
WavPack Audio X
Cin Audio X Delphine Software 游戏中使用的编解码器。
Intel Music Coder X
Musepack X 仅支持 SV7
DT$ Coherent Audio X
ATRAC 3 X

X 表示支持编码(或解码)。I 表示也提供了纯整数版本(确保在没有硬件浮点支持的系统上性能高)。

使用代码

首先,请访问此网址( http://arrozcru.no-ip.org/ffmpeg_builds/ ),下载最新的 ffmpeg 构建版本。

要使用本文的示例,您需要从上述链接下载 ffmpeg 并将

“ffmpeg.exe” 、“pthreadGC2.dll” 、“SDL.dll” 放在示例项目文件夹中。

注意:您需要放置一个 3gp 视频,并且必须将其重命名为 first.3gp 在项目文件夹中,或者您也可以修改代码以使用 first.3gp 以外的其他视频。

代码分析

附带的示例非常直接简单,但我们会涵盖其中的一部分。

首先,您需要将 System.Diagnostics 命名空间添加到您的项目中(用于访问 Process 类)

         // preview frame



Process ffmpeg; // creating process


string video;
string thumb;
video = Page.MapPath("first.3gp"); // setting video input name with path


thumb = Page.MapPath("") +"\\frame.jpg"; // thumb name with path !


ffmpeg = new Process();

ffmpeg.StartInfo.Arguments = " -i \""+video+"\" -s 108*80  -vframes 1 -f image2 -vcodec mjpeg \""+thumb+"\""; // arguments !


ffmpeg.StartInfo.FileName = Page.MapPath("ffmpeg.exe");
ffmpeg.Start(); // start ! 

上面的代码用于从 3gp 视频提取预览图像。

您可以看到我们有两个变量,video 和 thumb,它们的名字都很清楚

Video 变量保存我们要从中提取预览缩略图或图像的视频(通常是用户上传的视频)

而 thumb 保存我们想要输出文件调用的名称。

我们将它们组合起来,并将它们作为参数传递给 ffmpeg。这些特殊参数告诉 ffmpeg 创建一个 180*80 分辨率的图像,您可以更改其中的任何部分。

现在,让我们看看我们项目中转换按钮后面的代码

//converting video 



        Process ffmpeg; // creating process


        string video;
        string mpg;
        video = Page.MapPath("first.3gp"); // setting video input name with path


        mpg = Page.MapPath("") + "\\video.mpg"; // thumb name with path !


        ffmpeg = new Process();

        ffmpeg.StartInfo.Arguments = " -i \"" + video + "\" -target vcd \"" + mpg + "\""; // arguments !


        ffmpeg.StartInfo.FileName = Page.MapPath("ffmpeg.exe");
        ffmpeg.Start(); // start ! 


您可以看到一切都相同,只是输出文件的变量名称发生了变化,现在我们称之为 mpg,ffmpeg 的参数也发生了变化。

您看到它确实很简单。但请注意,转换视频是一个非常繁重的过程,您必须有充分的理由允许用户在您的网站上进行视频转换。

结论

就这样,希望您喜欢阅读本文并觉得它有用,并且请注意这是我的第一篇文章。

如果您有自己的服务器,您不会遇到问题,并且肯定有执行文件的权限

但如果您使用共享 Web 服务器(和我一样!),因为 ffmpeg 是一个知名的开源项目,您可以与您的主机管理员交谈,并提供关于 ffmpeg 及其用法的信息或提供其 URL

也许将来我会写到其他方法。

© . All rights reserved.