13

matplotlib ムービー ライターを使用してムービーを生成しようとしています。そうすれば、ビデオの周りに常に白い余白ができます。そのマージンを削除する方法を知っている人はいますか?

http://matplotlib.org/examples/animation/moviewriter.htmlから調整された例

# This example uses a MovieWriter directly to grab individual frames and
# write them to a file. This avoids any event loop integration, but has
# the advantage of working with even the Agg backend. This is not recommended
# for use in an interactive setting.
# -*- noplot -*-

import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as manimation

FFMpegWriter = manimation.writers['ffmpeg']
metadata = dict(title='Movie Test', artist='Matplotlib',
        comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata, extra_args=['-vcodec', 'libx264'])

fig = plt.figure()
ax = plt.subplot(111)
plt.axis('off')
fig.subplots_adjust(left=None, bottom=None, right=None, wspace=None, hspace=None)
ax.set_frame_on(False)
ax.set_xticks([])
ax.set_yticks([])
plt.axis('off')

with writer.saving(fig, "writer_test.mp4", 100):
    for i in range(100):
        mat = np.random.random((100,100))
        ax.imshow(mat,interpolation='nearest')
        writer.grab_frame()
4

4 に答える 4

20

None引数として渡しても、subplots_adjustあなたが思っていることはしません(doc)。これは「デフォルト値を使用する」ことを意味します。必要なことを行うには、代わりに次を使用します。

fig.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=None, hspace=None)

ImageAxesオブジェクトを再利用すれば、コードをより効率的にすることもできます

mat = np.random.random((100,100))
im = ax.imshow(mat,interpolation='nearest')
with writer.saving(fig, "writer_test.mp4", 100):
    for i in range(100):
        mat = np.random.random((100,100))
        im.set_data(mat)
        writer.grab_frame()

デフォルトimshowでは、アスペクト比が等しくなるように修正されます。つまり、ピクセルが正方形になります。画像と同じ縦横比になるようにフィギュアのサイズを変更する必要があります。

fig.set_size_inches(w, h, forward=True)

またはimshow、任意の縦横比を使用するように指示します

im = ax.imshow(..., aspect='auto')
于 2013-04-08T15:52:05.030 に答える
0

軸の注釈なしで行列の matshow/imshow レンダリングを「単に」保存したい場合は、scikit-video (skvideo) の最新の開発者バージョンも関連している可能性があります (avconv がインストールされている場合)。ディストリビューションの例は、numpy 関数から構築された動的イメージを示しています: https://github.com/aizvorski/scikit-video/blob/master/skvideo/examples/test_writer.py

例の私の変更は次のとおりです。

# Based on https://github.com/aizvorski/scikit-video/blob/master/skvideo/examples/test_writer.py
from __future__ import print_function

from skvideo.io import VideoWriter
import numpy as np

w, h = 640, 480

checkerboard = np.tile(np.kron(np.array([[0, 1], [1, 0]]), np.ones((30, 30))), (30, 30))
checkerboard = checkerboard[:h, :w]

filename = 'checkerboard.mp4'
wr = VideoWriter(filename, frameSize=(w, h), fps=8)

wr.open()
for frame_num in range(300):
    checkerboard = 1 - checkerboard
    image = np.tile(checkerboard[:, :, np.newaxis] * 255, (1, 1, 3))
    wr.write(image)
    print("frame %d" % (frame_num))

wr.release()
print("done")
于 2015-06-11T20:16:12.653 に答える