Spaces:
Running
Running
# app.py | |
import streamlit as st | |
from faster_whisper import WhisperModel | |
import tempfile | |
from pydub import AudioSegment | |
from pydub.utils import which | |
# ffmpegの場所をpydubに教える | |
AudioSegment.converter = which("ffmpeg") | |
# 画面のタイトルなど | |
st.set_page_config(page_title="文字起こしアプリ", layout="centered") | |
st.title("🎤 日本語文字起こし(無料)") | |
# モデルの選択(初心者は small がおすすめ) | |
model_size = st.selectbox("使うモデルの大きさ", ["tiny", "base", "small", "medium", "large-v2"]) | |
# ファイルアップロード欄 | |
uploaded_file = st.file_uploader("音声ファイルを選んでね(mp3, wavなど)", type=["mp3", "wav", "m4a"]) | |
if uploaded_file: | |
st.audio(uploaded_file) | |
# 一時ファイルとして保存 | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp: | |
tmp.write(uploaded_file.read()) | |
audio_path = tmp.name | |
if st.button("▶️ 文字起こしスタート!"): | |
progress = st.progress(0) | |
status = st.empty() | |
# ステップ1:文字起こしモデルを読み込む | |
status.info("Whisperモデルを準備中...") | |
model = WhisperModel(model_size, compute_type="int8") | |
progress.progress(30) | |
# ステップ2:文字起こし実行 | |
status.info("文字起こし中...") | |
segments, info = model.transcribe(audio_path, language="ja", vad_filter=True) | |
progress.progress(80) | |
# ステップ3:結果をまとめて表示 | |
text = "\n".join([segment.text for segment in segments]) | |
st.success("完了!こちらが結果です👇") | |
st.text_area("文字起こし結果", value=text, height=300) | |
progress.progress(100) | |
# ステップ4:ダウンロードボタン | |
st.download_button("💾 TXTで保存", data=text, file_name="transcription.txt", mime="text/plain") | |