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

使用Python制作讀單詞視頻的實(shí)現(xiàn)代碼

 更新時(shí)間:2024年04月18日 08:33:34   作者:iioSnail  
我們經(jīng)常在B站或其他視頻網(wǎng)站上看到那種逐條讀單詞的視頻,但他們的視頻多多少少和我們的預(yù)期都不太一致,然而,網(wǎng)上很難找到和自己需求符合的視頻,所以本文給大家介紹了使用Python制作讀單詞視頻的實(shí)現(xiàn),需要的朋友可以參考下

1. 項(xiàng)目簡(jiǎn)介

我們經(jīng)常在B站或其他視頻網(wǎng)站上看到那種逐條讀單詞的視頻,但他們的視頻多多少少和我們的預(yù)期都不太一致。

然而,網(wǎng)上很難找到和自己需求符合的視頻。既然找不到,那么我們就自己制作。雖然我不知道他們的視頻是怎么做的,但我們程序員可以用Python做。

2. 項(xiàng)目使用

2.1 功能介紹

本項(xiàng)目可以很方便的生成讀任何中、英文的視頻(若有需要也可以加入其他語(yǔ)言)。用戶(hù)只需要上傳excel,配置相應(yīng)參數(shù)即可。

項(xiàng)目支持的詳細(xì)參數(shù)如下:

>> python gene_video.py -h
usage: gene_video.py [-h] [--filename FILENAME] [--repeat-times REPEAT_TIMES] [--interval INTERVAL] [--inner-interval INNER_INTERVAL] [--max-minutes MAX_MINUTES] [--video] [--no-video] [--background-color BACKGROUND_COLOR]
                     [--font-color FONT_COLOR] [--video-width VIDEO_WIDTH] [--video-height VIDEO_HEIGHT] [--max-font-size MAX_FONT_SIZE] [--cache-dir CACHE_DIR] [--output-dir OUTPUT_DIR]

optional arguments:
  -h, --help            show this help message and exit
  --filename FILENAME   單詞文件的路徑
  --repeat-times REPEAT_TIMES
                        重復(fù)次數(shù)
  --interval INTERVAL   兩個(gè)單詞的間隔時(shí)間(ms)
  --inner-interval INNER_INTERVAL
                        單詞和釋義的間隔時(shí)間(ms)
  --max-minutes MAX_MINUTES
                        單個(gè)音頻最大時(shí)長(zhǎng)(分鐘)
  --video               生成視頻
  --no-video            不生成視頻
  --add-volume          加減音量(分貝)。例如:10是音量加10分貝,-10是減10分貝
  --low-pass-filter     過(guò)濾高音部分(護(hù)耳)。例如:8000表示過(guò)濾掉頻率超過(guò)8k的頻率
  --background-color BACKGROUND_COLOR
                        視頻背景色
  --font-color FONT_COLOR
                        文字顏色
  --video-width VIDEO_WIDTH
                        視頻寬
  --video-height VIDEO_HEIGHT
                        視頻高
  --max-font-size MAX_FONT_SIZE
                        最大字體大小
  --cache-dir CACHE_DIR
                        生成的臨時(shí)文件存放的目錄
  --output-dir OUTPUT_DIR
                        輸出文件的目錄

假設(shè)我們的需求為:① 讀一遍中文、讀一遍英文。② 屏幕上要顯示例句,但不讀。③ 每個(gè)單詞重復(fù)兩遍。

假設(shè)我們需要生成讀“單詞+例句”的視頻,我們需要遵循以下步驟:

  • 準(zhǔn)備好我們的單詞excel(或csv),例如:
單詞中文例句例句釋義
morning早上Good morning.早上好!
  • 配置好環(huán)境(怕麻煩或不會(huì)弄可以參考2.2節(jié)使用Colab生成視頻),安裝相關(guān)依賴(lài)。
pip install -r requirements.txt
  • 安裝ffmpeg,代碼的部分庫(kù)需要依賴(lài)它。

  • 執(zhí)行命令,生成視頻。

python gene_video.py --filename ./samples/xxx.xlsx \
					 --read-columns  單詞,中文 \
					 --show-columns  單詞,中文,例句,例句釋義 \
					 --repeat-times 2

2.2 使用Colab生成視頻

相比本地部署,我推薦使用Colab進(jìn)行視頻生成。

Colab是一個(gè)Google的AI訓(xùn)練平臺(tái),提供Python運(yùn)行環(huán)境。在不使用GPU的情況下,基本上可以免費(fèi)無(wú)限使用。

