k2-fsa

Activity

Stars and mentions · Last 30 days, Oct 6 – Nov 4

GitHub stars1,553
Mentions11
0265278104Oct 6Oct 20Nov 4
UTC days · repositories k2-fsa owns2 repositories

Top repositories

k2-fsa’s repositories ranked by new forks, as on trending.

Loading

Contributes to

Repositories outside k2-fsa’s account where k2-fsa opened or reviewed pull requests in the past 365 days.

Who noticed k2-fsa

Everyone who starred or forked k2-fsa’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

11posts
Nov 50 posts
  1. 話者分離がうまくいかず、モデルを 7 つ替えても直らなかった <!-- タイトル候補: 話者分離の精度が出ないとき、最初に作るべきは正解データ 10 か所だった 「モデルを替えれば直る」は 1 本目で当たって 2 本目で外れた --> はじめに 最近英語を話す機会が多いので、自分の英語の改善のためにも、英会話の内容をもとに AI に復習プランを作成してもらいたいと考えました。最初は ChatGPT に録音をそのまま読み込ませようとしたのですが、長すぎて読み込めませんでした。 そこで文字起こしアプリをいくつか調べていたのですが、調べていくうちに、月額料金が思ったより高いことに気づきました。私がやりたいのは、文字起こしをして、それを AI に読み込ませて復習メニューを作ってもらうことだけです。それにしてはちょっと高いなと思ったので、文字起こしアプリを自作することにしました。 この時代すぐに作れますし、自分に必要な最低限のものをローカルで動かすだけなので、作っていこうと思いました。 ここで盲点だったのが話者分離(録音の中で誰が話したかを区別する処理)です。私はただ文字起こしをすればいいと思っていたのですが、話者分離ができたほうが復習にはかなり役に立ちますし、AI 側も汲み取って復習プランを組みやすいことに気づきました。なので、この時点での要件は、ローカルで動くこと、話者分離ができること、文字起こしができることの 3 つになります。 調べていくと、そういったライブラリが OSS ですでに提供されていることまで分かりました。いくつかあったので、それぞれ色々と試しました。今は文字起こしに Whisper、話者分離に sherpa-onnx を使っています。 ところが話者分離をかけると、講師と私が 1 人の話者にまとめられてしまいました。直すまでに 3 晩かかり、その間に原因の予想を 3 回外しています。最後は、誰の声か確実に分かる区間を 10 か所選んで測ったところで原因が分かりました。この記事はその記録です。 話者が 1 人しか出てこない 23 分の録音を話者分離にかけると、話者 A が 1580 語、話者 B が 0 語になりました。録音全体が 1 人の発言として扱われています。 <!-- TODO(本人): 画像 1。話者 A だけになった結果の画面(ツール名・講師名が映らないように切り抜く) --> 録音は iPhone でしています。講師の声は PC のスピーカー越しに入り、自分の声は直接入ります。 sherpa-onnx は、音声認識や音声合成、話者分離などをまとめて動かせるライブラリです。話者分離は次の順に進みます(構成は公式ドキュメントに載っています)。 録音から、誰かが話している区間を切り出す(pyannote の segmentation モデルを使います) 区間ごとに、声の特徴を数値の並びにする(埋め込みと呼ばれます) 特徴が近い区間をまとめて、まとまりごとに話者を決める(クラスタリング) 外れた予想が 3 つあった 録音に講師の声が入っていない? 最初に疑ったのは録音そのものです。イヤホンで聞いていたなら、講師の声は録音に入っていないかもしれません。 確かめると、録音には 2 人の声が入っていました。 ライブラリのバージョンが違う? 次に疑ったのは環境の違いです。同じ録音を Linux の環境で流すと、304 秒と 554 秒の 2 人に分かれました。それでバージョンか環境の差が原因だと考えました。 ところが翌日の 22 分の録音では、Linux でも 775 秒と 17 秒に偏りました。2 人目とされた 17 秒は相づちと雑音だけです。前の日に分かれたのはたまたまだったようです。 声の特徴を取るモデルが合っていない? 3 つ目に疑ったのは、埋め込みを作るモデルです。sherpa-onnx で使える 7 つのモデルを、うまく分かれた録音と偏った録音の 2 本でそれぞれ 8 分ずつ比べました。 うまく分かれた録音では、TitaNet large(NVIDIA)と ERes2Net base(3D-Speaker)で 132 秒と 136 秒にきれいに分かれ、「これだ」と思いました。でも偏った録音では、同じ 2 つのモデルが 268 秒と 4 秒、266 秒と 5 秒です。7 つのモデルのどれを使っても同じように偏りました。 1 本目の録音だけで比べていたら、TitaNet が正解に見えていたはずです。 自分はほとんど話していなかったかもしれない 775 秒と 17 秒という結果を見たとき、自分はこう話していました。 そうですね。私はあんまり喋れなかったと思います。そもそも今回講師の英語があんまり理解できなかったので、喋る回数が非常に少なかったかもしれません。特に最初の方は。 本当に自分の発言が少なかったなら、この数字は正しいのかもしれません。ツールは正しく動いていて、レッスンで自分があまり話せなかっただけ、という可能性も出てきました。 そこで ChatGPT 用に書き出した文字起こしを読んでみると、自分の自己紹介の音読がすべて講師の発言になっていました。やはりツールが間違えていました。 <!-- TODO(本人): 画像 2。自己紹介の音読が講師側に入っている文字起こし(自分の名前・講師名はぼかす) --> 誰の声か確実に分かる区間を 10 か所選ぶ ここまでは、話者ごとの秒数を見て、分かれていそうかどうかをなんとなく判断していました。誰の声かという正解と比べていなかったので、1 本目でうまく分かれたように見えても、本当に合っているかは分かりません。 そこで文字起こしの内容から、誰の声か確実に分かる区間を選ぶことにしました。講師の区間を 5 か所、自分の区間を 5 か所で、長さはそれぞれ 8〜40 秒です。内容を読めば判断できる区間だけを選んだので、1 時間ほどでできました。 声の特徴は 2 人を区別できていた 正解の区間ができたので、話者分離の 3 つの手順のどこで間違えているかを調べました。録音に 2 人の声が入っていることは最初に確認したので、次は手順 2 の埋め込みが 2 人の声を区別できているかを測りました。 正解の区間を 30 個の断片に分けて、断片同士の埋め込みがどれくらい近いかをコサイン類似度で測りました。1 に近いほど似ている、という数値です。 組み合わせ 類似度 同じ人の断片どうし 0.56 違う人の断片どうし 0.26 30 個の断片のうち 29 個は、埋め込みだけで正しい話者に分けられました。埋め込みは 2 人の声を区別できていて、間違えていたのは手順 3 のクラスタリングのほうでした。モデルを替えて変わるのは埋め込みなので、原因がクラスタリングにあるなら、モデルをいくつ試しても直りません。 sherpa-onnx の話者分離は、クラスタリングまで含めて 1 つの API になっています。その中のクラスタリングが、講師の声だけがスピーカー越しという今回の録音の条件に合わなかったのだと思います。 クラスタリングだけを自前のものに替える 区間の切り出しはライブラリの結果をそのまま使い、区間ごとに埋め込みを取り直して、クラスタリングだけを自前のものに替えました。中身は次の通りです。 埋め込みが近い区間同士を、近い順にまとめていく(平均リンク法の凝集型クラスタリング) 話している時間の合計が長い上位 2 つのまとまりを、2 人の話者とする 残った小さなまとまり(相づちや雑音)は、近いほうの話者に入れる 正解の区間で測ると、偏っていた録音の正解率は 78% から 98% になりました。もともと分かれていた録音は 92% のままで、下がってはいません。 <!-- TODO(本人): 画像 3。直したあとの結果の画面(話者 A / B に分かれている。ツール名・講師名が映らないように) --> 「精度が落ちた」と感じたときも測った その後、処理を速くするために、区間を切り出す部分を別の方法に差し替えました。 「ちょっと精度落ちたけどめちゃ早くなったいいやん!」って感じたので、実際に精度を比べてみました。 正解の区間で測り直した結果は次の通りです。 録音 差し替え前 差し替え後 偏っていた録音 98.2% 97.8% 分かれていた録音 91.7% 92.1% 精度はほとんど変わっていませんでした。感覚では落ちたと思っていましたが、正解の区間と比べて変わっていないと分かったので、ここは直さないことにしました。 まとめ 今回は、録音、環境、モデルの順に原因を疑いました。録音を最初に確かめたのはよかったのですが、その後は埋め込みとクラスタリングのどちらが間違えているかを確かめないまま、環境やモデルを替えにいっていました。 誰の声か確実に分かる区間を 10 か所選んで測ると、どの手順で間違えているかが分かりました。うまく分かれた録音と偏った録音の両方で試していたので、1 本目の結果だけでモデルを決めずに済んでいます。 間違えた例を実際に見て原因を調べる進め方は、Andrew Ng の講座 Structuring Machine Learning Projects でも「Carrying Out Error Analysis」(エラー分析)として紹介されています。 おわりに そもそも文字起こしに労力をかける気は全くなかったので、最初は ChatGPT に録音をそのまま読み込ませようと思っていました。ただ、長すぎて読み込めなかったので、自分で作る方向に転換しました。 基本的に、何かを作るというのは負債になりますし、時間もかかる行為です。すでに手段があるなら、積極的に活用していくべきだと思いました。 とはいえ、いろいろな数値が取れましたし、AI があるのですぐに開発ができて、結構楽しい経験になりました。まだここで話していないこともあるので、別の記事で話そうと思います。 参考 openai/whisper - GitHub k2-fsa/sherpa-onnx - GitHub Speaker Diarization: Pre-trained models - sherpa documentation pyannote/pyannote-audio - GitHub nvidia/speakerverification_en_titanet_large - Hugging Face modelscope/3D-Speaker - GitHub コサイン類似度 - Wikipedia Hierarchical clustering - Wikipedia Structuring Machine Learning Projects - Coursera

  2. YouTube · · YouTube description · Dark Sem Filtro · k2-fsa/OmniVoice

    Dá para editar vídeo com IA de graça? Testei 4 modelos (2 grátis) Este vídeo foi editado por uma IA. Testei 4 modelos na mesma tarefa: 2 grátis e 2 pagos. Mostro o passo a passo, o tempo de cada um e qual eu escolheria. A skill é o Editor V1, do Jad (comunidade NextPhase). Instalei em quatro programas (OpenCode, Claude Code, Codex e Antigravity) e pedi o mesmo vídeo de 1 minuto sobre equação do 2º grau, com narração em português e fórmulas animadas. Os 4 modelos: GLM 5.3 Flash (OpenCode, grátis) DeepSeek 4.1 Flash (OpenCode, grátis) GPT 6.1 Sol (Codex, pago) Claude Sonnet 5.5 (Claude Code, pago) Links citados no vídeo: Vídeo do Jad: youtube.com Comunidade NextPhase (onde baixa o Editor V1): skool.com OpenCode: opencode.ai OpenCode no Windows (WSL): opencode.ai Codex (OpenAI): learn.chatgpt.com Claude Code (Anthropic): code.claude.com Antigravity (Google): antigravity.google OmniVoice (voz): k2-fsa/OmniVoice GLM 5.3 (Z.ai): docs.z.ai DeepSeek 4.1 (API): api-docs.deepseek.com Meu curso gratuito de IA: darksemfiltro.github.io Sem link de afiliado. Capítulos: 0:00 Este vídeo foi editado por IA 0:35 O que é uma skill 1:07 A comunidade do Jad (NextPhase) 1:52 O vídeo do Jad: OpenCode + GLM 5.3 2:10 Quatro modelos: 2 grátis e 2 pagos 2:43 OpenCode: o harness grátis 3:28 Passo a passo: instalando a skill 4:58 Teste de 7 segundos (GLM 5.3 Flash) 6:06 GLM 5.3 Flash: o vídeo de 1 minuto 8:19 DeepSeek 4.1 Flash 10:36 GPT 6.1 Sol no Codex 12:35 Claude Sonnet 5.5 no Claude Code 15:48 Os quatro lado a lado 17:58 Minha opinião sobre cada um 20:44 Grátis ou pago: vale a assinatura? 21:30 Meu uso no plano: 3% do limite mensal 22:17 Série semanal e mini curso de automação ==== COMUNIDADE DARK SEM FILTRO ==== Site: darksemfiltro.github.io Glossário: darksemfiltro.github.io Recursos: darksemfiltro.github.io Discord: discord.gg GitHub: github.com/darksemfiltro #EdiçãoDeVídeo #InteligênciaArtificial #OpenCode [en-US] Can You Edit Videos with AI for Free? I Tested 4 Models (2 Free) This video was edited by AI. I tested 4 models on the same task: 2 free and 2 paid. I show the step-by-step process, the time for each, and which one I would choose. The skill is Editor V1, by Jad (NextPhase community). I installed it in four programs (OpenCode, Claude Code, Codex, and Antigravity) and requested the same 1-minute video about quadratic equations, with narration in Portuguese and animated formulas. The 4 models: GLM 5.3 Flash (OpenCode, free) DeepSeek 4.1 Flash (OpenCode, free) GPT 6.1 Sol (Codex, paid) Claude Sonnet 5.5 (Claude Code, paid) Links mentioned in the video: Jad's video: youtube.com NextPhase Community (where to download Editor V1): skool.com OpenCode: opencode.ai OpenCode on Windows (WSL): opencode.ai Codex (OpenAI): learn.chatgpt.com Claude Code (Anthropic): code.claude.com Antigravity (Google): Google Antigravity: antigravity.google OmniVoice (voice): k2-fsa/OmniVoice GLM 5.3 (Z.ai): docs.z.ai DeepSeek 4.1 (API): api-docs.deepseek.com My free AI course: darksemfiltro.github.io No affiliate link. Chapters: 0:00 This video was edited by AI 0:35 What is a skill? 1:07 Jad's community (NextPhase) 1:52 Jad's video: OpenCode + GLM 5.3 2:10 Four models: 2 free and 2 paid 2:43 OpenCode: the free harness 3:28 Step-by-step: installing the skill 4:58 7-second test (GLM 5.3 Flash) 6:06 GLM 5.3 Flash: the 1-minute video 8:19 DeepSeek 4.1 Flash 10:36 GPT 6.1 Sol in Codex 12:35 Claude Sonnet 5.5 in Claude Code 15:48 The four side-by-side 17:58 My opinion on each one 20:44 Free or paid: is the subscription worth it? 21:30 My plan usage: 3% of the monthly limit 22:17 Weekly series and mini-course on automation ==== DARK UNFILTERED COMMUNITY ==== Website: darksemfiltro.github.io Glossary: ​​darksemfiltro.github.io Resources: darksemfiltro.github.io Discord: discord.gg GitHub: github.com/darksemfiltro #VideoEditing #ArtificialIntelligence #OpenCode [es-US] ¿Se pueden editar videos con IA gratis? Probé 4 modelos (2 gratuitos) Este vídeo fue editado por IA. Probé cuatro modelos en la misma tarea: dos gratuitos y dos de pago. Muestro el proceso paso a paso, el tiempo que tardó cada uno y cuál elegiría. La herramienta utilizada es Editor V1, de Jad (comunidad NextPhase). La instalé en cuatro programas (OpenCode, Claude Code, Codex y Antigravity) y solicité el mismo vídeo de un minuto sobre ecuaciones cuadráticas, con narración en portugués y fórmulas animadas. Los 4 modelos: GLM 5.3 Flash (OpenCode, gratuito) DeepSeek 4.1 Flash (OpenCode, gratuito) GPT 6.1 Sol (Codex, de pago) Claude Sonnet 5.5 (Claude Code, de pago) Enlaces mencionados en el vídeo: Vídeo de Jad: youtube.com Comunidad NextPhase (dónde descargar el Editor V1): skool.com OpenCode: opencode.ai OpenCode en Windows (WSL): opencode.ai Codex (OpenAI): learn.chatgpt.com Claude Code (Anthropic): code.claude.com Antigravity (Google): Google Antigravedad: antigravity.google OmniVoice (voz): k2-fsa/OmniVoice GLM 5.3 (Z.ai): docs.z.ai DeepSeek 4.1 (API): api-docs.deepseek.com Mi curso gratuito de IA: darksemfiltro.github.io Sin enlaces de afiliados. Capítulos: 0:00 Este video fue editado por IA 0:35 ¿Qué es una habilidad? 1:07 Comunidad de Jad (NextPhase) 1:52 Vídeo de Jad: OpenCode + GLM 5.3 2:10 Cuatro modelos: 2 gratuitos y 2 de pago 2:43 OpenCode: el arnés gratuito 3:28 Paso a paso: instalación de la skill 4:58 Prueba de 7 segundos (GLM 5.3 Flash) 6:06 GLM 5.3 Flash: el vídeo de 1 minuto 8:19 DeepSeek 4.1 Flash 10:36 GPT 6.1 Sol en Codex 12:35 Claude Sonnet 5.5 en Claude Code 15:48 Comparación de los cuatro modelos 17:58 Mi opinión sobre cada uno 20:44 ¿Gratis o de pago? ¿Merece la pena la suscripción? 21:30 Uso de mi plan: 3% del límite mensual 22:17 Serie semanal y minicurso sobre automatización ==== COMUNIDAD DARK UNFILTERED ==== Sitio web: darksemfiltro.github.io Glosario: darksemfiltro.github.io Recursos: darksemfiltro.github.io Discord: discord.gg GitHub: github.com/darksemfiltro #EdiciónDeVideo #InteligenciaArtificial #CódigoAbierto

    337 likes · 45 comments · 16,738 views
  3. How to Transcribe Douyin (抖音) Videos to Chinese Text Without an API Key Douyin (抖音) doesn't publish subtitles in its web data, so if you want the words spoken in a video you have to run speech recognition yourself. Most open-source Douyin "video to text" projects chain together a video downloader, ffmpeg and a paid speech API (DashScope, SiliconFlow and so on), and they tend to break whenever Douyin changes its cookies. This tutorial shows two ways to get timestamped Chinese transcripts with punctuation without any of that: a no-code run and a few lines of Python. Then a do-it-yourself section on running the speech model on your own machine, with the accuracy comparison I measured between Whisper and SenseVoice on real Douyin narration. Disclosure: I built the Apify actor used in options 1 and 2 (Douyin Transcript Scraper). The DIY section works without it. What you get per video One row per video. Real values from a run on 26 Oct 2026, an 11-minute movie-explainer video (电影解说) by 心影说: | Field | Example | | --- | --- | | url, videoId | https://www.douyin.com/video/7696934197226786058 | | authorNickname | 心影说 | | description | 法律迟迟不肯给出公道,八旬老兵该如何讨回尊严? #伏罗希洛夫射手 #电影解说 | | createdAt | 2026-10-17T09:00:00Z | | durationSeconds | 664.7 | | likeCount, commentCount, shareCount, collectCount | 163, 2, 10, 21 | | language | zh | | characterCount | 4031 | | hook | the opening sentence (segments starting in the first 3 seconds) | | transcript | timed segments [{"start": 0.07, "end": 17.94, "text": "老人架起狙击步枪,…"}] | | musicTitle, audioSource | @心影说创作的原声, original_sound_mp3 | Option 1: No code (Apify Console) 1. Open the actor page and click Try for free. Apify's free plan includes monthly platform credit; the actor itself is pay-per-event (see the Store page for the current price), and videos without speech aren't charged. 2. Paste Douyin videos (douyin.com/video/… links, v.douyin.com/… share links or numeric IDs), or add creators by profile link (douyin.com/user/MS4wLjAB…). 3. Pick the Transcript format: timed segments, plain text or both. 4. Click Start and export the results as CSV, JSON or Excel. For creators, the actor transcribes their newest videos up to Max videos per creator. Douyin shows logged-out visitors roughly the 40 newest videos of an account, so for older videos paste their links directly. Option 2: Python pip install apify-client, then take your API token from Apify Console → Settings → Integrations. from apify_client import ApifyClient client = ApifyClient("<YOUR_APIFY_TOKEN>") run = client.actor("axlymxp/douyin-transcript-scraper").call(run_input={ "videoUrls": ["https://www.douyin.com/video/7696934197226786058"], "profileUrls": [ "https://www.douyin.com/user/MS4wLjABAAAAOzRPcYBhm0xO0mXI5UGjHc2udHifSV-6xuI5mpo_UNKFN6qLVzfWb4QMT8BTOk2n", ], "maxVideosPerProfile": 5, "outputFormat": "both", # segments in `transcript`, joined text in `transcriptText` }) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): if item["error"]: # no_speech, not_available, too_long, ... print("skip", item["videoId"], item["error"]) continue print(item["authorNickname"], item["likeCount"], item["characterCount"], "chars") print(" ", item["transcriptText"][:80]) A natural next step is to feed transcriptText to an LLM for an English summary or translation. Example output One real row (trimmed to two segments; coverUrl removed): { "videoId": "7696934197226786058", "url": "https://www.douyin.com/video/7696934197226786058", "authorNickname": "心影说", "description": "法律迟迟不肯给出公道,八旬老兵该如何讨回尊严? #伏罗希洛夫射手 #电影解说", "createdAt": "2026-10-17T09:00:00Z", "durationSeconds": 664.7, "likeCount": 163, "language": "zh", "audioSource": "original_sound_mp3", "characterCount": 4031, "transcript": [ {"start": 0.07, "end": 17.94, "text": "老人架起狙击步枪,枪口牢牢锁定了对面的三个败类,但一枪爆头的死法显然只会便宜了这几个人渣。他随即调整枪口的角度,对准了坐在正中间的那人。那小子正用双腿夹着香槟酒瓶。就在他拔出瓶塞的瞬间,老人猛的扣下了扳机。"}, {"start": 19.3, "end": 41.44, "text": "玻璃碎片混着鲜血,四下飞溅,不但将现场伪装成了意外爆炸,还顺带废掉了这家伙的作案工具。随后,老人迅速把狙击枪锁进柜子,套上外套,捡起地上的弹壳,神色自若的走下楼,悄无声息的混进了人群之中。…"} ], "error": null } DIY: transcribe Mandarin audio yourself (no API key) If you already have the audio (your own videos, or files you downloaded), you can run a strong Mandarin speech model on a normal CPU. Whisper or SenseVoice? I ran the same 60-second clip of that video's narration through three models on a single cloud vCPU: | Model | Time for 60 s | What came out | | --- | --- | --- | | Whisper base | 11.5 s | Garbled homophones: 扳机 (trigger) became 半斤, 狙击步枪 (sniper rifle) became 嫁起居及不强; traditional and simplified characters mixed | | Whisper small | 37 s | Much better, but in traditional characters, and on another clip it inserted a Korean phrase that nobody said | | SenseVoice-Small | 9.3 s | Simplified Chinese with punctuation; 扳机, 狙击步枪, 神色自若, 悄无声息 all correct | SenseVoice (from Alibaba's FunAudioLLM team) also covers Cantonese, English, Japanese and Korean. The easiest way to run it on CPU is sherpa-onnx: pip install sherpa-onnx av numpy, then download sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2 and silero_vad.onnx from the sherpa-onnx asr-models release. import av, numpy as np, sherpa_onnx SV = "sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17" def load_audio(path, rate=16000): """Any audio/video file -> 16 kHz mono float32 (PyAV, no ffmpeg binary needed).""" chunks = [] with av.open(path) as c: rs = av.AudioResampler(format="s16", layout="mono", rate=rate) for frame in c.decode(audio=0): chunks += [f.to_ndarray().reshape(-1) for f in rs.resample(frame)] chunks += [f.to_ndarray().reshape(-1) for f in rs.resample(None)] return np.concatenate(chunks).astype(np.float32) / 32768.0 recognizer = sherpa_onnx.OfflineRecognizer.from_sense_voice( model=f"{SV}/model.int8.onnx", tokens=f"{SV}/tokens.txt", num_threads=1, use_itn=True, language="auto") # use_itn adds punctuation vad_cfg = sherpa_onnx.VadModelConfig() vad_cfg.silero_vad.model = "silero_vad.onnx" vad_cfg.silero_vad.max_speech_duration = 20 # target length; it cuts at the next pause, so some run longer vad_cfg.sample_rate = 16000 vad = sherpa_onnx.VoiceActivityDetector(vad_cfg, buffer_size_in_seconds=60) samples = load_audio("my_video.mp3") window = vad_cfg.silero_vad.window_size segments = [] for i in range(0, len(samples) + window, window): if i < len(samples): vad.accept_waveform(samples[i:i + window]) else: vad.flush() while not vad.empty(): segments.append((vad.front.start / 16000, np.array(vad.front.samples, dtype=np.float32))) vad.pop() for start, seg in segments: # one segment per decode call (see below) stream = recognizer.create_stream() stream.accept_waveform(16000, seg) recognizer.decode_stream(stream) print(f"[{start:7.2f}] {stream.result.text}") Two things that cost me time: - Cut the audio into short segments. On a single 60-second chunk, SenseVoice dropped words in one of three clips. Splitting with voice-activity detection into shorter pieces (most of mine ended up 15-25 seconds) fixed that, and gives you timestamps for free. - Don't batch segments of different lengths. sherpa-onnx can decode a list of streams at once (decode_streams), but the batch is padded to its longest segment. On one vCPU that made transcription about 2.5x slower than decoding one segment at a time: roughly 19 s of CPU per audio minute instead of 7.7 s. Getting the audio out of Douyin is the other half of the job: the video and its download links come from Douyin's signed web API, and the files are big (an 11-minute explainer is 150-210 MB as video). When a video uses the creator's original sound, its audio-only MP3 is much smaller (17-29 MB for 11-17 minutes), which is what the actor downloads. FAQ Do I need a Douyin account? No. Only public videos are read, logged out. Does Douyin provide subtitles? Not in its public web data; every transcript is generated from the audio. How accurate is it? Clear Mandarin narration comes out very well. Background music, dialects, heavy slang or several people talking at once lower accuracy, and song lyrics are transcribed like speech. Traditional characters? SenseVoice outputs simplified Chinese; convert with a library such as OpenCC if you need traditional. Is it legal? These are public videos read without logging in. How you use the transcripts is on you: respect Douyin's terms, copyright and privacy law. Questions or a video that won't work? Open an issue on the actor page and I'll take a look.

  4. Reddit · · r/ClaudeAI · u/BrilliantPossible380 · k2-fsa/sherpa-onnx

    Claude x Github integration recommendations? I’m a Post-grad student with 9 courses so I setup a Claude automation that turns my Canvas material into study tools automatically. Looking for ways to improve it. How I use it right now: - Canvas MCP (vishalsachdev/canvas-mcp) runs locally with my own token and reads from Canvas - Claude checks Canvas regularly for new lecture slides, exam blueprints, and review sheets - Lecture transcription. For recorded lectures I transcribe the audio with sherpa-onnx. Claude then picks out what the professor says will or won’t be tested - Study materials. From there a Python script builds a study guide, flashcards, and practice exams focused on the highest-yield material for each exam - Study hub. Everything lives on one page where I can see what’s coming up and track my progress. What I’d love suggestions for: 1. Spaced repetition. My flashcard system is pretty basic. Is there something like FSRS that works in a plain HTML page, or a good way to export to Anki? 2. Progress syncing between my laptop and phone. 3. Panopto. Canvas can’t access it, so I’m pasting transcripts in by hand. Has anyone automated this? 4. OCR for scanned handouts that handles medical terminology better than Tesseract. 5. Speech-to-text that’s more accurate with medical terms. And anything else that might be helpful! Thank you in advance!

    1 point · 6 comments
  5. Clone voices in 600+ languages with OmniVoice—free & open source! Run AI TTS locally, no subscription. Setup: clone repo, install dependencies, download model, then run: omnivoice-demo --ip 127.0.0.1 --port 8001 Consent required. k2-fsa/OmniVoice #TTS #Github

    6 views
  6. Android privacy gets a serious upgrade with Rethink DNS + Firewall. It combines DNS filtering, app-level firewall controls, VPN tunneling, and network monitoring in one open-source app. GitHub: celzero/rethink-app More control over your connections. Less unwanted network traffic.

    4 likes · 428 views
  7. @RoundtableSpace FREE Voice Cloning in 600+ Languages k2-fsa/OmniVoice

    1 like · 58 views
  8. Reddit · · r/BestGitHubRepos · u/company_url_finder · k2-fsa/OmniVoice

    OmniVoice: High-Quality Voice Cloning TTS for 600+ Languages (15k stars) What it does All text below is quoted directly from the project README. >OmniVoice is a state-of-the-art massively multilingual zero-shot text-to-speech (TTS) model supporting over 600 languages. Built on a novel diffusion language model-style architecture, it generates high-quality speech with superior inference speed, supporting voice cloning and voice design. Key Features: - 600+ Languages Supported: The broadest language coverage among zero-shot TTS models. - Voice Cloning: State-of-the-art voice cloning quality. - Voice Design: Control voices via assigned speaker attributes (gender, age, pitch, dialect/accent, whisper, etc.). - Fine-grained Control: Non-verbal symbols (e.g., [laughter]) and pronunciation correction via pinyin or phonemes. - Fast Inference: RTF as low as 0.025 (40x faster than real-time). - Diffusion Language Model-style Architecture: A clean, streamlined, and scalable design that delivers both quality and speed. >Launch the local web UI: omnivoice-demo --ip 0.0.0.0 --port 8001 Repository k2-fsa/OmniVoice Repository stats |Metric|Value| |:-|:-| |Stars|14,780| |Forks|2,205| |Last release|0.2.1 (2026-07-16)| |Languages|Python 100%| |Contributors|25| |AI contributor accounts (Claude / Codex / Cursor / Copilot)|claude: 1| |AI co-authored commits|Claude: 1| Main contributor |Field|Value| |:-|:-| |Name|Han Zhu| |GitHub|@zhu-han| |Commits to this repo|37 (top contributor)| |Company / Location|Xiaomi Corporation / Beijing| |Website|zhu-han.github.io| |Followers|130| |Public repos|20| |On GitHub since|2019-06-19| ────────────────────────────── 📌 How many great GitHub repos have you discovered and completely forgotten about? Don't let another useful tool disappear into your Reddit feed. Get the community's best repos, organized by category, plus key takeaways from real developer discussions, delivered to your inbox twice a week. 📬 Never lose track of great repos again. Subscribe free.

    1,046 points · 23 comments
  9. Paper: arxiv.org
Full paper with result tables: arxiv.org
Code: k2-fsa/OmniVoice
Model: huggingface.co
Live demo: huggingface.co
Audio samples: zhu-han.github.io
Try in Colab: colab.research.google.com

    1 like · 17 views
  10. 只用一段录音,就能让你的声音说遍 600 多种语言! 开源项目 OmniVoice 来了,GitHub 星标直冲 1 万。支持零样本语音合成、音色克隆,还能调节音高、年龄感和方言,生成速度最高可达实时的 40 倍。 AI 配音、多语言创作,这个项目值得蹲。 🔗 k2-fsa/OmniVoice t.co

    2 likes · 234 views

Achievements

Awards earned by the repositories k2-fsa owns. Select an award to embed its badge.

No awards yet

Repositories earn awards by reaching the top three in a completed trending day or week.

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.