本文實例講述了C#讀取視頻的寬度和高度等信息的方法。分享給大家供大家參考。具體實現方法如下:
讀取方式:使用ffmpeg讀取,所以需要先下載ffmpeg。網上資源有很多。
通過ffmpeg執行一條CMD命令可以讀取出視頻的幀高度和幀寬度信息。
運行效果如下圖所示:
藍線框中可以看到獲取到的幀高度和幀寬度。
接下來的事情就簡單了。構造一個命令,然后執行就ok。我并未測試過所有視頻格式,估計常見的格式應該都支持。
執行命令的代碼如下:
//啟動進程
pc.Start();
//準備讀出輸出流和錯誤流
string outputData = string.Empty;
string errorData = string.Empty;
pc.BeginOutputReadLine();
pc.BeginErrorReadLine();
pc.OutputDataReceived += (ss, ee) =>
{
outputData += ee.Data;
};
pc.ErrorDataReceived += (ss, ee) =>
{
errorData += ee.Data;
};
//等待退出
pc.WaitForExit();
//關閉進程
pc.Close();
//返回流結果
output = outputData;
error = errorData;
}
catch(Exception)
{
output = null;
error = null;
}
}
獲取高度的寬度的代碼如下:(這里假設ffmpeg存在于應用程序目錄)
//執行命令獲取該文件的一些信息
string ffmpegPath = new FileInfo(Process.GetCurrentProcess().MainModule.FileName).DirectoryName + @"/ffmpeg.exe";
string output;
string error;
Helpers.ExecuteCommand("/"" + ffmpegPath + "/"" + " -i " + "/"" + videoFilePath + "/"",out output,out error);
if(string.IsNullOrEmpty(error))
{
width = null;
height = null;
}
//通過正則表達式獲取信息里面的寬度信息
Regex regex = new Regex("(//d{2,4})x(//d{2,4})", RegexOptions.Compiled);
Match m = regex.Match(error);
if (m.Success)
{
width = int.Parse(m.Groups[1].Value);
height = int.Parse(m.Groups[2].Value);
}
else
{
width = null;
height = null;
}
}
catch (Exception)
{
width = null;
height = null;
}
}
希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答