安装
编译好的windows可用版本的下载地址(官网中可以连接到这个网站,和官方网站保持同步): http://ffmpeg.zeranoe.com/builds/
该版本为FFMPEG的Static,Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。
使用
ffmpeg.exe
ffmpeg是用于转码的应用程序
命令行进入bin目录,输入以下命令即可将m3u8下载为指定格式的文件
C:\01-python\59-ffmpeg\ffmpeg\bin\ffmpeg -i http://vodcdn.yst.vodjk.com/201909191433/2afc693f2edda43e677598144b12a31e/company/1/2019/8/1/18852t5bfe/sd/a84ccae0440549398f8080f6d336075b.m3u8 .\video\1416.mp4 # C:\01-python\59-ffmpeg\ffmpeg\bin\ffmpeg ffmpeg.exe路径 # http://vodcdn.yst.vodjk.com/201909191433/2afc693f2edda43e677598144b12a31e/company/1/2019/8/1/18852t5bfe/sd/a84ccae0440549398f8080f6d336075b.m3u8 m3u8视频url # .\video\1416.mp4 存放路径是当前文件夹下的video 名称为1416.mp4
ffplay.exe
ffplay是用于播放的应用程序。
ffplay .\3029.mp4
ffprobe.exe
ffprobe是用于查看文件格式的应用程序。
更多高级用法的文档: http://blog.****.net/leixiaohua1020/article/details/12751349
示例
import json, pymysql, requests, os, time, ffmpeg, asyncio, aiohttp, aiomysql, hashlib class yibao(object): def __init__(self): self.db = pymysql.connect(host='localhost', port=3306, database='cfda', user='root', password='root', charset='utf8') self.cursor = self.db.cursor() self.headers = { "user-agent": "com.xinma.yst/YST/5.5.3", "referer": "app.yst.vodjk.com", 'Content-Type': 'application/x-www-form-urlencoded' } self.url = 'https://api.yst.vodjk.com/v1/course?keyid=1004&time=1568774753613&userid=294066&app_version=5.5.3&appid=100004&uutp=android&uuid=ffffffff-dfe4-a66d-24b0-59af559c6620&usertoken=9390faed9a5a0db2818c2233e6c2ffc9&ip=172.17.100.15' self.parse_page() def parse_page(self): self.cursor.execute('SELECT id, parent_id, title, url FROM yaoshitong_class_3 where id > 1386 and id < 1401') for data in self.cursor.fetchall(): data_list = { "keyid": '1004', "time": '1568774753613', "userid": '294066', "app_version": '5.5.3', "appid": '100004', "uutp": 'android', "uuid": 'ffffffff-dfe4-a66d-24b0-59af559c6620', "usertoken": '9390faed9a5a0db2818c2233e6c2ffc9', "ip": '172.17.100.15', # ---------------------- "pagesize": '20', # "modules": 'info:5,comments:1', "modules": 'info%3A5%2Ccomments%3A1', # "courseid": '376', "courseid": str(data[1]), "page": '1', } dict2 = sorted(data_list) a = '' for key in dict2: if key != 'time': a += key + '=' + data_list[key] + '&' m = hashlib.md5() m.update(a[:-1].encode('utf-8')) md1 = m.hexdigest() data2 = md1 + 'e2fae2b4e226e878e7f81e4e7e39c9da' + data_list['time'] m = hashlib.md5() m.update(data2.encode('utf-8')) md2 = m.hexdigest() re_data = { "sign": md2, "pagesize": "20", "courseid": str(data[1]), "modules": "info:5,comments:1", "page": "1", } html = requests.post(url=self.url, headers=self.headers, data=re_data).content.decode('utf-8') print(html) data_json = json.loads(html) u3m8_url = data_json['data']['info']['catalog'][0]['lesson'][0]['video']['url'] try: name = str(data[0]) + '-' + data[1] print("C:\\01-python\\59-ffmpeg\\ffmpeg\\bin\\ffmpeg -i {} .\\video\\{}.mp4".format(u3m8_url, data[0])) os.system("C:\\01-python\\59-ffmpeg\\ffmpeg\\bin\\ffmpeg -i {} .\\video\\{}.mp4".format(u3m8_url, data[0])) print('*' * 100) except: pass time.sleep(1) # self.db.commit() if __name__ == '__main__': yibao()