主要理由有:

  • 本地部署麻煩,使用Colab可以免部署
  • 使用Colab可以?huà)燧dGoogle Drive,方便保存視頻。
  • 項(xiàng)目需要用到Google Translation進(jìn)行文本轉(zhuǎn)語(yǔ)音,本地部署可能訪(fǎng)問(wèn)不了。

使用Colab只需要訪(fǎng)問(wèn)該鏈接,然后更改你需要的參數(shù),運(yùn)行即可。

需要想辦法上Google。網(wǎng)絡(luò)也要穩(wěn)定,中間如果斷網(wǎng)較長(zhǎng)時(shí)間,則生成會(huì)被終止。

3. 項(xiàng)目原理介紹

本項(xiàng)目生成視頻的流程如下:

讀取Excel

生成圖片

生成視頻

文本轉(zhuǎn)語(yǔ)音

生成音頻

合成視頻與音頻

該流程中,主要用到了以下庫(kù):

  • pandas:用于讀取Excel、CSV等
  • PIL:內(nèi)置庫(kù),用于生成圖片
  • pydub:用于處理音頻
  • cv2:用于生成視頻
  • moviepy:用于處理視頻

讀取文件關(guān)鍵代碼:

import pandas as pd

# 使用pandas讀取excel文件
if self.args.filename.endswith(".xlsx") or "".endswith(".xls"):
    data = pd.read_excel(self.args.filename, dtype=str)
elif self.args.filename.endswith(".csv"):
    data = pd.read_csv(self.args.filename, dtype=str)

# 逐行遍歷,將需要用到的數(shù)據(jù)放入data_list
data_list = []
for i, row in data.iterrows():
	...

生成圖片關(guān)鍵代碼:

from PIL import Image, ImageDraw, ImageFont

font_file = "./assets/font.TTF"  # 加載字體文件
font_size = self._auto_font_size(text, font_file)  # 自動(dòng)嘗試合適的字體大小,詳見(jiàn)源碼
font = ImageFont.truetype(font_file, font_size)

width, height = self.args.video_width, self.args.video_height
line_spacing = 50  # 行間距
image = Image.new("RGB", (width, height), self.args.background_color)  # 新建圖片
draw = ImageDraw.Draw(image)  # 繪制圖片

# 定義一個(gè)繪制多行文本的box框
bbox = draw.multiline_textbbox((0, 0, width, height), text, font=font)

# 第一行文本的y坐標(biāo)
text_y = (height - bbox[3]) // len(lines)

