最近遇到公司的一個項目,需要將多張圖片合并成一個播放的視頻,找了很多資料和嘗試了工具,遇到很多的坑,這里記下來,希望大家也能順利解決遇到的問題。
合并視頻,主要可以借用OpenCV 和?ffmpeg,這里是嘗試用ffmpeg.exe的工具去實現(xiàn)圖片文件合并成視頻。
輸入存儲視頻文件的路徑,通過ProcessStartInfo 調(diào)用ffmpeg.exe軟件啟動合并圖片操作,并在startInfo.Arguments寫入控制指令。
#region 圖片轉(zhuǎn)視頻
public void ImageGetVideo()
{
string ffmpeg = string.Format("{0}ffmpeg.exe", AppDomain.CurrentDomain.BaseDirectory);
try
{
string videoFile = MP4Path.Text + @"test.mp4 "; //創(chuàng)建視頻文件命
if (File.Exists(videoFile))
{
File.Delete(videoFile);
}
this.KillProcess("ffmpeg"); //注意,進程名字不帶.exe之類后綴
ProcessStartInfo startInfo = new ProcessStartInfo(ffmpeg);
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
// -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg //這是把視頻轉(zhuǎn)圖片的
//及其耗CUP的指定幀截取圖片幀 string.Format(" -i \"{0}\" -y -f image2 -ss {1} -s \"{2}\" \"{3}\"", vedioPath, catchTime, saveImgSize, saveImgPath)
//string param = string.Format(" -f image2 -i " + txtPath.Text + @"\%d.jpg -vcodec libx264 -r 10 " + MP4Path.Text + @"\test.mp4 ");
string param = string.Format(" -f image2 -r (1/3) -i " + txtPath.Text + @"\%d.jpg -vf fps=12 " + MP4Path.Text + @"\test.mp4 ");
//param = param + string.Format(" ffplay -i " + MP4Path.Text + @"\test.mp4 -vf setpts=PTS/(1/16)");
startInfo.Arguments = param;
System.Diagnostics.Process.Start(startInfo).Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
}
#endregion
指令注意:
" -f image2 -i " + (圖片文件地址)+ @"\%d.jpg -vcodec libx264 -r 10 " + (視頻文件地址)+ @"\test.mp4 "? ,最后面的是存放視頻的文件名稱,注意這里放的圖片序號一定要是連續(xù)的(例:1.jpg,2.jpg,3.jpg....),不然合并不成功,這里設置的播放圖片的時間間隔是3S,并且合并圖片最好在第一張圖片放一張黑色底圖,第一張圖片切到第二圖片,沒有時間間隔,容易一閃而過,放一張黑色底圖,序號改成1.jpg,可以不影響后面圖片的播放。文章來源:http://www.zghlxwxcb.cn/news/detail-428185.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-428185.html
到了這里,關于C#:使用ffmpeg將圖片合并成視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!