午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

Python調用ffmpeg開源視頻處理庫,批量處理視頻

瀏覽:191日期:2022-07-05 11:16:04

代碼示例

# coding=utf-8import osimport subprocessimport datetimeimport json, pprintimport re, timeimport threadingimport randomimport shutilclass FFmpeg: def __init__(self, editvdo, addlogo=None, addmusic=None, addvdohead=None, addvdotail=None): self.editvdo = editvdo self.addlogo = addlogo self.addmusic = addmusic self.addvdohead = addvdohead self.addvdotail = addvdotail self.vdo_time, self.vdo_width, self.vdo_height, self.attr_dict = self.get_attr() self.editvdo_path = os.path.dirname(editvdo) self.editvdo_name = os.path.basename(editvdo) def get_attr(self): ''' 獲取視頻屬性參數 :return: ''' strcmd = r’ffprobe -print_format json -show_streams -i '{}'’.format(self.editvdo) status, output = subprocess.getstatusoutput(strcmd) agrs = eval(re.search(’{.*}’, output, re.S).group().replace('n', '').replace(' ', ’’)) streams = agrs.get(’streams’, []) agrs_dict = dict() [agrs_dict.update(x) for x in streams] vdo_time = agrs_dict.get(’duration’) vdo_width = agrs_dict.get(’width’) vdo_height = agrs_dict.get(’height’) attr = (vdo_time, vdo_width, vdo_height, agrs_dict) return attr def edit_head(self, start_time, end_time, deposit=None): ''' 截取指定長度視頻 :param second: 去除開始的多少秒 :param deposit: 另存為文件 :return: True/Flase ''' if None == deposit: deposit = self.editvdo_path+’/’+’edit_head’+self.editvdo_name start = time.strftime(’%H:%M:%S’, time.gmtime(start_time)) end = time.strftime(’%H:%M:%S’, time.gmtime(end_time)) strcmd = ’ffmpeg -i '{}' -vcodec copy -acodec copy -ss {} -to {} '{}' -y’.format( self.editvdo, start, end, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False def edit_logo(self, deposit=None): ''' 添加水印 :param deposit:添加水印后另存為路徑,為空則覆蓋 :return: True/False ''' if None == deposit: deposit = self.editvdo_path+’/’+’edit_logo’+self.editvdo_name strcmd = r’ffmpeg -i '{}' -vf 'movie=’{}’ [watermark];[in] ’ r’[watermark] overlay=main_w-overlay_w-10:10 [out]' '{}'’.format( self.editvdo, self.addlogo, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False def edit_music(self, deposit=None): if None == deposit: deposit = self.editvdo_path+’/’+’edit_music’+self.editvdo_name strcmd = r’ffmpeg -y -i '{}' -i '{}' -filter_complex '[0:a] ’ r’pan=stereo|c0=1*c0|c1=1*c1 [a1], [1:a] ’ r’pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,’ r’pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono|c0=c0+c1[a]' ’ r’-map '[a]' -map 0:v -c:v libx264 -c:a aac ’ r’-strict -2 -ac 2 '{}'’.format(self.editvdo, self.addmusic, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False def edit_rate(self, rete=30, deposit=None): ''' 改變幀率 :param rete: 修改大小幀率 :param deposit: 修改后保存路徑 :return: ''' if None == deposit: deposit = self.editvdo_path+’/’+’edit_music’+self.editvdo_name strcmd = r’ffmpeg -i '{}' -r {} '{}'’ % (self.editvdo, rete, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False def edit_power(self, power=’1280x720’, deposit=None): ''' 修改分辨率 :param power: 分辨率 :param deposit: 修改后保存路徑,為空則覆蓋 :return: ''' if None == deposit: deposit = self.editvdo_path+’/’+’edit_power’+self.editvdo_name strcmd = r’ffmpeg -i '{}' -s {} '{}'’.format(self.editvdo, power, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False def rdit_marge(self, vdo_head, vdo_tail, deposit=None): if None == deposit: deposit = self.editvdo_path+’/’+’rdit_marge’+self.editvdo_name with open(self.editvdo_path+’/’+’rdit_marge.txt’, ’w’, encoding=’utf-8’) as f: f.write('file ’{}’ nfile ’{}’ nfile ’{}’' .format(vdo_head, self.editvdo, vdo_tail)) strcmd = r’ffmpeg -f concat -safe 0 -i '{}' -c copy '{}'’.format( self.editvdo_path + ’/’ + ’rdit_marge.txt’, deposit) result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True) if os.path.exists(deposit): os.remove(self.editvdo) os.rename(deposit, self.editvdo) return True else: return False # ffmpeg - i input.mkv - filter_complex '[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]' - map'[v]' - map'[a]' output.mkvtest = FFmpeg(r'D:vdio4.mp4')pass

以上就是Python調用ffmpeg開源視頻處理庫,批量處理視頻的詳細內容,更多關于python 批量處理視頻的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
主站蜘蛛池模板: 日韩在线二区 | 999精品在线| 国产精品高清在线观看 | 亚洲三级av | 国产区在线看 | 亚洲黄色片网站 | 毛片视频免费 | 啪啪伊人| 久操视屏 | 国产成人av一区二区三区 | 天天看天天操 | 成人黄色激情视频 | 午夜精品视频在线 | 成人在线91| 99这里有精品 | 手机看片国产精品 | 欧洲一区二区在线 | 中文字幕av久久爽一区 | 玖玖在线视频 | 国产成人在线免费观看 | 天天狠狠 | av色综合| 欧美体内she精高潮 偷拍在线视频 | 中文字幕亚洲精品 | 精品国内自产拍在线观看视频 | 国产精品毛片一区视频播 | 日韩免费视频一区二区 | 亚洲精品视频在线播放 | 欧美欧美欧美欧美 | 国产视频福利 | 99热这里只有精 | 青青草原亚洲视频 | 欧美久久影院 | av网站观看 | 91精品国产毛片武则天 | 青草一区 | 成人午夜影院在线观看 | 色一情一乱一乱一区91 | 中文字幕第50页 | 欧洲在线观看 | 午夜精品久久久久久久久 |