From 6cd17ac61fa263148658c2fc5fc9161286f71309 Mon Sep 17 00:00:00 2001 From: Vectozavr <60608292+vectozavr@users.noreply.github.com> Date: Fri, 12 Nov 2021 15:41:26 +0700 Subject: [PATCH] add video rendering in Screen --- Source.cpp | 4 ++-- engine/Screen.cpp | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Source.cpp b/Source.cpp index fc008f3..854c265 100644 --- a/Source.cpp +++ b/Source.cpp @@ -10,8 +10,8 @@ using namespace std; int main() { Shooter game; - //game.create(1280, 720, ShooterConsts::PROJECT_NAME, true); - game.create(1920, 1080, ShooterConsts::PROJECT_NAME, true, Consts::BACKGROUND_COLOR, sf::Style::None); + game.create(1280, 720, ShooterConsts::PROJECT_NAME, true); + //game.create(1920, 1080, ShooterConsts::PROJECT_NAME, true, Consts::BACKGROUND_COLOR); //game.create(2048, 1152, ShooterConsts::PROJECT_NAME, false); //game.create(3072, 1920, ShooterConsts::PROJECT_NAME, true, Consts::BACKGROUND_COLOR, sf::Style::Fullscreen); diff --git a/engine/Screen.cpp b/engine/Screen.cpp index 1711d62..7d2d981 100644 --- a/engine/Screen.cpp +++ b/engine/Screen.cpp @@ -51,22 +51,31 @@ void Screen::display() { void Screen::startRender() { stopRender(); + + Log::log("Screen::startRender(): start recording the screen"); _renderVideo = true; } void Screen::stopRender() { if(_renderVideo) { + Log::log("Screen::stopRender(): stop recording the screen"); + Log::log("Screen::stopRender(): start saving .png sequence"); + std::string c = "rm film/png/*.png"; + popen(c.c_str(), "w"); int i = 0; for(; i < _renderSequence.size(); i++) { _renderSequence[i].copyToImage().saveToFile("film/png/" + std::to_string(i) + ".png"); + Log::log("Screen::stopRender(): saving .png sequence (" + std::to_string(static_cast(100*i/_renderSequence.size())) + "%)"); } _renderSequence.clear(); + Log::log("Screen::stopRender(): start rendering final video"); // TODO: .png sequence looks better than a final video (poor clarity and desaturated colors) - std::string c = "ffmpeg -stats -r 60 -i film/png/%d.png -vcodec libx264 -crf 1 -pix_fmt yuv420p -frames " + std::to_string(i) + " film/mp4/" + std::to_string(_scene) + "_" + _title + ".mp4"; + c = "ffmpeg -stats -r 60 -i film/png/%d.png -vcodec libx264 -crf 1 -pix_fmt yuv420p -frames " + std::to_string(i) + " film/mp4/" + std::to_string(_scene) + "_" + _title + "_" + std::to_string(rand()) + ".mp4"; popen(c.c_str(), "w"); _scene++; _renderVideo = false; + Log::log("Screen::stopRender(): finish rendering final video"); } }