Как лучше отправить субтитры к видео vkvideo?
Ссылка скопирована
Сейчас ситуация такая: использую следующий скрипт для загрузки видео mp4 в канал на vkvideo. Как к этому видео добавить субтитры? Встроенные в видео субтитры не видятся.
import vk_api import requests import json import os import glob import time import shutil import argparse from tqdm import tqdm import config class VKVideoUploader: def __init__(self, access_token): self.vk_session = vk_api.VkApi(token=access_token) self.vk = self.vk_session.get_api() def upload_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) with open(video_path, 'rb') as video_data: print(f" Uploading to group: {title} ({file_size / (1024*1024):.2f} MB)") class ProgressBar: def __init__(self, total_size): self.total_size = total_size self.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 = 0 def __call__(self, chunk): self.uploaded += len(chunk) self.progress_bar.update(len(chunk)) def close(self): self.progress_bar.close() class ReadableWithProgress: def __init__(self, file_obj, callback): self.file_obj = file_obj self.callback = callback self.total_read = 0 def read(self, size=-1): chunk = self.file_obj.read(size) if chunk and self.callback: self.callback(chunk) return chunk progress_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() if response.status_code == 200: result = response.json() print(f"✅ Video '{title}' uploaded to group successfully!") return result else: print(f"❌ Upload failed for '{title}': {response.text}") return None except Exception as e: print(f"❌ Error uploading '{title}': {str(e)}") return None def upload_all_videos_to_group(input_folder, output_folder, group_id, uploader): video_files = glob.glob(os.path.join(input_folder, "*.mp4")) if not video_files: print("⚠️ No .mp4 files found in the input folder.") return os.makedirs(output_folder, exist_ok=True) print(f" Found {len(video_files)} video(s) to upload.") for i, video_path in enumerate(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 = 0 failed_uploads = 0 for idx, video_path in enumerate(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')}" ) if result: successful_uploads += 1 try: dest_path = os.path.join(output_folder, filename) shutil.move(video_path, dest_path) print(f" Moved to: {dest_path}") except Exception as move_error: print(f"⚠️ Failed to move file: {move_error}") else: failed_uploads += 1 print(f"{'='*60}") print(f" Overall Progress: {idx}/{len(video_files)} videos") print(f"✅ Successful: {successful_uploads} | ❌ Failed: {failed_uploads}") print(f"{'='*60}") if idx < 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}") def main(): 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() if not os.path.isdir(args.input): print(f"❌ Input folder '{args.input}' does not exist.") return uploader = VKVideoUploader(config.ACCESS_TOKEN) upload_all_videos_to_group(args.input, args.output, args.group_id, uploader) if __name__ == "__main__": main()
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
woocommerce
Как отображать при фильтрации товары со значением search параметра visibility: HUSKY — Products Filter for WooCommerce?
1 ответ

С субтитрами для VK Video всё упирается в то, какой именно способ загрузки доступен вашему аккаунту и API. В пользовательском интерфейсе VK/VK Video возможность добавления субтитров может отличаться для обычных видео, видео сообщества, клипов и трансляций. Универсального “просто отправить .srt через share” нет.
Сначала проверьте базовые требования: формат субтитров, кодировка UTF-8, корректные таймкоды и привязка к конкретному видео. Обычно используются форматы вроде SRT/VTT, но конкретные ограничения нужно сверять с текущей документацией VK Video или интерфейсом загрузки.
Если загрузка делается через API, схема обычно такая: получить права на работу с видео, загрузить/обновить видео, затем прикрепить дополнительные данные, если метод это поддерживает. Если метода для субтитров нет или он закрыт, через публичный API это не получится сделать корректно.
Проверьте сам файл субтитров:
1 00:00:01,000 --> 00:00:04,000 Первый текст субтитра 2 00:00:05,000 --> 00:00:08,000 Второй текст субтитра
Частые причины отказа: неправильная кодировка, лишние BOM/символы, пересекающиеся таймкоды, слишком длинные строки, неподдерживаемый формат, попытка добавить субтитры к ролику, где у вас нет прав владельца.
Если задача — не ручная загрузка, а автоматизация, я бы сначала сделал контрольный тест через веб-интерфейс VK Video. Если интерфейс принимает файл и он отображается, уже после этого ищите API/автоматизацию. Если интерфейс не принимает, проблема не в коде.
Итог: отправка субтитров возможна только там, где VK Video поддерживает их для данного типа видео и у вас есть права владельца. Начните с проверки формата SRT/VTT и ручной загрузки, затем смотрите, есть ли актуальный API-метод именно для субтитров.