FFmpeg下载无损截取HLS视频流
需要用到的工具(有能力達(dá)到后面的目的的話,也可以換成其他的):
- Firefox瀏覽器 :用來獲取m3u8地址
- PotPlayer:用來播放m3u8地址、加速檢查下載的視頻
- FFmpeg:用來下載、截取視頻流
- 記事本:用來編輯FFmpeg命令
以上提供的都是Windows 64位版的官方下載鏈接,32位和其他系統(tǒng)可以去官網(wǎng)找。
文章目錄
- 獲取HLS視頻流的m3u8索引地址
- FFmpeg抓取HLS視頻流
- 下載完整視頻流
- 無損截取部分視頻流
- 截取本地視頻
- 截取HLS視頻流
獲取HLS視頻流的m3u8索引地址
首先,下載安裝Firefox瀏覽器打開,安裝上The Stream Detector瀏覽器擴(kuò)展。
當(dāng)檢測到網(wǎng)頁請求m3u8地址時(shí),擴(kuò)展圖標(biāo)?會進(jìn)行計(jì)數(shù),桌面右下角會彈出提醒。
此時(shí)右鍵擴(kuò)展圖標(biāo)?The Stream Detector,可以看到檢測到的鏈接地址,點(diǎn)擊地址即可復(fù)制到剪貼板。
左鍵點(diǎn)擊擴(kuò)展圖標(biāo)會將記錄的地址清空。
打開某網(wǎng)站視頻播放頁,先切換到目標(biāo)清晰度之外的畫質(zhì),左鍵點(diǎn)擊擴(kuò)展圖標(biāo)清空記錄。
然后切換到目標(biāo)畫質(zhì),此時(shí)擴(kuò)展圖標(biāo)應(yīng)該會計(jì)數(shù),右鍵圖標(biāo),點(diǎn)擊前面是[M3U8]的地址復(fù)制鏈接到剪貼板。
(復(fù)制有可能失敗,要注意右下角的提醒,失敗了就多點(diǎn)幾次試試。)
這時(shí)可以打開PotPlayer按CTRL+V來播放剪貼板里的鏈接,確認(rèn)目標(biāo)視頻和清晰度是正常的,把鏈接粘貼備份到記事本里就可以進(jìn)行下一步了。
(記事本可以勾上格式?自動換行,以防鏈接過長不好編輯。)
FFmpeg抓取HLS視頻流
下載解壓FFmpeg,放到任何方便的位置就行。
進(jìn)入bin目錄,在路徑欄輸入cmd然后?在當(dāng)前目錄打開命令提示符。
在命令提示符里輸入ffmpeg并?,確認(rèn)ffmpeg可以正常運(yùn)行。
(建議在命令提示符標(biāo)題欄上右鍵?屬性,把編輯選項(xiàng)下的快速編輯模式前的√去掉。)
下載完整視頻流
復(fù)制下面這條命令到記事本,把要下載的鏈接替換成之前得到的m3u8鏈接。
輸出文件名如果不帶路徑默認(rèn)就和ffmpeg.exe同在bin目錄下。
輸出容器格式由源視頻流決定,某網(wǎng)站可以用mp4,mkv、ts等也可以試試。
ffmpeg -i "要下載的鏈接" -c copy "輸出文件名.輸出容器格式"-i是輸入選項(xiàng)其后是輸入文件的地址;
-c是輸出文件的編碼選項(xiàng),此處值為copy即為復(fù)制原視頻音頻流,避免轉(zhuǎn)碼損失畫質(zhì);
最后是輸出文件名,后綴決定了視頻容器格式。
例:
ffmpeg -i "http://xxx/.../xxx.m3u8?xxx..." -c copy "test.mp4"然后將改好的命令選中復(fù)制,在命令提示符里右鍵?粘貼并?執(zhí)行即可開始下載。
下載好之后可以用PotPlayer打開來查看視頻是否正常,ZXC鍵分別是正常速度、減速、加速播放。
如果視頻很長或很大可能需要些時(shí)間下載,在下載中途按一次CTRL+C并稍等片刻即可中止(按多次會強(qiáng)行中止,已下好的部分會損壞),已下好的片段能正常播放但想要完整的視頻仍需從頭開始下,這可以用來測試下載是否正常。
如果輸出文件名與已有文件重復(fù)會提示是否覆蓋,此時(shí)輸入y為確認(rèn),輸入其他則會取消。
如果下載的視頻播放出現(xiàn)畫面停頓等異常,可以嘗試在-i前加上-re選項(xiàng),但下載時(shí)間將不會小于視頻播放時(shí)間。
ffmpeg -re -i "http://xxx/.../xxx.m3u8?xxx..." -c copy "test.mp4"無損截取部分視頻流
截取本地視頻
ffmpeg提供了-ss和-t來指定輸入源的起始時(shí)間和持續(xù)時(shí)間(即結(jié)束時(shí)間-起始時(shí)間,可以用這個網(wǎng)頁來計(jì)算)。
如下方的命令就是復(fù)制xxx.mp4的2分25秒至3分40秒的視頻音頻流,保存到test.mp4。
ffmpeg -ss 00:02:25 -i "xxx.mp4" -t 00:01:15 -c copy "test.mp4"需要注意的是,無損截取只能在i關(guān)鍵幀處切割,而i幀之間可能會有數(shù)秒的間距,這意味著如果i幀在24秒的位置且與下一個i幀間隔4秒,那么-ss設(shè)定成24-28的值都可能只會在24處切割。
-ss放在-i前的行為就如上所述,如果將-ss放在-i "xxx"后,有可能的情況是音頻可以正常切割而視頻會到下個i幀處切割從而導(dǎo)致音畫不同步。
根據(jù)源視頻編碼的不同,切割可能精確也可能跟設(shè)定的差數(shù)秒,需要自行測試,如果想要100%精確的切割還是只能重新編碼損失畫質(zhì)。
截取HLS視頻流
如果源視頻不大建議先用上面的方法下載整個HLS視頻流到本地,然后在本地截取。
如果源視頻很長,只需要其中一部分的話,而且這部分靠近開頭,可以先把到目標(biāo)結(jié)束位置的視頻流保存下來,再在本地截取。比如想要4到9分鐘的視頻,就可以先把到10分鐘的視頻流保存下來(不要指定開始時(shí)間,可能會造成音畫不同步)。
ffmpeg -i "http://xxx/.../xxx.m3u8?xxx..." -t 00:10:00 -c copy "test.mp4" ffmpeg -ss 00:04:00 -i "test.mp4" -t 00:05:00 -c copy "output.mp4"如果想要的部分靠后的話,想避免大量下載就只能同時(shí)指定開始和結(jié)束時(shí)間。指定起始時(shí)間在本地視頻上問題不大,但用在網(wǎng)絡(luò)流上會有大概率造成音畫不同步,如果問題出現(xiàn)并且無法解決的話還是建議用上一種方法。
ffmpeg -ss 00:04:00 -i "http://xxx/.../xxx.m3u8?xxx..." -t 00:05:00 -c copy "test.mp4"如果其他正常但出現(xiàn)畫面停頓、缺失片段,可以加上在-i前加上-re選項(xiàng),但需要的時(shí)間大大增加,最低和截取的時(shí)間長度相同。
總結(jié)
以上是生活随笔為你收集整理的FFmpeg下载无损截取HLS视频流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mongoexport导出数据,Mong
- 下一篇: django中的admin组件之自定义组