<p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 用 Python 做個(gè)小姐姐代碼蹦迪視頻

    共 4321字,需瀏覽 9分鐘

     ·

    2021-08-05 17:33

    前言

    最近在B站上看到一個(gè)漂亮的仙女姐姐跳舞視頻,循環(huán)看了億遍又億遍,久久不能離開!

    看著仙紫小姐姐的蹦迪視頻,除了一鍵三連還能做什么?突發(fā)奇想,能不能把小仙女的蹦迪視頻轉(zhuǎn)成代碼舞呢?

    說(shuō)干就干,今天就手把手教大家如何把跳舞視頻轉(zhuǎn)成代碼舞,跟著仙女姐姐一起蹦起來(lái)~

    視頻來(lái)源:


    一、核心功能設(shè)計(jì)

    總體來(lái)說(shuō),我們需要分為以下幾步完成:

    1. 從B站上把小姐姐的視頻下載下來(lái)

    2. 對(duì)視頻進(jìn)行截取GIF,把截取的GIF進(jìn)行ASCII字符轉(zhuǎn)換

    3. 把轉(zhuǎn)換的字符gif根據(jù)每一幀的順序重命名排序

    4. 將排序后的幀gif轉(zhuǎn)換為圖片

    5. 將字符圖片合并成視頻

    6. 視頻添加背景音樂

    二、實(shí)現(xiàn)步驟

    1. 下載視頻

    首先我們需要準(zhǔn)備工作,安裝you-get用來(lái)下載視頻。


    pip install you-get



    安裝完成后,通過you-get將視頻下載到本地。

    仙女姐姐蹦迪視頻鏈接:https://www.bilibili.com/video/BV124411Q7iV


    you-get -o 本地保存路徑 視頻鏈接 


    這樣我們就把視頻成功下載到本地了。

    2. 截取GIF并轉(zhuǎn)換成ASCII字符

    接下來(lái)我們要將下載的視頻進(jìn)行GIF截取,方法也比較多,用python也可以實(shí)現(xiàn)。

    因?yàn)楹竺嫘枰袵IF轉(zhuǎn)成ASCII字符,截取的GIF時(shí)長(zhǎng)盡量不能太長(zhǎng),所以這里就介紹通過迅雷播放器自帶的gif截取工具,每次截取20s。

    將每段截取出來(lái)之后, 可以按照順序1 2 3將gif命名。


    使用ASCII Animator將截取的GIF每一幀轉(zhuǎn)換成ASCII。我們可以通過設(shè)置每100個(gè)像素寬度的字符數(shù)修改轉(zhuǎn)換的字符密集程度。輸出類型可以選擇動(dòng)畫ASCII(.gif)

    我們可以在目錄文件下找到temp文件,里面就是存儲(chǔ)的每個(gè)gif中每一幀轉(zhuǎn)換的ASCII的gif。下面我們就是需要處理這些ASCII的gif,可以將文件夾拷貝到python項(xiàng)目下面。

    3. GIF重命名

    老規(guī)矩,最開始我們把后面要用到的庫(kù)全部導(dǎo)入。


    import osimport reimport shutilimport cv2from PIL import Imageimport moviepy.editor as mpy


    所有轉(zhuǎn)換成功的ASCII的gif已經(jīng)拿到了,為了后面我們將圖片合并成視頻,接下來(lái)我們就要把這些gif進(jìn)行排序。

    我們先從temp文件夾中讀取,篩選出所有后綴名是 .gif 的,然后根據(jù)命名規(guī)則,將這些gif重命名,方便后面排序。


    def rename_gif():    file_list = os.listdir("./temp")  # 讀取當(dāng)前文件夾所有文件    # print(file_list)    print("檢測(cè)到文件夾下圖片:")    n = len(file_list)    num_list = []    num1 = num2 = 0    for i in range(n):        s = str(file_list[i])        if s[-4:] == ".gif":  # 檢查后綴            res = re.findall(r"\d+", s)            if res[0] == '1':                num1 += 1            if res[0] == '2':                num2 += 1            src = os.path.join(os.path.abspath('./temp/'), s)  # 原先的圖片名字            dst = os.path.join(os.path.abspath('./temp/'), res[0] + '-' + res[1]+'.gif')  # 根據(jù)自己的需要重新命名            os.rename(src, dst)  # 重命名,覆蓋原先的名字    num_list.append(num1)    num_list.append(num2)    file_list = os.listdir("./temp")  # 讀取當(dāng)前文件夾所有文件    for i in range(n):        s = str(file_list[i])        if s[-4:] == ".gif":  # 檢查后綴            res = re.findall(r"\d+", s)            src = os.path.join(os.path.abspath('./temp/'), s)  # 原先的圖片名字            a = int(res[0])-1            index = a*num_list[a-1]            dst = os.path.join(os.path.abspath('./temp/'), str(index + int(res[1])) + '.gif')  # 根據(jù)自己的需要重新命名            os.rename(src, dst)  # 重命名,覆蓋原先的名字


    gif重命名之后,所有的gif都已經(jīng)按照每一幀的順序排好了。后面我們合成視頻的時(shí)候,只要根據(jù)圖片的名稱來(lái)進(jìn)行合并添加就可以了。

    4. gif轉(zhuǎn)換為圖片jpg

    接下來(lái),我們要把按幀順序排列的gif轉(zhuǎn)換成jpg圖片


    def gif2img(gif_path):    gifs = os.listdir(gif_path)    gifs.sort(key=lambda x: int(x[:-4]))  # 以名稱字符串的數(shù)字從小到大排序    for gif in gifs:        im = Image.open(gif_path+gif)  # 打開gif格式的圖片        im = im.convert('RGB')        if not os.path.exists('./img'):            os.makedirs('./img')        for i, frame in enumerate(iter_frames(im)):            frame.save('./img/' + gif[0:-4] + '.jpg', **frame.info)  # 保存成jpg格式


    5. 合成代碼舞視頻

    圖片合成視頻,這里我們使用python-openvc模塊實(shí)現(xiàn),同樣如果之前沒有安裝的小伙伴,需要先安裝下。


    pip install opencv-python


    我們可以將圖片文件夾的路徑傳入?yún)?shù),還可以通過fps設(shè)置每秒多少?gòu)垐D片


    def charts2video(img_path, video_path):    """將給定目錄下的圖片轉(zhuǎn)成視頻    Args:        img_path: 圖片路徑        video_path: 輸出視頻的路徑和名稱
    Returns: 圖片轉(zhuǎn)成的視頻 """ images = os.listdir(img_path) images.sort(key=lambda x: int(x[:-4])) # 以名稱字符串的數(shù)字從小到大排序   fps = 12 # 幀數(shù) fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V') im = Image.open(img_path + images[0]) video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size) for img_i in images: frame = cv2.imread(img_path + img_i) print('開始將 ' + img_i + ' 加入視頻\n') video_writer.write(frame) # 注意:圖片尺寸必須和視頻尺寸一樣,不然不會(huì)被加入視頻中!!!    video_writer.release()


    6. 添加背景音樂

    代碼舞已經(jīng)完成了,最后一步就是把視頻中的背景音樂添加到代碼舞中。我們使用的是moviepy 模塊,截取原視頻的背景音樂并保存,最后再將代碼舞視頻中插入音頻保存。

    def add_music():    # 讀取代碼視頻    my_clip = mpy.VideoFileClip('asc.mp4')    # 截取背景音樂    audio_background = mpy.AudioFileClip('dance.mp4').subclip(0, 60)    audio_background.write_audiofile('bk.mp3')    # 視頻中插入音頻    final_clip = my_clip.set_audio(audio_background)    # 保存最終視頻    final_clip.write_videofile('char_video.mp4')

    至此,小仙女跳舞視頻轉(zhuǎn)成代碼舞就完成啦~

    (完)


    本文鏈接:

    https://blog.csdn.net/hhladminhhl/article/details/118463344

    瀏覽 35
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    <p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • www.黄色片 | www噜噜偷拍在线视频 | 青娱乐国产盛宴 | 黄免费视频网站 | 爱搞搞就搞搞爱 | 久久精品无码一区二区无码性色 | 夜间福利视频无码在线 | 人人爱天天摸 | 翔田千里三级片 | 日韩美女邪恶啪啪啪网站 |