最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)vlog生成器的示例代碼

 更新時間:2023年01月29日 08:46:04   作者:虛壞叔叔  
vlog,全稱為Video?blog,意為影音博客,也有翻譯為微錄。本文將嘗試用Python基于Moviepy從一個文本文件中自動生成一個視頻格式的vlog,感興趣的可以了解一下

Python實現(xiàn)vlog生成器

vlog,全稱為Video blog,意為影音博客,也有翻譯為微錄。

本文將嘗試用Python基于Moviepy從一個文本文件中自動生成一個視頻格式的vlog,實現(xiàn)的功能如下:

  • 將文件的第一行標(biāo)題生成視頻的片頭
  • 將文件中圖片和文字轉(zhuǎn)成視頻并生成音頻和字幕
  • 將文件中視頻片段或gif拼接到視頻中
  • 自動添加一個片尾

效果如下:

1. 文本格式

平時習(xí)慣用markdown進行寫作,所以這里也選擇markdown作為文本格式。定義格式如下:

  • 第一行為視頻的標(biāo)題
  • 從第二行開始是視頻的內(nèi)容
  • 視頻內(nèi)容分兩種格式,一種圖片加文字,一種視頻或gif。第一種是一張圖片后面加一行文字說明,視頻或gif沒有文字說明

接下來按上面的格式實現(xiàn)代碼。

2. 內(nèi)容解析

第一步是將markdown解析成Python的一個字典對象。字典對象包括*標(biāo)題(title)和內(nèi)容(content)*兩部分。標(biāo)題是一個文本值,內(nèi)容是一個列表,包括一些圖片加文字或視頻片段。

解析過程如下:

2.1 讀取文件,將第一行去除不需要的字符作為標(biāo)題;

2.2 遍歷文件,提取文件后綴,根據(jù)文件后綴判斷是否是視頻還是圖片,如果是圖片就將下一行作為解說文字;

2.3 不斷解析直至文件結(jié)束。

代碼如下:

def parse(filename):
    result = {
        "title": "",
        "content": []
    }
    with open(filename) as f:
        lines = f.readlines()
    title = lines[0].strip('#').strip()
    result['title'] = title
    content = list(filter(lambda x: x.strip() != '', lines[1:]))
    print(content)
    i = 0
    while i < len(content):
        s = content[i]
        link = s[s.find("(")+1:s.find(")")]
        text = s[s.find("[") + 1:s.find("]")]
        i += 1
        if link.endswith(".mp4") or link.endswith(".gif"):

            result['content'].append({
                'link': link,
                'text': text,
                'type': 'video'
            })
        else:
            subtitle = content[i].strip()
            i += 1
            result['content'].append({
                'link': link,
                'text': text,
                'subtitle': subtitle,
                'type': 'image'
            })
    return result

3. 生成片頭

解析完成后開始根據(jù)內(nèi)容生成視頻,先用標(biāo)題生成片頭并添加動態(tài)效果,代碼如下:

def generate_title(title):
    print(f"title: {title}")
    
    def cascade(screenpos, i):
        v = np.array([0, -1])
        d = lambda t: 1 if t < 0 else abs(np.sinc(t) / (1 + t ** 4))
        return lambda t: screenpos + v * 400 * d(t - 0.15 * i)

    def move_letters(letters, funcpos):
        return [letter.set_pos(funcpos(letter.screenpos, i))
                for i, letter in enumerate(letters)]

    size = (1280, 720)
    title_clip = TextClip(title, color=config.TITLE['color'],
                          font=config.TITLE['font'], kerning=5,
                          fontsize=config.TITLE['font-size'])
    cvc = CompositeVideoClip([title_clip.set_pos('center')], size=size)
    letters = findObjects(cvc)
    clip = CompositeVideoClip(move_letters(letters, cascade), size=size).subclip(0, 5)
    return clip

4.視頻片段生成

片頭之后是內(nèi)容片段的生成,內(nèi)容片段如果是視頻直接讀取即可,如果是圖片需要將圖片配上語音并添加字幕,代碼如下:

def generate_clip_with_subtitle(image_path, text):
    print(f"clip text: {text}")
    clip = ImageClip(image_path)
    audio = AudioFileClip(text2wav(text))
    txt_clip = TextClip(text.replace(" ", ""), font=config.SUBTITLE['font'],
                        color=config.SUBTITLE['color'], fontsize=config.SUBTITLE['font-size'])
    vtuber_clip = get_vtuber(audio.duration)
    video = CompositeVideoClip([clip, txt_clip.set_pos(('center', 'bottom')),
                                vtuber_clip.set_pos(('right', 'bottom'))])
    video.audio = audio
    video.duration = audio.duration
    return video

