python 文字快閃視頻製作

參考:
https://zhuanlan.zhihu.com/p/69839386
https://github.com/AndersonBY/FlashText

安裝依賴可能麻煩點:

運行:
python3 FlashText1.py --text /Users/lonng/youtube_v/2a_kor1.txt --music /Users/lonng/Desktop/v+/mp3/Smile.mp3 --output /Users/lonng/Desktop/v+/vedio/2a_kor7.mp4 --width 1280 --height 720
import librosa
from moviepy.editor import *
import jieba
import click


@click.command()
@click.option('--width', prompt='Width', default=360, help='The width of video clips')
@click.option('--height', prompt='Height', default=240, help='The height of video clips')
@click.option('--text', prompt='Text file', default='text.txt', help='The source text file')
@click.option('--music', prompt='Music file', default='改革春風吹滿地.mp3', help='The music file')
@click.option('--word_split', prompt='Split words', default=False, help='Split words or not')
@click.option('--output', prompt='Output file', default='FlashText.mp4', help='The output file name')
def main(width, height, text, music, word_split, output):
	with open(text, 'r', encoding='utf-8') as f:
		text_str = f.read()
	if word_split:
		seg_list = jieba.lcut(text_str)
		punct = set(''':!),.:;?]}¢'"、。〉》」』】〕〗〞︰︱︳﹐、﹒
		﹔﹕﹖﹗﹚﹜﹞!),.:;?|}︴︶︸︺︼︾﹀﹂﹄﹏、~¢
		々‖•·ˇˉ―--′’”([{£¥'"‵〈《「『【〔〖([{£¥〝︵︷︹︻
		︽︿﹁﹃﹙﹛﹝({“‘-—_…/\\''')
		word_list = list(filter(lambda x: x not in punct, seg_list))
	else:
		word_list = text_str.split('\n')

	y, sr = librosa.load(music)
	tempo, beats = librosa.beat.beat_track(y=y, sr=sr)
	beat_times = list(librosa.frames_to_time(beats, sr=sr))
	beat_times.append(beat_times[-1] + 1)
	# print(beat_times)

	clips = []
	for index, beat_time in enumerate(beat_times[:-1]):
		if index >= len(word_list)//2 or index >= len(beat_times)//2:
			break
		print(f'{index + 1}/{len(beat_times)}——{word_list[index]}')
		text_clip = TextClip(
			'\n'.join('%s' %id for id in  word_list[index*2-2 if index!=0 else 0:index*2 if index!=0 else 2]),
			fontsize=width // 8,
			color='white',
			size=(width, height),
			method='caption',
			font='msyhbd.ttc'
			# font = '/System/Library/Fonts/AppleSDGothicNeo.ttc'
			# font = '/System/Library/Fonts/Supplemental/AppleGothic.ttf'
			)\
			.set_start(beat_times[index*2-2 if index!=0 else 0])\
			.set_end(beat_times[index*2-1 if index!=0 else 1])
		text_clip = text_clip.set_pos('center')
		clips.append(text_clip)

	final_clip = CompositeVideoClip(clips)
	audio_clip = AudioFileClip(music).subclip(0,int(final_clip.duration))
	final_video = final_clip.set_audio(audio_clip)

	final_video.write_videofile(
		output,
		fps=30,
		codec='mpeg4',
		preset='ultrafast',
		audio_codec="libmp3lame",
		threads=4)




if __name__ == '__main__':
	main()

多字體版:

print('Importing library. Please wait.')
import librosa
from moviepy.editor import *
import jieba
import click


@click.command()
@click.option('--width', prompt='Width', default=360, help='The width of video clips')
@click.option('--height', prompt='Height', default=240, help='The height of video clips')
@click.option('--text', prompt='Text file', default='text.txt', help='The source text file')
@click.option('--music', prompt='Music file', default='改革春風吹滿地.mp3', help='The music file')
@click.option('--word_split', prompt='Split words', default=False, help='Split words or not')
@click.option('--output', prompt='Output file', default='FlashText.mp4', help='The output file name')
def main(width, height, text, music, word_split, output):
	with open(text, 'r', encoding='utf-8') as f:
		text_str = f.read()
	if word_split:
		seg_list = jieba.lcut(text_str)
		punct = set(''':!),.:;?]}¢'"、。〉》」』】〕〗〞︰︱︳﹐、﹒
		﹔﹕﹖﹗﹚﹜﹞!),.:;?|}︴︶︸︺︼︾﹀﹂﹄﹏、~¢
		々‖•·ˇˉ―--′’”([{£¥'"‵〈《「『【〔〖([{£¥〝︵︷︹︻
		︽︿﹁﹃﹙﹛﹝({“‘-—_…/\\''')
		word_list = list(filter(lambda x: x not in punct, seg_list))
	else:
		word_list = text_str.split('\n')

	y, sr = librosa.load(music)
	tempo, beats = librosa.beat.beat_track(y=y, sr=sr)
	beat_times = list(librosa.frames_to_time(beats, sr=sr))
	beat_times.append(beat_times[-1] + 1)
	# print(beat_times)

	clips = []
	for index, beat_time in enumerate(beat_times[:-1]):
		if index >= len(word_list):
			break
		print(f'{index + 1}/{len(beat_times)}——{word_list[index]}')
		text_clip = TextClip(
			word_list[index],
			fontsize=width // 8,
			color='white',
			size=(width, height),
			method='caption',
			# font='msyhbd.ttc'  #中英、中日
			# font = '/System/Library/Fonts/Thonburi.ttc'   #越語
			# font = '/Users/lonng/Desktop/v+/字體/泰語.TTF'   #泰語
			# font = '/Users/lonng/Desktop/v+/字體/韓國字體.ttf'   #韓語
			font = "/Users/lonng/Desktop/v+/字體/acherus_grotesque_-_regular.otf"   #德法西意
			)\
			.set_start(beat_times[index*2])\
			.set_end(beat_times[index*2+2])
		text_clip = text_clip.set_pos('center')
		clips.append(text_clip)

	final_clip = CompositeVideoClip(clips)
	audio_clip = AudioFileClip(music).subclip(0,int(final_clip.duration))
	final_video = final_clip.set_audio(audio_clip)

	final_video.write_videofile(
		output,
		fps=30,
		codec='mpeg4',
		preset='ultrafast',
		audio_codec="libmp3lame",
		threads=4)




if __name__ == '__main__':
	main()

視頻合併代碼:

from moviepy.editor import *



v1 = VideoFileClip('/Users/lonng/Desktop/v+/片頭6.mp4')
v2 = VideoFileClip('/Users/lonng/Desktop/v+/vedio/2a_kor7.mp4')

finalclip = concatenate_videoclips([v1,v2])
finalclip.write_videofile('/Users/lonng/Desktop/v+/vedio/2a_kor1.mp4',audio_codec='aac')

視頻效果參考:https://www.youtube.com/watch?v=NjSGf2DtZb0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章