67 ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΎΠ²
π ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΡ Π°ΡΠ΄ΠΈΠΎ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ! π
ΠΡΠΈΠ²Π΅Ρ, Π΄ΡΡΠ·ΡΡ! Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π½ΡΠΊΡΠΈΠ±Π°ΡΠΈΠΈ Π°ΡΠ΄ΠΈΠΎΠ΄ΠΎΡΠΎΠΆΠ΅ΠΊ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅Π΄ΠΈΠ° ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-Π±ΠΎΡΠΎΠ²!
### ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Python ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠΈ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ. Π‘ΠΊΡΠΈΠΏΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π°ΡΠ΄ΠΈΠΎ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ, ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π½Π° ΡΠ°ΡΡΠΈ, ΡΡΠ°Π½ΡΠΊΡΠΈΠ±ΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ°ΡΡΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
### Π§ΡΠΎ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ?
1. Python: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Python Π²Π΅ΡΡΠΈΠΈ 3.7 ΠΈΠ»ΠΈ Π²ΡΡΠ΅.
2. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Python: ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ whisperx, pydub, numpy, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ pip:
pip install whisperx pydub numpy
3. FFmpeg: ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΡΠ΄ΠΈΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ [ΡΠ°ΠΉΡΠ° FFmpeg](https://ffmpeg.org/download.html) ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²Π°ΡΠ΅ΠΉ ΠΠ‘.
### ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ ΡΠΊΡΠΈΠΏΡΠ°
1. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ Π½ΠΈΠΆΠ΅ Π² ΡΠ°ΠΉΠ» transcribe.py Π½Π° Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅.
2. ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π²Π°Ρ Π²ΠΈΠ΄Π΅ΠΎΡΠ°ΠΉΠ» Π² ΡΡ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΡ, Π³Π΄Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΡΠΈΠΏΡ.
3. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΡΠΊΠ°Π·Π°Π² ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π²ΠΈΠ΄Π΅ΠΎ:
python transcribe.py "path_to_your_video.mp4"
### Π‘Π°ΠΌ ΡΠΊΡΠΈΠΏΡ:
from pydub import AudioSegment
import whisperx
import tempfile
import shutil
import os
import numpy as np
def transcribe_video(input_video, fragment_duration_ms=60000, target_sample_rate=16000):
batch_size = 8
compute_type = "float32"
device = "cpu"
model = whisperx.load_model("small", device=device, compute_type=compute_type)
temp_dir = tempfile.mkdtemp()
try:
audio = AudioSegment.from_file(input_video, format="mp4")
if audio.frame_rate != target_sample_rate:
audio = audio.set_frame_rate(target_sample_rate)
samples = np.array(audio.get_array_of_samples())
fragment_length = len(samples)
num_fragments = max(1, fragment_length // (fragment_duration_ms * (target_sample_rate / 1000)))
full_text_content = []
for i in range(int(num_fragments)):
start = int(i * fragment_duration_ms * (target_sample_rate / 1000))
end = int(min((i + 1) * fragment_duration_ms * (target_sample_rate / 1000), fragment_length))
fragment_samples = samples[start:end]
fragment = AudioSegment(
fragment_samples.tobytes(),
frame_rate=target_sample_rate,
sample_width=audio.sample_width,
channels=audio.channels
)
fragment_file = os.path.join(temp_dir, f"fragment_{i}.wav")
fragment.export(fragment_file, format="wav")
fragment_audio = whisperx.load_audio(fragment_file)
result = model.transcribe(fragment_audio, batch_size=batch_size, language="ru")
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], model_a, metadata, fragment_audio, device, return_char_alignments=False)
segments = result["segments"]
text_content = ""
for segment in segments:
text = segment['text']
text_content += text[1:] if text[0] == ' ' else text
text_content += "\n"
full_text_content.append(text_content)
with open("transcription.txt", "w", encoding="utf-8") as file:
file.write("\n".join(full_text_content))
finally:
shutil.rmtree(temp_dir)
if __name__ == "__main__":
import sys
transcribe_video(sys.argv[1])
### Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°: Windows, macOS, Linux.
- ΠΠ°ΠΌΡΡΡ: Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 4 ΠΠ RAM Π΄Π»Ρ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ.
- ΠΡΠΎΡΠ΅ΡΡΠΎΡ: ΠΡΠ±ΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ CPU ΠΎΡ Intel, AMD ΠΈΠ»ΠΈ ARM Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Python.
### ΠΠΏΠ΅ΡΠ΅Π΄ΠΈ Π±ΠΎΠ»ΡΡΠ΅!
ΠΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠΎΡΠΌ Π»Π΅ΡΠ½Π΅ΠΌ ΠΊΡΡΡΠ΅ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-Π±ΠΎΡΠΎΠ²! π€β¨
2 ΠΌΠΈΠ½ΡΡΡ
10Β ΠΈΡΠ»ΡΒ 2024