# 逐行繪制文字
lines = text.split('\n')
for line in lines:
    line_bbox = draw.textbbox((0, 0, width, height), line, font)
    line_width, line_height = line_bbox[2], line_bbox[3]
    draw.text(((width - line_width) // 2, text_y), line, font=font, fill=self.args.font_color)
    text_y += line_height + line_spacing  # Move to the next line

image.save(cache_file)

生成視頻的關(guān)鍵代碼:

frame_size = 10  # 每秒10幀
width = 1920  # 視頻尺寸為1920x1080
height = 1080
video = cv2.VideoWriter(str(video_file), cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), frame_size, (width, height))

frame = int(duration / 1000 * frame_size)  # 計(jì)算對(duì)某張圖片要寫(xiě)入的幀數(shù)

image = cv2.imread(str(image))
for _ in range(frame):
    video.write(image)

video.release()

文本轉(zhuǎn)語(yǔ)音關(guān)鍵代碼:

from gtts import gTTS

def has_chinese(content: str):
    for char in content:
        if '\u4e00' <= char <= '\u9fff':
            return True

    return False


content = "hello"  # 要讀的內(nèi)容
if has_chinese(content):  # 判斷內(nèi)容內(nèi)容中是否包含中文
    lang = 'zh'
else:
    lang = 'en'

tts = gTTS(content, lang=lang, tld='us')  # tld為地區(qū),即用哪個(gè)地區(qū)的口音(默認(rèn)用us)
tts.save("XXX.mp3")  # 保存的路徑

將若干單詞音頻合成音頻,并調(diào)節(jié)相關(guān)參數(shù):

from pydub import AudioSegment

# 加載音頻
audio = AudioSegment.from_mp3("XXX.mp3")
# 在該單詞的音頻前后各增加100ms的漸進(jìn)
audio = audio.fade_in(100).fade_out(100)
# 增加一段無(wú)聲的間隔,用于插入兩個(gè)單詞之間
interval = AudioSegment.silent(duration=500, frame_rate=audio.frame_rate)
# XXX.mp3讀兩遍,中間增加500ms的無(wú)聲音頻
audio = audio + interval + audio
# 過(guò)濾掉3000hz以上的高頻部分,這樣耳朵聽(tīng)起來(lái)舒服一些
audio = audio.low_pass_filter(3000)
# 導(dǎo)出wav格式
audio.export(str("output.wav"), format("wav"))

將視頻和音頻和起來(lái)的關(guān)鍵代碼:

from moviepy.editor import VideoFileClip, AudioFileClip

video = VideoFileClip(video)  # 加載視頻
audio = AudioFileClip(audio)  # 加載音頻
video = video.set_audio(audio)  # 設(shè)置視頻的音頻
# 輸出文件
video.write_videofile(str(output_path), fps=10, threads=cpu_count(), logger=None)
video.close()

以上就是使用Python制作讀單詞視頻的實(shí)現(xiàn)代碼的詳細(xì)內(nèi)容,更多關(guān)于Python讀單詞視頻的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • windows 10下安裝搭建django1.10.3和Apache2.4的方法

    windows 10下安裝搭建django1.10.3和Apache2.4的方法

    最近發(fā)現(xiàn)很多教程都是在linux上搭建,windows上似乎天生不太適合,但是我還是愿意試試這個(gè)坑。下面這篇文章主要給大家介紹了在windows 10系統(tǒng)下安裝搭建django1.10.3和Apache2.4的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-04-04
  • python實(shí)現(xiàn)字符串完美拆分split()的方法

    python實(shí)現(xiàn)字符串完美拆分split()的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)字符串完美拆分split()的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python語(yǔ)法糖for?else循環(huán)語(yǔ)句里的break使用詳解

    Python語(yǔ)法糖for?else循環(huán)語(yǔ)句里的break使用詳解

    這篇文章主要介紹了Python語(yǔ)法糖之for?else循環(huán)語(yǔ)句里的break使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Python類(lèi)方法@classmethod()的具體使用

    Python類(lèi)方法@classmethod()的具體使用

    @classmethod 是一個(gè)函數(shù)修飾符,它表示接下來(lái)的是一個(gè)類(lèi)方法,而對(duì)于平常我們見(jiàn)到的則叫做實(shí)例方法,本文主要介紹了Python類(lèi)方法@classmethod()的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • python動(dòng)態(tài)網(wǎng)站爬蟲(chóng)實(shí)戰(zhàn)(requests+xpath+demjson+redis)

    python動(dòng)態(tài)網(wǎng)站爬蟲(chóng)實(shí)戰(zhàn)(requests+xpath+demjson+redis)

    本文主要介紹了python動(dòng)態(tài)網(wǎng)站爬蟲(chóng)實(shí)戰(zhàn)(requests+xpath+demjson+redis),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python多線(xiàn)程對(duì)多核cpu的利用解析

    python多線(xiàn)程對(duì)多核cpu的利用解析

    這篇文章主要為大家介紹了python多線(xiàn)程對(duì)多核cpu的利用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • python 判斷字符串是否為空的多種方法

    python 判斷字符串是否為空的多種方法

    這篇文章主要介紹了python 如何判斷字符是否為空,通過(guò)本文的介紹,我們學(xué)習(xí)了三種判斷字符串是否為空的方法,并給出了相應(yīng)的代碼示例,需要的朋友可以參考下
    2024-06-06
  • Python進(jìn)行word模板內(nèi)容替換的實(shí)現(xiàn)示例

    Python進(jìn)行word模板內(nèi)容替換的實(shí)現(xiàn)示例

    本文介紹了使用Python自動(dòng)化處理Word模板文檔的常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • python3.6使用urllib完成下載的實(shí)例

    python3.6使用urllib完成下載的實(shí)例

    今天小編就為大家分享一篇python3.6使用urllib完成下載的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 使用python請(qǐng)求接口方式(可進(jìn)行并發(fā)測(cè)試)

    使用python請(qǐng)求接口方式(可進(jìn)行并發(fā)測(cè)試)

    這篇文章主要介紹了使用python請(qǐng)求接口方式(可進(jìn)行并發(fā)測(cè)試),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評(píng)論

利川市| 平原县| 京山县| 屏边| 英山县| 阿克陶县| 衡阳市| 工布江达县| 财经| 信宜市| 文安县| 北安市| 乐山市| 监利县| 噶尔县| 邵东县| 三明市| 南乐县| 达州市| 龙江县| 方正县| 白河县| 监利县| 屏东县| 中山市| 迭部县| 南部县| 邮箱| 佛山市| 元朗区| 清镇市| 乌鲁木齐市| 嵊泗县| 洪雅县| 乐都县| 榆社县| 建宁县| 盐城市| 卢氏县| 绍兴县| 卓资县|