Использую следующий python-скрипт для загрузки видео mp4 в канал на vkvideo. Как к этому видео добавить субтитры? Встроенные в видео субтитры не видятся.
importvk_apiimportrequestsimportjsonimportosimportglobimporttimeimportshutilimportargparsefromtqdmimporttqdmimportconfigclassVKVideoUploader:
def__init__(self, access_token):
self.vk_session=vk_api.VkApi(token=access_token)
self.vk=self.vk_session.get_api()
defupload_to_group(self, video_path, group_id, title="Group Video", description=""):
try:
upload_server=self.vk.video.save(
group_id=abs(group_id),
name=title,
description=description
)
upload_url=upload_server['upload_url']
file_size=os.path.getsize(video_path)
withopen(video_path, 'rb') asvideo_data:
print(f" Uploading to group: {title} ({file_size/ (1024*1024):.2f} MB)")
classProgressBar:
def__init__(self, total_size):
self.total_size=total_sizeself.progress_bar=tqdm(
total=total_size,
unit='B',
unit_scale=True,
unit_divisor=1024,
desc="Uploading",
bar_format='{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]'
)
self.uploaded=0def__call__(self, chunk):
self.uploaded+=len(chunk)
self.progress_bar.update(len(chunk))
defclose(self):
self.progress_bar.close()
classReadableWithProgress:
def__init__(self, file_obj, callback):
self.file_obj=file_objself.callback=callbackself.total_read=0defread(self, size=-1):
chunk=self.file_obj.read(size)
ifchunkandself.callback:
self.callback(chunk)
returnchunkprogress_tracker=ProgressBar(file_size)
files= {
'video_file': (
os.path.basename(video_path),
ReadableWithProgress(video_data, progress_tracker),
'video/mp4'
)
}
try:
response=requests.post(upload_url, files=files)
finally:
progress_tracker.close()
ifresponse.status_code==200:
result=response.json()
print(f"✅ Video '{title}' uploaded to group successfully!")
returnresultelse:
print(f"❌ Upload failed for '{title}': {response.text}")
returnNoneexceptExceptionase:
print(f"❌ Error uploading '{title}': {str(e)}")
returnNonedefupload_all_videos_to_group(input_folder, output_folder, group_id, uploader):
video_files=glob.glob(os.path.join(input_folder, "*.mp4"))
ifnotvideo_files:
print("⚠️ No .mp4 files found in the input folder.")
returnos.makedirs(output_folder, exist_ok=True)
print(f" Found {len(video_files)} video(s) to upload.")
fori, video_pathinenumerate(video_files, 1):
file_size=os.path.getsize(video_path)
print(f"{i}. {os.path.basename(video_path)} ({file_size/ (1024*1024):.2f} MB)")
print(f"\n{'='*60}")
print(f" Overall Progress: 0/{len(video_files)} videos")
print('='*60)
successful_uploads=0failed_uploads=0foridx, video_pathinenumerate(video_files, 1):
filename=os.path.basename(video_path)
title=os.path.splitext(filename)[0]
print(f"\n Processing video {idx}/{len(video_files)}: {filename}")
print(f"{'='*40}")
result=uploader.upload_to_group(
video_path=video_path,
group_id=group_id,
title=title,
description=f"Uploaded {time.strftime('%Y-%m-%d %H:%M:%S')}"
)
ifresult:
successful_uploads+=1try:
dest_path=os.path.join(output_folder, filename)
shutil.move(video_path, dest_path)
print(f" Moved to: {dest_path}")
exceptExceptionasmove_error:
print(f"⚠️ Failed to move file: {move_error}")
else:
failed_uploads+=1print(f"{'='*60}")
print(f" Overall Progress: {idx}/{len(video_files)} videos")
print(f"✅ Successful: {successful_uploads} | ❌ Failed: {failed_uploads}")
print(f"{'='*60}")
ifidx<len(video_files):
print("⏳ Waiting 2 seconds before next upload...")
time.sleep(2)
print(f"\n{'='*60}")
print(" UPLOAD SUMMARY")
print(f"{'='*60}")
print(f" Total videos found: {len(video_files)}")
print(f"✅ Successfully uploaded: {successful_uploads}")
print(f"❌ Failed: {failed_uploads}")
print(f"{'='*60}")
defmain():
parser=argparse.ArgumentParser(description="Upload MP4 videos to a VK group.")
parser.add_argument(
"--input",
type=str,
default="input",
help="Input folder containing .mp4 files (default: 'input')"
)
parser.add_argument(
"--output",
type=str,
default="output",
help="Output folder to move uploaded videos (default: 'output')"
)
parser.add_argument(
"--group-id",
type=int,
default=config.DEFAULT_GROUP_ID,
help=f"VK group ID (default: {config.DEFAULT_GROUP_ID})"
)
args=parser.parse_args()
ifnotos.path.isdir(args.input):
print(f"❌ Input folder '{args.input}' does not exist.")
returnuploader=VKVideoUploader(config.ACCESS_TOKEN)
upload_all_videos_to_group(args.input, args.output, args.group_id, uploader)
if__name__=="__main__":
main()Окружение
vk_api: 11.10.0
Использую следующий python-скрипт для загрузки видео mp4 в канал на vkvideo. Как к этому видео добавить субтитры? Встроенные в видео субтитры не видятся.
Окружение
vk_api: 11.10.0