2009-03-13 45 views
27

Tôi có những gì có vẻ như nó phải là một vấn đề thực sự đơn giản, nhưng nó chứng minh khó khăn hơn nhiều so với tôi mong đợi. Đây là vấn đề:Xoay chuỗi hình ảnh thành video với độ trong suốt

Tôi có một chuỗi hình ảnh khá lớn bao gồm các khung được đánh số (đầu ra từ Maya, cho giá trị của nó). Các hình ảnh hiện đang ở định dạng Targa (.tga), nhưng tôi có thể chuyển đổi chúng sang PNG hoặc định dạng tùy ý khác nếu có. Điều quan trọng là, họ đã có một kênh alpha.

Điều tôi muốn làm là biến chúng thành một video clip theo chương trình. Định dạng này không thực sự quan trọng, nhưng nó cần phải mất dữ liệu và có kênh alpha. Video không nén trong vùng chứa Quicktime có thể là lý tưởng.

Suy nghĩ ban đầu của tôi là ffmpeg, nhưng sau khi lãng phí hầu hết một ngày trên nó có vẻ như nó không có hỗ trợ gì cả cho các kênh alpha. Hoặc tôi đang thiếu một cái gì đó, hoặc libavcodec cơ bản chỉ không làm điều đó.

Vậy, cách phù hợp ở đây là gì? Một công cụ dòng lệnh như ffmpeg sẽ là tốt đẹp, nhưng bất kỳ giải pháp chạy trên Windows và có thể được gọi từ một kịch bản sẽ là tốt.

Lưu ý: Có một kênh alpha trong video của bạn không thực sự phổ biến và điều này thực sự hữu ích nếu bạn muốn tổng hợp nó trên đầu video clip khác hoặc hình ảnh tĩnh. Theo như tôi biết video không nén, bộ giải mã Quicktime Animation và codec Sorenson Video 3 đều hỗ trợ tính minh bạch và tôi cũng đã nghe H.264. Tất cả những gì chúng ta đang nói đến là độ sâu màu 32 bit, và nó được hỗ trợ khá rộng rãi; cả tệp Quicktime .mov và Windows. Các tệp .avi có thể xử lý tệp và có thể còn nhiều hơn nữa.

Quicktime Pro sẵn lòng chuyển chuỗi hình ảnh thành tệp .mov 32 bit. Nhấn xuất, thay đổi độ sâu màu thành "Hàng triệu màu +", chọn Bộ giải mã hoạt ảnh, xoay chất lượng lên tới 100 và bạn đang ở đó - video được nén không mất dữ liệu, với kênh alpha và nó sẽ phát lại gần như mọi nơi kể từ codec đã là một phần của Quicktime kể từ phiên bản 1.0. Vấn đề là, Quicktime Pro không có bất kỳ loại giao diện dòng lệnh nào (ít nhất là trên Windows). ffmpeg hỗ trợ mã hóa bằng cách sử dụng bộ giải mã Quicktime Animation (mà nó gọi là qtrle), nhưng nó chỉ hỗ trợ bit sâu 24 bit.

Sự cố không tìm thấy định dạng video hỗ trợ kênh alpha. Quicktime Animation sẽ là lý tưởng, nhưng ngay cả video không nén cũng hoạt động. Vấn đề là tìm một công cụ hỗ trợ nó.

+1

Bạn muốn điều gì xảy ra với kênh alpha? Video có nên minh bạch ở những nơi không? (Tôi không biết bất kỳ định dạng nào hỗ trợ điều đó) hoặc khung hình trước đó sẽ hiển thị thông qua? – Greg

+0

Tôi đồng ý với RoBerg, tôi đã không gặp phải và các định dạng video làm điều này. Bạn có thể phải cuộn của riêng bạn. –

+0

Phải, nó chỉ nên trong suốt, vì vậy nếu bạn phủ lên nó trên hình nền, bạn có thể thấy nền. Tôi đã thêm nhiều thông tin hơn về câu hỏi đó. –

Trả lời

-1

Cody,

