File size: 2,292 Bytes
fac06d0 80f7e89 e4297a8 de84263 4b85b27 200541c fac06d0 bdc6930 fac06d0 326258c 43ca182 326258c d989d14 48d7752 326258c 04717a8 270a894 262c6d5 326258c 4969c68 326258c 8dffbd8 326258c 8dffbd8 b44d1eb 8dffbd8 326258c 17c812b 8dffbd8 534a7d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
from transformers import pipeline
import gradio as gr
from video_downloader import download_video, download_youtube_video
from moviepy.editor import AudioFileClip
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
import os
from pydub import AudioSegment
import re
pipe = pipeline("automatic-speech-recognition", model="Artanis1551/whisper_romanian")
def process_video(date):
# If the date is not in YYYY-MM-DD format, return an error message
date = date.strip()
date_pattern = re.compile(r"\b\d{4}\d{2}\d{2}\b")
if not date_pattern.match(date):
video_path = download_youtube_video(
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
)
transcription = "Please enter a date in the format YYYY-MM-DD."
return video_path, transcription
try:
# Download the video
video_path = download_video(date)
# Extract the first 30 seconds of the video
short_video_path = f"short_{date}.mp4"
ffmpeg_extract_subclip(video_path, 0, 30, targetname=short_video_path)
video_path = short_video_path
# Extract audio from the short video
audio_path = f"audio_{date}.wav"
AudioFileClip(short_video_path).write_audiofile(audio_path)
audio = AudioSegment.from_wav(audio_path)
with open(audio_path, "rb") as audio_file:
audio = audio_file.read()
transcription = pipe(audio)["text"]
# Remove the audio file
os.remove(audio_path)
except:
video_path = download_youtube_video(
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
)
transcription = "No decision was made on this date."
return video_path, transcription
iface = gr.Interface(
fn=process_video,
inputs=gr.inputs.Textbox(label="Date with format YYYYMMDD"),
outputs=[
gr.outputs.Video(),
gr.Textbox(lines=100, max_lines=100, interactive=True),
],
title="Romanian Transcription Test",
description="This app transcribes videos from the Romanian Parliament"
+ " on a given date. Only the first 30 seconds of the "
+ "video will be used if it is longer than that.\n\n"
+ "Example dates where there are videos available:"
+ " 20231122 and 20230522.",
)
iface.launch()
|