我的 make 文件中有一部分可以进行语音到文本的转换。它适用于目录中的每个 mp3 文件。
%.txt : %.mp3
$(WS) $(FLAGS) ./$<
但是该软件也可以愉快地处理 .wav .m4a 文件等。我花了很多时间将东西转换为 mp3。有没有办法以同样的方式处理大量音频文件?像下面这样的东西(不起作用)
%.txt : %.mp3 %.wav %.m4a
$(WS) $(FLAGS) ./$<
完整修改Make文件的帖子
.SUFFIXES : .txt .m4a .mp3 .wav
SOURCES := $(wildcard *.m4a)
TEXT := $(wildcard *.txt)
OBJ := $(subst m4a,txt,$(SOURCES))
WS = whisper
FLAGS = --device cuda:1 --model small
.PHONY: test clean imported
define template =
%.txt: %.$(1)
$(WS) $(FLAGS) $$<
endef
$(foreach extension,mp3 wav m4a,$(eval $(call template,$(extension))))
BIN := $(wildcard *.mp3 *.wav *.m4a)
TXT := $(addsuffix .txt,$(basename $(BIN)))
all: $(TXT)
clean :
rm *~ *.json *.srt *.tsv *.vtt
split: $(TEXT)
awk -v RS="[.]" -v ORS=".\n" 'NR%70==1 {file = sprintf("./tmp/$(patsubst %.txt,%, $< )%04d.txt", NR)} {print > file}' $<
imported:
mv odt/*.odt odt/imported/
test: $(SOURCES)
@echo $(OBJ)
@echo PREREQUISITES: $^
当普通的旧 shell 可以完成这项工作时,为什么还要使用 makefile?
WS=ws
FLAGS="-foo -bar"
for file in *.mp3 *.wav *.m4a; do
$WS $FLAGS $file
done
您想走
make
路有什么特别的原因吗?如果是因为不想转换已经转换的文件,可以测试一下对应的txt文件是否存在
如果您不想在 makefile 中重复编写相同的配方,因为您有大量文件扩展名,则可以使用参数化模板配方和
eval
函数,如下所示:
WS := @echo ws
FLAGS := --foo --bar
define template =
%.txt: %.$(1)
$(WS) $(FLAGS) $$<
endef
$(foreach extension,mp3 wav m4a,$(eval $(call template,$(extension))))
BIN := $(wildcard *.mp3 *.wav *.m4a)
TXT := $(addsuffix .txt,$(basename $(BIN)))
all: $(TXT)