MZi*_*an6 14 c# video duration ffmpeg
我无法找到一个如何以编程方式获取文件视频长度的简单示例.很多人说,哦,使用这个库/包装或其他什么,但不说如何.我已经下载了ffmpeg,但不知道如何实际使用它,似乎没有任何关于如何使用它来获取视频持续时间的示例.我看到你如何使用它来转换视频,但我只是想知道视频的持续时间.所有其他信息都无关紧要.
有没有办法简单地做到这一点,无论是在C#,python,java等等,它只会返回一个表示视频文件长度的字符串.
如果可能,请提供示例.提前致谢!
假设标准文件格式,例如wmv,avi,mp4,mpeg.有元数据的东西.
nZe*_*eus 14
这是一个例子:
using DirectShowLib;
using DirectShowLib.DES;
using System.Runtime.InteropServices;
...
var mediaDet = (IMediaDet)new MediaDet();
DsError.ThrowExceptionForHR(mediaDet.put_Filename(FileName));
// find the video stream in the file
int index;
var type = Guid.Empty;
for (index = 0; index < 1000 && type != MediaType.Video; index++)
{
mediaDet.put_CurrentStream(index);
mediaDet.get_StreamType(out type);
}
// retrieve some measurements from the video
double frameRate;
mediaDet.get_FrameRate(out frameRate);
var mediaType = new AMMediaType();
mediaDet.get_StreamMediaType(mediaType);
var videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));
DsUtils.FreeAMMediaType(mediaType);
var width = videoInfo.BmiHeader.Width;
var height = videoInfo.BmiHeader.Height;
double mediaLength;
mediaDet.get_StreamLength(out mediaLength);
var frameCount = (int)(frameRate * mediaLength);
var duration = frameCount / frameRate;
Run Code Online (Sandbox Code Playgroud)
我发现的简单而完美的解决方案是使用MediaToolkit nuget 包。
using MediaToolkit;
// a method to get Width, Height, and Duration in Ticks for video.
public static Tuple<int, int, long> GetVideoInfo(string fileName)
{
var inputFile = new MediaToolkit.Model.MediaFile { Filename = fileName };
using (var engine = new Engine())
{
engine.GetMetadata(inputFile);
}
// FrameSize is returned as '1280x768' string.
var size = inputFile.Metadata.VideoData.FrameSize.Split(new[] { 'x' }).Select(o => int.Parse(o)).ToArray();
return new Tuple<int, int, long>(size[0], size[1], inputFile.Metadata.Duration.Ticks);
}
Run Code Online (Sandbox Code Playgroud)
开源工具MediaInfo为媒体文件提供了全面的元数据,可以从您自己的应用程序中以DLL形式轻松使用它:
void* Hande=MediaInfo::OpenQuick("**FILENAME**", "**VERSION**;**APP_NAME**;**APP_VERSION**")
MediaInfo::Inform()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22380 次 |
| 最近记录: |