我这边 有24个视频,首先 要对他们进行video转picture的转换
然后将名称重新定义
import glob
import os
num =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
for n in range(len(num)):
#图片位置
inputPath = r'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/picture/'+str(num[n])+'/'
fileList = glob.glob(inputPath + '/*')
cnt = 0
for path in fileList:
os.rename(path, inputPath+str(cnt).zfill(1)+path[path.rfind('.'):])
cnt +=1
然后对csv中的数据画折线图,并保存
def simple_plot():
# 生成画布
plt.figure(figsize=(8, 2), dpi=80)
# 打开交互模式
plt.ion()
# 读取csv中的数据
data = pd.DataFrame(pd.read_csv(path, encoding='CP949', engine='python'))
x = np.array(data['x']);y = np.array(data['y'])
X = []; Y = []
xx = np.linspace(0.0, len(x) / 30, len(x))
#循环
for n in range(len(x)):
# plt.clf() #清空画布上的所有内容
plt.title("empathy")
#y轴范围和名称
plt.ylabel("percent")x
plt.ylim(0.0, 100.0)
#x轴范围和名称
plt.xlabel("time")
plt.xlim(0.0, float(len(x)/30))
#放入数组中
X.append(xx[n])
Y.append(y[n])
#画折线,每个点标出数据,以百分比的形式
plt.plot(X,Y,'-r')
plt.text(xx[n], y[n], '%.2f%%' %y[n], ha='center', va='bottom',color = "r", fontsize=20)
plt.pause(0.01)
#保存图片
plt.savefig(
'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+str(num[i])+'_video/'+str(num[i])+'/'+'{}.png'.format(n),transparent=True)#这里的transparent指的是保存的是透明的背景图
n = n + 1
#清除画布
plt.cla()
num =[1,2,3,4]
for i in range(len(num)):
path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+ str(num[i])+'_video/' + str(num[i]) +'.csv'
simple_plot()
然后将折线图和视频每一帧一一对应合并成一张图
from PIL import Image
import os.path as op
def img():
img1 = Image.open(op.join(path_1, file)).convert('RGBA')
img2 = Image.open(op.join(path_2, file)).convert('RGBA')
r, g, b, a = img1.split()
img2.paste(img1, (0, 0), mask=a)#将图1贴在图二上
img2.save('E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+ str(num[i])+'_video/' + str(num[i]) +'_image/' + file,)
num =[2,13,15,16,17,18,20,22]
for i in range(len(num)):
path_1 = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+ str(num[i])+'_video/' + str(num[i]) +'/'
path_2 = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/picture/'+ str(num[i])+'/'
for file in os.listdir(path_1):
print(file)
img()
然后再将做好的image转为MP4
import cv2
import os
def videos():
fps = 30
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
video_writer = cv2.VideoWriter(filename= path_out, fourcc=fourcc, fps=fps, frameSize=(1280, 718))#frameSize一定要跟你的图片尺寸一样才可以
for i in range(0,len(all_folds)):
p = i
if os.path.exists(path + str(p)+'.png'): #判断图片是否存在
img = cv2.imread(filename= path +str(p)+'.png')
cv2.waitKey(100)
video_writer.write(img)
print(str(p) + '.png' + ' done!')
video_writer.release()
num =[22]
for i in range(len(num)):
path = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+str(num[i])+'_video/'+str(num[i])+'_image/'
path_out = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+str(num[i])+'_video/'+str(num[i])+'_image.mp4'
all_folds = os.listdir(path)
print(len(all_folds))
videos()
#然后再将声音加入做好的视频当中就完成啦!
import subprocess
def video_add_mp3(path_video, path_wav):
outfile_name = path_out
subprocess.call('ffmpeg -i ' + path_video
+ ' -i ' + path_wav + ' -strict -2 -f mp4 '
+ outfile_name, shell=True)
num =[2,13,15,16,17,18,20,22]
for i in range(len(num)):
#视频地址
path_video = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/' + str(
num[i]) + '_video/' + str(num[i]) + '_image.mp4'
# 音频地址
path_wav = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/stimuli/01_AUDIO/' + str(num[i]) + '.wav'
path_out = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/stimuli/feature/image_7_15/y_pred/'+str(num[i])+'_video/'+str(num[i])+'.mp4'
video_add_mp3(path_video, path_wav)