欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊



    碼舞

    源代碼:

    video_2_code_video.py

    私信小編01即可獲取大量python學習資源

      1 import argparse
      2 import os
      3 import cv2
      4 import subprocess
      5 from cv2 import VideoWriter_fourcc
      6 from PIL import Image, ImageFont, ImageDraw
      7 
      8 # 命令行輸入參數處理
      9 # aparser=argparse.ArgumentParser()
     10 # aparser.add_argument('file')
     11 # aparser.add_argument('-o','--output')
     12 # aparser.add_argument('-f','--fps',type=float, default=24)#幀
     13 # aparser.add_argument('-s','--save',type=bool, nargs='?', default=False, const=True)
     14 # 是否保留Cache文件,默認不保存
     15 
     16 class Video2CodeVideo:
     17     def __init__(self):
     18         self.config_dict={
     19             # 原視頻文件
     20             "input_file": "video/test.mp4",
     21             # 中間文件存放目錄
     22             "cache_dir": "cache",
     23             # 是否保留過程文件。True--保留,False--不保留
     24             "save_cache_flag": False,
     25             # 使用使用的字符集
     26             "ascii_char_list": list("01B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:oa+>!:+. "),
     27         }
     28 
     29     # 第一步從函數,將像素轉換為字符
     30     # 調用棧:video_2_txt_jpg -> txt_2_image -> rgb_2_char
     31     def rgb_2_char(self, r, g, b, alpha=256):
     32         if alpha==0:
     33             return ''
     34         length=len(self.config_dict["ascii_char_list"])
     35         gray=int(0.2126 * r + 0.7152 * g + 0.0722 * b)
     36         unit=(256.0 + 1) / length
     37         return self.config_dict["ascii_char_list"][int(gray / unit)]
     38 
     39     # 第一步從函數,將txt轉換為圖片
     40     # 調用棧:video_2_txt_jpg -> txt_2_image -> rgb_2_char
     41     def txt_2_image(self, file_name):
     42         im=Image.open(file_name).convert('RGB')
     43         # gif拆分后的圖像,需要轉換,否則報錯,由于gif分割后保存的是索引顏色
     44         raw_width=im.width
     45         raw_height=im.height
     46         width=int(raw_width / 6)
     47         height=int(raw_height / 15)
     48         im=im.resize((width, height), Image.NEAREST)
     49 
     50         txt=""
     51         colors=[]
     52         for i in range(height):
     53             for j in range(width):
     54                 pixel=im.getpixel((j, i))
     55                 colors.append((pixel[0], pixel[1], pixel[2]))
     56                 if (len(pixel)==4):
     57                     txt +=self.rgb_2_char(pixel[0], pixel[1], pixel[2], pixel[3])
     58                 else:
     59                     txt +=self.rgb_2_char(pixel[0], pixel[1], pixel[2])
     60             txt +='\n'
     61             colors.append((255, 255, 255))
     62 
     63         im_txt=Image.new("RGB", (raw_width, raw_height), (255, 255, 255))
     64         dr=ImageDraw.Draw(im_txt)
     65         # font=ImageFont.truetype(os.path.join("fonts","漢儀楷體簡.ttf"),18)
     66         font=ImageFont.load_default().font
     67         x=y=0
     68         # 獲取字體的寬高
     69         font_w, font_h=font.getsize(txt[1])
     70         font_h *=1.37  # 調整后更佳
     71         # ImageDraw為每個ascii碼進行上色
     72         for i in range(len(txt)):
     73             if (txt[i]=='\n'):
     74                 x +=font_h
     75                 y=-font_w
     76             # self, xy, text, fill=None, font=None, anchor=None,
     77             # *args, ** kwargs
     78             dr.text((y, x), txt[i], fill=colors[i])
     79             # dr.text((y, x), txt[i], font=font, fill=colors[i])
     80             y +=font_w
     81 
     82         name=file_name
     83         # print(name + ' changed')
     84         im_txt.save(name)
     85 
     86 
     87     # 第一步,將原視頻轉成字符圖片
     88     # 調用棧:video_2_txt_jpg -> txt_2_image -> rgb_2_char
     89     def video_2_txt_jpg(self, file_name):
     90         vc=cv2.VideoCapture(file_name)
     91         c=1
     92         if vc.isOpened():
     93             r, frame=vc.read()
     94             if not os.path.exists(self.config_dict["cache_dir"]):
     95                 os.mkdir(self.config_dict["cache_dir"])
     96             os.chdir(self.config_dict["cache_dir"])
     97         else:
     98             r=False
     99         while r:
    100             cv2.imwrite(str(c) + '.jpg', frame)
    101             self.txt_2_image(str(c) + '.jpg')  # 同時轉換為ascii圖
    102             r, frame=vc.read()
    103             c +=1
    104         os.chdir('..')
    105         return vc
    106 
    107     # 第二步,將字符圖片合成新視頻
    108     def txt_jpg_2_video(self, outfile_name, fps):
    109         fourcc=VideoWriter_fourcc(*"MJPG")
    110 
    111         images=os.listdir(self.config_dict["cache_dir"])
    112         im=Image.open(self.config_dict["cache_dir"] + '/' + images[0])
    113         vw=cv2.VideoWriter(outfile_name + '.avi', fourcc, fps, im.size)
    114 
    115         os.chdir(self.config_dict["cache_dir"])
    116         for image in range(len(images)):
    117             # Image.open(str(image)+'.jpg').convert("RGB").save(str(image)+'.jpg')
    118             frame=cv2.imread(str(image + 1) + '.jpg')
    119             vw.write(frame)
    120             # print(str(image + 1) + '.jpg' + ' finished')
    121         os.chdir('..')
    122         vw.release()
    123 
    124     # 第三步,從原視頻中提取出背景音樂
    125     def video_extract_mp3(self, file_name):
    126         outfile_name=file_name.split('.')[0] + '.mp3'
    127         subprocess.call('ffmpeg -i ' + file_name + ' -f mp3 -y ' + outfile_name, shell=True)
    128 
    129     # 第四步,將背景音樂添加到新視頻中
    130     def video_add_mp3(self, file_name, mp3_file):
    131         outfile_name=file_name.split('.')[0] + '-txt.mp4'
    132         subprocess.call('ffmpeg -i ' + file_name + ' -i ' + mp3_file + ' -strict -2 -f mp4 -y ' + outfile_name, shell=True)
    133 
    134     # 第五步,如果沒配置保留則清除過程文件
    135     def clean_cache_while_need(self):
    136         # 為了清晰+代碼比較短,直接寫成內部函數
    137         def remove_cache_dir(path):
    138             if os.path.exists(path):
    139                 if os.path.isdir(path):
    140                     dirs=os.listdir(path)
    141                     for d in dirs:
    142                         if os.path.isdir(path + '/' + d):
    143                             remove_cache_dir(path + '/' + d)
    144                         elif os.path.isfile(path + '/' + d):
    145                             os.remove(path + '/' + d)
    146                     os.rmdir(path)
    147                     return
    148                 elif os.path.isfile(path):
    149                     os.remove(path)
    150                 return
    151         # 為了清晰+代碼比較短,直接寫成內部函數
    152         def delete_middle_media_file():
    153             os.remove(self.config_dict["input_file"].split('.')[0] + '.mp3')
    154             os.remove(self.config_dict["input_file"].split('.')[0] + '.avi')
    155         # 如果沒配置保留則清除過程文件
    156         if not self.config_dict["save_cache_flag"]:
    157             remove_cache_dir(self.config_dict["cache_dir"])
    158             delete_middle_media_file()
    159 
    160     # 程序主要邏輯
    161     def main_logic(self):
    162         # 第一步,將原視頻轉成字符圖片
    163         vc=self.video_2_txt_jpg(self.config_dict["input_file"])
    164         # 獲取原視頻幀率
    165         fps=vc.get(cv2.CAP_PROP_FPS)
    166         # print(fps)
    167         vc.release()
    168         # 第二步,將字符圖片合成新視頻
    169         self.txt_jpg_2_video(self.config_dict["input_file"].split('.')[0], fps)
    170         print(self.config_dict["input_file"], self.config_dict["input_file"].split('.')[0] + '.mp3')
    171         # 第三步,從原視頻中提取出背景音樂
    172         self.video_extract_mp3(self.config_dict["input_file"])
    173         # 第四步,將背景音樂添加到新視頻中
    174         self.video_add_mp3(self.config_dict["input_file"].split('.')[0] + '.avi', self.config_dict["input_file"].split('.')[0] + '.mp3')
    175         # 第五步,如果沒配置保留則清除過程文件
    176         self.clean_cache_while_need()
    177 
    178 if __name__=='__main__':
    179     obj=Video2CodeVideo()
    180     obj.main_logic()
    

    運行環境:

    操作系統:win10

    版本:Python 3.8.4

    依賴庫:pip install opencv-python pillow

    管理員權限安裝,我的已安裝過,顯示這樣:

    依賴應用: ffpmeg (下載直接解壓、將bin目錄加到PATH環境變量)

    不下載FFpmeg的話也可運行,但是轉換后的視頻沒有聲音。網上的下載教程比較老了,官網頁面改了。這是我最新下載成功的過程: Windows下載FFmpeg最新版(踩了一上午的坑終于成功)

    小白式運行(大佬請裝瞎):

    將上面的源代碼命名video_2_code_video.py,在同一目錄下新建文件夾video:

    在video中放入要轉換的原視頻,命名test.mp4:

    打開Python3.8

    運行video_2_code_video.py,如下圖顯示表示正在運行:

    會產生一些中間文件諸如:

    經過漫長的等待,終于得償所愿:

    test-txt.mp4就是所要的代碼舞啦:

    如果想學習編程,但是不知道怎么學習,那么,接下來對你有寫幫助。

    開始學習編程,可以選擇經典的語言--C語言。

    為什么開始學習C語言呢?

    先看看C語言有哪些特點吧。

    1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。

    2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便于使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,并具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

    3、代碼級別的跨平臺:由于標準的存在,使得幾乎同樣的C代碼可用于多種操作系統,如Windows、DOS、UNIX等等;也適用于多種機型。C語言對編寫需要進行硬件操作的場合,優于其它高級語言。

    4、使用指針:可以直接進行靠近硬件的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由于這些改進增加語言的復雜度,也為另一部分所詬病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低于C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前三名。

    還有他的特有特點:

    1. C語言是一個有結構化程序設計、具有變量作用域(variable scope)以及遞歸功能的過程式語言。
    2. C語言傳遞參數均是以值傳遞(pass by value),另外也可以傳遞指針(a pointer passed by value)。
    3. 不同的變量類型可以用結構體(struct)組合在一起。
    4. 只有32個保留字(reserved keywords),使變量、函數命名有更多彈性。
    5. 部份的變量類型可以轉換,例如整型和字符型變量。
    6. 通過指針(pointer),C語言可以容易的對存儲器進行低級控制。
    7. 預編譯處理(preprocessor)讓C語言的編譯更具有彈性。

    這就是C語言寫出來的圖形。

    一種語言有優點就會有缺點,C語言的都是哪些呢?

    優點

    1、簡潔緊湊、靈活方便

    C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元。

    2、運算符豐富

    C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

    3、數據類型豐富

    C語言的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。并引入了指針概念,使程序效率更高。

    4、表達方式靈活實用

    C語言提供多種運算符和表達式值的方法,對問題的表達可通過多種途徑獲得,其程序設計更主動、靈活。它語法限制不太嚴格,程序設計自由度大,如對整型量與字符型數據及邏輯型數據可以通用等。

    5、允許直接訪問物理地址,對硬件進行操作

    由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、字節和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟件。

    6、生成目標代碼質量高,程序執行效率高

    C語言描述問題比匯編語言迅速,工作量小、可讀性好,易于調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編程序生成的目標代碼效率低10%~20%。

    7、可移植性好

    C語言在不同機器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便于移植。在一個環境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環境中運行。

    8、表達力強

    C語言有豐富的數據結構和運算符。包含了各種數據結構,如整型、數組類型、指針類型和聯合類型等,用來實現各種數據結構的運算。C語言的運算符有34種,范圍很寬,靈活使用各種運算符可以實現難度極大的運算。

    C語言能直接訪問硬件的物理地址,能進行位(bit)操作。兼有高級語言和低級語言的許多優點。

    它既可用來編寫系統軟件,又可用來開發應用軟件,已成為一種通用程序設計語言。

    另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

    缺點

    1、 C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。

    2、 C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。

    C語言的代碼

    C浯言是最常見的面向過程語言。C語言是一種通用語言,可以用于編寫解決各種類型問題的程序,如有關電子商務的程序、有關過程控制的程序、游戲程序等。

    面向過程是什么呢?

    面向過程的語言也稱為結構化程序設計語言,是高級語言的一種。在面向過程程序設計中,問題被看作一系列需要完成的任務,函數則用于完成這些任務,解決問題的焦點集中于函數。其概念最早由E.W.Dijikstra在1965年提出,是軟件發展的一個重要里程碑。它的主要觀點是采用自頂向下、逐步求精的程序設計方法,使用三種基本控制結構構造程序,即任何程序都可由順序、選擇、循環三種基本控制結構構造。

    在上述的文中,你也應該能了解到C++、JAVA、C#這些語言都是由C語言演化出來的,所以說,如果想學習編程,但是不知道選擇哪個,那么就先從C語言開始學起吧。

    嘖嘖嘖

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有