Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Phần Mềm

Cách tạo video Slow-Motion chất lượng cao với VirtualDub & AviSynth

Được rồi. Chúng ta vừa học vài tuần trước cách dùng filter VirtualDub để resize video. Ngoài nhu cầu thẩm thuần và có thể muốn làm output media nhỏ hơn, resize video có thể không quan trọng lắm. Nhưng nếu bạn có nhu cầu đặc biệt, như tạo video slow-motion bullet-time, và phần mềm làm điều đó yêu cầu định dạng và kích thước nhất định?

Không lo, chúng ta đã vượt chướng ngại vật trong tutorial trước. Và hôm nay, tôi sẽ chỉ cho bạn cách tạo video slow motion. Có VirtualDub. Và chúng ta sẽ biết một chương trình handsome khác tên AviSynth. Chương trình này là tiện ích mạnh mẽ cho post-production video. Nó không có frontend, nghĩa là bạn sẽ phải chấp nhận command-line và script. Oooh, nghe đáng sợ, nhưng đừng lo, tôi sẽ làm cho nó đơn giản.

AviSynth, cài đặt, chuẩn bị, cấu hình

Trước khi bắt đầu dùng VirtualDub, chúng ta cần cấu hình AviSynth. Download và cài, khá đơn giản. Nhưng chúng ta cũng cần plugin thêm tên mvtools không có trong gói cơ bản. Khi xong, bạn sẵn sàng dùng AviSynth.

Sử dụng AviSynth

Không frontend (GUI), không cách fancy hoặc dễ dàng làm việc. Vẫn, bạn không cần sợ command line. Mở text editor và bắt đầu viết lệnh - hoặc tìm script sẵn trên Web và copy. Tôi KHÔNG phải chuyên gia, nhưng tôi đọc code và google quanh co.

Tôi tìm script slow-motion ở Nerds Central và adapt cho dùng của mình. Tác giả giải thích chi tiết script làm gì, nên không cần đi qua lệnh từng cái. Chỉ nhớ, AviSynth là ngôn ngữ programming de-facto với syntax riêng. Nếu bạn biết một, bạn biết tất cả.

Đây là việc của tôi, cơ bản giống ví dụ trên:

LoadPlugin("Path to mvtools.dll")
source=AVISource("Path to source.avi",false)
oSource=source
source=ConvertToYV12(source)
source=AssumeFPS(source,25)
backward_vec=source.MVAnalyse(isb=true,truemotion=true,pel=2,idx=1)
forward_vec=source.MVAnalyse(isb=false,truemotion=true,pel=2,idx=1)
cropped=source.crop(4,4,-4,-4) # by half of block size 8
backward_vec2=cropped.MVAnalyse(isb=true,truemotion=true,pel=2,idx=2)
forward_vec2=cropped.MVAnalyse(isb=false,truemotion=true,pel=2,idx=2)
fSource=source.MVFlowFps2(backward_vec,forward_vec,
backward_vec2,forward_vec2,num=250,idx=1,idx2=2)
fSource=AssumeFPS(fSource,25)
return fSource

Tuy nhiên, một vài điểm cần chú ý:

Bạn cần trỏ đúng mvtools.dll và file nguồn. Thứ hai, có instruction convert source sang format YV12. Bạn có thể sửa dòng này nếu file đã đúng format - hoặc dùng VirtualDub.

source=ConvertToYV12(source)

Làm sao biết YV12 này là gì? Hay tại sao cần nó? Câu trả lời là, bạn không thực sự cần nó, nhưng nó tốt cho xử lý video. Về thuật ngữ geek nên ấn tượng bạn, YV12 là planar format, nghĩa là cho mỗi hình ảnh, dữ liệu luma cho tất cả pixel được lưu liên tiếp, theo sau bởi dữ liệu chroma, lý tưởng cho kỹ thuật xử lý ảnh. Bây giờ quên câu cuối.

Bất kỳ cách nào, để biết thêm format nào hỗ trợ YV12, AviSynth FAQ là bạn. Nói chung, MPEG-4 với XviD nên hoạt động tốt.

Nếu bạn sai cái này, bạn sẽ nhận lỗi khi load script trong VirtualDub - về cách làm chính xác, chúng ta sẽ thấy ngay sau:

Tiếp, AssumeFPS cho source. Set đúng framerate cũng giúp tạo output tốt nhất, không cần đoán. Điều này giúp bạn sản xuất video output như mong đợi, không cần qua vài lần tweak framerate lên xuống.

Crop

Đây là cái tricky. Nếu bạn có file video với width không chia hết cho 4, bạn sẽ nhận lỗi từ VirtualDub khi load script, than phiền về arithmetic:

Bạn có thể quyết định comment dòng cropped parameter trong script, có thể hoạt động, nhưng chắc chắn logic script được thay đổi, để không kết thúc với biến undefined.

Nhưng tốt hơn, resize video trong VirtualDub, dùng filter resize! Đó chính xác những gì chúng ta học lần trước! Bây giờ bạn biết tại sao chúng ta làm nó.

Tham số MVFlowFPS2 sẽ quyết định frame số của video chậm, tuy nhiên, slowdown thực tế phụ thuộc output framerate. Thực vậy, cuối cùng, chú ý AssumeFPS output, vì đây sẽ quyết định cuối cùng video nhanh hay chậm, bao gồm độ dài và kích thước. Bạn có thể chơi với tham số này bao nhiêu tùy thích, để xem gì cho kết quả tốt nhất.

fSource=AssumeFPS(fSource,25)

Load script trong VirtualDub

Thực vậy, không một lỗi nào trên sẽ show cho đến khi bạn lưu file text thành script với extension .avs và mở nó trong VirtualDub, như bạn mở file bất kỳ. Nếu không lỗi, video sẽ load, với factor frames insert. Ví dụ trên cho factor x10, nhưng bạn có thể làm việc với bất kỳ số FPS nào để thay đổi, thành x2, x5, v.v.

Kết quả cuối

Final cuts của công việc AviSynth của tôi có trên YouTube. Link một và hai. Vui lòng ghé và check chất lượng công việc. Bạn cũng có thể quan tâm interior design gallery có video này.

Bạn sẽ nhận ra có chút blur ở rìa video, vì interpolation giữa frame. Bản ghi gốc là tập hợp frame camera đơn, resample thành 25 fps, sau đó slow down 10 lần. Vì vậy bạn có phần mềm fill khoảng trống approx 250 lần giữa frame, không phải deal đơn giản. Bạn sẽ có kết quả tốt hơn với video chuyển động, đã có blur, và nó được mong đợi trong trường hợp này.

Nhưng tôi đoán đây là công việc decent. Và bạn biết cách làm, bây giờ.

Kết luận

Đây, một tutorial multimedia khác sliced and diced. Lúc này, bạn là video sous-chef. Trên note nghiêm túc, VirtualDub là công cụ rất mạnh và highly extensible để làm việc với file media, bao gồm mọi loại filter. Kết hợp với AviSynth, bạn có thể làm hiệu ứng Matrix, hoặc nếu thích John Woo, trong video tự làm, vượt mặt hàng xóm và đồng nghiệp.

AviSynth không phải utility đơn giản, vì thiếu GUI, nhưng nó hoạt động tốt. Chỉ nhớ basic layered approach. Dùng VirtualDub cho first-level changes và fixes và additional processing và transcoding. Tiếp, dùng filter có sẵn cho extra effects. Cuối cùng, dùng module bên thứ ba cho final touches. Vâng, đó là tất cả. Have fun.

Cheers.