diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 5089efcfe..775b5f770 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -294,6 +294,21 @@ GMainWindow::GMainWindow(Core::System& system_)
break;
}
+ // Dump video
+ if (args[i] == QStringLiteral("-d")) {
+ if (i >= args.size() - 1 || args[i + 1].startsWith(QChar::fromLatin1('-'))) {
+ continue;
+ }
+ if (!DynamicLibrary::FFmpeg::LoadFFmpeg()) {
+ ShowFFmpegErrorMessage();
+ continue;
+ }
+ video_dumping_path = args[++i];
+ video_dumping_on_start = true;
+ ui->action_Dump_Video->setChecked(true);
+ continue;
+ }
+
// Launch game in fullscreen mode
if (args[i] == QStringLiteral("-f")) {
ui->action_Fullscreen->setChecked(true);
@@ -2762,6 +2777,32 @@ void GMainWindow::OnCaptureScreenshot() {
}
}
+void GMainWindow::ShowFFmpegErrorMessage() {
+ QMessageBox message_box;
+ message_box.setWindowTitle(tr("Could not load video dumper"));
+ message_box.setText(
+ tr("FFmpeg could not be loaded. Make sure you have a compatible version installed."
+#ifdef _WIN32
+ "\n\nTo install FFmpeg to Lime, press Open and select your FFmpeg directory."
+#endif
+ "\n\nTo view a guide on how to install FFmpeg, press Help."));
+ message_box.setStandardButtons(QMessageBox::Ok | QMessageBox::Help
+#ifdef _WIN32
+ | QMessageBox::Open
+#endif
+ );
+ auto result = message_box.exec();
+ if (result == QMessageBox::Help) {
+ QDesktopServices::openUrl(
+ QUrl(QStringLiteral("https://web.archive.org/web/20240301121456/https://"
+ "citra-emu.org/wiki/installing-ffmpeg-for-the-video-dumper/")));
+#ifdef _WIN32
+ } else if (result == QMessageBox::Open) {
+ OnOpenFFmpeg();
+#endif
+ }
+}
+
void GMainWindow::OnDumpVideo() {
if (DynamicLibrary::FFmpeg::LoadFFmpeg()) {
if (ui->action_Dump_Video->isChecked()) {
@@ -2771,29 +2812,7 @@ void GMainWindow::OnDumpVideo() {
}
} else {
ui->action_Dump_Video->setChecked(false);
-
- QMessageBox message_box;
- message_box.setWindowTitle(tr("Could not load video dumper"));
- message_box.setText(
- tr("FFmpeg could not be loaded. Make sure you have a compatible version installed."
-#ifdef _WIN32
- "\n\nTo install FFmpeg to Citra, press Open and select your FFmpeg directory."
-#endif
- "\n\nTo view a guide on how to install FFmpeg, press Help."));
- message_box.setStandardButtons(QMessageBox::Ok | QMessageBox::Help
-#ifdef _WIN32
- | QMessageBox::Open
-#endif
- );
- auto result = message_box.exec();
- if (result == QMessageBox::Help) {
- QDesktopServices::openUrl(QUrl(QStringLiteral(
- "https://citra-emu.org/wiki/installing-ffmpeg-for-the-video-dumper/")));
-#ifdef _WIN32
- } else if (result == QMessageBox::Open) {
- OnOpenFFmpeg();
-#endif
- }
+ ShowFFmpegErrorMessage();
}
}
@@ -2878,7 +2897,8 @@ void GMainWindow::StartVideoDumping(const QString& path) {
} else {
QMessageBox::critical(
this, tr("Citra"),
- tr("Could not start video dumping.
Refer to the log for details."));
+ tr("Could not start video dumping.
Please ensure that the video encoder is "
+ "configured correctly.
Refer to the log for details."));
ui->action_Dump_Video->setChecked(false);
}
}
@@ -3591,6 +3611,7 @@ static Qt::HighDpiScaleFactorRoundingPolicy GetHighDpiRoundingPolicy() {
static void PrintHelp(const char* argv0) {
std::cout << "Usage: " << argv0
<< " [options] \n"
+ "-d [path] Dump video recording of emulator playback to the given file path\n"
"-f Start in fullscreen mode\n"
"-g [path] Start a game file located at the given path\n"
"-h Display this help and exit\n"
@@ -3606,7 +3627,7 @@ static void PrintVersion() {
int main(int argc, char* argv[]) {
while (optind < argc) {
- int arg = getopt(argc, argv, "fg:hi:r:v");
+ int arg = getopt(argc, argv, "d:fg:hi:p:r:v");
if (arg != -1) {
switch (static_cast(arg)) {
case 'h':
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index 6e0a6b41f..fd2f18767 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -219,6 +219,8 @@ private:
const std::string& keywords, const std::string& name,
const bool& skip_tryexec);
+ void ShowFFmpegErrorMessage();
+
private slots:
void OnStartGame();
void OnRestartGame();