m3u8轉mp4


現在大部分是視頻網站都是用m3u8的形式播放視頻。要注意的是其實m3u8本身並不是視頻文件,而是一個視頻文件的目錄索引而已,它規定了分段視頻的播放順序,所以即使下載m3u8文件是不能直接播放視頻的,那我們要怎么做才能得到可以直接播放過的視頻文件呢?

安裝ffmpeg

mac

brew install ffmpeg // 安裝ffmpeg(可能報錯無法連接外網資源)
curl -O https://evermeet.cx/ffmpeg/ffmpeg-4.4.zip //安裝ffmpeg(直接官網下載ffmpeg-4.4,本地解壓后的可執行文件直接使用)

linux

apt install ffmpeg

m3u8轉mp4

遠程的m3u8以mp4保存到本地

(本方法親測過,推薦使用)

ffmpeg -i "https://xx.xx.com/xxxxxxxx/index.m3u8" -c copy ~/video/out.mp4

本地資源轉mp4

(本方法沒有全部測試完,建議自行測試下)
(需要注意有的m3u8文件中分段視頻可能不是ts后綴結尾的,有的是可以直接改后綴名即可)

curl -O https://xxx.com/index.m3u8
sh ts_download.sh  //執行ts文件下載腳本
sh ts_merge.sh     //執行ts文件合並腳本,得到new.ts
ffmpeg -i new.ts -c:v copy -c:a libfaac out.mp4               //ts轉mp4
ffmpeg -i new.ts -c:v libx264 -crf 24 -c:a libfaac out.mp4    //ts轉mp4

ts_download.sh

while read myline
do

 if [[ $myline =~ "http" ]]
 then
     # 下載所有ts文件
     right=${myline##*/}
     curl -o ts/${myline##*/} $myline
     echo  "LINE : ${right} "
 else   
    continue
 fi
done < index.m3u8

ts_merge.sh

all_str=""

while read myline
do

 if [[ $myline =~ "http" ]]
 then
     # ts文件順序(按index.m3u8的順序合並,這里只讀取文件名就好)
     right=${myline##*/}
     echo  "LINE : ${right} "
     all_str=$all_str" "${right}
 else   
    continue
 fi
done < index.m3u8

# 將多個ts文件合並成一個(eg: cat 111.ts 222.ts > new.ts)
touch new.ts
cd ts
cat $all_str > ../new.ts


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM