功能性模組: (5)圖片生成視訊:ffmpeg版和OpenCV版
功能性模組:(5)圖片生成視訊:ffmpeg版和OpenCV版
一、模組介紹
這個模組其實是非常常用、基本的模組了,主要就是針對一些需要依靠視訊才能評判效果的一些應用,當然小夥伴們按自己的需求來吧。
這個圖片呢其實是LZ事先處理好的,這個裡有一個小技巧可以分享給小夥伴們,在影像命名的時候儘量以00001.jpg,00002.jpg這種方式來命名,這樣對影像進行排序的時候也會更加方便,不至於出現1.jpg,10.jpg,2.jpg…這種情況,會非常麻煩。
二、程式碼實現
2.1 OpenCV版本
OpenCV的安裝LZ已經前前後後安裝好幾十次了,包括c++版本,cuda版本,python版本都安裝了好多次了,這個就不再贅述了。
OpenCV有一個比較好的是即使你的影像命名是不連續的,也都可以寫入到視訊中去,LZ覺得還是比較方便的。
# generate video using OpenCV
def GenVideoFromImg(frame_root, output_video_path):
'''
:param frame_root: 存放圖片打路徑,這裡可以根據需要自己修改
:param output_video_path: 輸出視訊的名稱,
:return:
'''
img_lists = glob.glob(frame_root + "/*.jpg")
print("Image path is: ", frame_root)
print("The length of img_lists: ", len(img_lists))
img_lists.sort()
img_test = cv2.imread(img_lists[0])
h, w, c = img_test.shape
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
# 為了仔細看效果,幀率調的很小
video_writer = cv2.VideoWriter(output_video_path, fourcc, 10, (w, h))
print("Begin to generate video!")
for img_list in tqdm(img_lists):
img = cv2.imread(img_list)
video_writer.write(img)
video_writer.release()
2.2 ffmpeg版
ffmpeg版本其實LZ並沒有很會使用,但是為什麼要使用呢?是因為目前LZ公司的資料(包括測試資料)是沒有辦法下載到本地的,並且訓練的模型也沒法下載到本地,這樣就需要在雲平臺上進行測試,但是雲平臺的播放只支援h264的播放,所以LZ只能找對應的方法了。
2.2.1 安裝對應包
ffmpeg command not found
出現這個問題其實就是沒有對應依賴包,安裝一下就行了,因為就是為了生成對應的視訊,所以對於版本沒有什麼很高的要求
sudo apt install ffmpeg
#或者
sudo apt-get install ffmpeg
2.2.2 程式碼實現
首先會看到一個ReName的函式,這個主要是為了整理一下圖片的名稱,以為ffmpeg對應圖片幀是要對應圖片名字是連續的,這個問題LZ找了好久,因為是跳幀進行測試的,所以圖片名稱是00001.jpg,00003.jpg。。。LZ生成了半天視訊,發現始終只有一幀影像,倒騰了好久,才發現這個問題,哭暈。。還要自己給個許可權,視訊才能播放。
def ReName(img_path):
"""
:param img_path: 視訊序列的路徑
:return:
"""
img_lists = os.listdir(img_path)
img_lists.sort()
count = 0
for i in range(0, len(img_lists)):
idx = int(img_lists[i].split('.')[0])
os.rename(os.path.join(img_path, img_lists[i]),
os.path.join(img_path, str(("%05d" % count)) + '.' + 'jpg'))
count = count + 1
# print(img_lists)
def ConvertVideoH264(video_root, output_dir, seq):
'''
:param video_root: 視訊儲存的總的路徑
:param output_dir: 儲存圖片的總的路徑
:param seq: 視訊名稱,不含字尾名
:return:
'''
ReName("{}/frame/".format(output_dir))
output_video_path = osp.join(output_dir, '{}.mp4'.format(seq))
output_video_path_h264 = osp.join(video_root, '{}-h264.mp4'.format(seq))
cmd_str = 'ffmpeg -r 10 -f image2 -i {}/frame/%05d.jpg -c:v copy {}'.format(output_dir, output_video_path)
os.system(cmd_str)
cmd_convert = 'ffmpeg -i {} -vcodec h264 {}'.format(output_video_path, output_video_path_h264)
os.system(cmd_convert)
os.chmod(output_dir, 0o755)
2020年12月29日,最近全國各個地方都開始零零星星的出現新冠疫情,真的希望這場疫情能快點過去,脫下口罩,看遍祖國大好河山,加油!
相關文章
- 圖片人臉檢測——OpenCV版(二)OpenCV
- python使用pillow和opencv生成圖片縮圖PythonOpenCV
- 視訊人臉檢測——OpenCV版(三)OpenCV
- FFmpeg程式碼實現視訊轉jpg圖片
- python版網文圖片生成器Python
- Ffmpeg視訊開發教程(一)——實現視訊格式轉換功能超詳細版
- 短視訊平臺搭建,生成圖片形狀的位置
- opencv圖片操作OpenCV
- 使用OpenCV和Python構建運動熱圖視訊OpenCVPython
- .net core Docker 容器新增ffmpeg 獲取視訊資訊和截圖Docker
- 確認過眼神,沙沙野有我要找的圖(無版權圖片、視訊網站)網站
- opencv視訊播放OpenCV
- TP5開發的圖片站,帶手機版
- FFmpeg音視訊同步
- 獲取本地圖片/視訊地圖
- iOS 獲取視訊圖片iOS
- AndroidJavaCV(圖片轉視訊)AndroidJava
- OpenCV讀入圖片序列進行HOG行人檢測並儲存為視訊OpenCVHOG
- 用Qt5和OpenCV讀取顯示中文路徑的圖片QTOpenCV
- 登陸介面模組解析——生成圖片驗證碼
- Jdon2.5版不能上傳檔案和圖片
- php ffmpeg 視訊擷取PHP
- iOS 線上視訊生成GIF圖功能iOS
- 視訊: 青花瓷Java版Java
- 用ASP.NET上傳圖片並生成可帶版權資訊的縮圖 (轉)ASP.NET
- 短視訊原始碼,視訊轉為圖片儲存原始碼
- iOS圖片,視訊上傳&視訊內容旋轉iOS
- 短視訊平臺開發,圖片上傳和圖片預覽功能實現
- 視訊模組 視訊分析
- Android視訊開發進階(part5-安卓的DRM,視訊版權保護)Android安卓
- 短視訊app搭建,利用javaWeb生成一張簡易驗證碼圖片APPJavaWeb
- Learning OpenCV第一版和第三版對比OpenCV
- opencv圖片上如何顯示兩個小圖片OpenCV
- FFmpeg 視訊處理入門教程
- 使用FFmpeg處理音視訊
- [視訊版]-Golang深入理解GMPGolang
- 開眼視訊 vue 高仿版Vue
- Python:圖片合視訊(最簡)Python