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
|
<#
Usage:
.\subtitle-podcast.ps1 episode01.mp3
Place cover files in the same directory as your mp3, with a name like "episode01.jpg" (PNG is also OK)
If a cover is not supplied, a black background will be made instead
Requirements:
- Python in PATH
- ffmpeg in PATH
whispeX installed via pip
#>
param (
[Parameter(Mandatory = $true)]
[string]$InputAudio
)
# https://github.com/m-bain/whisperX/issues/1304#issuecomment-3599061751
$env:TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD = "true"
$Title = [System.IO.Path]::GetFileNameWithoutExtension($InputAudio)
Write-Host "Processing: $InputAudio"
Write-Host "Base title: $Title"
# -----------------------------
# Run WhisperX
# ----------------------------
# https://github.com/m-bain/whisperX/issues/878
whisperx `
--compute_type float32 `
--model large-v2 `
--align_model WAV2VEC2_ASR_LARGE_LV60K_960H `
--output_format srt `
--batch_size 4 `
--highlight_words True `
$InputAudio
# -----------------------------
# Create subtitled video
# -----------------------------
$OutputVideo = "$Title.mp4"
$Image = @()
if (Test-Path "$Title.jpg") {
$Image += @("-loop", "1", "-i", "$Title.jpg")
} elseif (Test-Path "$Title.png") {
$Image += @("-loop", "1", "-i", "$Title.png")
} else{
Write-Warning "No image with '$Title' found, making blank background"
$Image += @("-f", "lavfi", "-i", "color=c=black:s=1280x720")
}
ffmpeg `
@Image `
-i $InputAudio `
-vf "subtitles=${Title}.srt:force_style='FontSize=28,Alignment=2'" `
-c:a copy `
-shortest `
$OutputVideo
Write-Host "Done!"
Write-Host "Output: $OutputVideo"
|