首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用电影为电影添加字幕

使用电影为电影添加字幕
EN

Stack Overflow用户
提问于 2016-04-16 17:59:39
回答 1查看 10.1K关注 0票数 10

我试着遵循这个例子如何在电影剪辑中添加字幕:

代码语言:javascript
复制
from moviepy.video.tools.subtitles import SubtitlesClip
from moviepy.video.io.VideoFileClip import VideoFileClip
subs = [((0, 3), 'sub1'),
        ((3, 7), 'sub2'),
        ((9, 11), 'sub3'),
        ((11, 16), 'sub4')]
subtitles = SubtitlesClip(subs)
clip = VideoFileClip(video_fname)
video = movedit.CompositeVideoClip([clip, subtitles])
video.to_videofile(output_video_name)

但是电影的输出结果却没有字幕。我做错了什么吗?顺便说一句,subtitles.py不适用于python 3,这一行代码

代码语言:javascript
复制
subtitles = [(map(cvsecs, tt),txt) for tt, txt in subtitles]

需要更改为

代码语言:javascript
复制
subtitles = [(list(map(cvsecs, tt),txt)) for tt, txt in subtitles]

编辑

最终,我以艰难的方式创造了字幕:

代码语言:javascript
复制
from moviepy import editor
import os.path as op

def annotate(clip, txt, txt_color='red', fontsize=50, font='Xolonium-Bold'):
    """ Writes a text at the bottom of the clip. """
    txtclip = editor.TextClip(txt, fontsize=fontsize, font=font, color=txt_color)
    cvc = editor.CompositeVideoClip([clip, txtclip.set_pos(('center', 'bottom'))])
    return cvc.set_duration(clip.duration)

video = editor.VideoFileClip(op.join(movie_fol, movie_name))
subs = [((0, 4), 'subs1'),
        ((4, 9), 'subs2'),
        ((9, 12), 'subs3'),
        ((12, 16), 'subs4')]
annotated_clips = [annotate(video.subclip(from_t, to_t), txt) for (from_t, to_t), txt in subs]
final_clip = editor.concatenate_videoclips(annotated_clips)
final_clip.write_videofile(op.join(movie_fol, out_movie_name))

它并不完美,还有改进的余地,比如支持没有字幕的时间范围,但它解决了我的问题。

EN

回答 1

Stack Overflow用户

发布于 2021-03-22 18:56:05

这也适用于python3

代码语言:javascript
复制
from moviepy.editor import *
from moviepy.video.tools.subtitles import SubtitlesClip

generator = lambda txt: TextClip(txt, font='Arial', fontsize=24, color='white')
subs = [((0, 4), 'subs1'),
        ((4, 9), 'subs2'),
        ((9, 12), 'subs3'),
        ((12, 16), 'subs4')]

subtitles = SubtitlesClip(subs, generator)

video = VideoFileClip("input.mp4")
result = CompositeVideoClip([video, subtitles.set_pos(('center','bottom'))])

result.write_videofile("output.mp4", fps=video.fps, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36667702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档