文章音視頻下載全攻略:PC端與手機(jī)端實(shí)操方法)
我在日常做內(nèi)容備份和素材整理時(shí)最常被問(wèn)到的就是“公眾號(hào)文章里的音視頻怎么下”。很多人以為能用右鍵另存為搞定結(jié)果打開(kāi)一看只是一個(gè)播放器外殼根本沒(méi)有文件。微信公眾號(hào)文章音視頻下載這件事要說(shuō)難也不算難但確實(shí)有門(mén)檻PC端和手機(jī)端處理路線(xiàn)完全不同微信客戶(hù)端還會(huì)對(duì)資源做緩存和域名校驗(yàn)直接復(fù)制鏈接往往帶防盜鏈或過(guò)期簽名。這篇文章我把實(shí)際用過(guò)的幾種方案全部整理出來(lái)覆蓋電腦端和手機(jī)端適合內(nèi)容運(yùn)營(yíng)、剪輯找素材、論文引證、播客存檔這些場(chǎng)景。1. 動(dòng)手之前先想清楚文章里這些音視頻到底是哪種“貨”1.1 公眾號(hào)音視頻的三種常見(jiàn)存放形式公眾號(hào)文章里的音視頻不是單一來(lái)源我按下載難度從小到大排序先認(rèn)清楚類(lèi)型再動(dòng)手成功率會(huì)高很多。第一種是騰訊視頻iframe。作者在圖文里插入一個(gè)騰訊視頻頁(yè)面文章源碼中只會(huì)出現(xiàn)一個(gè)iframe標(biāo)簽真正的播放地址在v.qq.com或者vv.video.qq.com的頁(yè)面里視頻本身通常被切成m3u8分片。這種形式比較麻煩因?yàn)槲⑿盼恼马?yè)只做“引用”并不會(huì)直接把視頻URL暴露出來(lái)。第二種是公眾號(hào)后臺(tái)上傳的直鏈視頻。作者在公眾號(hào)后臺(tái)“素材庫(kù)-視頻”里上傳的文件會(huì)被微信轉(zhuǎn)存到mmbiz.qpic.cn域名下多數(shù)情況下是可直接訪(fǎng)問(wèn)的mp4文件文章HTML里能看到>curl -e https://mp.weixin.qq.com/ -A Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36 這里替換成你抓到的mp4直鏈 -o output.mp4-e指定的是來(lái)源頁(yè)地址公眾號(hào)資源通常要求Referer必須是mp.weixin.qq.com否則會(huì)403。-A是模擬瀏覽器UA保險(xiǎn)起見(jiàn)最好兩個(gè)都帶上。不過(guò)這里有個(gè)容易踩坑的點(diǎn)mmbiz.qpic.cn的直鏈會(huì)攜帶簽名和時(shí)間戳有效期短則幾個(gè)小時(shí)、長(zhǎng)則幾天。我當(dāng)時(shí)備份一篇文章時(shí)復(fù)制了鏈接隔了一天再去下載就404了只能重新抓一次。所以建議抓下來(lái)后立刻下載不要存鏈接。2.2 電腦端微信客戶(hù)端的“緩存撿漏”法最不依賴(lài)瀏覽器有些文章在普通瀏覽器里打不開(kāi)只能在微信PC客戶(hù)端內(nèi)正常觀看這時(shí)候可以用緩存方案。微信PC端播放過(guò)的音視頻會(huì)在本地留一份緩存文件我們要做的就是把文件從緩存目錄里翻出來(lái)。先確保電腦上已經(jīng)登錄微信然后在公眾號(hào)文章里把目標(biāo)音頻或視頻完整播放一遍讓文件真正落到本地。接著打開(kāi)微信設(shè)置里的“文件管理”點(diǎn)擊“打開(kāi)文件夾”進(jìn)入微信的數(shù)據(jù)目錄。微信3.x版本通常會(huì)在WeChat Files\wxid_xxx\FileStorage\Video下按月份保存視頻音頻則在Audio目錄微信4.x開(kāi)始目錄結(jié)構(gòu)變了常見(jiàn)路徑是xwechat_files\wxid_xxx\下面也會(huì)出現(xiàn)Video、Audio、Cache這些子目錄。如果你覺(jué)得目錄太多找起來(lái)麻煩直接把整個(gè)微信數(shù)據(jù)目錄扔進(jìn)Everything里按擴(kuò)展名.mp4、.m4a、.mp3搜一遍找到體積最大、修改時(shí)間最新的文件復(fù)制出來(lái)改名就行。需要注意不要在微信里點(diǎn)“清空聊天記錄”或“清理緩存”否則這些文件會(huì)被一起清理掉。另外緩存文件名往往是隨機(jī)字符串拷出來(lái)之后要自己確認(rèn)內(nèi)容。我曾遇到過(guò)把好幾個(gè)音頻都命名為audio_xxx的情況只能挨個(gè)播放判斷。2.3 抓包與代理方案適合m3u8、加密資源和視頻號(hào)卡片開(kāi)發(fā)者工具有時(shí)候拿到的是分片URL而不是完整文件尤其遇到騰訊視頻iframe時(shí)網(wǎng)絡(luò)面板里全是segment_xxx.ts請(qǐng)求。這時(shí)候想“一步到位”直接下載用抓包工具更順手比如Fiddler或Charles。原理很簡(jiǎn)單讓微信PC客戶(hù)端或手機(jī)的流量走本地代理再開(kāi)啟HTTPS解密就能看到所有網(wǎng)絡(luò)請(qǐng)求。公眾號(hào)文章的音視頻請(qǐng)求很顯眼體積大、類(lèi)型是video/mp4或application/vnd.apple.mpegurl復(fù)制下來(lái)后續(xù)處理。如果是m3u8分片推薦直接用ffmpeg合并這是最省心的做法ffmpeg -headers Referer: https://mp.weixin.qq.com/ -i https://example.com/playlist.m3u8 -c copy output.mp4-c copy意思是盡量不重新編碼直接復(fù)制流速度快且不損失畫(huà)質(zhì)。大部分騰訊視頻分片都能這樣合并。遇到加密HLSm3u8里帶#EXT-X-KEYffmpeg也會(huì)自動(dòng)解密只要請(qǐng)求頭帶對(duì)了就行。抓包方案還要提一下手機(jī)端應(yīng)用場(chǎng)景用手機(jī)微信看文章時(shí)把Wi-Fi代理指到電腦的Fiddler或Charles同樣可以抓到完整請(qǐng)求。這樣手機(jī)端和PC端就統(tǒng)一了一臺(tái)電腦就能解決兩類(lèi)設(shè)備的問(wèn)題。3. 手機(jī)端下載安卓、iOS和“曲線(xiàn)救國(guó)”3.1 安卓微信緩存目錄 支持深層訪(fǎng)問(wèn)的文件管理器安卓端相對(duì)自由公眾號(hào)文章里播放過(guò)的音視頻經(jīng)常能在微信的沙盒目錄里找到。在微信里打開(kāi)目標(biāo)文章完整播放一遍然后打開(kāi)文件管理器進(jìn)入/sdcard/Android/data/com.tencent.mm/MicroMsg/。這里面會(huì)有一個(gè)長(zhǎng)hash文件夾繼續(xù)找FileStorage下的Video或Audio目錄按時(shí)間排序最新的文件就是要找的目標(biāo)。不過(guò)安卓11以后系統(tǒng)限制了Android/data目錄的訪(fǎng)問(wèn)普通文件管理器看不到這時(shí)候有兩個(gè)辦法一是用MT管理器、ES文件瀏覽器這類(lèi)有特殊權(quán)限的工具二是在文件管理器地址欄里手動(dòng)輸入路徑實(shí)在不行就插上USB用電腦訪(fǎng)問(wèn)。如果你用的是夸克或UC這類(lèi)自帶視頻嗅探的瀏覽器還有一個(gè)更簡(jiǎn)單的路子把公眾號(hào)文章鏈接復(fù)制到手機(jī)瀏覽器打開(kāi)點(diǎn)擊播放瀏覽器會(huì)自動(dòng)識(shí)別頁(yè)面里的視頻并在播放頁(yè)浮出一個(gè)“下載視頻”的按鈕。這個(gè)方法適合不想翻目錄的人一鍵就能存到相冊(cè)或文件。音頻同理部分手機(jī)瀏覽器沒(méi)有音頻嗅探那就回到緩存目錄找一般Audio目錄里就是mp3或m4a。3.2 iOS端別硬剛沙盒用“瀏覽器中轉(zhuǎn)”或電腦中轉(zhuǎn)iOS系統(tǒng)的沙盒機(jī)制很?chē)?yán)格你沒(méi)法像安卓一樣直接進(jìn)微信緩存目錄翻文件所以思路必須換。最推薦的是“中轉(zhuǎn)法”在微信里點(diǎn)擊文章右上角選擇“在瀏覽器打開(kāi)”Safari然后用iCloud云盤(pán)、備忘錄或微信傳輸助手把鏈接轉(zhuǎn)到電腦再按PC端的方法處理。如果一定要在手機(jī)上直接下可以找支持“網(wǎng)頁(yè)媒體嗅探”的Safari捷徑腳本把文章頁(yè)的mp4/mp3鏈接喂給“下載媒體”捷徑但捷徑腳本質(zhì)量參差不齊我測(cè)試過(guò)很多次成功率不太穩(wěn)定主要是微信簽名過(guò)期和跨域問(wèn)題導(dǎo)致。另一種是電腦中轉(zhuǎn)把iPhone用數(shù)據(jù)線(xiàn)連到電腦用愛(ài)思助手或iTunes做一次全量備份再通過(guò)第三方工具從備份里提取微信數(shù)據(jù)文件。這個(gè)方法有效但成本高要裝軟件、要備份普通用戶(hù)不建議輕易嘗試。3.3 手機(jī)上的第三方解析工具到底靠不靠譜應(yīng)用商店里搜“公眾號(hào)視頻下載”會(huì)出來(lái)一堆App和在線(xiàn)解析站。它們的原理一般是你把文章鏈接粘貼進(jìn)去服務(wù)端去抓取頁(yè)面解析出音視頻地址再回傳給你下載。聽(tīng)起來(lái)很省事但我必須提醒幾個(gè)問(wèn)題一是隱私風(fēng)險(xiǎn)。第三方服務(wù)能爬到你的文章鏈接、賬號(hào)身份信息如果還要微信掃碼登錄風(fēng)險(xiǎn)更高。二是穩(wěn)定性很差。公眾號(hào)資源帶防盜鏈和時(shí)效簽名在線(xiàn)解析站經(jīng)常下載失敗。三是部分工具會(huì)把用戶(hù)上傳的素材直接撈進(jìn)自己的資源庫(kù)這對(duì)做原創(chuàng)內(nèi)容的人尤其不利。我個(gè)人的態(tài)度是在線(xiàn)解析工具可以用來(lái)應(yīng)急但不要把敏感文章或獨(dú)家內(nèi)容丟進(jìn)去也不要指望它能穩(wěn)定復(fù)現(xiàn)。自己用瀏覽器開(kāi)發(fā)者工具或抓包工具才是最可控的方式。4. 進(jìn)階批量采集、腳本化和自動(dòng)化處理4.1 批量抓取歷史文章里的音視頻從采集文章列表開(kāi)始做內(nèi)容備份或競(jìng)品分析時(shí)常常需要批量處理幾十上百篇文章這時(shí)候手動(dòng)一條條抓太慢了。批量場(chǎng)景的邏輯一般分三步拿到公眾號(hào)的歷史文章鏈接列表逐個(gè)打開(kāi)文章頁(yè)面提取音視頻直鏈批量下載并按文章標(biāo)題重命名。歷史文章列表怎么拿微信官方?jīng)]有公開(kāi)的歷史列表API常見(jiàn)做法是用搜狗微信搜索有驗(yàn)證碼問(wèn)題、第三方公眾號(hào)采集API或通過(guò)RPA模擬瀏覽器操作。拿到鏈接列表后寫(xiě)腳本批量抓取頁(yè)面。公眾號(hào)文章HTML里視頻直鏈經(jīng)常藏在>import re import requests url https://mp.weixin.qq.com/s/xxxx headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Referer: https://mp.weixin.qq.com/ } html requests.get(url, headersheaders, timeout10).text mp4_urls re.findall(rhttps?://mmbiz\.qpic\.cn/[^\]?\.mp4, html) mp3_urls re.findall(rhttps?://[^\]?\.mp3, html) print(mp4_urls, mp3_urls)這里的關(guān)鍵是請(qǐng)求頭里的Referer不帶的話(huà)微信服務(wù)器很可能返回異常頁(yè)面。抓到直鏈后再用上一節(jié)提到的curl或requests下載文件記得把streamTrue打開(kāi)避免一次性加載到內(nèi)存。4.2 用Node.js或命令行工具完成下載有些場(chǎng)景下Python不是你的主力語(yǔ)言用Node.js也能完成同樣的下載流程。核心思路沒(méi)變先請(qǐng)求文章HTML提取音視頻URL再用設(shè)置好請(qǐng)求頭的HTTP客戶(hù)端把文件寫(xiě)入磁盤(pán)。const axios require(axios); const fs require(fs); async function download(url, outputPath) { const response await axios({ url, method: GET, responseType: stream, headers: { User-Agent: Mozilla/5.0, Referer: https://mp.weixin.qq.com/ } }); response.data.pipe(fs.createWriteStream(outputPath)); }如果你拿到的是m3u8而不是mp4Node.js里可以調(diào)用ffmpeg-static自帶的二進(jìn)制文件來(lái)合并const ffmpeg require(ffmpeg-static); const { execFile } require(child_process); execFile(ffmpeg, [-i, m3u8Url, -c, copy, output.mp4]);實(shí)測(cè)下來(lái)m3u8合并最穩(wěn)的始終是ffmpeg本身輪子管用但沒(méi)必要重復(fù)造。4.3 RPA與油猴腳本不懂代碼也能半自動(dòng)如果完全不會(huì)寫(xiě)代碼RPA工具是一個(gè)可行的折中方案。用UiBot、影刀這類(lèi)RPA軟件錄制一個(gè)流程打開(kāi)文章鏈接、模擬點(diǎn)擊播放、截屏識(shí)別、復(fù)制視頻鏈接、調(diào)用下載工具。RPA不需要看視頻教程寫(xiě)代碼但速度慢且遇到滑塊驗(yàn)證時(shí)容易卡住適合幾十一百篇的量。瀏覽器油猴腳本是另一個(gè)思路。GreasyFork上可以搜到“微信公眾號(hào)視頻下載”類(lèi)腳本原理是在文章頁(yè)面注入按鈕讀取頁(yè)面里的video標(biāo)簽或>