快速合并B站錄播姬的分段錄播文件

前言:
本文使用工具有 python3 和 ffmpeg?
python3下載鏈接:https://www.python.org/downloads
ffmpeg下載鏈接:https://ffmpeg.org/download.html
正文:
相信很多錄播姬們都在用 B站錄播姬 錄制視頻,我已經(jīng)把檢測到可能缺少數(shù)據(jù)時分段
這個選項關(guān)掉了,但錄播還是分成了好多段,某次直播直接分成了32段,這樣大大增加了手動合并視頻的工作量。

我自己寫了一個腳本,可以獲取錄播文件的文件名,然后提交到ffmpeg進(jìn)行合并
import glob
import os
def concat_videos():
? ?videos = sorted(glob.glob("26545331*.flv"), key=os.path.getmtime)
? ?with open('videos.txt', 'w', encoding='UTF-8') as f:
? ? ? ?f.write('\n'.join(f"file '{video}'" for video in videos))
? ?name = input('輸入日期:')
? ?os.system(f"ffmpeg -f concat -safe 0 -i videos.txt -c copy -y {name}直播.mp4")
if __name__ == '__main__': #main是習(xí)慣
? ?concat_videos()
這段代碼的功能是讀取當(dāng)前目錄錄播文件名,然后寫入到video.txt
里。
然后根據(jù)之前寫入的video.txt來合并錄播文件。
ffmpeg -f concat -safe 0 -i videos.txt -c copy -y 7.11直播.mp4
這段ffmpeg命令就是把videos.txt列出的視頻文件拼接成一個新的文件,由于是拼接不會重新渲染,所以速度很快。
可能有人會疑惑為什么不直接讀取分段錄播文件名來生成合并后的錄播文件的文件名?
這里主要是因為我進(jìn)行錄播的主播 "鯨魚娘西絲特official" 經(jīng)常直播到晚上12點(diǎn)之后,錄播文件跨天了,這里為了省事不多寫代碼直接讀取自己輸入的文件名就行了。

參考文章:
https://docs.python.org/3/library/os.path.html
https://blog.csdn.net/weixin_43115411/article/details/126049598

ai解讀代碼:
import glob
和import os
導(dǎo)入了需要使用的模塊,glob
模塊用于查找文件路徑匹配的所有文件,os
模塊用于與操作系統(tǒng)交互。
def concat_videos():
定義了一個名為concat_videos
的函數(shù),用于拼接視頻文件。
videos = sorted(glob.glob("26545331*.flv"), key=os.path.getmtime)
使用glob.glob
函數(shù)查找當(dāng)前目錄下以 "26545331" 開頭且以 ".flv" 結(jié)尾的所有文件,并使用sorted
函數(shù)按照文件的修改時間進(jìn)行排序,結(jié)果存儲在videos
變量中。
with open('videos.txt', 'w', encoding='UTF-8') as f:
使用open
函數(shù)打開名為 "videos.txt" 的文本文件,并以寫入模式打開。使用with
語句可以確保文件在使用結(jié)束后自動關(guān)閉,并將文件對象賦值給f
。
f.write('\n'.join(f"file '{video}'" for video in videos))
將每個視頻文件名按照要求的格式寫入文件。使用生成器表達(dá)式和join
方法將文件名連接成一個字符串,并使用換行符分隔每個文件名。
os.system(f"ffmpeg -f concat -safe 0 -i videos.txt -c copy -y {input('輸入日期:')}直播.mp4")
執(zhí)行系統(tǒng)命令,使用 FFmpeg 工具根據(jù) "videos.txt" 中列出的視頻文件進(jìn)行拼接。命令中使用-f concat
指定拼接方式,-safe 0
禁用安全檢查,-i videos.txt
指定輸入文件為 "videos.txt",-c copy
表示直接復(fù)制流而不進(jìn)行重新編碼,-y
表示覆蓋輸出文件而不詢問確認(rèn),最后通過input
函數(shù)獲取用戶輸入的日期字符串并拼接到輸出文件名中。
if __name__ == '__main__':
檢查當(dāng)前模塊是否作為主程序運(yùn)行。
concat_videos()
調(diào)用concat_videos
函數(shù),執(zhí)行視頻拼接操作。
解讀 ffmpeg -f concat -safe 0 -i videos.txt -c copy -y 7.11直播.mp4
:
根據(jù)你提供的命令
ffmpeg -f concat -safe 0 -i videos.txt -c copy -y 7.11直播.mp4
,它使用 FFmpeg 工具將videos.txt
中列出的視頻文件進(jìn)行拼接,并生成一個名為7.11直播.mp4
的輸出文件。讓我逐個解釋這個命令的含義:
ffmpeg
: 這是 FFmpeg 工具的命令行執(zhí)行程序。
-f concat
: 指定使用拼接器(concatenator)作為輸入文件。
-safe 0
: 禁用對文件路徑的安全檢查,允許拼接器讀取任意文件路徑。
-i videos.txt
: 指定輸入文件為videos.txt
,該文件包含要拼接的視頻文件列表。
-c copy
: 指定將輸入流復(fù)制到輸出文件,而不進(jìn)行重新編碼。
-y
: 在輸出文件存在時,自動覆蓋同名的輸出文件,而不需要用戶確認(rèn)。
7.11直播.mp4
: 指定輸出文件的文件名為7.11直播.mp4
。綜合起來,該命令告訴 FFmpeg 工具讀取
videos.txt
中列出的視頻文件,并按照順序?qū)⑺鼈兤唇悠饋?,然后將拼接后的結(jié)果保存為7.11直播.mp4
。請確保videos.txt
文件包含正確的視頻文件列表,并且所需的視頻文件都位于當(dāng)前工作目錄中。