youngtsai commited on
Commit
b300db2
1 Parent(s): c05c5f9
Files changed (1) hide show
  1. app.py +27 -13
app.py CHANGED
@@ -127,7 +127,14 @@ def upload_img_directly(service, file_name, folder_id, file_path):
127
  file_metadata = {'name': file_name, 'parents': [folder_id]}
128
  media = MediaFileUpload(file_path, mimetype='image/jpeg')
129
  file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
130
- print(f"File ID: {file.get('id')}")
 
 
 
 
 
 
 
131
 
132
  def process_file(file):
133
  # 读取文件
@@ -275,22 +282,29 @@ def download_youtube_video(youtube_id, output_path=OUTPUT_PATH):
275
 
276
 
277
  def screenshot_youtube_video(youtube_id, snapshot_sec):
278
- # 这里假设视频已经在适当的位置
279
- video_path = f'{OUTPUT_PATH}/{youtube_id}.mp4'
280
-
281
- # Load the video and take a screenshot
282
- with VideoFileClip(video_path) as video:
283
- screenshot_path = f'{OUTPUT_PATH}/{youtube_id}_{snapshot_sec}.jpg'
284
- video.save_frame(screenshot_path, snapshot_sec)
285
-
286
- # 上传截图到Google Drive
287
  service = init_drive_service()
288
- parent_folder_id = '1GgI4YVs0KckwStVQkLa1NZ8IpaEMurkL' # youtube逐字稿圖檔的ID
289
  folder_id = create_folder_if_not_exists(service, youtube_id, parent_folder_id)
290
  file_name = f'{youtube_id}_{snapshot_sec}.jpg'
291
- upload_img_directly(service, file_name, folder_id, screenshot_path)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
- return screenshot_path
 
294
 
295
  def get_screenshot_from_video(video_link, start_time):
296
  # 实现从视频中提取帧的逻辑
 
127
  file_metadata = {'name': file_name, 'parents': [folder_id]}
128
  media = MediaFileUpload(file_path, mimetype='image/jpeg')
129
  file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
130
+ return file.get('id') # 返回文件ID
131
+
132
+ def set_public_permission(service, file_id):
133
+ service.permissions().create(
134
+ fileId=file_id,
135
+ body={"type": "anyone", "role": "reader"},
136
+ fields='id',
137
+ ).execute()
138
 
139
  def process_file(file):
140
  # 读取文件
 
282
 
283
 
284
  def screenshot_youtube_video(youtube_id, snapshot_sec):
 
 
 
 
 
 
 
 
 
285
  service = init_drive_service()
286
+ parent_folder_id = '1GgI4YVs0KckwStVQkLa1NZ8IpaEMurkL' # 替换为实际的Google Drive文件夹ID
287
  folder_id = create_folder_if_not_exists(service, youtube_id, parent_folder_id)
288
  file_name = f'{youtube_id}_{snapshot_sec}.jpg'
289
+
290
+ # 检查Google Drive是否已有截图
291
+ exists, file_id = check_file_exists(service, folder_id, file_name)
292
+ if not exists:
293
+ # 如果没有找到截图,处理视频并上传
294
+ video_path = f'{OUTPUT_PATH}/{youtube_id}.mp4'
295
+ with VideoFileClip(video_path) as video:
296
+ screenshot_path = f'{OUTPUT_PATH}/{file_name}'
297
+ video.save_frame(screenshot_path, snapshot_sec)
298
+ # 上传并获取文件ID
299
+ file_id = upload_img_directly(service, file_name, folder_id, screenshot_path)
300
+ print(f"截图已上传到Google Drive, 文件ID: {file_id}")
301
+ set_public_permission(service, file_id)
302
+
303
+ # 上传后删除本地临时截图文件
304
+ os.remove(screenshot_path)
305
 
306
+ image_src = f"https://drive.google.com/uc?export=view&id={file_id}"
307
+ return image_src
308
 
309
  def get_screenshot_from_video(video_link, start_time):
310
  # 实现从视频中提取帧的逻辑