• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python实现多个视频文件合成画中画效果

    本文实例为大家分享了多个视频文件合成画中画效果的python代码,供大家参考,具体内容如下

    Step 1 从视频中分离出音频(MP4->mp3)

    def separateMp4ToMp3(tmp):
       mp4 = tmp.replace('.tmp', '.mp4')
       print('---> Separate the video clip {0}'.format(mp4))
    
       mp3 = tmp.replace('.tmp', '.mp3')
       if os.path.exists(mp3):
          print '\n\t{0} is detected. Skip. \n\tPlease delete .mp3 file if you need re-separate.'.format(mp3)
          return
    
       cmd = 'ffmpeg -i {0} -f mp3 -vn -loglevel fatal {1}'.format(mp4, mp3)
       print '\t{0}'.format(cmd)
    
       x = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
       
       for log in x.stdout.readlines():
          print '[ffmpeg info] {0}'.format(log)
       for log in x.stderr.readlines():
          print '[ffmpeg error] {0}'.format(log)
    
       print '\tSuccess! {0} -> {1}\n'.format(mp4, mp3)

    Step 2 根据时间轴多个音频合成一份音频(MP3->mp3)

    def composeMp3ToMp3(arr = []):
       if len(arr) =0 :
          print('--->Operate audio array is empty!')
          return
       
       thisDir = os.path.dirname(arr[0])
       if (os.path.exists(thisDir + "/composeAudio.mp3")):
          print('--->{0}/composeAudio.mp3 is exist, if you need re-gennerate,Please delete it!'.format(thisDir))
          return
          
       print('---> Compose the audio :')
       var = ''
       for tem in arr:
          if os.path.exists(tem) == False:
             print '\n\t{0} is not exist! \n\tPlease make sure audio file be exist if you need compose.'.format(tem)
             return
          var = var + " -i " + tem
          
       if var == '':
          print '\n\t{0} is empty. \n\tPlease check .mp3 file if you need compose.'.format(var)
          return
          
       cmd = 'ffmpeg {0} -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 -loglevel fatal {1}/composeAudio.mp3'.format(var, thisDir)
       print '\t{0}'.format(cmd)
       x = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
       
       for log in x.stdout.readlines():
          print '[ffmpeg info] {0}'.format(log)
       for log in x.stderr.readlines():
          print '[ffmpeg error] {0}'.format(log)
    
       print '\tSuccess! {0} -> {1}\n'.format(var, thisDir + "/composeAudio.mp3")

    Step 3 多个视频合成画中画效果无声>(MP4->mp4)

    def composeMp4ToMp4(arr = []):
       if len(arr) = 0:
          print('--->Operate video array is empty!')
          return
       
       thisDir = os.path.dirname(arr[0])
       if (os.path.exists(thisDir + "/composeVideo.mp4")):
          print('--->{0}/composeVideo.mp4 is exist, if you need re-gennerate,Please delete it!'.format(thisDir))
          return
       
       print('---> Compose the video :')
       var = ''
       temparr = []
       for tem in arr:
          if os.path.exists(tem) == False:
             print '\n\t{0} is not exist! \n\tPlease make sure video file be exist if you need compose.'.format(tem)
             return
          
          #split image
          png = tem.replace('.mp4', '.png')
          tempcmd="ffmpeg -i {0} -ss 00:00:2.435 -loglevel fatal -vframes 1 {1}".format(tem, png)
          print '\t{0}'.format(tempcmd)
          x = subprocess.Popen(tempcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
          x.wait()
          for log in x.stdout.readlines():
             print'[ffmpeg info] {0}'.format(log)
          for log in x.stderr.readlines():
             print'[ffmpeg error] {0}'.format(log)
          
          img = Image.open(png)
          imgSize = img.size
          #ipad
          if (imgSize[0] > imgSize[1]) :
             temparr.append(tem)
          #mobile
          else:
             var = var + " -i " + tem
          img.close()
          
       if (len(temparr) > 0):
          for tem in temparr:
             var = var + " -i " + tem
       
       if var == '':
          print '\n\t{0} is empty. \n\tPlease check video file if you need compose.'.format(var)
          return
       
       cmd = 'ffmpeg ' + var + ' -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v]' \
    
            '[ckout]overlay=x=W-w-10:y=10[out]" -map "[out]" -movflags faststart -loglevel fatal ' + thisDir + '/composeVideo.mp4'.format(var, thisDir)
       print '\t{0}'.format(cmd)
       x = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
       
       for log in x.stdout.readlines():
          print '[ffmpeg info] {0}'.format(log)
       for log in x.stderr.readlines():
          print '[ffmpeg error] {0}'.format(log)
       
       print '\tSuccess!\n {0} -> {1}\n'.format(var, thisDir + "/composeVideo.mp4")

    Step 4 音频与视频合成

    def communicateAudioVideo(folder):
       if (os.path.exists(folder + "/communicateVideo.mp4")):
          print('--->{0}/communicateVideo.mp4 is exist, if you need re-gennerate,Please delete it!'.format(folder))
          return
       
       if ((os.path.exists(folder + "/composeVideo.mp4") == False) or
             (os.path.exists(folder + "/composeAudio.mp3") == False)):
          print('--->{0}/composeVideo.mp4  or composeAudio.mp3 must be exist!'.format(folder))
          return
       
       print('---> Communicate the video :')
       cmd = 'ffmpeg -i ' + folder + '/composeVideo.mp4 -i ' + folder + '/composeAudio.mp3 -f mp4 ' \
    
             ' -loglevel fatal ' + folder +'/communicateVideo.mp4'
       print '\t{0}'.format(cmd)
       x = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
       
       for log in x.stdout.readlines():
          print '[ffmpeg info] {0}'.format(log)
       for log in x.stderr.readlines():
          print '[ffmpeg error] {0}'.format(log)
       
       print '\tSuccess!\n {0}  and {1} -> {2}\n'.format(folder + '/composeVideo.mp4', folder + '/composeAudio.mp3', folder +'/communicateVideo.mp4')

    源码下载

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Python实现双轴组合图表柱状图和折线图的具体流程
    • 用Python做个个性的动画挂件让桌面不单调
    • 如何用Python写一个简单的通讯录
    • 自己用python做的一款超炫酷音乐播放器
    • Python做个自定义动态壁纸还可以放视频
    • 分析总结Python数据化运营KMeans聚类
    • python中的zip模块
    • 总结分析python数据化运营关联规则
    • python项目--使用Tkinter的日历GUI应用程序
    • 如何使用Python做个自定义动态壁纸
    上一篇:自己用python做的一款超炫酷音乐播放器
    下一篇:如何用Python写一个简单的通讯录
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python实现多个视频文件合成画中画效果 python,实现,多个,视频,文件,