2013-02-02 50 views
8

làm cách nào tôi có thể đặt độ phân giải của hoạt ảnh được lưu dưới dạng phim mp4 với mô-đun "matplotlib.animation"?Cách đặt độ phân giải hình ảnh cho hoạt ảnh?

Trên web, tôi chỉ tìm thấy các ví dụ sử dụng "animation.FuncAnimation". Ví dụ như hướng dẫn tốt đẹp từ http://jakevdp.github.com/blog/2012/08/18/matplotlib-animation-tutorial/ sử dụng:

anim = animation.FuncAnimation(fig, animate, init_func=init, 
          frames=200, interval=20, blit=True) 
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264']) 

Từ tài liệu tham khảo mô-đun matplotlib.animation Tôi tìm thấy "animation.Animation.save" phương pháp cung cấp một "dpi" -argument, nhưng tôi không biết làm thế nào để áp dụng chức năng này đúng cách

matplotlib.animation.Animation.save(filename, writer=None, fps=None, dpi=None, codec=None, bitrate=None, extra_args=None, metadata=None, extra_anim=None) 

Một mã ví dụ nhỏ có thể hữu ích.

Rất cám ơn.

Johannes

PS: Nhân tiện, bạn có thể chèn mã Python bằng cách đánh dấu sytax như thế nào?

+0

Làm nổi bật là tự động huyền diệu. Cũng lưu ý rằng các mô-đun hoạt hình là tương đối, vì vậy bạn phải kiểm tra xem phiên bản của bạn 'matplotlib' phù hợp với phiên bản của các ví dụ bạn tìm thấy hay không. – tacaswell

+0

Bạn có được sắp xếp này không? – tacaswell

Trả lời

2

bitrate là thông số được sử dụng để chỉ định chất lượng của phim. Giá trị bạn đặt càng cao, chất lượng phim càng cao.

+0

Nhưng nếu tôi chạy ví dụ trên với 'anim = animation.FuncAnimation (hình, cập nhật, init_func = init, frames = len (t), blit = True) animation.Animation.save (anim, 'toll.mp4 ', fps = 20, bitrate = 20, codec =' mp4 ') ' Tôi nhận được lỗi" save() có đối số từ khóa không mong muốn' bitrate '". –

+1

Tôi nghĩ rằng 'bitrate' (và có thể' dpi') đã được thêm vào khoảng MPL 1.2. –

5

Bạn có thể kiểm soát độ phân giải theo cách tròn. Độ phân giải, kích thước hình và dpi không phải là tất cả độc lập, nếu bạn biết hai trong số chúng, thì thứ ba là cố định.

Bạn có thể đặt dpi trong lưu đối số, và trước khi bạn lưu nó, thiết lập kích thước của hình với

fig.set_size_inches(h_in_inches, w_in_inches, True). 

độ phân giải của bạn là sau đó dpi * h_in_inches X dpi * w_in_inches.

dpi = 100 
writer = animation.writers['ffmpeg'](fps=30) 
ani.save('test.mp4',writer=writer,dpi=dpi) 

Bạn có thể cần nâng cấp lên phiên bản mpl mới hơn (debian rất tuyệt vì nó quá bảo thủ và khủng khiếp vì nó quá bảo thủ) từ nguồn.

+0

Hmm ok, nhưng cùng một TypeError như với "bitrate" -argument: 'anim = animation.FuncAnimation (hình, cập nhật, init_func = init, khung = len (t), blit = True) hoạt hình.Đánh giá. tiết kiệm (anim, 'toll.mp4', fps = 20, dpi = 800, codec = 'mp4') 'Tôi nhận được lỗi" save() có một đối số từ khóa không mong muốn 'dpi' " –

+0

Ok cảm ơn rất nhiều, bây giờ nó là làm việc, phương thức "figure.set_dpi()" không có hiệu lực, nhưng gọi 'fig.set_size_inches (h_in_inches, w_in_inches)' dẫn đến độ phân giải hình ảnh là "h_in_inches xw_in_inches". –

+0

@mr_endres bạn đang sử dụng phiên bản MPL nào? – tacaswell

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