Open3
python-pptx調査
python-pptxというライブラリがある。これを利用して、スライドに音声を埋め込みたいが、現状動画のみが想定されている。
SlideShapes.add_movie
音声埋め込みができるのか、その方法とはどのようにすれば良いのだろうか、といった点に着目して調べてみる。
まずは、add_movieのソースを確認する。
movie_pic = _MoviePicElementCreator.new_movie_pic(
self,
self._next_shape_id,
movie_file,
left,
top,
width,
height,
poster_frame_image,
mime_type,
)
self_spTree.append(movie_pic)
self._add_video_timing(movie_pic)
return self._shape_factory(movie_pic)
となっているので、内容を一つずつ確認してみる。
_MoviePicElementCreatorについては、同じファイルに定義されている
class _MoviePicElementCreator(object):
@classmethod
def new_movie_pic(
cls, shapes, shape_id, movie_file, x, y, cx, cy, poster_frame_image, mime_type
):
return cls(
shapes, shape_id, movie_file, x, y, cx, cy, poster_frame_image, mime_type
)._pic
return
コンストラクタでは単に初期化、メンバへ設定しているだけ
def __init__(
self, shapes, shape_id, movie_file, x, y, cx, cy, poster_frame_file, mime_type
):
super(_MoviePicElementCreator, self).__init__()
self._shapes = shapes
self._shape_id = shape_id
self._movie_file = movie_file
self._x, self._y, self._cx, self._cy = x, y, cx, cy
self._poster_frame_file = poster_frame_file
self._mime_type = mime_type
_picについてはプロパティで設定されている
@lazyproperty
def _pic(self):
"""Return the new `p:pic` element referencing the video."""
return CT_Picture.new_video_pic(
self._shape_id,
self._shape_name,
self._video_rId,
self._media_rId,
self._poster_frame_rId,
self._x,
self._y,
self._cx,
self._cy,
)
さらに
class CT_Picture(BaseShapeElement):
@classmethod
def new_video_pic(
cls, shape_id, shape_name, video_rId, media_rId, poster_frame_rId, x, y, cx, cy
):
"""Return a new `p:pic` populated with the specified video."""
return parse_xml(
cls._pic_video_tmpl()
% (
shape_id,
shape_name,
video_rId,
media_rId,
poster_frame_rId,
x,
y,
cx,
cy,
)
)