2010-08-26 80 views
9

Tôi muốn trích xuất khung hình đầu tiên của video đã tải lên và lưu nó thành tệp hình ảnh.
Các định dạng video có thể là mpeg, avi và wmv.Làm cách nào để lưu khung hình đầu tiên của video dưới dạng hình ảnh?

Một điều nữa cần lưu ý là chúng tôi đang tạo trang web ASP.NET.

+2

Khung đầu tiên của bất kỳ video nào thường có màu đen. Bạn sẽ làm tốt hơn để kiểm tra một vài khung hình và chọn một khung lớn nhất (kích thước byte). Điều này, tin hay không, là một xấp xỉ tốt với 'một trong những thú vị nhất' đặc biệt là trong bất kỳ tình huống mờ dần từ đen. –

Trả lời

6

Bạn có thể sử dụng FFMPEG như một quá trình riêng biệt (cách đơn giản nhất) và để cho nó giải mã IDR đầu tiên cho bạn. Ở đây bạn có một FFMPEG lớp đó có phương pháp GetThumbnail(), để nó bạn vượt qua địa chỉ của file video, địa chỉ của hình ảnh JPEG được thực hiện, và độ phân giải mà bạn muốn hình ảnh là:

using System.Diagnostics; 
using System.Threading; 

public class FFMPEG 
{ 
    Process ffmpeg; 

    public void exec(string input, string output, string parametri) 
    { 
     ffmpeg = new Process(); 

     ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 
     ffmpeg.StartInfo.FileName = "utils/ffmpeg.exe"; 
     ffmpeg.StartInfo.UseShellExecute = false; 
     ffmpeg.StartInfo.RedirectStandardOutput = true; 
     ffmpeg.StartInfo.RedirectStandardError = true; 
     ffmpeg.StartInfo.CreateNoWindow = true; 

     ffmpeg.Start(); 
     ffmpeg.WaitForExit(); 
     ffmpeg.Close();  
    } 


    public void GetThumbnail(string video, string jpg, string velicina) 
    { 
     if (velicina == null) velicina = "640x480"; 
     exec(video, jpg, "-s "+velicina); 
    } 
} 

Sử dụng như này:

FFMPEG f = new FFMPEG(); 
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223"); 

Để làm việc này, bạn phải có ffmpeg.exe trong thư mục/utils hoặc thay đổi mã để tìm ffmpeg.exe.

Có nhiều cách khác để sử dụng FFMPEG trong .NET, như trình bao bọc .NET, bạn có thể google cho chúng. Về cơ bản họ cũng làm điều tương tự ở đây, chỉ tốt hơn. Vì vậy, nếu FFMPEG hoàn thành công việc của bạn, tôi khuyên bạn nên sử dụng .NET wrapper.

+0

cảm ơn ... hãy để tôi kiểm tra .net wrapper – CoderHawk

+0

Làm cách nào để có được khung hình từ đâu đó ở giữa tệp? – Entity

+1

tham số như -ss 00: 00: 01.00 – rogerdpack

0

Có lẽ công cụ tốt nhất để làm việc với video có lập trình là FFMpeg. Nó có hỗ trợ cho nhiều định dạng, thậm chí cả wmv. Tôi nghi ngờ thậm chí có một số .net wrapper cho nó.

3

Cố gắng làm cho định dạng chuỗi lập luận như:

ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg" 

Thay vì

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 

trong mã câu trả lời cung cấp ở trên.

Tôi không biết lý do là gì, nhưng dòng đối số thứ hai không hoạt động trên máy của tôi trong khi khi tôi thay đổi đối số như lệnh đầu tiên thì nó hoạt động tốt.

Các vấn đề liên quan