Created
May 10, 2018 15:16
-
-
Save knzm/4dffdb1fed6223f09ee6b418217f9bc9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.PHONY: target clean clean-video-objs clean-audio-objs metadata pass1 pass2 | |
video_width := 432 | |
# video_crf := 23 | |
video_bitrate := 192000 | |
# video_2pass = no | |
ifeq ($(video_2pass),) | |
ifdef video_bitrate | |
video_2pass = yes | |
else | |
video_2pass = no | |
endif | |
endif | |
audio_bitrate := 128000 | |
audio_sampling_rate := 44100 | |
audio_data_format = aac@$(audio_sampling_rate) | |
# audio_data_format = aac | |
WORKDIR := work | |
PREFIX_CMD := | |
SRC := mkv/title00.mkv | |
METADATA := metadata.ini | |
COVER := cover.jpg | |
TARGET := output.mp4 | |
ifeq ($(video_2pass),yes) | |
VIDEO_TARGET = $(WORKDIR)/x264-2.m4v | |
VIDEO_OBJS = \ | |
$(WORKDIR)/pass1.timestamp \ | |
$(WORKDIR)/pass2.timestamp \ | |
$(WORKDIR)/x264-0.log \ | |
$(WORKDIR)/x264-0.log.mbtree \ | |
$(WORKDIR)/x264-1.m4v \ | |
$(WORKDIR)/x264-2.m4v | |
else | |
VIDEO_TARGET = $(WORKDIR)/x264.m4v | |
VIDEO_OBJS = \ | |
$(WORKDIR)/x264.m4v | |
endif | |
AUDIO_TARGET = $(WORKDIR)/aac.m4a | |
AUDIO_OBJS = \ | |
$(WORKDIR)/alac.m4a \ | |
$(WORKDIR)/aac.m4a | |
target: $(TARGET) | |
clean: | |
rm -f $(TARGET) $(VIDEO_OBJS) $(AUDIO_OBJS) | |
clean-video-objs: | |
rm -f $(VIDEO_OBJS) | |
clean-audio-objs: | |
rm -f $(AUDIO_OBJS) | |
metadata: | |
ffmpeg -i $(SRC) -f ffmetadata - 2> /dev/null | |
$(TARGET): $(VIDEO_TARGET) $(AUDIO_TARGET) $(METADATA) $(COVER) | |
$(PREFIX_CMD) ffmpeg \ | |
-loglevel warning \ | |
-y \ | |
-i $(METADATA) \ | |
-i $(VIDEO_TARGET) \ | |
-i $(AUDIO_TARGET) \ | |
-i $(COVER) \ | |
-codec copy \ | |
-map_metadata 0 \ | |
-map_chapters 0 \ | |
-map 1 \ | |
-map 2 \ | |
$@ | |
pass1: $(WORKDIR)/pass1.timestamp | |
pass2: $(WORKDIR)/pass2.timestamp | |
$(WORKDIR)/x264-0.log: $(WORKDIR)/pass1.timestamp | |
$(WORKDIR)/x264-1.m4v: $(WORKDIR)/pass1.timestamp | |
$(WORKDIR)/x264-2.m4v: $(WORKDIR)/pass2.timestamp | |
video_filter_format = format=yuv420p | |
video_filter_scale = scale=$(video_width):-1:flags=lanczos | |
video_filter = $(video_filter_format),$(video_filter_scale) | |
# video_filter_decimate = mpdecimate,setpts=N/FRAME_RATE/TB | |
# video_filter = $(video_filter_format),$(video_filter_scale),$(video_filter_decimate) | |
# audio_filter_decimate = asetpts=N/SAMPLE_RATE/TB | |
# audio_filter = $(audio_filter_decimate) | |
FFMPEG_COMMON_FLAGS = \ | |
-threads 0 \ | |
-loglevel warning \ | |
-guess_layout_max 0 \ | |
-y | |
FFMPEG_VIDEO_FLAGS = \ | |
-codec:v libx264 \ | |
-preset medium \ | |
-tune film,fastdecode \ | |
-profile:v main \ | |
-level 3.0 \ | |
-movflags +faststart | |
ifdef video_filter | |
FFMPEG_VIDEO_FLAGS += -vf "$(video_filter)" | |
endif | |
ifdef video_crf | |
FFMPEG_VIDEO_FLAGS += -crf $(video_crf) | |
endif | |
ifdef video_bitrate | |
FFMPEG_VIDEO_FLAGS += -b:v $(video_bitrate) | |
endif | |
FFMPEG_AUDIO_FLAGS = \ | |
-codec:a alac | |
ifdef audio_filter | |
FFMPEG_AUDIO_FLAGS += | |
-af "$(audio_filter)" | |
endif | |
$(WORKDIR)/x264.m4v: $(SRC) | |
$(PREFIX_CMD) ffmpeg \ | |
$(FFMPEG_COMMON_FLAGS) \ | |
-fflags +genpts \ | |
-i $(SRC) \ | |
$(FFMPEG_VIDEO_FLAGS) \ | |
-an \ | |
$@ | |
$(WORKDIR)/pass1.timestamp: $(SRC) | |
$(PREFIX_CMD) ffmpeg \ | |
$(FFMPEG_COMMON_FLAGS) \ | |
-fflags +genpts \ | |
-i $(SRC) \ | |
$(FFMPEG_VIDEO_FLAGS) \ | |
-pass 1 \ | |
-passlogfile $(WORKDIR)/x264 \ | |
-an \ | |
$(WORKDIR)/x264-1.m4v | |
touch $@ | |
$(WORKDIR)/pass2.timestamp: $(WORKDIR)/x264-0.log $(SRC) | |
$(PREFIX_CMD) ffmpeg \ | |
$(FFMPEG_COMMON_FLAGS) \ | |
-fflags +genpts \ | |
-i $(SRC) \ | |
$(FFMPEG_VIDEO_FLAGS) \ | |
-pass 2 \ | |
-passlogfile $(WORKDIR)/x264 \ | |
-an \ | |
$(WORKDIR)/x264-2.m4v | |
touch $@ | |
$(WORKDIR)/alac.m4a: $(SRC) | |
$(PREFIX_CMD) ffmpeg \ | |
$(FFMPEG_COMMON_FLAGS) \ | |
-i $(SRC) \ | |
$(FFMPEG_AUDIO_FLAGS) \ | |
-vn \ | |
$@ | |
$(WORKDIR)/aac.m4a: $(WORKDIR)/alac.m4a | |
$(PREFIX_CMD) afconvert \ | |
-f m4af \ | |
-d $(audio_data_format) \ | |
-b $(audio_bitrate) \ | |
$(WORKDIR)/alac.m4a \ | |
$@ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment