5

Tôi có một khóa đào tạo video được cung cấp dưới dạng tệp AVI. Hầu hết các màn hình được hiển thị dưới dạng trang trình bày với con trỏ chuột di chuyển xung quanh chúng.Cách trích xuất trang trình bày từ video bằng python

Tôi muốn chụp một ảnh chụp màn hình của slide tự động khi thay đổi màn hình (bỏ qua khi hình ảnh thay đổi một lượng nhỏ do con trỏ chuột di chuyển xung quanh.)

Tôi muốn làm điều này vì vậy tôi có thể dán hình ảnh vào một từ hoặc tài liệu html mà tôi có thể thêm ghi chú vào khi tôi học tại thời điểm tôi chụp ảnh màn hình nhưng nó rất chậm và tẻ nhạt và khóa học rất dài (khoảng 24 giờ tổng thời gian phát).

Tôi biết rõ ràng về python nhưng tôi không chắc chắn về cách trích xuất ảnh tĩnh từ tệp video và cách so sánh ảnh tĩnh với một tệp khác để xem chúng khác nhau bao nhiêu để quyết định nên giữ gì và loại bỏ gì.

Có ai có thể đề xuất cách thực hiện việc này không?

Trả lời

10

Công cụ như ffmpeg phù hợp để trích xuất hình ảnh từ video. Từ hướng dẫn:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg 

này sẽ trích xuất một khung hình mỗi giây từ video và chí xuất chúng trong tập tin có tên foo-001.jpeg, foo-002.jpeg vv Hình ảnh sẽ được thay đổi tỷ lệ phù hợp với những giá trị RxC mới.

So sánh chúng với những khác biệt có thể có thể được thực hiện bởi PIL và/hoặc OpenCV.

EDIT: Tôi chỉ nhận ra rằng có lẽ sẽ hiệu quả hơn khi chỉ lấy key frames (khung bên trong), bởi vì chúng xảy ra khi thay đổi mạnh mẽ trong cảnh xảy ra. Một google nhanh chóng sau chúng tôi có điều này:

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg 
+0

cảm ơn. ví dụ thứ hai tôi không thể làm việc, ngay cả với phiên bản mới nhất của ffmpeg. Ví dụ đầu tiên hoạt động cho những gì tôi cần. – zio

5

Điều cơ bản bạn muốn là phát hiện cảnh. framedifferenceanalyzer là một bằng chứng giáo dục về khái niệm trong Python thực hiện chính xác điều đó, và nên cung cấp một điểm khởi đầu tốt để tìm hiểu về chính vấn đề đó.

Để tự mình thực hiện, ffmpeg là công cụ lý tưởng để chuyển đổi video thành chuỗi các khung - có lẽ tôi sẽ không cố gắng thực hiện phần đó bằng Python thuần túy.

Để tính toán sự khác biệt giữa các khung hình, bạn có thể sử dụng ImageMagick (cụ thể là công cụ compare). Có một số ràng buộc Python cho ImageMagick, ví dụ: PythonMagick hoặc magickwand để chỉ tên hai.

Bạn cũng có thể sử dụng OpenCV để thực hiện phân tích hình ảnh. OpenCV là một thư viện hiệu suất cao, các thuật toán thị giác máy tính chất lượng cao và có lẽ là một trong số đó, nếu không phải là công cụ mạnh nhất hiện có để làm những việc như thế này. Tuy nhiên, loại giả định rằng bạn có kiến ​​thức nhất định về xử lý hình ảnh/xử lý hình ảnh và đã có ý tưởng tốt về những gì bạn đang tìm kiếm.

+0

cảm ơn. công cụ so sánh hoạt động tốt cho tôi cùng với imagemagick trong python. – zio

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