2009-02-11 29 views
18

Có ai có cách nào đáng tin cậy để tạo video từ một loạt tệp hình ảnh không? Trước khi bạn mod tôi xuống cho không tìm kiếm câu trả lời trước khi gửi câu hỏi, và trước khi bạn bắn ra một tin nhắn đơn giản như "sử dụng FFMPEG," đọc phần còn lại của tin nhắn này.Cách làm việc để tạo video từ hình ảnh trong C#

Tôi đang cố gắng tạo video, không quan trọng quá nhiều định dạng miễn là nó được hỗ trợ rộng rãi, từ một loạt hình ảnh (.jpg, .bmp, v.v.). Nền tảng của tôi là Windows Server 2008, 64 bit. Nếu tôi có thể tạo video từ trong chương trình C# của tôi, điều đó thật tuyệt, nhưng tôi không muốn viết một loạt tệp hình ảnh vào thư mục và sau đó kích hoạt chương trình bên ngoài để tạo video từ những hình ảnh đó.

Các ràng buộc duy nhất là: nó phải hoạt động trên hệ thống Windows Server 2008 của tôi và có thể chạy được. Đó là, không có chương trình GUI nào yêu cầu sự can thiệp của nhà điều hành.

Tôi đã tìm thấy một số câu hỏi tương tự trên StackOverflow và đã thử một số giải pháp, tất cả đều có mức độ thất vọng khác nhau và không có bất kỳ điều gì giống như thành công.

FFMPEG trông giống như một chương trình tuyệt vời. Có thể là, trên Linux. Hai bản dựng Windows mà tôi tải xuống bị hỏng. Với dòng lệnh sau:

ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi 

Một trong những người xây dựng đọc hình ảnh và sau đó bị treo do phòng chống thực thi dữ liệu. Người khác đọc tập tin đầu tiên và sau đó spits ra một thông báo lỗi nói rằng "không thể tìm thấy codec phù hợp cho tập tin jpeg/image2.jpg". Hữu ích, đó. Trong mọi trường hợp, FFMPEG trông giống như một người không khởi động trong Windows.

Một câu trả lời cho bài đăng trước được đề xuất Splicer. Nó trông giống như mã khá tốt. Tôi đã biên soạn các mẫu và cố chạy, nhưng có một số thông báo lỗi khó hiểu về một tệp không tìm thấy. Có vẻ như lớp COM chưa được đăng ký. Tôi cho rằng tôi cần phải cài đặt một cái gì đó (DirectShow, có thể, mặc dù tôi nghĩ rằng đã được cài đặt?). Tùy thuộc vào những gì được yêu cầu, tôi có thể gặp khó khăn trong việc xác minh cài đặt của nó trên máy chủ. ("Cái gì? Tại sao bạn cần trên máy chủ?")

Một câu trả lời khác đề xuất thư viện AviFile từ Dự án mã. Điều đó có vẻ đơn giản, đủ: một trình bao bọc xung quanh hệ thống con Windows AviFile. Ngoại trừ các tập tin AVI mà gói tạo ra dường như có tất cả các khung, nhưng chỉ khung đầu tiên hiển thị khi tôi phát AVI trong Windows Media Player. Vâng, đó và nếu bạn cố gắng tạo một video nén, chương trình sẽ ném một ngoại lệ. Vì vậy, tôi đang tự hỏi liệu có một cách tốt, đáng tin cậy để làm những gì tôi muốn: trên một hệ thống Windows, tạo ra một định dạng AVI hoặc định dạng tập tin video phổ biến khác từ một loạt các hình ảnh, hoặc thông qua một NET. NET. API hoặc sử dụng một chương trình bên ngoài. Bất kỳ giúp đỡ?

+0

Hãy thử lệnh ffmpeg của bạn mà không có -f image2 hoặc bằng -f jpeg, tức là 'ffmpeg -r 1 -i jpeg/* .jpg video.avi 'hoặc' ffmpeg -r 1 -f jpeg -i jpeg/* .jpg video.avi ' – configurator

+0

@configurator: không có -f image2, tôi nhận được kết quả tương tự. Với -f jpeg, tôi nhận được "Định dạng đầu vào hoặc đầu ra không xác định: jpeg". –

Trả lời

10

