#!/usr/bin/perl use Getopt::Long; use IO::Handle; STDERR->autoflush(1); STDOUT->autoflush(1); my $tag = "pix2pixhd_" . time; my $module = "pix2pixhd"; my $path = "results"; my $endpoint = undef; my $prefix = "ren"; GetOptions ( "tag=s" => \$tag, "module=s" => \$module, "path=s" => \$path, "endpoint=s" => \$endpoint, "prefix=s" => \$prefix, ) or die("Error in command line arguments\n"); $tag =~ s/\....$//; print "tag: $tag\n"; print "module: $module\n"; print "endpoint: $endpoint\n"; if (! -e "$path/$tag") { print "usage: $0 [tag]\n"; exit(1); } chdir("$path/$tag"); my $i = 0; my $ls = `ls -1v *.png`; my @lines = split('\n', $ls); my $pwd = `pwd`; chomp $pwd; $pwd .= '/'; print $pwd . "\n"; mkdir('./tmp'); for my $line (@lines) { if ($line !~ /$prefix/) { next; } chomp $line; system('ln', '-s', $pwd . $line, sprintf('./tmp/frame_%05d.png', $i)); $i += 1; } if ($i == 0) { print "No frames found.\n"; exit(1); } my $parent_dir = "../.."; my $dataset = $tag; if ($tag =~ /\//) { $parent_dir .= "/.."; $tag =~ s/\//_/g; } else { $dataset = $tag; } my $ffmpeg = `ffmpeg -i ./tmp/frame_%05d.png -y -c:v libx264 -vf fps=25 -pix_fmt yuv420p -s 1024x512 $parent_dir/renders/$tag.mp4`; my @lines = split("\n", $ffmpeg); for my $line (@lines) { print $line . "\n"; } if (defined $endpoint) { print("upload to $endpoint\n"); system("curl", "-X", "POST", "-F", "module=$module", "-F", "activity=live", "-F", "generated=true", "-F", "dataset=$tag", "-F", "datatype=video", "-F", "file=\@$parent_dir/renders/$tag.mp4", $endpoint ); } print "rendered: $tag.mp4\n"; END { system('rm', '-rf', './tmp'); chdir($parent_dir); }