Makefile:依赖于整个文件夹的目标



我想使用Makefile将一堆图像转换为视频(视频video1.mp4是由文件video1/*.mjpg生成的(。我试过了:

SOURCES=video1.mp4 video2.mp4
all: $(SOURCES)
%.mp4: $(shell find % -type f)
ffmpeg -framerate 24 -pattern_type glob -i '$*/*.jpg' -c:v libx264 -pix_fmt yuv420p $@

但它不起作用,%没有变成类似video1的前缀。知道如何让它工作吗?

您必须以另一种方式添加依赖项,因为%确实没有按您希望的方式处理。像这样的东西(用一个足够的ffmpeg调用代替cat(应该可以做到:

DESTS=video1.mp4 video2.mp4
all: $(DESTS)
define add_dependencies
$(1): $(wildcard $(1:.mp4=)/*.jpg)
endef
$(foreach dst,$(DESTS),$(eval $(call add_dependencies,$(dst))))
%.mp4:
cat $^ > $@

注:

  1. 我使用内置通配符而不是find。按照我使用它的方式,我不会在子目录中递归,但你对ffmpeg的调用提示我这不是我想要的。

  2. 如果可能的话,我建议使用$^,而不是在ffmpeg中进行第二次文件匹配。

  3. 这是针对GNU make的,但我认为其他make如果不以广泛的GNU make兼容性为目标,就不会接受$(shell)语法。

相关内容

  • 没有找到相关文章

最新更新