2015-02-28 40 views
9

Tôi đã sử dụng cơ sở hoạt ảnh của Matplotlib để tạo ra các hình động. Tôi đã nhận thấy một vấn đề đặc biệt đáng chú ý đối với hoạt ảnh với một số lượng lớn các khung hình, đó là chất lượng của các con số bị giảm rất nhanh dẫn đến kết quả tìm kiếm bị mờ pixel.Hoạt ảnh được tạo pixel ở Matplotlib

Ví dụ:

đường lưới Messy Messy grid lines

pixelated đầu ra pixilated output

Tôi đã render hình ảnh động sử dụng

import matplotlib 
matplotlib.use("Agg") 

anim = animation.FuncAnimation(fig, ..., blit=False) 
mywriter = animation.FFMpegWriter(fps=15) 
anim.save("path.mp4", writer=mywriter) 

Tôi đã thử sử dụng blit = True/False nhưng không nhận thấy nhiều sự khác biệt.

Phiên bản Matplotlib: 1.4.2. Hệ thống: Mac 10.10

+1

trùng lặp có thể xảy ra [phim hoạt hình matplotlib: chất lượng phim giảm với thời gian] (http://stackoverflow.com/questions/25203311/matplotlib-animation-movie-quality-of -movie-reduce-with-time) – YXD

+0

Codec mặc định của bạn là gì trong 'matplotlib.rcParams ['animation.codec']'? – aganders3

+0

@Mr E, khá có thể là một bản sao. Tôi thấy rằng 'anim.save ("path.mp4", writer = mywriter, codec = "libx264", bitrate = -1, extra_args = [' - pix_fmt ',' yuv420p '])' dẫn đến kết quả tương tự. – osnoz

Trả lời

5

Đây là những gì phù hợp với tôi.

Bạn có thể thay đổi tốc độ bit trong khi tạo ra các trường hợp nhà văn

import matplotlib.animation as animation 

anim = animation.FuncAnimation(fig, ...) 

FFMpegWriter = animation.writers['ffmpeg'] 
metadata = dict(title='Movie Test', artist='Matplotlib', 
       comment='Movie support!') 

# Change the video bitrate as you like and add some metadata. 
writer = FFMpegWriter(fps=15, bitrate=1000, metadata=metadata) 

Sau đó, bạn có thể lưu video của bạn.

anim.save("path.mp4", writer=mywriter) 

Hy vọng nó giúp

+1

Cảm ơn bạn đã cho giải pháp mrcl của bạn, nó sẽ xuất hiện mà tự xác định bitrate hiện các trick. Đối với bất kỳ ai khác xử lý vấn đề này có chế độ tự động (bitrate = -1), sử dụng kết quả trong các mô phỏng pixilated lộn xộn, nếu bạn muốn có kết quả tốt, chỉ định bitrate theo cách thủ công, tôi thấy bitrate = 5000 thực hiện công việc tôi để lại một kết quả khá sắc nét. – osnoz

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