From 88667d540736c39b7a78601d7abb6f3108a7a65c Mon Sep 17 00:00:00 2001 From: FBeans Date: Sun, 6 Mar 2022 16:26:07 +0000 Subject: Inital commit --- .gitignore | 1 + README.md | 14 ++++++++++- app/VideoProcessor.php | 37 +++++++++++++++++++++++++++++ config/app.php.example | 7 ++++++ scripts/run.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 app/VideoProcessor.php create mode 100644 config/app.php.example create mode 100644 scripts/run.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a901ba --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config/app.php diff --git a/README.md b/README.md index 98417b0..3fcbc38 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ # xplane-video -Process outputted videos from xplane \ No newline at end of file +Process outputted videos from xplane + +## Configuration +Copy the `config/app.php.example` file to `config/app.php` and adjust the paths to your preffered options. + +## Execution +`php scripts/run.php` interactively lists videos and allows for specific video processing + +`php scripts/run.php --pretend` interactive lists videos and shows what commands would be run without any execution. + +## TODO +Currently the thing that works is processing a single video. +Eventually this will be able to process multiple videos, and cobine videos! diff --git a/app/VideoProcessor.php b/app/VideoProcessor.php new file mode 100644 index 0000000..60b0a80 --- /dev/null +++ b/app/VideoProcessor.php @@ -0,0 +1,37 @@ +config = $config; + } + + public function process(string $path, bool $pretend = false): bool + { + $path_parts = explode('/', $path); + $filename = $path_parts[count($path_parts) - 1]; + + $output_path = $this->config['output_path'] . '/' . rtrim($filename, "avi") . "mp4"; + + $ffmpeg_command = "ffmpeg -i \"$path\" -c:v libx264 -crf 26 -preset fast -c:a aac -b:a 128k \"$output_path\""; + + if ($pretend) { + echo "`" . $ffmpeg_command . "`" . PHP_EOL; + } else { + exec($ffmpeg_command); + } + + $archive_path = $this->config['archive_path'] . '/' . $filename; + + if ($pretend) { + echo "rename($path, $archive_path)" . PHP_EOL; + } else { + rename($path, $archive_path); + } + + return true; + } +} diff --git a/config/app.php.example b/config/app.php.example new file mode 100644 index 0000000..eb5d771 --- /dev/null +++ b/config/app.php.example @@ -0,0 +1,7 @@ + FULL PATH TO THE XPLANE DIR, + 'archive_path' => WHERE WE COPY THE ORIGINAL XPLANE VIDEOS TOO, + 'output_path' => WHERE THE PROCESSED VIDEO WILL END UP, +]; diff --git a/scripts/run.php b/scripts/run.php new file mode 100644 index 0000000..0d90f7f --- /dev/null +++ b/scripts/run.php @@ -0,0 +1,64 @@ + 2) { + echo "Error. Too many arguments." . PHP_EOL; + exit; + } + + if ($argv[1] !== '--pretend') { + echo "Error. Argument `" . $argv[1] . "` is not supported." . PHP_EOL; + exit; + } + + $pretend = true; +} + +$video_processor = new VideoProcessor($config); + +// Lets get the list of replays +$files = glob($config['xplane_path'] . '/Output/*.avi'); + +echo count($files) . " video file(s) found." . PHP_EOL; + +foreach ($files as $index => $file) { + $file_path_parts = explode('/', $file); + echo "[$index] " . $file_path_parts[count($file_path_parts) - 1] . PHP_EOL; +} + +echo PHP_EOL . "Please enter the video(s) you want to process, or enter 'a' for all!" . PHP_EOL; +echo "For example, '0,1' will process video 0 and 1 and combine them!" . PHP_EOL; + +$handle = fopen("php://stdin", "r"); +$line = trim(fgets($handle), "\n"); + +if ($line === 'a') { + echo "Error. Not yet implemeneted." . PHP_EOL; + exit; +} elseif (strpos($line, ',') !== false) { + echo "Error. Not yet implemeneted." . PHP_EOL; + exit; +} else { + if (!array_key_exists($line, $files)) { + echo "Error: '$line' is not a valid option." . PHP_EOL; + exit; + } + + $out = $video_processor->process($files[$line], $pretend); + + if ($out) { + $pretend_string = $pretend ? '(Pretend) ' : ''; + echo $pretend_string . "Processing complete!" . PHP_EOL; + } +} -- cgit v1.2.3