一、概述9 q2 {8 Q6 w% ?0 C/ H! ]& \; @
对于涉及到上传视频的项目,我们知道,一般在界面显示的时候,是需要对视频有个预览的效果,就是显示某一帧视频的画面。找了下发现http://ffmpeg.org/ 可以实现这个功能。& S( U0 w) \2 i4 \+ E$ m
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
, v* C1 z( F2 \' e7 K主要参数:
8 u7 d; L! X1 I3 m; m) @-i——设置输入档名。
4 a; N5 I! @7 z& w, Z" S8 U-f——设置输出格式。1 Z" `/ ^' Y3 w, i H. V% F8 ~
-y——若输出文件已存在时则覆盖文件。9 [1 o3 P6 b9 T- o+ t
-fs——超过指定的文件大小时则结束转换。0 R" I& Z5 Q) b' H
-t——指定输出文件的持续时间,以秒为单位。, J. K/ L/ m7 d9 l
-ss——从指定时间开始转换,以秒为单位。
- \% L/ j5 u- y8 [3 x# u- x( T, A-t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。
, y6 j9 }$ d3 Z" K; ~-title——设置标题。; k4 {! Z! [, x c
-timestamp——设置时间戳。" m* p0 |* a! Z" p+ o( r9 }
-vsync——增减Frame使影音同步。1 C# f$ \2 c5 | e3 U
-c——指定输出文件的编码。
) y) P7 Y' L; U-metadata——更改输出文件的元数据。
* B; @$ b& y, r-help——查看帮助信息。
3 X/ h/ o8 }" i+ ]) a* S ffmpeg的官网地址是:https://www.ffmpeg.org/6 w. S0 J$ \; C' f% u
ffmpeg的Github项目地址是:https://github.com/FFmpeg/FFmpeg$ [+ T0 l# R5 Q7 Z8 n8 E
下面我们来看下ffmpeg如何实现视频截图的操作。
) i( I2 P+ ~3 ?4 Q' `二、实现方式
; T, g( _: D; B+ m1、下载 ffmpeg http://ffmpeg.org/ ,解压后在 bin 目录下找到 ffmpeg.exe
7 u' d" d6 [& x/ t( V! E5 @
0 P( \5 {; m& x7 i4 ]" b+ M+ _2、命令方式
' E& R. k( C3 I. K% M/ W-i 视频地址 -ss 第几帧 -f image2 图片存放地址
{2 ]3 _( r' l 用cmd试一下,首先切换到ffmpeg.exe所在目录,输入命令,回车! B; ~5 H/ j% D( q$ |6 v6 Z, U F
3、c#代码实现
B& w* r: c" d: y: q0 qusing (System.Diagnostics.Process process = new System.Diagnostics.Process()){
process.StartInfo.FileName = @"D:\ffmpeg.exe";
process.StartInfo.Arguments= @"-i D:\111.mp4 -ss 10 -f image2 D:\test\1.jpg";
process.Start();} 或者如下
; O; O3 L) f4 L4 ?/ l0 husing System.Diagnostics;
.....
ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg物理路径");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = " -i 视频文件路径 -y -f image2 -ss 3 -t 0.001 -s 480*360 截图物理路径";//480*360是图片分辨率
startInfo.UseShellExecute = false;
try
{
Process.Start(startInfo);
return true;
}
catch
{
}
|