Python 스크립트를 사용하여 ffmpeg를 호출하여 ts 분할된 비디오 파일 다운로드

함께 만들고 함께 성장하기 위해 함께 노력하십시오! "너겟 데일리 뉴플랜 · 8월 업데이트 챌린지" 참여 30일차입니다. 클릭하시면 보실 수 있습니다.

머리말

오늘날의 온라인 동영상은 mp4 형식이 아니라 모두 ts 파일 형식입니다. 불법 복제 및 트래픽 및 대역폭 남용을 방지하기 위해 ts 파일 형식은 주로 색인이 필요한 동영상 분할 기술입니다. 파일 목록은 모든 비디오의 세그먼트 정보, 시간 길이 및 ts 파일 이름에 대한 일부 정보:

이미지.png

이러한 하위 세그먼트 정보는 재생 중에 비동기적으로 로드되며, 지속 시간을 직접 계산하여 특정 세그먼트의 로드를 건너뛰고 건너뛰는 것도 매우 편리합니다.

이미지.png

ts 파일만 다운받아서 바로 재생이 안되는데 어떻게 해결해야 할까요? 여러 가지 방법이 있습니다. 우리와 같은 기술적인 사람들에게 가장 적합한 솔루션을 찾았습니다. 유명한 솔루션을 사용하는 것입니다 ffmpeg. ffmpeg 명령줄을 직접 사용하여 원격 인덱스 파일에 액세스하여 하나의 MP4 파일을 다운로드하고 병합할 수 있습니다. 오늘은 간단하게 사용법을 소개하겠습니다.

다운로드

ffmpeg는 오디오 및 비디오 처리를 위한 매우 사용하기 쉬운 소프트웨어 툴킷입니다.Win10에서 ffmpeg를 사용하려면 다운로드한 다음 환경 변수를 추가해야 합니다.다운로드 웹 사이트: FFmpeg 다운로드

이미지.png

다운로드가 완료되면 압축을 풀고 압축을 푼 파일을 적절한 위치로 이동합니다.

이미지.png

환경 변수를 추가하려면 이전 문서 Fiddler가 HTTPS 링크를 크롤링할 수 없습니까? 를 참조할 수 있습니다. 루트 권한을 통해 Fiddler 인증서를 시스템 루트 인증서 디렉토리로 이동합니다 . Open SSL을 구성하는 것과 동일하게 최종 구성만 여기에 표시됩니다.

이미지.png

이 시점에서 명령줄을 확인하여 환경 변수가 올바른지 확인합니다.

ffmpeg -version
复制代码

이미지.png성공적으로 설치

다운로드

다운로드 다운로드해야 하는 웹 사이트의 인덱스 파일에 대한 링크를 찾으려면 브라우저 F12 디버그 콘솔에서 여기를 참조하십시오.

이미지.png

기본 명령을 사용하여 다운로드한 명령이 다음과 같은 경우:

ffmpeg -i {m3u8链接} -c copy -bsf:a aac_adtstoasc {文件名}.mp4'
复制代码

기본 명령을 사용하여 직접 다운로드할 수 있지만 Win10 시스템은 Python 명령줄에서 ffmpeg의 환경 변수를 인식할 수 없습니다. 따라서 ffmpeg의 특정 디렉토리를 추가하기 위해 Python을 사용하여 ffmpeg를 호출하는 방법을 보여주는 간단한 기능이 있습니다. 비디오 다운로드:


def one_video(urls, file_name):
    save_path = 'D:\Download\ts\'+file_name
    shell_str = 'D:\MiniTool\ffmpeg\bin\ffmpeg.exe -i '+url+' -c copy -bsf:a aac_adtstoasc '+save_path+'.mp4'
    os.system(shell_str)
urls = 'https://*****/videos/augdeduuigdrypzmvseh/index.m3u8?token=eyssddcflgjkmddsds********' 
file_name = 'test'
one_video(urls, file_name)
复制代码

효과:

이미지.png

이미지.png

요약하다

ffmpeg는 매우 강력한 도구인데 스크립트의 단일 쓰레드가 너무 느리다 파일이 크고 파일이 많으면 매우 느립니다.

또한 이 m3u8 인덱스 파일은 일반적으로 암호화되는 매우 중요한 파일입니다. 제 예에는 토큰 재생 방지 기능이 있어 한 번 액세스하면 두 번째 액세스가 만료됩니다. 웹 페이지에서 암호를 해독해야 합니다. to 이 토큰에는 문제가 없지만 실제 상황은 일반적으로 더 복잡합니다.

рекомендация

отjuejin.im/post/7136823714410135559