aboutsummaryrefslogtreecommitdiffstats
path: root/subtitle-podcast/subtitle-podcast.ps1
blob: 68bb4086d42df16e9e7c7a56f16a3a533347024a (plain)
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"