色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python調(diào)用ffmpeg開(kāi)源視頻處理庫(kù),批量處理視頻

瀏覽:72日期: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): ''' 獲取視頻屬性參數(shù) :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): ''' 截取指定長(zhǎng)度視頻 :param second: 去除開(kāi)始的多少秒 :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調(diào)用ffmpeg開(kāi)源視頻處理庫(kù),批量處理視頻的詳細(xì)內(nèi)容,更多關(guān)于python 批量處理視頻的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
主站蜘蛛池模板: 色熟 | 国产精品久久久久久久久久久久久久 | 一色屋色费精品视频在线观看 | 国产日本韩国不卡在线视频 | 久久久这里只有精品加勒比 | 国产一级精品毛片 | 久久99精品久久久久久久不卡 | 日本美女福利视频 | 成人在线观看午夜 | 亚洲高清国产品国语在线观看 | 成人性欧美丨区二区三区 | 国产一级片毛片 | 97视频免费观看2区 97视频免费上传播放 | 久久在线观看免费视频 | 综合精品在线 | 国产精品久久久久久久久福利 | 久久在线视频播放 | 日本不卡不码高清免费观看 | a毛片免费全部播放完整成 a毛片免费全部在线播放毛 | 免费香蕉成视频成人网 | 国产精品视频男人的天堂 | 亚洲人成网国产最新在线 | 97在线视频免费观看费观看 | 美女张开大腿让男人桶 | 干女人逼视频 | 久久精品视频大全 | 97精品国产综合久久久久久欧美 | 国产成人刺激视频在线观看 | 午夜a一级毛片一.成 | 99久久亚洲综合精品网站 | 精品一区二区三区波多野结衣 | 一级黄色香蕉视频 | 亚洲天堂影院在线观看 | 欧美日本一区二区三区道 | 亚洲欧美国产精品久久久 | 国产成人禁片免费观看视频 | 亚洲女精品一区二区三区 | 久久视频这里只有精品 | wwwxxx黄色| 99精品热女视频专线 | 国产成人亚洲综合 |