Python 파충류 의 m3u 8 파일 에서 작은 동 영상 을 추출 하 는 정확 한 자세
인터넷 에서 얻 은 작은 동 영상(.ts 형식)이 열 리 지 않 으 면 어떻게 합 니까?IDM 다운 로드 를 사용 하면 가끔 나타 날 때 가 있 습 니 다
,IDM
.어떻게 해결 합 니까?이 블 로 그 는 m3u 8 파일 의.ts
동 영상 을 정확하게 추출 하고 완전한.mp4
형식 동 영상 을 합성 하 는 방법 에 대해 이야기 했다.1.HLS 프로 토 콜 과 m3u 8 파일
HLS
,즉 H T P L i v e S t r e a m i n g HTTP\ Live\ Streaming HTTP Live Streaming 의 줄 임 말 은 애플 이 HTTP 기반 스 트림 미디어 네트워크 전송 프로 토 콜 을 제시 한 것 이다.애플 의 퀵 타임 X 와 아이 폰 소프트웨어 시스템 의 일부분 이다.그것 의 작업 원 리 는 전체 흐름 을 작은 HTTP 기반 파일 로 나 누 어 다운로드 하 는 것 이다.매번 조금 만 다운로드 하 는 것 이다.미디어 흐름 이 재생 되 고 있 을 때 클 라 이언 트 는 다양한 예비 소스 에서 서로 다른 속도 로 같은 자원 을 다운로드 하여 스 트림 미디어 세 션 이 서로 다른 데이터 속도 에 적응 하도록 할 수 있 습 니 다.스 트림 미디어 세 션 을 시작 할 때 클 라 이언 트 는 메타 데 이 터 를 포함 한 확장 M3U(m3u 8)재생 목록 파일 을 다운로드 하여 사용 가능 한 미디어 스 트림 을 찾 습 니 다.M3U8
는 U n i c o d e 유 니 코드 유 니 코드 버 전의 M3U 로 UTF-8 로 인 코딩 한다.'M3U"와"M3U 8"파일 은 모두 애플 이 사용 하 는 H T P 입 니 다. L i v e S t r e a m i n g HTTP\ Live\ Streaming HTTP Live 스 트 리밍 형식의 기본 으로 아이 폰 과 맥 북 등에 서 재생 할 수 있다.멀티미디어 목록 을 재생 하 는 파일 형식 으로 텍스트 내용 은 일련의 미디어 세 션 자원 으로 이 세 션 자원 을 순서대로 재생 하면 멀티미디어 자원 을 완전 하 게 보 여줄 수 있다.그 형식 은 대체로 다음 과 같다.
#
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
1af12fece7a000000.ts
#EXTINF:4.320000,
1af12fece7a000001.ts
...
#EXTINF:3.800000,
1af12fece7a001155.ts
#EXT-X-ENDLIST
#
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/key.key"
#EXTINF:3,
https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/EUtRrqJU.ts
#EXTINF:4.72,
https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/HF90vrrN.ts
...
#EXTINF:0.24,
https://ts1.yuyuangewh.com:9999/20200808/1XdSSbTb/2000kb/hls/b7ZLcRqT.ts
#EXT-X-ENDLIST
중국어 위 키 피 디 아----HTTP 라 이브 스 트 리밍 중국어 위 키 백과-M3U
다음은 몇 가지
m3u8
에서 흔히 볼 수 있 는 라벨 을 소개 합 니 다.라벨
격식.
역할.
EXTM3U
#EXTM3U
이 파일 은 m3u 8 파일 임 을 표시 합 니 다.m3u 8 파일 마다 이 탭 을 첫 줄 에 두 어야 합 니 다.EXT-X-VERSION
EXT-X-VERSION:<number>
이 파일 은 m3u 8 파일 임 을 표시 합 니 다.m3u 8 파일 마다 이 탭 을 첫 줄 에 두 어야 합 니 다.EXT-X-TARGETDURATION
#EXT-X-TARGETDURATION:<s>
각 동 영상 세그먼트 의 최대 시간(단위 초)을 표시 합 니 다.EXT-X-PLAYLIST-TYPE
#EXT-X-PLAYLIST-TYPE:<type-enum>
스 트림 미디어 형식 을 표시 합 니 다.VOD
이 화면 이 점파 원 으로 흐 르 기 때문에 서버 에서 이m3u8
파일 을 변경 할 수 없습니다.EVENT
이 동 영상 이 생방송 소스 로 흐 르 기 때문에 서버 는 이 파일 의 임의의 부분 을 변경 하거나 삭제 할 수 없 지만 파일 말미 에 새로운 내용 을 추가 할 수 있다.EXT-X-MEDIA-SEQUENCE
#EXT-X-MEDIA-SEQUENCE:<number>
재생 목록 의 첫 번 째 URL 세 션 파일 의 시리 얼 번 호 를 표시 합 니 다.모든 미디어 세 션 URL 은 유일한 전체 시리 얼 번 호 를 가지 고 있 습 니 다.모든 미디어 세 션 시리 얼 번 호 는 나타 나 는 순서대로 1 을 추가 합 니 다.이 탭 이 지정 되 지 않 으 면 기본 시리 얼 번 호 는 0 부터 시작 합 니 다.EXT-X-KEY
#EXT-X-KEY:METHOD=AES-128,URI="http:xxxx",IV="xxxx"
비디오 스 트림 파일 의 복호화 방법 을 표시 합 니 다.METHOD
암호 화 방식 을 표시 합 니 다.URI
키 경 로 를 표시 합 니 다.이 키 는 16 바이트 의 데이터 입 니 다.IV
128 비트 의 16 진수 입 니 다.EXTINF
#EXTINF:<duration>,[<title>]
다음 URL 에서 지정 한 미디어 세 션 의 시간(단 위 는 초)을 나타 내 고duration
10 진법 의 정형 또는 부동 소수점 형 이 될 수 있 으 며 그 값 은EXT-X-TARGETDURATION
지정 한 값 보다 작 거나 같 아야 합 니 다.EXT-X-ENDLIST
#EXT-X-ENDLIST
m3u 8 파일 의 끝 표시m3u 8 파일 형식 상세 설명 작성 자:Whyn
2.제3자 라 이브 러 리-m3u 8
『8195』
m3u8
는 m3u 8 파일 을 분석 하 는 데 사용 되 는 해석 기 입 니 다.라 이브 러 리 에 대한 상세 한 조작 은 참고 하 십시오공식 예시.
# m3u8
pip install m3u8
# m3u8
import m3u8
# M3U8
playlist = m3u8.load(uri='http://videoserver.com/playlist.m3u8') # url
# playlist = m3u8.load(uri='playlist.m3u8') # file
print(playlist.segments) # EXT-X-KEY EXTINF :
print(playlist.target_duration) # EXT-X-TARGETDURATION
for key in playlist.keys:
if key:
# ,
print(key.uri, key.method, key.iv)
3.mp4 파일 합성이번 동 영상 을 예 로 들 면 절 차 는 다음 과 같다.
동 영상 에 대응 하 는
1.
파일 을 찾 습 니 다..m3u8
해석2.
파일,그 중에서 추출.m3u8
영상의 url.ts
형식의 동 영상 다운로드3.
.ts
형식의 동 영상 복호화4.
동 영상
# 1 , m3u8 , m3u8 url
playlist = m3u8.load(uri='./data/index.m3u8')
# 2 , URL
for seg in playlist.segments:
print(seg.uri)
# 3 , ts
with open('xxxxx.ts', 'wb') as f:
ts = get_ts(url)
f.write(ts)
# 4 ,
cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)
aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
cipher_text = aes.decrypt(cipher_text)
# 5 ,
files = glob.glob(os.path.join('./video', '*.ts'))
for file in files:
with open(file, 'rb') as fr, open('./video_de/baitoushan.mp4', 'ab') as fw:
content = fr.read()
fw.write(content )
4.전체 코드
# -*- coding: utf-8 -*-
# @Time : 2021/5/10 20:11
# @Author : XiaYouRan
# @Email : [email protected]
# @File : video.py
# @Software: PyCharm
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from concurrent.futures import ThreadPoolExecutor
import requests
import m3u8
import glob
import os
import time
import logging
logging.getLogger("urllib3").setLevel(logging.WARNING)
def AESDecrypt(cipher_text, key, iv):
cipher_text = pad(data_to_pad=cipher_text, block_size=AES.block_size)
aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
cipher_text = aes.decrypt(cipher_text)
# clear_text = unpad(padded_data=cipher_text, block_size=AES.block_size)
return cipher_text
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
def get_ts(url):
try:
response = requests.get(url, verify=False)
response.raise_for_status()
response.encoding = 'utf-8'
return response.content
except Exception as err:
print(err)
return b''
def save_ts(url, index):
filename = os.path.join('./video', str(index).zfill(5) + '.ts')
with open(filename, 'wb') as f:
ts = get_ts(url)
f.write(ts)
print(filename + ' is ok!')
if __name__ == '__main__':
playlist = m3u8.load(uri='./data/index.m3u8')
# , index
with ThreadPoolExecutor(max_workers=10) as pool:
for index, seg in enumerate(playlist.segments):
pool.submit(save_ts, seg.uri, index)
key = get_ts(playlist.keys[-1].uri)
files = glob.glob(os.path.join('./video', '*.ts'))
for file in files:
with open(file, 'rb') as fr, open('./video_de/baitoushan.mp4', 'ab') as fw:
content = fr.read()
encontent = AESDecrypt(content, key=key, iv=key)
fw.write(encontent)
print(file + ' is ok!')
다운로드.ts
파일 효 과 는 다음 과 같 습 니 다.『8195』합성
5.
파일 효 과 는 다음 과 같 습 니 다.5.종결 어
Musicer 소스 코드 창고
Musicer음악 파충류 가 시 작 됐 습 니 다.지속 적 인 업데이트 중 입 니 다.스타 를 밟 으 러 오신 것 을 환영 합 니 다!d(R∇Q*)d
이상 은 Python 파충류 의 m3u 8 파일 에서 작은 동 영상 을 추출 하 는 정확 한 자세 에 대한 상세 한 내용 입 니 다.Python 에서 m3u 8 파일 의 작은 동 영상 을 추출 하 는 데 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.