Skip to content

Instantly share code, notes, and snippets.

@chottokun
Created December 24, 2025 12:07
Show Gist options
  • Select an option

  • Save chottokun/f653cfdb9144f325ca878adeb6bd967d to your computer and use it in GitHub Desktop.

Select an option

Save chottokun/f653cfdb9144f325ca878adeb6bd967d to your computer and use it in GitHub Desktop.
whisper+stable-ts.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4",
"authorship_tag": "ABX9TyPoeaafoGqd8OkS5JbP32yG",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/chottokun/f653cfdb9144f325ca878adeb6bd967d/whisper-stable-ts.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "08b4c072"
},
"source": [
"# `stable-ts` ใจ `faster-whisper` ใ‚’็”จใ„ใŸ้Ÿณๅฃฐ่ช่ญ˜็’ฐๅขƒ\n",
"\n",
"ใ”ๆ็คบใ„ใŸใ ใ„ใŸ่จญๅฎšใซๅŸบใฅใใ€`stable-ts` ใจ `faster-whisper` ใ‚’็”จใ„ใŸ้Ÿณๅฃฐ่ช่ญ˜็’ฐๅขƒใ‚’ๆง‹็ฏ‰ใ—ใพใ™ใ€‚\n",
"\n",
"**โš ๏ธ ้‡่ฆ: ๅฎŸ่กŒๅ‰ใซ [ใƒฉใƒณใ‚ฟใ‚คใƒ ] > [ใƒฉใƒณใ‚ฟใ‚คใƒ ใฎใ‚ฟใ‚คใƒ—ใ‚’ๅค‰ๆ›ด] ใ‹ใ‚‰ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใ‚ขใ‚ฏใ‚ปใƒฉใƒฌใƒผใ‚ฟใ‚’ใ€ŒT4 GPUใ€ใซ่จญๅฎšใ—ใฆใใ ใ•ใ„ใ€‚**"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "11901012",
"outputId": "62a6e2ef-a837-4f01-a0a1-6b48a3ac43ee"
},
"source": [
"# @title 1. ใƒฉใ‚คใƒ–ใƒฉใƒชใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ\n",
"# stable-ts ใจ faster-whisper ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใพใ™\n",
"!pip install stable-ts faster-whisper\n",
"\n",
"import torch\n",
"import stable_whisper\n",
"from google.colab import files\n",
"\n",
"# GPUใŒไฝฟใˆใ‚‹ใ‹็ขบ่ช\n",
"if torch.cuda.is_available():\n",
" print(\"\\nโœ… GPU (CUDA) ใŒๅˆฉ็”จๅฏ่ƒฝใงใ™ใ€‚้ซ˜้€ŸๆŽจ่ซ–ใƒขใƒผใƒ‰ใงๅ‹•ไฝœใ—ใพใ™ใ€‚\")\n",
"else:\n",
" print(\"\\nโš ๏ธ GPUใŒๆคœๅ‡บใ•ใ‚Œใพใ›ใ‚“ใงใ—ใŸใ€‚ใƒฉใƒณใ‚ฟใ‚คใƒ ใฎ่จญๅฎšใ‹ใ‚‰GPUใ‚’ๆœ‰ๅŠนใซใ—ใฆใใ ใ•ใ„ใ€‚CPUใงใฏ้žๅธธใซ้…ใใชใ‚Šใพใ™ใ€‚\")"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Requirement already satisfied: stable-ts in /usr/local/lib/python3.12/dist-packages (2.19.1)\n",
"Requirement already satisfied: faster-whisper in /usr/local/lib/python3.12/dist-packages (1.2.1)\n",
"Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (from stable-ts) (2.0.2)\n",
"Requirement already satisfied: torch in /usr/local/lib/python3.12/dist-packages (from stable-ts) (2.9.0+cu126)\n",
"Requirement already satisfied: torchaudio in /usr/local/lib/python3.12/dist-packages (from stable-ts) (2.9.0+cu126)\n",
"Requirement already satisfied: tqdm in /usr/local/lib/python3.12/dist-packages (from stable-ts) (4.67.1)\n",
"Requirement already satisfied: openai-whisper<=20250625,>=20230314 in /usr/local/lib/python3.12/dist-packages (from stable-ts) (20250625)\n",
"Requirement already satisfied: ctranslate2<5,>=4.0 in /usr/local/lib/python3.12/dist-packages (from faster-whisper) (4.6.2)\n",
"Requirement already satisfied: huggingface-hub>=0.21 in /usr/local/lib/python3.12/dist-packages (from faster-whisper) (0.36.0)\n",
"Requirement already satisfied: tokenizers<1,>=0.13 in /usr/local/lib/python3.12/dist-packages (from faster-whisper) (0.22.1)\n",
"Requirement already satisfied: onnxruntime<2,>=1.14 in /usr/local/lib/python3.12/dist-packages (from faster-whisper) (1.23.2)\n",
"Requirement already satisfied: av>=11 in /usr/local/lib/python3.12/dist-packages (from faster-whisper) (16.0.1)\n",
"Requirement already satisfied: setuptools in /usr/local/lib/python3.12/dist-packages (from ctranslate2<5,>=4.0->faster-whisper) (75.2.0)\n",
"Requirement already satisfied: pyyaml<7,>=5.3 in /usr/local/lib/python3.12/dist-packages (from ctranslate2<5,>=4.0->faster-whisper) (6.0.3)\n",
"Requirement already satisfied: filelock in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (3.20.0)\n",
"Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (2025.3.0)\n",
"Requirement already satisfied: packaging>=20.9 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (25.0)\n",
"Requirement already satisfied: requests in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (2.32.4)\n",
"Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (4.15.0)\n",
"Requirement already satisfied: hf-xet<2.0.0,>=1.1.3 in /usr/local/lib/python3.12/dist-packages (from huggingface-hub>=0.21->faster-whisper) (1.2.0)\n",
"Requirement already satisfied: coloredlogs in /usr/local/lib/python3.12/dist-packages (from onnxruntime<2,>=1.14->faster-whisper) (15.0.1)\n",
"Requirement already satisfied: flatbuffers in /usr/local/lib/python3.12/dist-packages (from onnxruntime<2,>=1.14->faster-whisper) (25.9.23)\n",
"Requirement already satisfied: protobuf in /usr/local/lib/python3.12/dist-packages (from onnxruntime<2,>=1.14->faster-whisper) (5.29.5)\n",
"Requirement already satisfied: sympy in /usr/local/lib/python3.12/dist-packages (from onnxruntime<2,>=1.14->faster-whisper) (1.14.0)\n",
"Requirement already satisfied: more-itertools in /usr/local/lib/python3.12/dist-packages (from openai-whisper<=20250625,>=20230314->stable-ts) (10.8.0)\n",
"Requirement already satisfied: numba in /usr/local/lib/python3.12/dist-packages (from openai-whisper<=20250625,>=20230314->stable-ts) (0.60.0)\n",
"Requirement already satisfied: tiktoken in /usr/local/lib/python3.12/dist-packages (from openai-whisper<=20250625,>=20230314->stable-ts) (0.12.0)\n",
"Requirement already satisfied: triton>=2 in /usr/local/lib/python3.12/dist-packages (from openai-whisper<=20250625,>=20230314->stable-ts) (3.5.0)\n",
"Requirement already satisfied: networkx>=2.5.1 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (3.6.1)\n",
"Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (3.1.6)\n",
"Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.77)\n",
"Requirement already satisfied: nvidia-cuda-runtime-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.77)\n",
"Requirement already satisfied: nvidia-cuda-cupti-cu12==12.6.80 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.80)\n",
"Requirement already satisfied: nvidia-cudnn-cu12==9.10.2.21 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (9.10.2.21)\n",
"Requirement already satisfied: nvidia-cublas-cu12==12.6.4.1 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.4.1)\n",
"Requirement already satisfied: nvidia-cufft-cu12==11.3.0.4 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (11.3.0.4)\n",
"Requirement already satisfied: nvidia-curand-cu12==10.3.7.77 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (10.3.7.77)\n",
"Requirement already satisfied: nvidia-cusolver-cu12==11.7.1.2 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (11.7.1.2)\n",
"Requirement already satisfied: nvidia-cusparse-cu12==12.5.4.2 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.5.4.2)\n",
"Requirement already satisfied: nvidia-cusparselt-cu12==0.7.1 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (0.7.1)\n",
"Requirement already satisfied: nvidia-nccl-cu12==2.27.5 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (2.27.5)\n",
"Requirement already satisfied: nvidia-nvshmem-cu12==3.3.20 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (3.3.20)\n",
"Requirement already satisfied: nvidia-nvtx-cu12==12.6.77 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.77)\n",
"Requirement already satisfied: nvidia-nvjitlink-cu12==12.6.85 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (12.6.85)\n",
"Requirement already satisfied: nvidia-cufile-cu12==1.11.1.6 in /usr/local/lib/python3.12/dist-packages (from torch->stable-ts) (1.11.1.6)\n",
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.12/dist-packages (from sympy->onnxruntime<2,>=1.14->faster-whisper) (1.3.0)\n",
"Requirement already satisfied: humanfriendly>=9.1 in /usr/local/lib/python3.12/dist-packages (from coloredlogs->onnxruntime<2,>=1.14->faster-whisper) (10.0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->torch->stable-ts) (3.0.3)\n",
"Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /usr/local/lib/python3.12/dist-packages (from numba->openai-whisper<=20250625,>=20230314->stable-ts) (0.43.0)\n",
"Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub>=0.21->faster-whisper) (3.4.4)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub>=0.21->faster-whisper) (3.11)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub>=0.21->faster-whisper) (2.5.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests->huggingface-hub>=0.21->faster-whisper) (2025.11.12)\n",
"Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.12/dist-packages (from tiktoken->openai-whisper<=20250625,>=20230314->stable-ts) (2025.11.3)\n",
"\n",
"โœ… GPU (CUDA) ใŒๅˆฉ็”จๅฏ่ƒฝใงใ™ใ€‚้ซ˜้€ŸๆŽจ่ซ–ใƒขใƒผใƒ‰ใงๅ‹•ไฝœใ—ใพใ™ใ€‚\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "d1242fbe",
"outputId": "1922227e-ec58-4cf4-a5cb-0fb65b91fca5"
},
"source": [
"# @title 2. ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ—ใฆๅฎŸ่กŒ\n",
"# ใƒขใƒ‡ใƒซใฎใƒญใƒผใƒ‰๏ผˆๅˆๅ›žใฏใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๆ™‚้–“ใŒใ‹ใ‹ใ‚Šใพใ™๏ผ‰\n",
"print(\"โณ ใƒขใƒ‡ใƒซ(large-v3-turbo)ใ‚’ใƒญใƒผใƒ‰ไธญ...\")\n",
"model = stable_whisper.load_faster_whisper(\n",
" \"large-v3-turbo\",\n",
" device=\"cuda\" if torch.cuda.is_available() else \"cpu\",\n",
" compute_type=\"float16\" if torch.cuda.is_available() else \"int8\"\n",
")\n",
"print(\"โœ… ใƒขใƒ‡ใƒซใƒญใƒผใƒ‰ๅฎŒไบ†\")\n",
"\n",
"# ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰\n",
"print(\"\\n๐Ÿ“‚ ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซ(mp3, wav, m4a็ญ‰)ใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ—ใฆใใ ใ•ใ„:\")\n",
"uploaded = files.upload()\n",
"\n",
"for filename in uploaded.keys():\n",
" print(f\"\\n๐ŸŽ™๏ธ ่งฃๆžไธญ: {filename} ...\")\n",
"\n",
" #\n",
" result = model.transcribe(\n",
" filename,\n",
" language=\"ja\",\n",
"\n",
" #\n",
" vad=True, # VAD(้ŸณๅฃฐๅŒบ้–“ๆคœๅ‡บ)ใ‚’ๆœ‰ๅŠนๅŒ–\n",
" condition_on_previous_text=False,# ๅ‰ใฎๆ–‡่„ˆใซไพๅญ˜ใ—ใชใ„๏ผˆใƒซใƒผใƒ—ๅฏพ็ญ–ใฎ่ฆ๏ผ‰\n",
" word_timestamps=False, # ๅ˜่ชžใ”ใจใฎใ‚ฟใ‚คใƒ ใ‚นใ‚ฟใƒณใƒ—ใ‚’ไฝฟใ‚ใชใ„๏ผˆๅฎ‰ๅฎšๅŒ–๏ผ‰\n",
" beam_size=5 # ๆŽข็ดขๅน…๏ผˆ็ฒพๅบฆๅ‘ไธŠใฎใŸใ‚๏ผ‰\n",
" )\n",
"\n",
" # ็ตๆžœใฎ่กจ็คบ\n",
" print(\"\\n\" + \"=\"*30 + \" ่ช่ญ˜็ตๆžœ \" + \"=\"*30)\n",
" for segment in result.segments:\n",
" # ็ง’ๆ•ฐใ‚’ๆ•ดๅฝขใ—ใฆ่กจ็คบ\n",
" start = f\"{segment.start:.2f}\"\n",
" end = f\"{segment.end:.2f}\"\n",
" print(f\"[{start}s -> {end}s] {segment.text}\")\n",
" print(\"=\"*68)\n",
"\n",
" # SRTใƒ•ใ‚กใ‚คใƒซ๏ผˆๅญ—ๅน•ใƒ•ใ‚กใ‚คใƒซ๏ผ‰ใจใ—ใฆไฟๅญ˜ใƒปใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰\n",
" srt_filename = filename.rsplit('.', 1)[0] + \".srt\"\n",
" result.to_srt_vtt(srt_filename)\n",
" files.download(srt_filename)\n",
" print(f\"\\n๐Ÿ’พ ๅญ—ๅน•ใƒ•ใ‚กใ‚คใƒซ({srt_filename})ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ—ใŸใ€‚\")"
],
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"โณ ใƒขใƒ‡ใƒซ(large-v3-turbo)ใ‚’ใƒญใƒผใƒ‰ไธญ...\n",
"โœ… ใƒขใƒ‡ใƒซใƒญใƒผใƒ‰ๅฎŒไบ†\n",
"\n",
"๐Ÿ“‚ ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซ(mp3, wav, m4a็ญ‰)ใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ—ใฆใใ ใ•ใ„:\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-89316340-2eac-4148-a9fc-dbf16a097068\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-89316340-2eac-4148-a9fc-dbf16a097068\">\n",
" Upload widget is only available when the cell has been executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"// you may not use this file except in compliance with the License.\n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing, software\n",
"// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"// See the License for the specific language governing permissions and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser yet),\n",
"// where there are multiple asynchronous steps and the Python side is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of each step,\n",
"// then passes the result of the previous step as the input to the next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving n0001a-The-Ant-and-Grasshopper.mp3 to n0001a-The-Ant-and-Grasshopper (1).mp3\n",
"\n",
"๐ŸŽ™๏ธ ่งฃๆžไธญ: n0001a-The-Ant-and-Grasshopper (1).mp3 ...\n",
"Detected Language: japanese\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Transcribe: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 165.88/165.88 [00:04<00:00, 39.68sec/s]\n",
"VAD: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 165.88/165.88 [00:02<00:00, 62.77sec/s]\n",
"Adjustment: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 194.0/194.0 [00:00<00:00, 107503.63sec/s]"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"============================== ่ช่ญ˜็ตๆžœ ==============================\n",
"[2.46s -> 6.22s] ๆ—ฅๆœฌ่ชžๅคš่ชญใƒ–ใƒƒใ‚ฏใ‚น ใƒฌใƒ™ใƒซใ‚ผใƒญ\n",
"[6.22s -> 14.00s] ใ‚ขใƒชใจใ‚ญใƒชใ‚ฎใƒชใ‚น ใ‚คใ‚ฝใƒƒใƒ—็‰ฉ่ชžใ‚ˆใ‚Š\n",
"[15.68s -> 17.88s] NPO ๅคš่จ€่ชžๅคš่ชญ\n",
"[22.43s -> 23.18s] ๅคใงใ™\n",
"[23.18s -> 27.52s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใŒๆœจใฎไธ‹ใซใ„ใพใ™\n",
"[29.66s -> 31.90s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏใ†ใŸใ‚’ใ†ใŸใ„ใพใ™\n",
"[33.60s -> 34.58s] ใƒฉใƒฉใƒฉใƒฉใƒฉ\n",
"[38.11s -> 39.26s] ใ‚ขใƒชใŒใใพใ—ใŸ\n",
"[40.96s -> 43.54s] ใ‚ขใƒชใฏใŸในใ‚‚ใฎใ‚’ใฏใ“ใณใพใ™\n",
"[45.47s -> 47.18s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใŒใ„ใ„ใพใ—ใŸ\n",
"[47.18s -> 52.84s] ใ‚ขใƒชใ•ใ‚“ใ€ใ„ใฃใ—ใ‚‡ใซใ†ใŸใ‚’ใ†ใŸใ„ใพใ—ใ‚‡ใ†\n",
"[55.30s -> 56.62s] ใ‚ขใƒชใฏใ„ใ„ใพใ—ใŸ\n",
"[56.62s -> 60.90s] ใ„ใ„ใˆใ€ใ†ใŸใ„ใพใ›ใ‚“\n",
"[62.62s -> 64.78s] ใ‚ใŸใ—ใŸใกใฏใฏใŸใ‚‰ใใพใ™\n",
"[68.03s -> 69.88s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏใใใพใ—ใŸ\n",
"[71.84s -> 73.02s] ใฉใ†ใ—ใฆใงใ™ใ‹\n",
"[73.02s -> 78.38s] ใตใ‚†ใฏใŸในใ‚‚ใฎใŒใ‚ใ‚Šใพใ›ใ‚“ใ‹ใ‚‰\n",
"[80.03s -> 83.38s] ใˆใ€ใ„ใพใฏใชใคใงใ™ใ‚ˆ\n",
"[85.25s -> 87.10s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏ็ฌ‘ใ„ใพใ—ใŸ\n",
"[89.95s -> 91.56s] ใใ‚Œใ‹ใ‚‰ๆฏŽๆ—ฅ\n",
"[91.56s -> 95.86s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏๆญŒใ‚’ๆญŒใ„ใพใ—ใŸ\n",
"[98.43s -> 99.96s] ๅƒใใพใ›ใ‚“ใงใ—ใŸ\n",
"[103.90s -> 104.60s] ๅ†ฌใงใ™\n",
"[106.14s -> 107.38s] ้›ชใŒ้™ใ‚Šใพใ™\n",
"[109.31s -> 110.72s] ใจใฆใ‚‚ๅฏ’ใ„ใงใ™\n",
"[110.72s -> 116.78s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฎๅฎถใซใฏ้ฃŸใน็‰ฉใŒใ‚ใ‚Šใพใ›ใ‚“\n",
"[116.78s -> 125.52s] ใ‚ขใƒชใฎๅฎถใซใฏ้ฃŸใน็‰ฉใŒใŸใใ•ใ‚“ใ‚ใ‚Šใพใ™\n",
"[125.52s -> 131.12s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏใ‚ขใƒชใฎๅฎถใธ่กŒใใพใ—ใŸ\n",
"[134.75s -> 136.46s] ใ‚ญใƒชใ‚ฎใƒชใ‚นใฏ่จ€ใ„ใพใ—ใŸ\n",
"[136.46s -> 144.54s] ใ‚ขใƒชใ•ใ‚“ใ€ใŠ้ก˜ใ„ใงใ™ใ€‚้ฃŸใน็‰ฉใ‚’ใใ ใ•ใ„\n",
"[147.33s -> 148.64s] ใ‚ขใƒชใฏ่จ€ใ„ใพใ—ใŸ\n",
"[148.64s -> 154.26s] ็งใŸใกใฏๅคๅƒใใพใ—ใŸ\n",
"[154.26s -> 158.58s] ใ ใ‹ใ‚‰้ฃŸใน็‰ฉใŒใ‚ใ‚Šใพใ™\n",
"[160.54s -> 164.02s] ใ‚ใชใŸใฏๅคไฝ•ใ‚’ใ—ใพใ—ใŸใ‹\n",
"[165.88s -> 194.00s] ใ”่ฆ–่ดใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ—ใŸ\n",
"====================================================================\n",
"Saved: /content/n0001a-The-Ant-and-Grasshopper (1).srt\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"\n",
"/usr/local/lib/python3.12/dist-packages/stable_whisper/text_output.py:183: UserWarning: Result is missing word timestamps. Word-level timing cannot be exported. Use ``word_level=False`` to avoid this warning\n",
" warnings.warn('Result is missing word timestamps. Word-level timing cannot be exported. '\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Javascript object>"
],
"application/javascript": [
"\n",
" async function download(id, filename, size) {\n",
" if (!google.colab.kernel.accessAllowed) {\n",
" return;\n",
" }\n",
" const div = document.createElement('div');\n",
" const label = document.createElement('label');\n",
" label.textContent = `Downloading \"${filename}\": `;\n",
" div.appendChild(label);\n",
" const progress = document.createElement('progress');\n",
" progress.max = size;\n",
" div.appendChild(progress);\n",
" document.body.appendChild(div);\n",
"\n",
" const buffers = [];\n",
" let downloaded = 0;\n",
"\n",
" const channel = await google.colab.kernel.comms.open(id);\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
"\n",
" for await (const message of channel.messages) {\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
" if (message.buffers) {\n",
" for (const buffer of message.buffers) {\n",
" buffers.push(buffer);\n",
" downloaded += buffer.byteLength;\n",
" progress.value = downloaded;\n",
" }\n",
" }\n",
" }\n",
" const blob = new Blob(buffers, {type: 'application/binary'});\n",
" const a = document.createElement('a');\n",
" a.href = window.URL.createObjectURL(blob);\n",
" a.download = filename;\n",
" div.appendChild(a);\n",
" a.click();\n",
" div.remove();\n",
" }\n",
" "
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Javascript object>"
],
"application/javascript": [
"download(\"download_1811b4a0-ba20-4fa6-8ecd-601b4484dde4\", \"n0001a-The-Ant-and-Grasshopper (1).srt\", 2375)"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"๐Ÿ’พ ๅญ—ๅน•ใƒ•ใ‚กใ‚คใƒซ(n0001a-The-Ant-and-Grasshopper (1).srt)ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ—ใŸใ€‚\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "DDnKDNqlNn5H"
},
"execution_count": 8,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "210e4e37"
},
"source": [
"# @title 3. ใ‚ตใƒณใƒ—ใƒซ้Ÿณๅฃฐใงใฎใƒ†ใ‚นใƒˆ\n",
"# ๆŒ‡ๅฎšใ•ใ‚ŒใŸURLใ‹ใ‚‰้Ÿณๅฃฐใจๆญฃ่งฃใƒ†ใ‚ญใ‚นใƒˆใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใฆๆ–‡ๅญ—่ตทใ“ใ—ใ‚’่กŒใ„ใพใ™ใ€‚"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "50542827",
"outputId": "51668824-2c31-4358-82fb-1657f218f709"
},
"source": [
"import os\n",
"\n",
"# ใƒ•ใ‚กใ‚คใƒซใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰\n",
"audio_url = \"https://clrd.ninjal.ac.jp/csj/sound-f/interview_aps-smp.mp3\"\n",
"text_url = \"https://clrd.ninjal.ac.jp/csj/trans-f/interview_aps-smp.txt\"\n",
"audio_file = \"interview_aps-smp.mp3\"\n",
"text_file = \"interview_aps-smp.txt\"\n",
"\n",
"!wget -q -O {audio_file} {audio_url}\n",
"!wget -q -O {text_file} {text_url}\n",
"\n",
"print(f\"โœ… ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅฎŒไบ†: {audio_file}, {text_file}\")\n",
"\n",
"# ใƒขใƒ‡ใƒซใŒใƒญใƒผใƒ‰ใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใฏใƒญใƒผใƒ‰ใ™ใ‚‹๏ผˆๅ‰ใฎใ‚ปใƒซใ‚’ๅฎŸ่กŒใ—ใฆใ„ใชใ„ๅ ดๅˆ็”จ๏ผ‰\n",
"if 'model' not in locals():\n",
" print(\"โณ ใƒขใƒ‡ใƒซ(large-v3-turbo)ใ‚’ใƒญใƒผใƒ‰ไธญ...\")\n",
" model = stable_whisper.load_faster_whisper(\n",
" \"large-v3-turbo\",\n",
" device=\"cuda\" if torch.cuda.is_available() else \"cpu\",\n",
" compute_type=\"float16\" if torch.cuda.is_available() else \"int8\"\n",
" )\n",
"\n",
"# ๆ–‡ๅญ—่ตทใ“ใ—ๅฎŸ่กŒ\n",
"print(f\"\\n๐ŸŽ™๏ธ ่งฃๆžไธญ: {audio_file} ...\")\n",
"result = model.transcribe(\n",
" audio_file,\n",
" language=\"ja\",\n",
" vad=True,\n",
" condition_on_previous_text=False,\n",
" word_timestamps=False,\n",
" beam_size=5\n",
")\n",
"\n",
"# ็ตๆžœ่กจ็คบ\n",
"print(\"\\n\" + \"=\"*30 + \" Whisper ่ช่ญ˜็ตๆžœ \" + \"=\"*30)\n",
"for segment in result.segments:\n",
" print(f\"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}\")\n",
"\n",
"print(\"\\n\" + \"=\"*30 + \" ๆญฃ่งฃใƒ‡ใƒผใ‚ฟ (ๅ‚่€ƒ) \" + \"=\"*30)\n",
"# ใ‚จใƒณใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐใ‚’่‡ชๅ‹•ๅˆคๅˆฅใ—ใฆ่กจ็คบ๏ผˆShift_JISใชใฉใฎๅฏ่ƒฝๆ€งใŒใ‚ใ‚‹ใŸใ‚๏ผ‰\n",
"encodings = ['utf-8', 'shift_jis', 'euc-jp']\n",
"reference_text = \"\"\n",
"for enc in encodings:\n",
" try:\n",
" with open(text_file, 'r', encoding=enc) as f:\n",
" reference_text = f.read()\n",
" break\n",
" except UnicodeDecodeError:\n",
" continue\n",
"\n",
"print(reference_text[:2000] + (\"...\" if len(reference_text) > 2000 else \"\")) # ้•ทใ™ใŽใ‚‹ๅ ดๅˆใฏ็œ็•ฅ\n",
"\n",
"# SRTไฟๅญ˜\n",
"srt_filename = audio_file.rsplit('.', 1)[0] + \".srt\"\n",
"result.to_srt_vtt(srt_filename)\n",
"files.download(srt_filename)\n",
"print(f\"\\n๐Ÿ’พ ๅญ—ๅน•ใƒ•ใ‚กใ‚คใƒซ({srt_filename})ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ—ใŸใ€‚\")"
],
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"โœ… ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅฎŒไบ†: interview_aps-smp.mp3, interview_aps-smp.txt\n",
"\n",
"๐ŸŽ™๏ธ ่งฃๆžไธญ: interview_aps-smp.mp3 ...\n",
"Detected Language: japanese\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Transcribe: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 71.75/71.75 [00:02<00:00, 32.79sec/s] \n",
"VAD: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 71.75/71.75 [00:01<00:00, 64.04sec/s]\n",
"Adjustment: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 71.14/71.14 [00:00<00:00, 238324.91sec/s]"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"============================== Whisper ่ช่ญ˜็ตๆžœ ==============================\n",
"[0.35s -> 12.24s] ่ณชๅ•ใ•ใ›ใฆใ„ใŸใ ใใพใ™ใ€‚่ชญใ‚“ใ ใ‚“ใงใ™ใ‘ใ‚Œใฉใ‚‚ใ€็†่งฃใซใฏ้ ใๅŠใฐใšใจใ„ใ†ๆ„Ÿใ˜ใงใ€่จ€่‘‰ใฎๆ„ๅ‘ณใ‹ใ‚‰ใŠ่žใใ—ใŸใ„ใจๆ€ใ†ใ‚“ใงใ™ใ‘ใฉใ€\n",
"[12.80s -> 20.68s] ใƒ‘ใƒฉ่จ€่ชžๆƒ…ๅ ฑใฃใฆใ„ใ†่จ€่‘‰ใจใ€ใ‚ใจใƒ•ใ‚ฉใƒซใƒžใƒณใƒˆใ€ใ‚ใจ่ด้Ÿณๅ‹•ใฃใฆใ„ใ†ใ“ใจใซใคใ„ใฆใพใšใฏใ˜ใ‚ใซ่žใ‹ใ›ใฆใใ ใ•ใ„ใ€‚\n",
"[20.68s -> 25.56s] 3ใคใญใ€‚่จ€่ชžใฃใฆใฎใฏใ‚ใ‹ใ‚Šใพใ™ใ‚ˆใญใ€‚่จ€่‘‰ใงใ™ใ‚ˆใญใ€‚\n",
"[25.96s -> 33.34s] ่จ€่ชžๆƒ…ๅ ฑใฃใฆใ„ใ†ใฎใฏใญใ€็ฐกๅ˜ใซ่จ€ใˆใฐๅ˜่ชžใฎๆ„ๅ‘ณใ€‚่พžๆ›ธใซๆ›ธใ„ใฆใ‚ใ‚Šใพใ™ใ‚ˆใญใ€‚\n",
"[33.34s -> 44.18s] ใใ‚Œใ‹ใ‚‰ๅ˜่ชžใŒใใฃใคใ„ใŸใจใใซใ€ใใฃใคใ„ใŸๆ–‡ใ‚’ไฝœใฃใŸใ‚Šใ™ใ‚‹ใจใใซใ€ๅ่ฉžใซๅŠฉ่ฉžใŒใใฃใคใ„ใฆใ€ๅ‹•่ฉžใŒใ‚ใฃใฆใ€ๆœ€ๅพŒใซๅŠฉๅ‹•่ฉžใŒใ‚ใฃใฆใ€\n",
"[44.70s -> 49.88s] ใใ†ใ„ใ†ๆ™ฎ้€šใซ่จ€่ชžๅญฆใฎๆ•™็ง‘ๆ›ธใซๆ›ธใ„ใฆใ‚ใ‚‹ใ‚ˆใ†ใชใ€ใใ‚ŒใŒ่จ€่ชžๆƒ…ๅ ฑใงใ™ใญใ€‚\n",
"[49.88s -> 60.90s] ใงใ€ใƒ‘ใƒฉใฃใฆ่จ€่‘‰ใฏใญใ€่ชžๆบ็š„ใซใฏใญใ€ใใฎใ€ใชใ‚“ใจใ‹ใฎๆจชใซใ€ใจใ‹ใญใ€้šฃใซใ€ใจใ‹ใญใ€ใใ†ใ„ใ†ๆ„ๅ‘ณใชใ‚“ใงใ™ใ‚ˆใ€‚\n",
"[62.50s -> 71.14s] ใงใ€ใคใพใ‚Š่จ€่ชžใ‹ใ‚‰ใกใ‚‡ใฃใจใšใ‚ŒใŸใจใ“ใ‚ใซใ‚ใ‚‹ๆƒ…ๅ ฑใ€ใ ใ‘ใฉใ€ใ ใ‘ใฉใ€ใใฎๅฎŸ้š›ใซใฏๅญ˜ๅœจใ—ใฆใ„ใ‚‹ๆƒ…ๅ ฑใฃใฆใ„ใ†ใ“ใจใงใ™ใญใ€‚\n",
"\n",
"============================== ๆญฃ่งฃใƒ‡ใƒผใ‚ฟ (ๅ‚่€ƒ) ==============================\n",
"%่ฌ›ๆผ”ID:D04M0041\n",
"%\n",
"%<SOT>\n",
"%%ใ€็•ฅใ€‘\n",
"0003 00008.805-00012.085 L:\n",
"่ณชๅ•ใ•ใ›ใฆใ„ใŸใ ใใพใ™ & ใ‚ทใƒ„ใƒขใƒณใ‚ตใ‚ปใƒ†ใ‚คใ‚ฟใƒ€ใ‚ญใƒžใ‚น \n",
"(F ใ‚ใฎ) & (F ใ‚ขใƒŽ) \n",
"่ชญใ‚“ใ ใ‚“ใงใ™ใ‘ใ‚Œใฉใ‚‚ & ใƒจใƒณใƒ€ใƒณใƒ‡ใ‚นใ‚ฑใƒฌใƒ‰ใƒข \n",
"0004 00009.417-00009.838 R:\n",
"(F ใ†ใ‚“) & (F <VN>) \n",
"0005 00011.770-00012.901 R:\n",
"(F ใ†ใ‚“) & (F <VN>) \n",
"ๅˆ†ใ‹ใ‚‰ใชใ‹ใฃใŸ & ใƒฏใ‚ซใƒฉใƒŠใ‚ซใƒƒใ‚ฟ \n",
"0006 00012.536-00013.221 L:\n",
"ๅคงๆŠตใฎ & ใ‚ฟใ‚ค(็ฌ‘ ใƒ†ใƒผใƒŽ) \n",
"0007 00013.250-00014.315 R:<็ฌ‘>\n",
"0008 00013.698-00016.817 L:\n",
"(F ใ‚ใฎใƒผ) & (F ใ‚ขใƒŽใƒผ) \n",
"็†่งฃใซใฏ & ใƒชใ‚ซใ‚คใƒ‹ใƒฏ \n",
"้ ใ & ใƒˆใƒผใ‚ฏ \n",
"ๅŠใฐใšใจใ„ใ† & ใ‚ชใƒจใƒใ‚บใƒˆใƒฆใƒผ \n",
"ๆ„Ÿใ˜ใง & ใ‚ซใƒณใ‚ธใƒ‡ \n",
"0009 00017.156-00018.411 L:\n",
"(F ใ‚ใฎใƒผ) & (F ใ‚ขใƒŽใƒผ) \n",
"่จ€่‘‰ใฎ & ใ‚ณใƒˆใƒใƒŽ \n",
"ๆ„ๅ‘ณ & ใ‚คใƒŸ \n",
"0010 00018.861-00020.915 L:\n",
"ใ‹ใ‚‰ & ใ‚ซใƒฉ \n",
"ใŠ่žใใ—ใŸใ„ใจ & ใ‚ชใ‚ญใ‚ญใ‚ทใ‚ฟใ‚คใƒˆ \n",
"ๆ€ใ†ใ‚“ใงใ™ใ‘ใฉ & ใ‚ชใƒขใ‚ฆใƒณใƒ‡ใ‚นใ‚ฑใƒ‰ \n",
"0011 00019.775-00020.137 R:\n",
"(F ใฏใ„)(F ใฏใ„) & (F (? ใƒ)ใ‚ค)(F ใƒใ‚ค) \n",
"0012 00020.603-00020.823 R:\n",
"(F ใ†ใ‚“) & (F <VN>) ...\n",
"Saved: /content/interview_aps-smp.srt\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"\n",
"/usr/local/lib/python3.12/dist-packages/stable_whisper/text_output.py:183: UserWarning: Result is missing word timestamps. Word-level timing cannot be exported. Use ``word_level=False`` to avoid this warning\n",
" warnings.warn('Result is missing word timestamps. Word-level timing cannot be exported. '\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Javascript object>"
],
"application/javascript": [
"\n",
" async function download(id, filename, size) {\n",
" if (!google.colab.kernel.accessAllowed) {\n",
" return;\n",
" }\n",
" const div = document.createElement('div');\n",
" const label = document.createElement('label');\n",
" label.textContent = `Downloading \"${filename}\": `;\n",
" div.appendChild(label);\n",
" const progress = document.createElement('progress');\n",
" progress.max = size;\n",
" div.appendChild(progress);\n",
" document.body.appendChild(div);\n",
"\n",
" const buffers = [];\n",
" let downloaded = 0;\n",
"\n",
" const channel = await google.colab.kernel.comms.open(id);\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
"\n",
" for await (const message of channel.messages) {\n",
" // Send a message to notify the kernel that we're ready.\n",
" channel.send({})\n",
" if (message.buffers) {\n",
" for (const buffer of message.buffers) {\n",
" buffers.push(buffer);\n",
" downloaded += buffer.byteLength;\n",
" progress.value = downloaded;\n",
" }\n",
" }\n",
" }\n",
" const blob = new Blob(buffers, {type: 'application/binary'});\n",
" const a = document.createElement('a');\n",
" a.href = window.URL.createObjectURL(blob);\n",
" a.download = filename;\n",
" div.appendChild(a);\n",
" a.click();\n",
" div.remove();\n",
" }\n",
" "
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Javascript object>"
],
"application/javascript": [
"download(\"download_d2e992ee-ba9d-402d-8c8d-c58b12a53443\", \"interview_aps-smp.srt\", 1417)"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"๐Ÿ’พ ๅญ—ๅน•ใƒ•ใ‚กใ‚คใƒซ(interview_aps-smp.srt)ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ—ใŸใ€‚\n"
]
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment