中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用python做個代碼版的蹦迪視頻

發布時間:2021-08-27 11:16:16 來源:億速云 閱讀:188 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何使用python做個代碼版的蹦迪視頻”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何使用python做個代碼版的蹦迪視頻”這篇文章吧。

一、核心功能設計

總體來說,我們需要分為以下幾步完成:

從B站上把小姐姐的視頻下載下來

對視頻進行截取GIF,把截取的GIF進行ASCII字符轉換

把轉換的字符gif根據每一幀的順序重命名排序

將排序后的幀gif轉換為圖片

將字符圖片合并成視頻

視頻添加背景音樂

二、實現步驟

1. 下載視頻

首先我們需要準備工作,安裝you-get用來下載視頻。

pip install you-get

如何使用python做個代碼版的蹦迪視頻

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

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

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

如何使用python做個代碼版的蹦迪視頻

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

如何使用python做個代碼版的蹦迪視頻

2. 截取GIF并轉換成ASCII字符

接下來我們要將下載的視頻進行GIF截取,方法也比較多,用python也可以實現。

因為后面需要把GIF轉成ASCII字符,截取的GIF時長盡量不能太長,所以這里就介紹通過迅雷播放器自帶的gif截取工具,每次截取20s。

如何使用python做個代碼版的蹦迪視頻

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

如何使用python做個代碼版的蹦迪視頻
如何使用python做個代碼版的蹦迪視頻

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

如何使用python做個代碼版的蹦迪視頻

我們可以在目錄文件下找到temp文件,里面就是存儲的每個gif中每一幀轉換的ASCII的gif。下面我們就是需要處理這些ASCII的gif,可以將文件夾拷貝到python項目下面。

如何使用python做個代碼版的蹦迪視頻

3. GIF重命名

老規矩,最開始我們把后面要用到的庫全部導入。

import os
import re
import shutil
import cv2
from PIL import Image
import moviepy.editor as mpy

所有轉換成功的ASCII的gif已經拿到了,為了后面我們將圖片合并成視頻,接下來我們就要把這些gif進行排序。

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

def rename_gif():
    file_list = os.listdir("./temp")  # 讀取當前文件夾所有文件
    # print(file_list)
    print("檢測到文件夾下圖片:")
    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')  # 根據自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆蓋原先的名字
    num_list.append(num1)
    num_list.append(num2)
    file_list = os.listdir("./temp")  # 讀取當前文件夾所有文件
    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')  # 根據自己的需要重新命名
            os.rename(src, dst)  # 重命名,覆蓋原先的名字

gif重命名之后,所有的gif都已經按照每一幀的順序排好了。后面我們合成視頻的時候,只要根據圖片的名稱來進行合并添加就可以了。

如何使用python做個代碼版的蹦迪視頻

4. gif轉換為圖片jpg

接下來,我們要把按幀順序排列的gif轉換成jpg圖片。

def gif2img(gif_path):
    gifs = os.listdir(gif_path)
    gifs.sort(key=lambda x: int(x[:-4]))  # 以名稱字符串的數字從小到大排序
    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格式

如何使用python做個代碼版的蹦迪視頻

5. 合成代碼舞視頻

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

pip install opencv-python

我們可以將圖片文件夾的路徑傳入參數,還可以通過fps設置每秒多少張圖片。

def charts2video(img_path, video_path):
    """將給定目錄下的圖片轉成視頻
    Args:
        img_path: 圖片路徑
        video_path: 輸出視頻的路徑和名稱

    Returns: 圖片轉成的視頻
    """
    images = os.listdir(img_path)
    images.sort(key=lambda x: int(x[:-4]))  # 以名稱字符串的數字從小到大排序  
    fps = 12  # 幀數
    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)  # 注意:圖片尺寸必須和視頻尺寸一樣,不然不會被加入視頻中!!!
    video_writer.release()

如何使用python做個代碼版的蹦迪視頻

6. 添加背景音樂

代碼舞已經完成了,最后一步就是把視頻中的背景音樂添加到代碼舞中。我們使用的是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')

以上是“如何使用python做個代碼版的蹦迪視頻”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安远县| 澄迈县| 哈尔滨市| 涟源市| 上饶市| 乐亭县| 阳西县| 济宁市| 衡南县| 铜梁县| 双流县| 九江县| 靖州| 遂平县| 肥乡县| 天水市| 马关县| 绍兴市| 建始县| 酉阳| 迁安市| 青田县| 仁化县| 景谷| 芜湖市| 杨浦区| 布拖县| 师宗县| 甘谷县| 桂平市| 彭泽县| 邮箱| 灵武市| 黄陵县| 灌阳县| 夏邑县| 禹城市| 汤原县| 阿合奇县| 江安县| 莆田市|