2009-11-20 12 views
17

Tôi cần tạo hình thu nhỏ cho tệp video khi tôi đã tải lên ứng dụng web chạy python.Tạo hình thu nhỏ từ các tệp video bằng Python

Làm cách nào để tôi thực hiện việc này ... Tôi cần một thư viện về cơ bản có thể thực hiện việc này cho tôi hoặc có thể tự động đọc khung hình của các tệp video (một số định dạng).

+1

Xem [câu trả lời này] [1] cho làm thế nào để làm điều đó với GStreamer và Python. [1]: http://stackoverflow.com/a/16478342/1049318 –

Trả lời

8

Sự kết hợp đơn giản của PyMediaPIL sẽ thực hiện thủ thuật cho các tệp AVI, ASF hoặc MPEG. PyMedia cho phép bạn trích xuất các khung (bằng cách sử dụng bộ giải mã() thường trình), trong khi PIL có một hình thu nhỏ đơn giản() thường trình.

+0

Được đánh giá cao. – Alterlife

+0

PyMedia không hoạt động trên python 3.x bạn có giải pháp nào khác không? – EduardoMaia

+0

@EduardoMaia Những ngày này tôi có thể bắt đầu bằng cách gọi một gói bên ngoài như ffmpeg, hoặc libav tại https://libav.org/. –

1

Nhìn vào PythonMagick, giao diện Python cho ImageMagick. Điều đó cần phải có những gì bạn cần. (Disclaimer: Tôi đã không sử dụng giao diện Python trước đây, nhưng tôi biết ImageMagick là mojo tốt.)

3

Bạn có thể sử dụng API Youtube để lưu trữ và chuyển mã và lấy hình thu nhỏ nguồn cấp dữ liệu miễn phí. Thành thật mà nói, đó là cách dễ nhất để xử lý video trực tuyến và tôi không chỉ làm dịch vụ bên thứ ba, tôi là người dùng rất hài lòng với API đó và đường dẫn video nội bộ mà tôi có thể xóa nhờ vào nó.

10

Bạn có thể sử dụng ffvideo

from ffvideo import VideoStream 
pil_image = VideoStream('0.flv').get_frame_at_sec(5).image() 
pil_image.save('frame5sec.jpeg') 
+0

ffvideo không hoạt động trên python 3.x bạn có giải pháp nào khác không? – EduardoMaia

0
import cv2 
vcap = cv2.VideoCapture(filename) 
res, im_ar = vcap.read() 
while im_ar.mean() < threshold and res: 
     res, im_ar = vcap.read() 
im_ar = cv2.resize(im_ar, (thumb_widht, thumb_height), 0, 0, cv2.INTER_LINEAR) 
#to save we have two options 
#1) save on a file 
cv2.imwrite(save_on_filename) 
#2)save on a buffer for direct transmission 
res, thumb_buf = cv2.imencode('.png', im_ar) 
# '.jpeg' etc are permitted 
#get the bytes content 
bt = thumb_buf.tostring() 

"ngưỡng" là một số nguyên. Khi bạn nhận được một khung hình video nó có thể rất đen, trắng vv để có được một số hình thu nhỏ tốt, bạn có thể chỉ định giá trị trung bình của tất cả các điểm ảnh trong khung.

2

Tôi không thể cài đặt ffvideo trên OSX Sierra nên tôi quyết định làm việc với ffmpeg.

OSX:

brew install ffmpeg 

Linux:

apt-get install ffmpeg 

Python 3 Mã số:

import subprocess 
video_input_path = '/your/video.mp4' 
img_output_path = '/your/image.jpg' 
subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', '-vframes', '1', img_output_path])