这样获取了两个视频的所有图片帧 按照数字进行了编号。
2、合成新图组 opencv现在需要把两个图组的每一个对应编号的图进行水平拼接 代码如下
#
# 水平合成图组
import cv2
import numpy as np
# 按照两个图组的最小值 1 作为循环的最大值边界
for i in range(1,2225):
img1 cv2.imread( images/video1/{}.jpg .format(i))
img2 cv2.imread( images/video2/{}.jpg .format(i))
# img1 cv2.resize(img1, (720, 1280))
# img2 cv2.resize(img2, (720, 1280))
# 核心代码
image np.concatenate([img1, img2], axis 1)
cv2.imwrite( images/result/{}.jpg .format(i), image)
完成这一步就已经得到了水平拼接的所有图片。
3、压缩新图组变成新视频 opencv现在需要把图组压缩成视频 要考虑到原始视频的帧率 保持一致。
#
# 压缩图片为视频
import cv2
import os
fourcc cv2.VideoWriter_fourcc(* XVID )
videoWriter cv2.VideoWriter( videos/new.mp4 , fourcc, 30, (1440,1280))
for i in range(1, 2225): #有多少张图片 从编号1到编号2224
image_number i
if not os.path.exists( images/result/{}.jpg .format(str(i))):
continue
img12 cv2.imread( images/result/ str(i) .jpg )
#cv2.imshow( img , img12)
#cv2.waitKey(1)
videoWriter.write(img12)
videoWriter.release()
执行完上面的代码 已经获得了一个水平拼接好的视频 但是没有声音 下面来制作音频。
4、提取音频、合并音频 ffmpeg使用ffmpeg对素材视频音频提取
ffmpeg -i videos/demo1.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav audio/demo1.wav ffmpeg -i videos/demo2.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav audio/demo2.wav
至于ffmpeg这条命令的参数说明就不多说了 音频几个基本参数
下面开始合并音频
ffmpeg -y -i audio/demo1.wav -i audio/demo2.wav -filter_complex [0:0][1:0] amix inputs 2:duration longest -c:a libmp3lame audio/new.mp3
别问为什么2个wav为啥要合并成一个mp3 这个完全看心情。
5、将新音频压缩至新视频 ffmpeg使用ffmpeg进行压缩
ffmpeg -i videos/new.mp4 -i audio/new.mp3 -map 0:v -map 1:a -c copy -shortest videos/final.mp4
得到最终视频。
这篇文章给的方法一定不是解决这个问题最优的方法 只是我对ffmpeg研究很浅 无法立马写出对应指令 如果有对ffmpeg研究很深的兄弟 可以留言提供那个最优解决方案。本篇文章 只是参考 希望给碰到相同问题的朋友提供一种解决方案。



