日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法

發(fā)布時間:2024/9/27 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

環(huán)境準(zhǔn)備

1、安裝 FFmpeg

音/視頻工具 FFmpeg 簡易安裝文檔

2、安裝 ffmpeg-python

pip3 install ffmpeg-python

3、【可選】安裝 opencv-python

pip3 install opencv-python

4、【可選】安裝 numpy

pip3 install numpy

視頻幀提取

準(zhǔn)備視頻素材

抖音視頻素材下載:https://anoyi.com/dy/top

基于視頻幀數(shù)提取任意一幀

import ffmpeg import numpy import cv2 import sys import random def read_frame_as_jpeg(in_file, frame_num): """ 指定幀數(shù)讀取任意幀 """ out, err = ( ffmpeg.input(in_file) .filter('select', 'gte(n,{})'.format(frame_num)) .output('pipe:', vframes=1, format='image2', vcodec='mjpeg') .run(capture_stdout=True) ) return out def get_video_info(in_file): """ 獲取視頻基本信息 """ try: probe = ffmpeg.probe(in_file) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) if video_stream is None: print('No video stream found', file=sys.stderr) sys.exit(1) return video_stream except ffmpeg.Error as err: print(str(err.stderr, encoding='utf8')) sys.exit(1) if __name__ == '__main__': file_path = '/Users/admin/Downloads/拜無憂.mp4' video_info = get_video_info(file_path) total_frames = int(video_info['nb_frames']) print('總幀數(shù):' + str(total_frames)) random_frame = random.randint(1, total_frames) print('隨機(jī)幀:' + str(random_frame)) out = read_frame_as_jpeg(file_path, random_frame) image_array = numpy.asarray(bytearray(out), dtype="uint8") image = cv2.imdecode(image_array, cv2.IMREAD_COLOR) cv2.imshow('frame', image) cv2.waitKey()

基于時間提取任意一幀

import ffmpeg import numpy import cv2 import sys import random def read_frame_by_time(in_file, time): """ 指定時間節(jié)點(diǎn)讀取任意幀 """ out, err = ( ffmpeg.input(in_file, ss=time) .output('pipe:', vframes=1, format='image2', vcodec='mjpeg') .run(capture_stdout=True) ) return out def get_video_info(in_file): """ 獲取視頻基本信息 """ try: probe = ffmpeg.probe(in_file) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) if video_stream is None: print('No video stream found', file=sys.stderr) sys.exit(1) return video_stream except ffmpeg.Error as err: print(str(err.stderr, encoding='utf8')) sys.exit(1) if __name__ == '__main__': file_path = '/Users/admin/Downloads/拜無憂.mp4' video_info = get_video_info(file_path) total_duration = video_info['duration'] print('總時間:' + total_duration + 's') random_time = random.randint(1, int(float(total_duration)) - 1) + random.random() print('隨機(jī)時間:' + str(random_time) + 's') out = read_frame_by_time(file_path, random_time) image_array = numpy.asarray(bytearray(out), dtype="uint8") image = cv2.imdecode(image_array, cv2.IMREAD_COLOR) cv2.imshow('frame', image) cv2.waitKey()

相關(guān)資料

https://github.com/kkroening/ffmpeg-python/tree/master/examples

總結(jié)

以上是生活随笔為你收集整理的将视频分成一帧一帧python_python ffmpeg任意提取视频帧的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。