Initial commit
This commit is contained in:
45
skills/transcribe-audio-to-text/SKILL.md
Normal file
45
skills/transcribe-audio-to-text/SKILL.md
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
name: transcribe-audio-to-text
|
||||
description: Transcribe audio files to text using audinota cli
|
||||
---
|
||||
|
||||
# Transcribe Audio to Text
|
||||
|
||||
Convert audio files to text using audinota transcription service.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
# Use default audio file (output from youtube-video-to-audio skill)
|
||||
python scripts/transcribe_audio.py
|
||||
|
||||
# Specify custom audio file
|
||||
python scripts/transcribe_audio.py --audio-file-path "/path/to/audio.mp3"
|
||||
```
|
||||
|
||||
## Options
|
||||
|
||||
- `--audio-file-path` - Path to audio file to transcribe (default: ~/tmp/download_audio_result.mp3)
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Transcribe default audio file
|
||||
python scripts/transcribe_audio.py
|
||||
|
||||
# Transcribe custom audio file
|
||||
python scripts/transcribe_audio.py --audio-file-path "~/Music/podcast.mp3"
|
||||
|
||||
# Get help
|
||||
python scripts/transcribe_audio.py -h
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.11+
|
||||
- audinota installed at `~/Documents/GitHub/audinota-project/.venv/bin/audinota`
|
||||
- Audio file must exist at specified path
|
||||
|
||||
## Integration
|
||||
|
||||
This skill works seamlessly with the `youtube-video-to-audio` skill. By default, it transcribes the audio file downloaded by that skill at `~/tmp/download_audio_result.mp3`.
|
||||
181
skills/transcribe-audio-to-text/scripts/transcribe_audio.py
Normal file
181
skills/transcribe-audio-to-text/scripts/transcribe_audio.py
Normal file
@@ -0,0 +1,181 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Audio Transcription Script
|
||||
|
||||
This module provides functionality to transcribe audio files to text using the audinota CLI.
|
||||
It supports both default and custom output locations, with built-in protection against
|
||||
accidentally overwriting existing files at custom locations.
|
||||
|
||||
Key Features:
|
||||
- Transcribe audio files using audinota
|
||||
- Default output location with overwrite capability
|
||||
- Custom output locations with overwrite protection
|
||||
- Automatic directory creation for custom paths
|
||||
- Integration with youtube-video-to-audio skill workflow
|
||||
|
||||
Default Behavior:
|
||||
- Input: ~/tmp/download_audio_result.mp3
|
||||
- Output: ~/tmp/download_audio_result.txt (allows overwrite)
|
||||
|
||||
Custom Output:
|
||||
- Cannot overwrite existing files (raises FileExistsError)
|
||||
- Creates parent directories automatically
|
||||
|
||||
Example Usage:
|
||||
# Use defaults (allows overwrite)
|
||||
$ python transcribe_audio.py
|
||||
|
||||
# Custom audio file
|
||||
$ python transcribe_audio.py --audio-file-path "/path/to/audio.mp3"
|
||||
|
||||
# Custom output (cannot overwrite existing)
|
||||
$ python transcribe_audio.py --audio-file-path "/path/to/audio.mp3" --output "~/Documents/transcript.txt"
|
||||
|
||||
Requirements:
|
||||
- audinota installed at ~/Documents/GitHub/audinota-project/.venv/bin/audinota
|
||||
- Audio file must exist at specified path
|
||||
|
||||
Author: sanhe
|
||||
Plugin: youtube@sanhe-claude-code-plugins
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
dir_home = Path.home()
|
||||
default_audio_path = dir_home / "tmp" / "download_audio_result.mp3"
|
||||
default_transcript_path = dir_home / "tmp" / "download_audio_result.txt"
|
||||
|
||||
|
||||
def transcribe_audio(path_audio: Path, path_output: Path = None):
|
||||
"""
|
||||
Transcribe an audio file to text using audinota.
|
||||
|
||||
Args:
|
||||
path_audio: Path to the audio file to transcribe
|
||||
path_output: Path to save the transcript (optional, audinota will use default if not specified)
|
||||
|
||||
Raises:
|
||||
subprocess.CalledProcessError: If audinota transcription fails
|
||||
"""
|
||||
path_audinota = (
|
||||
dir_home
|
||||
/ "Documents"
|
||||
/ "GitHub"
|
||||
/ "audinota-project"
|
||||
/ ".venv"
|
||||
/ "bin"
|
||||
/ "audinota"
|
||||
)
|
||||
|
||||
if not path_audinota.exists():
|
||||
raise FileNotFoundError(f"audinota not found at {path_audinota}")
|
||||
|
||||
if not path_audio.exists():
|
||||
raise FileNotFoundError(f"Audio file not found at {path_audio}")
|
||||
|
||||
args = [
|
||||
str(path_audinota),
|
||||
"transcribe",
|
||||
"--input",
|
||||
str(path_audio),
|
||||
]
|
||||
|
||||
# Add output argument if specified
|
||||
if path_output:
|
||||
args.extend(["--output", str(path_output)])
|
||||
|
||||
print(f"Transcribing audio file: {path_audio}")
|
||||
subprocess.run(args, check=True)
|
||||
|
||||
output_location = path_output if path_output else "default location"
|
||||
print(f"✓ Transcription completed successfully")
|
||||
print(f"✓ Saved to: {output_location}")
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main CLI entry point for transcribing audio files to text.
|
||||
|
||||
This script uses audinota to transcribe audio files to text.
|
||||
By default, it transcribes the audio file downloaded by the youtube-video-to-audio skill.
|
||||
|
||||
Example usage:
|
||||
# Use default paths (allows overwrite)
|
||||
python transcribe_audio.py
|
||||
|
||||
# Specify custom audio file with default output
|
||||
python transcribe_audio.py --audio-file-path "/path/to/audio.mp3"
|
||||
|
||||
# Specify both custom audio and output (cannot overwrite existing file)
|
||||
python transcribe_audio.py --audio-file-path "/path/to/audio.mp3" --output "~/Documents/transcript.txt"
|
||||
|
||||
Requirements:
|
||||
- audinota must be installed at ~/Documents/GitHub/audinota-project/.venv/bin/audinota
|
||||
- Audio file must exist at the specified path
|
||||
|
||||
Note:
|
||||
- Default location (~/tmp/download_audio_result.txt) allows overwrite
|
||||
- Custom output locations cannot overwrite existing files
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Transcribe audio files to text using audinota",
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog="""
|
||||
Examples:
|
||||
%(prog)s
|
||||
%(prog)s --audio-file-path "/path/to/audio.mp3"
|
||||
%(prog)s --audio-file-path "~/Music/podcast.mp3" --output "~/Documents/transcript.txt"
|
||||
|
||||
Notes:
|
||||
- The default audio file path is the output of youtube-video-to-audio skill
|
||||
- Default output location (~/tmp/download_audio_result.txt) allows overwrite
|
||||
- Custom output locations cannot overwrite existing files
|
||||
- Requires audinota to be installed at ~/Documents/GitHub/audinota-project/.venv/bin/audinota
|
||||
""",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--audio-file-path",
|
||||
type=str,
|
||||
default=str(default_audio_path),
|
||||
help=f"Path to the audio file to transcribe (default: {default_audio_path})",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--output",
|
||||
type=str,
|
||||
default=None,
|
||||
help=f"Output file path for transcript (default: {default_transcript_path}). Note: Default location allows overwrite, custom locations cannot overwrite existing files.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Convert to Path object and expand user home directory
|
||||
audio_path = Path(args.audio_file_path).expanduser()
|
||||
|
||||
# Determine output path and check for existing files
|
||||
if args.output:
|
||||
path_output = Path(args.output).expanduser()
|
||||
# For custom locations, check if file already exists
|
||||
if (path_output != default_transcript_path) and (path_output.exists()):
|
||||
raise FileExistsError(
|
||||
f"Output file already exists at {path_output}. "
|
||||
f"Please choose a different location or remove the existing file. "
|
||||
f"(Default location {default_transcript_path} allows overwrite)"
|
||||
)
|
||||
# Ensure output directory exists
|
||||
path_output.parent.mkdir(parents=True, exist_ok=True)
|
||||
else:
|
||||
# Use default location (allows overwrite)
|
||||
path_output = default_transcript_path
|
||||
path_output.unlink(missing_ok=True)
|
||||
|
||||
# Transcribe the audio
|
||||
transcribe_audio(path_audio=audio_path, path_output=path_output)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user