寫了一個回收利用某站視頻緩存的程序
緣起
在很多很多年前... 這個平臺的客戶端曾經提供“轉碼至mp4”功能,甚至運算速度還很快。
但是隨著歷史的磨洗,很多東西,包括這個小小的轉碼按鈕,都已經化作了塵埃。
緩存下來的視頻,又是一個亟待拯救的時代。
細看緩存,flv流的被分成了數段,而mp4流則將視頻流和音頻流分成了兩個部分。如此使得直接使用顯得尤爲麻煩。
我們的目標就是使用一個自動化的脚本去批量將flv流的數段進行合并,將mp4流的視頻和音頻軌進行合并。
使用方法
install ffmpeg
參照ffmpeg download以及How to Install FFmpeg on Windows:
事實上,下載到的ffmpeg工具就是已經編譯過,可以直接使用的。但是需要確保能在任何目錄下都能直接訪問ffmpeg工具,則需要將其添加至Path目錄:
在Windows下,右鍵點擊我的電腦,進入設置,找到高級系統設置>高級>環境變量,在Path變量中新建一欄,添加ffmpeg/bin的路徑,如:“C:\apps\ffmpeg\bin”,確認后退出。
在隨意的目錄中進入命令行,輸入ffmpeg命令,確認其正常即可。
me@host:~$ ffmpeg --version
ffmpeg version git-2020-01-29-de1b2aa Copyright (c) 2000-2020 the FFmpeg developers
prepare for videos
手機的 Android/data/tv.danmaku.bili/download目錄中可以找到視頻文件緩存。將其複製到隨意創建的目錄中,即可。
比如這裏叫做Videos目錄,像這樣:
Videos
├───2045104
├───19923713
└───99999999
展示文件樹,可以使用tree命令。
download code and install requirements
需要確保您的 Python version >= 3.6!
在各個視頻文件夾所處的目錄中,直接地下載代碼。進入代碼文件夾並安裝依賴:
me@host:~/Videos$ git clone https://github.com/kumolab/video-concrete.git
me@host:~/Videos$ cd video-concrete
me@host:~/Videos/video-concrete$ pip install -r requirements.txt
run it
直接運行即可。
可以擕帶的參數有:
- -n:一次處理的視頻數量,以av編號爲準。默認為5。
舉例:
me@host:~/Videos/video-concrete$ python edit.py
me@host:~/Videos/video-concrete$ python edit.py -n 3
開發指南
感謝您的興趣!您可以fork本repo,提交您的代碼,然後創建一個Pull Request 來讓我們將您的代碼合并進去。
程序結構
主class中包括以下函數:
- get_file_tree():提取整個目錄中的文件樹,并且分辨哪些目錄是符合av號命名標准的。同時也需要提取每個視頻下的part數。會以是否有edit_av號文件夾判斷是否已經處理過。
- apply_handle_num():設置處理的集數,集數由命令行參數中提取。
- generate...():拼接源路徑、視頻文件夾名等而形成可用路徑。
- read_video_info():讀取每個video的part數、流模式、flv分段數、文件結構等信息。
- check_exp_path():檢查輸出文件夾,無則需要創建。
- handle_m4():對mp4流的audio-video對進行合并。要點在write_videofile(寫,同時指定音頻軌)函數。
- handle_flv():對於flv流的數段,分別轉碼至mp4,然後讀取,合并。要點在ffmpy.FFmpeg(轉碼)和concatenate_videoclips(合并)函數。
- move_conf_files():重命名與移動index.json、danmaku.xml文件
- deal_all():最終的執行。會直接或間接調用上述函數。
變量解釋
- handle_num:一次處理的視頻數量
- video_index:目前處理的video在隊列裏面的排序
- epi_index:分part目前的號碼
- episode_offset:分part對於0的起始編號偏移,例如有的視頻為30、31、32這樣編號,但是實際上30是爲第一part,偏移即爲30
- episode_count:總共的分part數量
故事和展望
事實上,一般認爲這樣做的意義並不大。由網頁深入研究從而獲取視頻流和彈幕,或者直接在下載站和up主其他有分享的地方獲取視頻都是更加好的方式。
似乎還是來源於早期一臺手機的數據備份,由此想來而製作這個脚本程式。
還有著很多的問題,比如説:
- 配給需要執行的任務量,這裏直接用了視頻數量,事實上因爲視頻本身長度和體量、再加上分part數量,實際每個視頻會執行分鐘至數小時不等。需要更好的預測及分配給每次啓動的量。
- !當part不是連續編號時,程式固執會認爲是連續編號。
- 沒有保存index.json。
- 如何在中斷后續傳。
- 如何做成網絡服務。
- 如何以獲取的數據再次營造社區。
以上。更新與2020/08/25。
About Author:
评论
发表评论