Bạn có thể viết tiện ích dòng lệnh của riêng bạn bằng cách sử dụng Quicktime SDK for Windows, tôi muốn giới thiệu gắn bó với cấp trên Quicktime COM apis và chỉ đào sâu vào C-API nếu bạn thực sự phải.

-Nick

25

Có ffmpeg chắc chắn hỗ trợ kênh alpha trong tệp video. Không phải tất cả các codec trong ffmpeg dường như hỗ trợ alpha nhưng tho. Chuyển động PNG trong tệp .MOV là một kết hợp tốt cho alpha.

Để mã hóa images/nhập khẩu với alpha đến một video với alpha thử: ffmpeg -i %d.png -vcodec png z.mov

Quicktime sẽ chơi đó.

Để giải mã/xuất video với alpha hình ảnh với alpha thử: ffmpeg -i z.mov -f image2 export2\%d.png

Lưu ý rằng tôi xuất khẩu chúng vào một thư mục gọi là 'export2'. Hãy chắc chắn để lại% d phần trong đó.Các lệnh này sẽ hoạt động như trên hệ thống Windows. Người dùng Linux/Mac có thể cần phải thêm dấu trích dẫn và trao đổi một số \ cho/như thường lệ.

12

Tôi biết chủ đề này hơi cũ nhưng tôi vẫn đăng bài.

FFMPEG với Hoạt ảnh nhanh (RLE) hoặc FFVHUFF/HUFFYUV sẽ thực hiện.

  • ffmpeg -i yoursequence% d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence% d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence% d.png -vcodec huffyuv movie_with_alpha.avi

Bạn sẽ nhận được các tệp video có độ trong suốt (kênh alpha) được giữ nguyên.

Tôi cũng đã nghe biến thể On2-VP6 (Không phải là WebM-VP8) có thể xử lý alpha, nhưng tôi không có codec của chúng trong tầm tay.

Điều này cũng hoạt động. - ffmpeg -i yoursequence% d.png -vcodec png movie_with_alpha.mov

+0

Quá xấu RLE và YUV tạo ra các tệp lớn. VP6 cho FLV tạo ra các tệp nhỏ hơn nhiều. Quá xấu không có bộ mã hóa vp6a miễn phí. Trong thực tế, bộ mã hóa VP6 duy nhất tôi có thể tìm thấy là trong Media Encoder của Adobe. – rustyx

+0

RLE và YUV hầu như chỉ được sử dụng như tệp có thể chỉnh sửa trung gian hoặc tệp nguồn của đài truyền hình. Tôi cho rằng người ta có thể làm việc với những điều này để chỉnh sửa và sau đó chuyển sang định dạng nhỏ hơn có sẵn (ví dụ: FLV) khi công việc được hoàn thành và sẵn sàng xuất bản. – satoc

3

Đối với các nhà phát triển web đạt câu hỏi này và đập đầu vào tường trong thất vọng ... Có thể tạo ra một transparent WebM video, nhưng tại thời điểm này có lẽ bạn cần biên dịch ffmpeg và các thư viện cần thiết từ nguồn.

Tôi muốn hiển thị video Máy xay sinh tố được hiển thị trên trang web nhưng vẫn giữ được độ trong suốt. Bước đầu tiên là kết xuất đầu ra Blender dưới dạng tệp PNG riêng lẻ. Sau đó, tôi đã dành khá nhiều thời gian cố gắng để ép buộc ffmpeg chuyển đổi các tệp PNG đó thành một video duy nhất. Các lệnh cơ bản rất đơn giản:

ffmpeg -i input%04d.png output.webm 

Lệnh này nạp tất cả PNG với tên tập tin input0000.png qua input9999.png và biến chúng thành một video. Sự minh bạch đã nhanh chóng bị mất. Chải qua đầu ra tôi nhận ra ffmpeg được helpfully lựa chọn một định dạng không công khai:

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

Tại thời điểm này tôi đã nhận ra tôi có thể phải biên dịch lại ffmpeg từ đầu. Tôi đã vật lộn với một vài công cụ khác, nhưng cuối cùng lại kết thúc với ffmpeg. Sau khi biên dịch libvbx và ffmpeg từ nguồn mới nhất, mọi thứ trở nên hấp dẫn.

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