5.生成片尾

內(nèi)容片段生成完成后,再添加一個簡單的片尾,這里添一個加文字片尾,代碼如下:

def generate_ending(text="聽說點贊帶來好運"):
    print(f"ending: {text}")
    size = (1280, 720)
    title_clip = TextClip(text, color=config.ENDING['color'], font=config.ENDING['font'],
                          kerning=5, fontsize=config.ENDING['font-size'])
    clip = CompositeVideoClip([title_clip.set_pos('center')], size=size)
    clip.duration = 1
    return clip

6.完整視頻合成

最后就是整合上面的代碼,并將上面生成視頻片段合并成一個完整的視頻,代碼如下:

def generate_vlog(filename, output_path):
    clips = []
    result = parser.parse(filename)
    title_clip = generate_title(result['title'])
    clips.append(title_clip)
    for item in result['content']:
        if item['text']:
            clips.append(generate_text_clip(item['text']))
        if item['type'] == 'image':
            clips.append(generate_clip_with_subtitle(item['link'], item['subtitle']))
        elif item['type'] == 'video':
            clips.append(load_video(item['link']))
    clips.append(generate_ending())
    video = concatenate_videoclips(clips, method="compose")
    video.write_videofile(output_path, fps=24, audio_codec="aac")

以上就是Python實現(xiàn)vlog生成器的示例代碼的詳細內(nèi)容,更多關(guān)于Python vlog生成器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python實現(xiàn)簡單成績錄入系統(tǒng)

    python實現(xiàn)簡單成績錄入系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單成績錄入系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Python中hashlib模塊的摘要算法詳解

    Python中hashlib模塊的摘要算法詳解

    這篇文章主要介紹了Python中hashlib模塊的摘要算法詳解,摘要算法又稱哈希算法、散列算法,它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串,通常用16進制的字符串表示,需要的朋友可以參考下
    2023-08-08
  • Python實現(xiàn)SVN的目錄周期性備份實例

    Python實現(xiàn)SVN的目錄周期性備份實例

    這篇文章主要介紹了Python實現(xiàn)SVN的目錄周期性備份,實例分析了Python實現(xiàn)SVN周期性備份的原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Python中的struct.unpack示例詳解

    Python中的struct.unpack示例詳解

    在Python中,struct.unpack是一個函數(shù),用于將字節(jié)串轉(zhuǎn)換為元組,這個函數(shù)在處理二進制數(shù)據(jù)時非常有用,這篇文章主要介紹了Python中的struct.unpack示例詳解,需要的朋友可以參考下
    2023-12-12
  • Python 繪制可視化折線圖

    Python 繪制可視化折線圖

    這篇文章主要介紹了Python 繪制可視化折線圖的方法,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python線程指南分享

    Python線程指南分享

    今天小編就為大家?guī)鞵ython線程指南分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • YOLOv5以txt或json格式輸出預(yù)測結(jié)果的方法詳解

    YOLOv5以txt或json格式輸出預(yù)測結(jié)果的方法詳解

    這篇文章主要給大家介紹了關(guān)于YOLOv5以txt或json格式輸出預(yù)測結(jié)果的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問題

    jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問題

    這篇文章主要介紹了jupyter關(guān)于pandas的dataframe行列顯示不全與復(fù)原問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python畫微信表情符的實例代碼

    python畫微信表情符的實例代碼

    這篇文章主要介紹了python畫微信表情的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 淺析Python 3 字符串中的 STR 和 Bytes 有什么區(qū)別

    淺析Python 3 字符串中的 STR 和 Bytes 有什么區(qū)別

    Python2的str相當(dāng)于Python3的Bytes,而Unicode相當(dāng)于Python3的Bytes。這篇文章主要介紹了Python 3 字符串中的 STR 和 Bytes 究竟有什么區(qū)別?需要的朋友可以參考下
    2018-10-10

最新評論

河北区| 芜湖县| 顺义区| 龙州县| 常宁市| 西畴县| 余姚市| 沂南县| 吉首市| 怀集县| 遵义县| 栾川县| 平泉县| 阆中市| 龙南县| 达拉特旗| 都安| 会东县| 大冶市| 尼勒克县| 武定县| 上思县| 潮安县| 海门市| 汉沽区| 湖州市| 佛坪县| 手机| 绥中县| 南宁市| 芦山县| 社会| 福州市| 鲁山县| 彰化县| 莱芜市| 克东县| 威信县| 井研县| 名山县| 汨罗市|