diff --git a/simple_live_transcode.c b/simple_live_transcode.c index e8dfbdf65c1c948f56eaa9147fbd113c6cdafdea..4e7644b9b879500e300d9d4b3601f782f839a82c 100644 --- a/simple_live_transcode.c +++ b/simple_live_transcode.c @@ -18,7 +18,7 @@ static void copy_to_log(int fd) int main(int argc, char *argv[]) { int ret, canceled = 0, errpipe[2] = {-1, -1}; - char *src, *dest; + char *src, *dest, *options, *afilter; pid_t pid; struct pollfd fds = {.fd = -1, .events = POLLIN}; if (argc != 5) @@ -28,7 +28,15 @@ int main(int argc, char *argv[]) jobid = atoi(argv[1]); src = jstr(jlookup(argv[4], "src"), "rtmp://127.0.0.1:999999/nourl"); dest = jstr(jlookup(argv[4], "destbase"), "rtmp://127.0.0.1:999999/nourl"); + options = jlookup(argv[4], "options"); + afilter = ""; + if (jint(jlookup(options, "left2mono"), 0)) + afilter = mprintf("%span=mono|c0=c0,", afilter); + else if (jint(jlookup(options, "downmix2mono"), 0)) + afilter = mprintf("%span=mono|c0=0.5*c0+0.5*c1,", afilter); + if (jint(jlookup(options, "normalize"), 0)) + afilter = mprintf("%sloudnorm,", afilter); pipe(errpipe); if (!(pid = fork())) { @@ -37,7 +45,8 @@ int main(int argc, char *argv[]) dup2(open("/dev/null", O_RDONLY|O_CLOEXEC), 0); dup2(open("/dev/null", O_WRONLY|O_CLOEXEC), 1); execlp("ffmpeg", "ffmpeg", "-nostats", "-i", src, "-filter_complex", - mprintf("[0:a]asplit=3[lowa][mida][higha]; movie=%s/video-logo-150px-trans.png,scale=w=100:h=100[logo]; [0:v]yadif,scale=1920:1080[tmp]; [tmp][logo]overlay=x=W-195:y=H-155,split=3[lowtmp][midtmp][high]; [lowtmp]scale=640:360[low]; [midtmp]scale=1280:720[mid]", getenv(WORKER_RAW)), + mprintf("[0:a]%sasplit=3[lowa][mida][higha]; movie=%s/video-logo-150px-trans.png,scale=w=100:h=100[logo]; [0:v]yadif,scale=1920:1080[tmp]; [tmp][logo]overlay=x=W-195:y=H-155,split=3[lowtmp][midtmp][high]; [lowtmp]scale=640:360[low]; [midtmp]scale=1280:720[mid]", + afilter, getenv(WORKER_RAW)), "-map", "[low]", "-map", "[lowa]", OUTPUT_FORMAT("512k"), mprintf("%s_low", dest), "-map", "[mid]", "-map", "[mida]", OUTPUT_FORMAT("2024k"), mprintf("%s_mid", dest), "-map", "[high]", "-map", "[higha]", OUTPUT_FORMAT("6024k"), mprintf("%s_high", dest), 0);