diff --git a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/PKG-INFO b/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/PKG-INFO deleted file mode 100644 index a500238c..00000000 --- a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/PKG-INFO +++ /dev/null @@ -1,11 +0,0 @@ -Metadata-Version: 1.0 -Name: ffmpeg -Version: 1.4 -Summary: ffmpeg python package url [https://github.com/jiashaokun/ffmpeg] -Home-page: https://github.com/jiashaokun/ffmpeg -Author: SkeyJIA -Author-email: 363604236@qq.com -License: MIT Licence -Description: ffmpeg python package -Keywords: python ffmpeg -Platform: any diff --git a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/SOURCES.txt b/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/SOURCES.txt deleted file mode 100644 index d0d81c04..00000000 --- a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/SOURCES.txt +++ /dev/null @@ -1,12 +0,0 @@ -README.md -setup.cfg -setup.py -ffmpeg/__init__.py -ffmpeg/audio.py -ffmpeg/image.py -ffmpeg/stream.py -ffmpeg/video.py -ffmpeg.egg-info/PKG-INFO -ffmpeg.egg-info/SOURCES.txt -ffmpeg.egg-info/dependency_links.txt -ffmpeg.egg-info/top_level.txt \ No newline at end of file diff --git a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/dependency_links.txt b/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/dependency_links.txt deleted file mode 100644 index 8b137891..00000000 --- a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/installed-files.txt b/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/installed-files.txt deleted file mode 100644 index c88e232f..00000000 --- a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/installed-files.txt +++ /dev/null @@ -1,14 +0,0 @@ -..\ffmpeg\__init__.py -..\ffmpeg\__pycache__\__init__.cpython-36.pyc -..\ffmpeg\__pycache__\audio.cpython-36.pyc -..\ffmpeg\__pycache__\image.cpython-36.pyc -..\ffmpeg\__pycache__\stream.cpython-36.pyc -..\ffmpeg\__pycache__\video.cpython-36.pyc -..\ffmpeg\audio.py -..\ffmpeg\image.py -..\ffmpeg\stream.py -..\ffmpeg\video.py -PKG-INFO -SOURCES.txt -dependency_links.txt -top_level.txt diff --git a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/top_level.txt b/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/top_level.txt deleted file mode 100644 index 20645e64..00000000 --- a/venv/Lib/site-packages/ffmpeg-1.4-py3.6.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -ffmpeg diff --git a/venv/Lib/site-packages/ffmpeg/__init__.py b/venv/Lib/site-packages/ffmpeg/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/venv/Lib/site-packages/ffmpeg/audio.py b/venv/Lib/site-packages/ffmpeg/audio.py deleted file mode 100644 index 843fbad7..00000000 --- a/venv/Lib/site-packages/ffmpeg/audio.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/local/bin/python3 - -import subprocess - - -# 调整音频播放速率 -def a_speed(input_file, speed, out_file): - try: - cmd = "ffmpeg -y -i %s -filter_complex \"atempo=tempo=%s\" %s" % (input_file, speed, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 音频截取 str_second 开始时间秒数 intercept 截取长度秒。从开始时间截取多少秒的音频 -def a_intercept(input_file, str_second, duration, out_file): - try: - cmd = "ffmpeg -y -i %s -ss %s -t %s %s" % (input_file, str_second, duration, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 音频拼接 input_file_list = ["1.mp3", "2.mp3"] -def a_split(input_file_list, out_file): - try: - if len(input_file_list) < 2: - return False - split_str = "|" - a_list = split_str.join(input_file_list) - - cmd= "ffmpeg -y -i \"concot:%s\" %s" % (a_list, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 调整音量大小 -def a_volume(input_file, volume, out_file): - try: - cmd = "ffmpeg -y -i %s -af volume=%s %s" % (input_file, volume, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False diff --git a/venv/Lib/site-packages/ffmpeg/image.py b/venv/Lib/site-packages/ffmpeg/image.py deleted file mode 100644 index 6d1f3739..00000000 --- a/venv/Lib/site-packages/ffmpeg/image.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/local/bin/python3 -# module sys - -import subprocess - - -# png 转 gif -def img_trans_gif(png_list, out_file): - try: - cmd = "ffmpeg -f image2 -i %s -y %s" % (png_list, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# png 转 视频 -def img_trans_video(png_list, duration, out_file): - try: - cmd = "ffmpeg -loop 1 -f image2 -i %s -t %s -vcodec libx264 -y %s" % (png_list, duration, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# gif 转 图片 -def gif_trans_img(input_file, out_path, img_prefix, category="png"): - try: - if out_path == "": - return False - out_path = out_path.rstrip("/") - img = img_prefix + "_%d" - - out_img = "%s/%s.%s" % (out_path, img, category) - cmd = "ffmpeg -y -i %s %s" % (input_file, out_img) - - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False diff --git a/venv/Lib/site-packages/ffmpeg/stream.py b/venv/Lib/site-packages/ffmpeg/stream.py deleted file mode 100644 index 053671ce..00000000 --- a/venv/Lib/site-packages/ffmpeg/stream.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/python2.7 -# coding=utf-8 - -import os - -import json - -import subprocess - - -class Stream(object): - def __init__(self): - self.cmd = "" - self.out_file = "" - self.vcode_type = "" - self.input_file = "" - self.word_list_str = "" - self.subbtitle_file = "" - - self.cmd = [] - self.img_file = [] - self.word_list = [] - self.img_dynamic_list = [] - - self.image_list = {} - self.dynamic_list = {} - - # 输入文件 - def input(self, file): - self.input_file = file - - # 添加图片 - def img(self, img, x="0", y="0", str_time="0", end_time="0"): - if img == "": - return False - input_info = self.video_info() - - if end_time == "0": - end_time = float(input_info["format"]["duration"]) + 10.0 - - img_data = { - "img": img, - "x": str(x), - "y": str(y), - "str_time": str(str_time), - "end_time": str(end_time) - } - - self.img_file.append(img_data) - - img_input = [] - img_overlay = [] - - for val in self.img_file: - img_input.append(" -i %s" % val["img"]) - img_overlay.append(" overlay=x=%s:y=%s:enable='if(gt(t,%s),lt(t,%s))" % ( - val["x"], - val["y"], - val["str_time"], - val["end_time"] - ) - ) - - img_input_str = " ".join(img_input) - img_overlay_str = ",".join(img_overlay) - - self.image_list = { - "input": img_input_str, - "overlay": img_overlay_str - } - - # 添加动态图片 gif apng 等 - def img_dynamic(self, file, x="0", y="0", str_time="0", end_time="0"): - input_info = self.video_info() - if file == "": - return False - if end_time == "": - end_time = float(input_info["format"]["duration"]) + 10.0 - - apng = { - "input": " -ignore_loop 0 -i %s" % file, - "x": str(x), - "y": str(y), - "str_time": str(str_time), - "end_time": str(end_time) - } - self.img_dynamic_list.append(apng) - - img_dy_input = [] - img_dy_overlay = [] - for val in self.img_dynamic_list: - img_dy_input.append(val["input"]) - img_dy_overlay.append(" overlay=x=%s:y=%s:shortest=1:enable='if(gt(t,%s), lt(t,%s))'" % ( - val["x"], - val["y"], - val["str_time"], - val["end_time"] - ) - ) - img_dy_input_str = " ".join(img_dy_input) - img_dy_overlay_str = ",".join(img_dy_overlay) - - self.dynamic_list = { - "input": img_dy_input_str, - "overlay": img_dy_overlay_str - } - - # 添加文字水印 - def word_water_mark(self, c, x="0", y="0", str_time="0", end_time="0", font="", color="white"): - if font == "": - return False - input_info = self.video_info() - if c == "": - return False - if end_time == "0": - end_time = float(input_info["format"]["duration"]) + 10.0 - - text = " drawtext=text='%s':x=%s:y=%s:enable='if(gt(t,%s),lt(t,%s))':fontfile=%s:" \ - "fontcolor=%s" % (c, str(x), str(y), str(str_time), str(end_time), str(font), str(color)) - self.word_list.append(text) - - self.word_list_str = ",".join(self.word_list) - - # 添加字幕文件 subtitles=txt.srt - def subbtitle(self, file): - self.subbtitle_file = " subtitles=%s" % file - - # 编码方式 -vcodec - def vcode(self, code): - if code == "": - return False - self.vcode_type = " -vcodec %s" % code - - # 输出文件 - def out(self, file): - if file == "": - return False - self.out_file = "%s" % file - - # 执行脚本 - def run(self): - if self.input_file == "": - return False - im = "ffmpeg -i %s" % self.input_file - ov = "" - - if len(self.dynamic_list) > 0 and self.dynamic_list["input"] != "": - im = "%s %s" % (im, self.dynamic_list["input"]) - - if ov != "": - ov = "%s,%s" % (ov, self.dynamic_list["overlay"]) - else: - ov = self.dynamic_list["overlay"] - if len(self.image_list) > 0: - im = "%s %s" % (im, self.image_list["input"]) - - if ov != "": - ov = "%s,%s" % (ov, self.dynamic_list["overlay"]) - else: - ov = self.dynamic_list["overlay"] - - # 文字水印 - if self.word_list_str != "": - if ov != "": - ov = "%s,%s" % (ov, self.word_list_str) - else: - ov = self.word_list_str - - # 字幕 - if self.subbtitle_file != "": - if ov != "": - ov = "%s,%s" % (ov, self.subbtitle_file) - else: - ov = self.subbtitle_file - - if self.vcode_type != "": - self.cmd = "%s -filter_complex \"%s\" -y %s %s" % (im, ov, self.vcode_type, self.out_file) - else: - self.cmd = "%s -filter_complex \"%s\" -y %s" % (im, ov, self.out_file) - - self.do() - - # 获取视频的相关时长信息 - def video_info(self): - result = {} - if os.path.isfile(self.input_file) is False: - return result - - cmd = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', self.input_file] - returned_data = subprocess.check_output(cmd) - return json.loads(returned_data.decode('utf-8')) - - # 执行命令 - def do(self): - if self.cmd == "": - return False - res = subprocess.call(self.cmd, shell=True) - if res != 0: - return False - return True - - -if __name__ == '__main__': - stream = Stream() - stream.input("face.mp4") - stream.img("t1.png") - stream.img("t2.png", "10", y=10, str_time=5, end_time=10) - stream.img_dynamic("t1.apng", x=10, y=10, str_time=5, end_time=10) - stream.img_dynamic("t2.apng", x=10, y=10, str_time=5, end_time=9) - stream.word_water_mark("测试文字水印1", x="10", y="10", str_time="0", end_time="20", font="ttf.ttf", color="white") - stream.word_water_mark("测试文字水印2", x="10", y="10", str_time="0", end_time="20", font="ttf.ttf", color="white") - stream.subbtitle("srt.srt") - stream.out("out.mp4") - stream.run() - diff --git a/venv/Lib/site-packages/ffmpeg/video.py b/venv/Lib/site-packages/ffmpeg/video.py deleted file mode 100644 index f0c8cb1c..00000000 --- a/venv/Lib/site-packages/ffmpeg/video.py +++ /dev/null @@ -1,302 +0,0 @@ -#!/usr/local/bin/python3 -# module sys - - -import subprocess - - -def ins_img(input_file, img_data, out_file): - try: - if len(img_data) <= 0: - return False - - img_list = [] - img_list_str = " -i " - png_complex = [] - complex_png_str = "," - - for img in img_data: - if len(img["x"]) == 0: - img["x"] = "0" - - if len(img["y"]) == 0: - img["y"] = "0" - img_list.append(img["img"]) - - if len(img["str_time"]) > 0: - if len(img["end_time"]) > 0: - cmp_str = "overlay=x=%s:y=%s:enable='if(gt(t,%s),lt(t,%s))'" % (img["x"], img["y"], img["str_time"], img["end_time"]) - else: - cmp_str = "overlay=x=%s:y=%s:enable='if(gt(t,%s))'" % (img["x"], img["y"], img["str_time"]) - else: - cmp_str = "overlay=x=%s:y=%s" % (img["x"], img["y"]) - - png_complex.append(cmp_str) - - img_str_list = img_list_str.join(img_list) - complex_png_str = complex_png_str.join(png_complex) - - cmd = "ffmpeg -i %s -i %s -filter_complex \"%s\" -y %s" % (input_file, img_str_list, complex_png_str, out_file) - - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - - except Exception: - return False - - -# 视频添加动图 gif apng -def ins_dynamic_img(input_file, img_data, out_file): - try: - if img_data["img"] == "": - return False - - if img_data["x"] == "": - img_data["x"] = 0 - - if img_data["y"] == "": - img_data["y"] = 0 - - if img_data["str_time"] != "": - if img_data["end_time"] != "": - comp = "overlay=x=%s:y=%s:shortest=1:enable='if(gt(t,%s), lt(t,%s))'" % (img_data["x"], img_data["y"], - img_data["str_time"], - img_data["end_time"]) - else: - comp = "overlay=x=%s:y=%s:shortest=1:enable='if(gt(t,%s)'" % (img_data["x"], img_data["y"], - img_data["str_time"]) - else: - comp = "overlay=x=%s:y=%s:shortest=1" - - cmd = "ffmpeg -i %s -ignore_loop 0 -i %s -filter_complex \"%s\" -y %s" % (input_file, img_data["img"], comp, - out_file) - - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频静音 分离音频流 - -def separate_audio(input_file, out_file): - try: - cmd = "ffmpeg -y -i %s -vcodec copy -an %s" % (input_file, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频静音 使用静音帧 为视频静音 -def video_ins_mute_audio(input_file, mute_mp3_file, out_file): - try: - cmd = "ffmpeg -y -i %s -filter_complex '[1:0]apad' -shortest %s" % (input_file, mute_mp3_file, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频设置分辨率 及 码率 -def trans_code(input_file, width, height, rate, out_file): - try: - cmd = "ffmpeg -y -i %s -s %sx%s -b %sk -acodec copy %s" % (input_file, width, height, rate, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频添加弹幕 -def ins_barrage(input_file, barrage, out_file): - try: - if len(barrage) == 0: - return False - - bag = [] - bag_str = ", " - vf_str = "" - - for val in barrage: - if val["fontsize"] == "": - val["fontsize"] = 40 - - if val["fontcolor"] == "": - val["fontcolor"] = "white" - - if val["y"] == "": - val["y"] = "100" - - if val["str_time"] == "": - val["str_time"] = 0 - else: - val["str_time"] = int(val["str_time"]) - - if val["speet"] == "": - val["speet"] = 150 - else: - val["speet"] = int(val["speet"]) - - txt = "drawtext=text='%s':fontcolor=%s:fontsize=%s:fontfile=%s:y=%s:x=w-(t-%d)*%d:enable='gte(t,%d)'" % ( - val["context"], - val["fontcolor"], - val["fontsize"], - val["fontfile"], - val["y"], - val["str_time"], - val["speet"], - val["str_time"] - ) - bag.append(txt) - - vf_str = bag_str.join(bag) - - cmd = "ffmpeg -y -i %s -vf \"%s\" %s" % (input_file, vf_str, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 调整视频速率 speed 小于 1 减速,大于 1 加速 1 等速 -def playback_speed(input_file, speed, out_file): - try: - if speed == "": - speed = "1" - cmd = "ffmpeg -y -i %s -filter_complex \"setpts=PTS/%s\" %s" % (input_file, speed, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - - except Exception: - return False - - -# 视频倒放 ( 视频 + 音频 ) -def a_v_reverse(input_file, out_file): - try: - cmd = "ffmpeg -y -i %s -vf vf reverse -af areverse %s " % (input_file, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频倒放 (视频) -def v_reverse(input_file, out_file): - try: - cmd = "ffmpeg -y -i %s -vf vf reverse %s " % (input_file, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频截取 截取 duration 时长的视频 从 str_second 开始截取 -def v_intercept(input_file, str_second, duration, out_file): - try: - cmd = "ffmpeg -y -i %s -ss %s -t %s -f mp4 %s" % (input_file, str_second, duration, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频合并 严格模式 文件协议合并 -def strict_v_merge(input_file, out_file): - try: - cmd = "ffmpeg -y -f concat -safe 0 -i %s -acodec copy %s" % (input_file, out_file) - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频合并 有损模式 input_file_list = ["1.mp4", "2.ts", "3.flv"] -def damage_v_merge(input_file_list, out_file): - try: - if len(input_file_list) < 2: - return False - - video = [] - video_n = len(input_file_list) - video_str = " -i " - - comp_list = [] - comp_str = " " - i = 0 - for val in input_file_list: - video.append(val) - v_str = "[%s:a][%s:v]" % (i, i) - comp_list.append(v_str) - - i += 1 - - video_list = video_str.join(video) - com_list_str = comp_str.join(comp_list) - - cmd = "ffmpeg -y -i %s -filter_complex \"%s concat=n=%d:v=1:a=1\" -vcodec h264_nvenc %s" % ( - video_list, - com_list_str, - video_n, - out_file - ) - - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False - - -# 视频转 图片 -def video_trans_img(input_file, out_path, img_prefix, category="png"): - try: - out_path = out_path.rstrip("/") - img = img_prefix + "_%d" - - out_img = "%s/%s.%s" % (out_path, img, category) - cmd = "ffmpeg -i %s -f image2 %s" % (input_file, out_img) - - res = subprocess.call(cmd, shell=True) - - if res != 0: - return False - return True - except Exception: - return False