文章目錄
- 1、下載FFmpeg
- 2、爬取代碼
- 3、效果圖
1、下載FFmpeg
FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。
點擊下載: ffmpeg
安裝并配置 FFmpeg
步驟:
1.下載 FFmpeg:
2.訪問 FFmpeg 官網。
3.選擇 Windows 版本(如 Windows Builds)。
4.下載 ffmpeg-master-latest-win64-gpl.zip。
5.解壓文件:
6.將 ZIP 文件解壓到 C:\Program Files\ffmpeg。
7.配置環境變量:
8.右鍵點擊“此電腦” > “屬性” > “高級系統設置” > “環境變量”。
9.在“系統變量”中找到 Path,點擊“編輯”。
10.添加 FFmpeg 的 bin 目錄路徑:C:\Program Files\ffmpeg\bin。
11.保存并退出。
2、爬取代碼
import requests
import os
from urllib.parse import urlparse
import subprocess# 視頻和音頻URL
video_url = "https://upos-sz-mirrorbd.bilivideo.com/upgcxcode/46/89/28747958946/28747958946-1-100022.m4s"
audio_url = "https://cn-gdgz-gd-live-02.bilivideo.com/upgcxcode/46/89/28747958946/28747958946-1-30216.m4s"# 請求頭
header = {"Referer": "https://www.bilibili.com/video/av576765795?spm_id_from=333.788.player.player_end_recommend_autoplay","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
}# 視頻請求參數
video_params = {"e": "ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=","uipk": "5","nbs": "1","deadline": "1742734058","gen": "playurlv2","os": "bdbv","oi": "1996673551","trid": "236892f04e4743a7a3da62f279953324u","mid": "0","platform": "pc","og": "hw","upsig": "d8a8f509632b390e62c65ba33d7b8342","uparams": "e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og","bvc": "vod","nettype": "0","orderid": "0,3","buvid": "362FA75D-BD0F-DC0D-E2AE-34526182765756167infoc","build": "0","f": "u_0_0","agrr": "1","bw": "18402","logo": "80000000"
}# 音頻請求參數
audio_params = {"e": "ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=","uipk": "5","nbs": "1","deadline": "1742734058","gen": "playurlv2","os": "bcache","oi": "1996673551","trid": "0000236892f04e4743a7a3da62f279953324u","mid": "0","platform": "pc","og": "hw","upsig": "e0007fe3f8ffbf93d9c37a85134bda3c","uparams": "e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og","cdnid": "6697","bvc": "vod","nettype": "0","orderid": "0,3","buvid": "362FA75D-BD0F-DC0D-E2AE-34526182765756167infoc","build": "0","f": "u_0_0","agrr": "1","bw": "6238","logo": "80000000"
}
# 發送請求并下載視頻
video_response = requests.get(video_url, headers=header, params=video_params, timeout=10)
video_response.raise_for_status()
# 發送請求并下載音頻
audio_response = requests.get(audio_url, headers=header, params=audio_params, timeout=10)
audio_response.raise_for_status()# 創建輸出目錄
output_folder = r"C:/Users/zzx/Desktop/video/"
if not os.path.exists(output_folder):os.makedirs(output_folder)# 保存視頻文件
video_filename = os.path.basename(urlparse(video_url).path)
video_file_path = os.path.join(output_folder, video_filename)
with open(video_file_path, "wb") as f:for chunk in video_response.iter_content(chunk_size=1024*1024):if chunk:f.write(chunk)
print(f"視頻文件已下載:{video_file_path}")# 保存音頻文件
audio_filename = os.path.basename(urlparse(audio_url).path)
audio_file_path = os.path.join(output_folder, audio_filename)
with open(audio_file_path, "wb") as f:for chunk in audio_response.iter_content(chunk_size=1024*1024):if chunk:f.write(chunk)
print(f"音頻文件已下載:{audio_file_path}")# 使用 FFmpeg 合并
output_path = os.path.join(output_folder, "merged_video.mp4")
ffmpeg_path = r"C:\Program Files\ffmpeg\bin\ffmpeg.exe" # 確保路徑正確
if not os.path.exists(ffmpeg_path):raise FileNotFoundError(f"FFmpeg 未找到,請檢查路徑:{ffmpeg_path}")
ffmpeg_cmd = [ffmpeg_path,'-i', video_file_path,'-i', audio_file_path,'-c:v', 'copy','-c:a', 'copy','-strict', 'experimental',output_path]
try:subprocess.run(ffmpeg_cmd,check=True)print(f"合并完成:{output_path}")
except subprocess.CalledProcessError as e:print(f"合并失敗:{e}")