File size: 3,440 Bytes
7f62904
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# coding: utf-8
# 1、根据背景底板 设定图像大小
# 2、
import pandas as pd
import os
import random
import IPython.display as ipd
import numpy as np

import moviepy.video.io.ImageSequenceClip
from moviepy.editor import AudioFileClip,TextClip,CompositeVideoClip


from txtImgPost import  myPost, reshape_texts, generatePost
import inspect, math
from PIL import Image, ImageDraw, ImageFont

# for img_post
result_post_file = "post_v1.png"
import random
# front_img = "./bingpost/2023-05-13.png"
bing_dir = "./bingpost"
front_imgs =[os.path.join(bing_dir,i) for i in os.listdir("./bingpost") if i.endswith(".png")]
front_img = random.choice(front_imgs)
print(front_img)

bac_img = "./kaobianBottem.jpeg"
imge_dir = "imgpost"
key_index =  {"bm_sj":8+4,"fee_sj":9+ 4,"ks_sj":14,"zkz_sj":15}

# for movie Param
fps = 1
image_dur = 3
movie_dir = "movie_output"

target_dir = "scrap_data/"

res_list = [os.path.join(target_dir,i) for i in os.listdir(target_dir) if i.endswith(".csv")]
# res_list

fn = "scrap_data/2023-05-14_01:21.csv"

df = pd.read_csv(fn)
for i in df.columns:
    if np.all(pd.notnull(df[i])) == False:
        df[i].fillna("", inplace=True)
df.head()

# 生成音频
msg = []
# 生成音频
# for it in task_docs:
for it in df.itertuples():    
    # title = it["title"]
    title = it[2]
    new_title = title.replace('\n', "").replace('”', "").replace('“', "").replace(' ', "")
    output_wav = f"audio_output/{new_title}.wav"
    tts_cmd = f'edge-tts  --voice zh-CN-XiaoxiaoNeural  --rate=+10% --text "{title}" --write-media {output_wav} 2>&1 >/dev/null'
    print(title)
    _m = os.popen(tts_cmd).read()
    msg.append(_m)


# record: url title audio_file imgs[ks_sj, bm_sj]__file, movie_file_name
# for it in task_docs:
records_all = []
for it in df.itertuples():    # all doc_item url content
    # title = it["title"]
    title = it[2]
    new_title = title.replace('\n', "").replace('”', "").replace('“', "").replace(' ', "")
    output_wav = f"audio_output/{new_title}.wav"
    audio_file = AudioFileClip(output_wav)
    movie_file = f"{movie_dir}/{new_title}.mp4"
    imgs = []
    img_files = []
    image_files = []
    title = it[2]
    new_title = title.replace('\n', "").replace('”', "").replace('“', "").replace(' ', "")
    for k,v in key_index.items():
        lines = it[v]
        url_ = it[1]
        if len(lines) < 1:
            continue
        lines = lines.split("\n")
        filename = f"{k}_{new_title}.png"
        filename = os.path.join(imge_dir, filename)
        img_files.append(filename)
        # --- how long a image last display
        for i in range(image_dur):   
            image_files.append(filename)
        img = generatePost(lines=lines,front_img = front_img, bac_img = bac_img, fn_name = filename)
        imgs.append(img)
    # clip_img = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(img_files, fps=fps) #durations=audio_file.duration ) #
    if len(img_files) < 1:
        print("error, this url not get a valid key info:{new_title},url:{url_}")
        continue
    clip_img = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps=fps, durations=audio_file.duration ) #
    clip_img = clip_img.set_audio(audio_file)
    clip_img.write_videofile(movie_file, fps=fps)#, audio_codec="aac")
    print(movie_file, ":done")
    rec_ = [new_title, output_wav, movie_file]
    rec_.append(img_files)
    records_all.append(rec_)