久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用 FFmpeg 下載偽裝成圖片的 m3u8 視頻

 _src_ 2024-12-26 發(fā)布于內(nèi)蒙古

前言

最近看到一個(gè)不錯(cuò)的視頻,,想要下載到本地收藏起來,,免得哪天網(wǎng)址失效無法播放。但是使用 FFmpeg 下載的時(shí)候報(bào)了個(gè)錯(cuò)

1
2
3
4
5
6
7
8
9
10
11
12
[hls,applehttp @ 0x55efcdf226c0] Could not find codec parameters for stream 0 (Video: png, none(pc)): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, hls,applehttp, from 'https://pv./demo/rick.m3u8':
Duration: 00:03:32.44, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: png, none(pc), 25 tbr, 25 tbn, 25 tbc
Metadata:
variant_bitrate : 0
Output #0, mp4, to 'rick.mp4':
Output file #0 does not contain any stream
PLAINTEXT

PNG ,?,?網(wǎng)頁里明明可以播放的。下載了其中一個(gè)片段,,打開后發(fā)現(xiàn)真的是一張圖片,。使用 hexdump 查看了一下,文件最開始確實(shí)是 PNG 圖片,,但是緊接著就看到了 FFmpeg Service01 字樣,,確認(rèn)了這個(gè)文件是由一張圖片和一段視頻拼接而成。

Google 了一下,,找到兩篇文章 [1] [2],。講的是通過在視頻前加一個(gè)小的 PNG 圖片來偽裝成圖片騙過圖床的校驗(yàn),hls.js 在播放時(shí)會(huì)自動(dòng)忽略前邊的圖片,。但 FFmpeg 沒有相關(guān)處理,,把偽裝后的視頻識(shí)別成了圖片導(dǎo)致下載失敗,。

解決思路

知道了問題的原因,解決思路就有了,。但是實(shí)際操作過程中遇到了很多問題,,這里記錄一下。

[3], 根據(jù)描述猜測(cè)是解析視頻片段時(shí)的一些參數(shù),,嘗試搭配 skip_initial_bytes 參數(shù)使用。結(jié)果還是報(bào)錯(cuò)

1
ffmpeg -f hls -seg_format_options skip_initial_bytes=8 -i https://pv./demo/rick.m3u8 -c copy output.mp4
BASH

由于這個(gè)參數(shù)是最近才添加的,,翻遍全網(wǎng)都沒找到更詳細(xì)的描述,,故放棄此方法。

第二次嘗試(成功)

既然指定格式行不通了,,那我們還可以屏蔽 FFmeg 對(duì)圖片格式的檢測(cè),。但是 FFmpeg 文檔里也沒有找到相關(guān)參數(shù)(笑哭??)。這里我們可以通過自己編譯來屏蔽圖片格式支持,。下面是編譯過程:

1
2
3
4
git clone --depth=1 https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --disable-doc --disable-asm --disable-x86asm --enable-openssl --enable-protocols --enable-protocol=https --disable-demuxer=image*
make -j4
BASH

使用自己編譯的 FFmpeg 嘗試下載,,果然成功了。

第三次嘗試(成功)

在查找資料的過程中,,發(fā)現(xiàn) m3u8 語法中有一個(gè)標(biāo)簽 EXT-X-BYTERANGE [4],,可以讀取指定范圍的視頻片段,語法為:#EXT-X-BYTERANGE:<讀取內(nèi)容長(zhǎng)度>[@<起始位置偏移量>],。由于只要要破壞 PNG 格式頭就可以使 FFmpeg 識(shí)別到正確的視頻,,偏移 8 字節(jié)足夠了。這里我們把參數(shù)設(shè)置為 100000000@8,。下載腳本如下:

1
2
3
4
5
6
# 手動(dòng)下載 m3u8 文件
wget https://pv./demo/rick.m3u8
# 給每一個(gè)視頻片段都加上截取范圍
sed -i '/#EXTINF:*/a\#EXT-X-BYTERANGE:100000000@8' ./rick.m3u8
# 開始下載
ffmpeg -protocol_whitelist file,http,https,tls,tcp -i ./rick.m3u8 -c cooy output.mp4
BASH

雖然可以下載,,但是由于不知道每個(gè)視頻片段具體大小,使用了寫死的 100000000,,F(xiàn)Fmpeg 下載時(shí)會(huì)卡好久,,不是一個(gè)完美的方案,故不推薦,。

后記

雖然嘗試成功了兩次,,但是做法都不是太優(yōu)雅,還是希望 FFmpeg 官方可以增強(qiáng)對(duì) hls 自定義設(shè)置的支持,,如可以強(qiáng)制指定片段格式等,。可以通過一條命令成功下載

參考

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多