Sau khi làm việc với nó một lúc và xem x264 và VideoLan, tôi đã quay lại Splicer. Nó chỉ ra rằng thông báo lỗi khó hiểu là do một lỗi trong mã của tôi.

Dường như Splicer sẽ làm những gì tôi muốn: tạo video từ một loạt các hình ảnh theo chương trình.

Nhờ tất cả những ai đã trả lời.

1

Việc xử lý video trên Windows (mã hóa và phát lại) là một vũng lầy thực sự. Và .NET sẽ không giúp bạn chút nào - bạn sẽ luôn là các API gốc PInvoking/COM-interoping hoặc sử dụng một trình bao bọc .NET mà người khác đã xây dựng để làm như vậy.

Dù sao, tôi không thể nói tôi đã sử dụng nó, nhưng đặt cược tốt có vẻ là x264 library that is part of the videolan project. Điều đó mang lại cho bạn một thư viện C độc lập mà bạn có thể PInvoke và bạn không phải lo lắng về việc cài đặt và DirectShow rác trên máy chủ của bạn. Nó sẽ tạo video định dạng H.264 có thể phát trong Flash khi tôi hiểu.

6

Bạn có thể sử dụng VideoLan và tôi khuyên bạn nên sử dụng nó.

Tôi đã có kinh nghiệm trực tiếp trong một ứng dụng C# với VideoLan làm hai điều này:

  1. Nhúng một người xem VLC trong C# ứng dụng của tôi (có 3-4 C# "wrappers" cho veiwer VLC) .
  2. Sử dụng vlc.exe trong một Quy trình riêng biệt bằng cách gửi các đối số dòng lệnh.

Thực tế là VideoLan có giao diện dòng lệnh là một điều tuyệt vời. Và VLC hỗ trợ tùy chọn dòng lệnh vô hiệu hóa bất kỳ phần tử trực quan nào; do đó VLC GUI không bật lên và cũng không có cửa sổ dòng lệnh. Vì vậy, trong một ứng dụng C# bạn có thể trang trại ra các công việc liên quan đến video cho khách hàng VLC. C# có lớp Process có thể quản lý các cá thể vlc.exe của bạn cho bạn. Nó kết thúc là một giải pháp khá gọn gàng.

0

Tôi đã sử dụng mplayer 's MEncoder để tạo ra AVI (với codec msmpeg4/mp3, dễ đọc theo mặc định với Windows Media Player) từ các tập tin TGA trên Linux như thế này:

mencoder mf://*.tga -mf fps=25:type=tga \ 
    -audiofile /tmp/test.mp3 -oac copy \ 
    -of lavf -ovc lavc \   
    -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \ 
    -o /tmp/test.avi 

Tôi biết mplayer không có phiên bản Windows.

0

Thay vì phải trải qua mọi rắc rối, bạn có thể coppy tất cả hình ảnh mà bạn muốn đưa vào video vào khay nhớ tạm và nhập vào Windows Live Movie Maker (tự động, dĩ nhiên!) biên dịch cho bạn!

Tất cả điều này có thể được thực hiện thông qua mã, nhưng theo cách này, bạn không phải tự tạo. Như bạn nói rằng nền tảng là Windows, và tất cả cửa sổ Comp có Windows Live Movie Maker cài đặt, vì vậy nó không phải là một vấn đề đối với bất cứ ai sử dụng ứng dụng của bạn trừ khi

a) Họ gỡ bỏ cài đặt Windows Live Movie Maker

b) Họ đang sử dụng máy tính chạy trên phiên bản Windows hơn 8 hoặc 9 tuổi ...

+1

@Rugs: Không phải tất cả các máy tính Windows đều đã cài đặt Windows Live Movie Maker. Nó chắc chắn không được cài đặt mặc định trên Windows Server 2008, và rất nhiều nhà phát triển sử dụng nó cho các máy phát triển của họ. Thứ hai, giải pháp của bạn có thể hoạt động nếu bạn có một số cách tự động để thêm hàng nghìn hình ảnh vào khay nhớ tạm và nhập chúng từng lần vào Movie Maker. Nhưng chủ yếu là tôi muốn từ chối giải pháp này bởi vì tôi có một chương trình tạo các hình ảnh động và nhập chúng từng người một vào Movie Maker sẽ mất một thời gian rất dài. –

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