Pythonはm 3 u 8ファイルを通じて連結tsビデオの操作をダウンロードします。
この間、あるウェブサイトのビデオをダウンロードするように要求されました。そして自分はネットで関連資料を調べました。ここでまとめをします。
1.m 3 u 8ファイル
m 3 u 8は、アップルがビデオ再生規格を打ち出したファイル検索形式で、ビデオをセグメントの小さいts形式のビデオファイルにカットして、サーバに存在します。現在、多くのニュース動画サイトはこのようなモードで動画をロードしています。
M 3 U 8ファイルとは、UTF-8符号化フォーマットのM 3 Uファイルのことです。M 3 Uファイルはインデックスの純粋なテキストファイルを記録しています。それを開くと、ソフトを再生するのではなく、そのインデックスに基づいて対応する音声ビデオファイルのネットワークアドレスを見つけてオンラインで再生します。元ビデオデータは複数のTSストリームに分割され、各TSストリームのアドレスはm 3 u 8ファイルリストに記録される。
以下はm 3 u 8ファイルのフォーマットです。
m 3 u 8ファイルだけがあります。tsファイルをダウンロードする必要があります。
tsファイルは正常に再生できますが、多すぎて小さいです。
暗号化されていて再生できません。復号する必要があります。
ここでは前の二つのステップだけを記録します。今は研究しているのが少ないので、tsが暗号化されている状況にはまだ遭遇していません。
3.分析例
それでは、私は正式にウェブサイトを挙げて、第一財経ネット(直接クリック)で皆さんと正式に説明します。
これはこのサイトの動画です。次の図のように
最初のビデオをクリックしてください。これが私達が今回登って取るビデオです。
マウスを右クリックし、「チェック」またはF 12ボタンを押して開発者モードに入り、ウェブページのコードを確認します。
そして、Networkをクリックして、otherをクリックして、m 3 u 8とtsマークが付いている請求住所を探します。
分かりません。下の図を見てください。ちょっと重要です。ウェブサイトがカットした後にtsを通じて(通って)ビデオをロードして、規則的ではありませんて、m 3 u 8ファイルを通じて(通って)付属したのです。つまり、ウェブサイトは必ずm 3 u 8ファイルを先にロードして、m 3 u 8ファイルによってtsファイルを要求します。ですから、m 3 u 8ファイルが見つからないなら、最初のtsファイルを探して、上にひっくり返してもいいです。m 3 u 8ファイルを見つけられます。
このm 3 u 8ファイルをクリックしてください。右側はその要求アドレスです。
要求住所は以下の通りです。
https://ycalvod.yicai.com/record/live/cbn/ca233887-1443-4bdf-b762-3b4b3a217085_LD.m 3 u 8auth_key=155703722-0-6 f 09 e 9 a 1569 f 027 a 035 e 31 c 238 c 48 c&ycfrom=yicaiwww
上の住所をブラウザのアドレスボックスに入力してダウンロードしてもいいです。ソースコードを確認することによって、対応するhtmlコードを見つけられます。
これはダウンロードしたm 3 u 8ファイルです。
写真から見れば、各tsファイルは相対的な住所ですので、以下の絶対住所を探さなければなりません。
tsファイルの住所は以下の通りです。
https://ycalvod.yicai.com/record/live/cbn_ylod/155111614_344608.ts
上で、私達はすでにこのウェブサイトのビデオをモードの分析のとても透徹していることをロードして、下でコードを搾り始めました。
4.tsファイルを取得する
6.TSビデオをマージする
7.完全なコード
興味のある仲間は研究してみてもいいです。
1.m 3 u 8ファイル
m 3 u 8は、アップルがビデオ再生規格を打ち出したファイル検索形式で、ビデオをセグメントの小さいts形式のビデオファイルにカットして、サーバに存在します。現在、多くのニュース動画サイトはこのようなモードで動画をロードしています。
M 3 U 8ファイルとは、UTF-8符号化フォーマットのM 3 Uファイルのことです。M 3 Uファイルはインデックスの純粋なテキストファイルを記録しています。それを開くと、ソフトを再生するのではなく、そのインデックスに基づいて対応する音声ビデオファイルのネットワークアドレスを見つけてオンラインで再生します。元ビデオデータは複数のTSストリームに分割され、各TSストリームのアドレスはm 3 u 8ファイルリストに記録される。
以下はm 3 u 8ファイルのフォーマットです。
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:15
#EXTINF:6.916667,
out000.ts
#EXTINF:10.416667,
out001.ts
#EXTINF:10.416667,
out002.ts
#EXTINF:1.375000,
out003.ts
#EXTINF:1.541667,
out004.ts
#EXTINF:7.666667,
out005.ts
#EXTINF:10.416667,
2.tsファイル処理m 3 u 8ファイルだけがあります。tsファイルをダウンロードする必要があります。
tsファイルは正常に再生できますが、多すぎて小さいです。
暗号化されていて再生できません。復号する必要があります。
ここでは前の二つのステップだけを記録します。今は研究しているのが少ないので、tsが暗号化されている状況にはまだ遭遇していません。
3.分析例
それでは、私は正式にウェブサイトを挙げて、第一財経ネット(直接クリック)で皆さんと正式に説明します。
これはこのサイトの動画です。次の図のように
最初のビデオをクリックしてください。これが私達が今回登って取るビデオです。
マウスを右クリックし、「チェック」またはF 12ボタンを押して開発者モードに入り、ウェブページのコードを確認します。
そして、Networkをクリックして、otherをクリックして、m 3 u 8とtsマークが付いている請求住所を探します。
分かりません。下の図を見てください。ちょっと重要です。ウェブサイトがカットした後にtsを通じて(通って)ビデオをロードして、規則的ではありませんて、m 3 u 8ファイルを通じて(通って)付属したのです。つまり、ウェブサイトは必ずm 3 u 8ファイルを先にロードして、m 3 u 8ファイルによってtsファイルを要求します。ですから、m 3 u 8ファイルが見つからないなら、最初のtsファイルを探して、上にひっくり返してもいいです。m 3 u 8ファイルを見つけられます。
このm 3 u 8ファイルをクリックしてください。右側はその要求アドレスです。
要求住所は以下の通りです。
https://ycalvod.yicai.com/record/live/cbn/ca233887-1443-4bdf-b762-3b4b3a217085_LD.m 3 u 8auth_key=155703722-0-6 f 09 e 9 a 1569 f 027 a 035 e 31 c 238 c 48 c&ycfrom=yicaiwww
上の住所をブラウザのアドレスボックスに入力してダウンロードしてもいいです。ソースコードを確認することによって、対応するhtmlコードを見つけられます。
これはダウンロードしたm 3 u 8ファイルです。
写真から見れば、各tsファイルは相対的な住所ですので、以下の絶対住所を探さなければなりません。
tsファイルの住所は以下の通りです。
https://ycalvod.yicai.com/record/live/cbn_ylod/155111614_344608.ts
上で、私達はすでにこのウェブサイトのビデオをモードの分析のとても透徹していることをロードして、下でコードを搾り始めました。
4.tsファイルを取得する
def getTsUrl():
ts_url_list = []
baseUrl = "https://ycalvod.yicai.com/record/live"
with open("ca233887-1443-4bdf-b762-3b4b3a217085_LD.m3u8", "r", encoding="utf-8") as f:
m3u8Contents = f.readlines()
for content in m3u8Contents:
if content.endswith("ts
"):
ts_Url = baseUrl + content.replace("
", "").replace("..", "")
ts_url_list.append(ts_Url)
print(ts_Url)
return ts_url_list
5.tsファイルをダウンロードする
def download_ts_video(download_path, ts_url_list):
download_path = r"C:\Users\Administrator\Desktop\AiShu\ \TS "
for i in range(len(ts_url_list)):
ts_url = ts_url_list[i]
try:
response = requests.get(ts_url, stream=True, verify=False)
except Exception as e:
print(" :%s" % e.args)
return
ts_path = download_path + "\{}.ts".format(i)
with open(ts_path, "wb+") as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
print("TS !!")
これは私が現地でダウンロードしたtsカット動画です。6.TSビデオをマージする
def heBingTsVideo(download_path,hebing_path):
all_ts = os.listdir(download_path)
with open(hebing_path, 'wb+') as f:
for i in range(len(all_ts)):
ts_video_path = os.path.join(download_path, all_ts[i])
f.write(open(ts_video_path, 'rb').read())
print(" !!")
最後の結果は以下の通りです。7.完全なコード
興味のある仲間は研究してみてもいいです。
import requests,os
def getTsUrl():
ts_url_list = []
baseUrl = "https://ycalvod.yicai.com/record/live"
with open("ca233887-1443-4bdf-b762-3b4b3a217085_LD.m3u8", "r", encoding="utf-8") as f:
m3u8Contents = f.readlines()
for content in m3u8Contents:
if content.endswith("ts
"):
ts_Url = baseUrl + content.replace("
", "").replace("..", "")
ts_url_list.append(ts_Url)
print(ts_Url)
return ts_url_list
def download_ts_video(download_path, ts_url_list):
download_path = r"C:\Users\Administrator\Desktop\AiShu\ \TS "
for i in range(len(ts_url_list)):
ts_url = ts_url_list[i]
try:
response = requests.get(ts_url, stream=True, verify=False)
except Exception as e:
print(" :%s" % e.args)
return
ts_path = download_path + "\{}.ts".format(i)
with open(ts_path, "wb+") as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
print("TS !!")
def heBingTsVideo(download_path,hebing_path):
all_ts = os.listdir(download_path)
with open(hebing_path, 'wb+') as f:
for i in range(len(all_ts)):
ts_video_path = os.path.join(download_path, all_ts[i])
f.write(open(ts_video_path, 'rb').read())
print(" !!")
if __name__ == '__main__':
download_path = r"C:\Users\Administrator\Desktop\AiShu\ \TS "
hebing_path = r"C:\Users\Administrator\Desktop\AiShu\ \ TS \ .mp4"
ts_url_list = getTsUrl()
download_ts_video(download_path, ts_url_list)
heBingTsVideo(download_path,hebing_path)
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。