2014-01-17 100 views
2

我想寫一個快速程序來創建圖像的時間推移視頻,但我找不到任何庫或其他方式來做到這一點。我將輸入一系列圖像,然後程序會將它們合併到具有我指定的幀速率和大小(寬度/高度而非文件大小)的視頻中。這些圖像大部分時間都很大(來自佳能數碼單反相機的3456x2304),我希望它能夠輸出與MP4格式中的圖像大小相同的視頻,而不是其他任何東西。如何從一系列劇照創建MP4視頻在C#

基本上它就像QuickTime Pro所做的一樣,你給它一套劇照,它會以你指定的幀率從它們創建一個視頻......並且我不想購買QuickTime 。我有用戶界面,我只需要一種方法從圖像創建視頻,我可以做什麼/使用什麼(只有免費的東西)?謝謝。

回答

3

你可以用FFmpeg做到這一點:

https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images

幀速率

從一系列數字的連續圖像,如img001.png,img002的創建視頻(使用編碼器libx264) .png,img003.png等

重要提示:系列中的所有圖像都需要爲相同的尺寸和格式。通過前 -i設置-r

  • 根據該圖像讀取的速度,:

您可以指定兩個幀速率。讀取輸入的默認值是-r 25,如果未指定-r,將會設置該值。

  • 通過在-i之後或通過使用fps過濾器設置 -r來輸出視頻流的幀速率。如果你想輸入和輸出的幀速率是相同的,那麼只需要聲明一個輸入-r和 輸出將繼承相同的值。
  • 通過使用一個單獨的-r(幀每秒),用於輸入和輸出可以控制在其上顯示各輸入的持續時間,並告訴FFMPEG要用於輸出文件的幀速率。如果輸入-r小於輸出下-r然後ffmpeg的將重複幀來達到所需輸出幀速率。如果輸入-r比輸出更高-r然後將ffmpeg的丟棄幀以達到所需輸出幀速率。

    在這個例子中每個圖像具有在5秒的持續時間(每秒幀的1/5的倒數)。視頻流將通過相應複製幀具有30 fps的幀速率:

    ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 
    

    知道要使用命令行,你可以在C#中啓動它是這樣的:

    if (File.Exists(outputFile)) 
        File.Delete(outputFile); 
    
    var info = new ProcessStartInfo(exePath, yourParams); 
    info.CreateNoWindow = true; 
    info.WindowStyle = ProcessWindowStyle.Hidden; 
    info.UseShellExecute = false; 
    info.RedirectStandardError = true; 
    info.RedirectStandardOutput = true; 
    
    using (var proc = Process.Start(info)) 
        proc.WaitForExit(); 
    
    相關問題