From 47848012ee551b01d45c8da87bb50cdb19279a0f Mon Sep 17 00:00:00 2001 From: Salem Yaslem Date: Tue, 9 Apr 2024 05:12:15 +0300 Subject: [PATCH 1/3] same GStreamer Video in temporary folder --- Cargo.lock | 154 +++++++++++++++++++++++++++++----------- Cargo.toml | 2 + src/ffmpeg_interface.rs | 30 +++----- src/main.rs | 1 + 4 files changed, 123 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb2813b..8a6f26b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,8 +163,8 @@ dependencies = [ "cfg-if 1.0.0", "event-listener 3.0.0", "futures-lite", - "rustix 0.38.19", - "windows-sys", + "rustix 0.38.32", + "windows-sys 0.48.0", ] [[package]] @@ -190,10 +190,10 @@ dependencies = [ "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.19", + "rustix 0.38.32", "signal-hook-registry", "slab", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -315,6 +315,7 @@ dependencies = [ "chrono", "dark-light", "dirs", + "filename", "gdk-pixbuf 0.9.0", "gdk4 0.8.0", "gettext-rs", @@ -327,6 +328,7 @@ dependencies = [ "rust-ini 0.16.1", "secfmt", "subprocess", + "tempfile", "zbus", ] @@ -431,7 +433,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -597,12 +599,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -647,6 +649,16 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "filename" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e4df03effebdf9cfa31a663f569fd96cc7e206184b0d4dcd388dc490f7ebe8" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures" version = "0.3.28" @@ -1562,7 +1574,7 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1600,9 +1612,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linux-raw-sys" @@ -1612,9 +1624,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "locale_config" @@ -1895,7 +1907,7 @@ dependencies = [ "libc", "log", "pin-project-lite", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2028,15 +2040,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_users" version = "0.4.3" @@ -2044,7 +2047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "redox_syscall", "thiserror", ] @@ -2117,20 +2120,20 @@ dependencies = [ "io-lifetimes", "libc", "linux-raw-sys 0.3.8", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustix" -version = "0.38.19" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ "bitflags 2.4.0", "errno", "libc", - "linux-raw-sys 0.4.10", - "windows-sys", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] @@ -2328,15 +2331,14 @@ checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if 1.0.0", "fastrand 2.0.1", - "redox_syscall 0.3.5", - "rustix 0.38.19", - "windows-sys", + "rustix 0.38.32", + "windows-sys 0.52.0", ] [[package]] @@ -2612,7 +2614,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -2621,7 +2623,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", ] [[package]] @@ -2630,13 +2641,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -2645,42 +2671,84 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winnow" version = "0.5.17" diff --git a/Cargo.toml b/Cargo.toml index b38b720..3dd9258 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,3 +23,5 @@ dark-light = "1.0.0" async-std = {version = "1.12.0", features = ["attributes"]} gstreamer = "0.20.5" zbus = "3.12.0" +tempfile = "3.10.1" +filename = "0.1.1" diff --git a/src/ffmpeg_interface.rs b/src/ffmpeg_interface.rs index b7007e4..75b938a 100644 --- a/src/ffmpeg_interface.rs +++ b/src/ffmpeg_interface.rs @@ -14,6 +14,7 @@ use std::sync::mpsc::Sender; use std::thread::sleep; use std::time::Duration; use subprocess::Exec; +use filename::Filename; #[derive(Clone)] pub struct Ffmpeg { @@ -34,6 +35,7 @@ pub struct Ffmpeg { pub record_wayland: WaylandRecorder, pub record_window: Rc>, pub main_context: gtk::glib::MainContext, + pub temp_video_filename: String, } impl Ffmpeg { @@ -142,14 +144,14 @@ impl Ffmpeg { } else if self.record_video.is_active() && is_wayland() { sleep(Duration::from_secs(self.record_delay.value() as u64)); + let tempfile = tempfile::NamedTempFile::new().expect("cannot create temp file").keep().expect("cannot keep temp file"); + self.temp_video_filename = tempfile.0.file_name().expect("cannot get file name").to_str().unwrap().to_string(); + let record_window = self.record_window.take(); self.record_window.replace(record_window); if !self.main_context.block_on(self.record_wayland.start( - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ), + self.temp_video_filename.clone(), if record_window { RecordTypes::Window } else { @@ -230,10 +232,7 @@ impl Ffmpeg { let video_filename = { if is_wayland() { - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ) + self.temp_video_filename.clone() } else { format!( "{}.temp.without.audio.{}", @@ -246,15 +245,7 @@ impl Ffmpeg { let audio_filename = format!("{}.temp.audio", self.saved_filename.as_ref().unwrap()); let is_video_record = { - if is_wayland() { - std::path::Path::new(&format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - )) - .exists() - } else { - std::path::Path::new(video_filename.as_str()).exists() - } + std::path::Path::new(video_filename.as_str()).exists() }; let is_audio_record = std::path::Path::new(audio_filename.as_str()).exists(); @@ -264,10 +255,7 @@ impl Ffmpeg { Command::new("ffmpeg") .args([ "-i", - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ) + self.temp_video_filename .as_str(), "-crf", "23", // default quality diff --git a/src/main.rs b/src/main.rs index cedbd06..637ba86 100644 --- a/src/main.rs +++ b/src/main.rs @@ -490,6 +490,7 @@ pub fn build_ui(application: &Application) { record_wayland: wayland_record, record_window, main_context, + temp_video_filename: String::new(), })); // Record Button From 44d619e9fbccb1eeb8a4cd0313e80064205f4faa Mon Sep 17 00:00:00 2001 From: Salem Yaslem Date: Tue, 9 Apr 2024 05:13:44 +0300 Subject: [PATCH 2/3] save GStreamer Video in temporary folder --- Cargo.lock | 154 +++++++++++++++++++++++++++++----------- Cargo.toml | 2 + src/ffmpeg_interface.rs | 30 +++----- src/main.rs | 1 + 4 files changed, 123 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb2813b..8a6f26b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,8 +163,8 @@ dependencies = [ "cfg-if 1.0.0", "event-listener 3.0.0", "futures-lite", - "rustix 0.38.19", - "windows-sys", + "rustix 0.38.32", + "windows-sys 0.48.0", ] [[package]] @@ -190,10 +190,10 @@ dependencies = [ "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.19", + "rustix 0.38.32", "signal-hook-registry", "slab", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -315,6 +315,7 @@ dependencies = [ "chrono", "dark-light", "dirs", + "filename", "gdk-pixbuf 0.9.0", "gdk4 0.8.0", "gettext-rs", @@ -327,6 +328,7 @@ dependencies = [ "rust-ini 0.16.1", "secfmt", "subprocess", + "tempfile", "zbus", ] @@ -431,7 +433,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -597,12 +599,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -647,6 +649,16 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "filename" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e4df03effebdf9cfa31a663f569fd96cc7e206184b0d4dcd388dc490f7ebe8" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures" version = "0.3.28" @@ -1562,7 +1574,7 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1600,9 +1612,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linux-raw-sys" @@ -1612,9 +1624,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "locale_config" @@ -1895,7 +1907,7 @@ dependencies = [ "libc", "log", "pin-project-lite", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2028,15 +2040,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_users" version = "0.4.3" @@ -2044,7 +2047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "redox_syscall", "thiserror", ] @@ -2117,20 +2120,20 @@ dependencies = [ "io-lifetimes", "libc", "linux-raw-sys 0.3.8", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustix" -version = "0.38.19" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ "bitflags 2.4.0", "errno", "libc", - "linux-raw-sys 0.4.10", - "windows-sys", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", ] [[package]] @@ -2328,15 +2331,14 @@ checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if 1.0.0", "fastrand 2.0.1", - "redox_syscall 0.3.5", - "rustix 0.38.19", - "windows-sys", + "rustix 0.38.32", + "windows-sys 0.52.0", ] [[package]] @@ -2612,7 +2614,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -2621,7 +2623,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", ] [[package]] @@ -2630,13 +2641,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -2645,42 +2671,84 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + [[package]] name = "winnow" version = "0.5.17" diff --git a/Cargo.toml b/Cargo.toml index b38b720..3dd9258 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,3 +23,5 @@ dark-light = "1.0.0" async-std = {version = "1.12.0", features = ["attributes"]} gstreamer = "0.20.5" zbus = "3.12.0" +tempfile = "3.10.1" +filename = "0.1.1" diff --git a/src/ffmpeg_interface.rs b/src/ffmpeg_interface.rs index b7007e4..75b938a 100644 --- a/src/ffmpeg_interface.rs +++ b/src/ffmpeg_interface.rs @@ -14,6 +14,7 @@ use std::sync::mpsc::Sender; use std::thread::sleep; use std::time::Duration; use subprocess::Exec; +use filename::Filename; #[derive(Clone)] pub struct Ffmpeg { @@ -34,6 +35,7 @@ pub struct Ffmpeg { pub record_wayland: WaylandRecorder, pub record_window: Rc>, pub main_context: gtk::glib::MainContext, + pub temp_video_filename: String, } impl Ffmpeg { @@ -142,14 +144,14 @@ impl Ffmpeg { } else if self.record_video.is_active() && is_wayland() { sleep(Duration::from_secs(self.record_delay.value() as u64)); + let tempfile = tempfile::NamedTempFile::new().expect("cannot create temp file").keep().expect("cannot keep temp file"); + self.temp_video_filename = tempfile.0.file_name().expect("cannot get file name").to_str().unwrap().to_string(); + let record_window = self.record_window.take(); self.record_window.replace(record_window); if !self.main_context.block_on(self.record_wayland.start( - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ), + self.temp_video_filename.clone(), if record_window { RecordTypes::Window } else { @@ -230,10 +232,7 @@ impl Ffmpeg { let video_filename = { if is_wayland() { - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ) + self.temp_video_filename.clone() } else { format!( "{}.temp.without.audio.{}", @@ -246,15 +245,7 @@ impl Ffmpeg { let audio_filename = format!("{}.temp.audio", self.saved_filename.as_ref().unwrap()); let is_video_record = { - if is_wayland() { - std::path::Path::new(&format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - )) - .exists() - } else { - std::path::Path::new(video_filename.as_str()).exists() - } + std::path::Path::new(video_filename.as_str()).exists() }; let is_audio_record = std::path::Path::new(audio_filename.as_str()).exists(); @@ -264,10 +255,7 @@ impl Ffmpeg { Command::new("ffmpeg") .args([ "-i", - format!( - "{}.temp.without.audio.webm", - self.saved_filename.as_ref().unwrap() - ) + self.temp_video_filename .as_str(), "-crf", "23", // default quality diff --git a/src/main.rs b/src/main.rs index cedbd06..637ba86 100644 --- a/src/main.rs +++ b/src/main.rs @@ -490,6 +490,7 @@ pub fn build_ui(application: &Application) { record_wayland: wayland_record, record_window, main_context, + temp_video_filename: String::new(), })); // Record Button From 5dbba2d4f449868dc1e2bf9f245b6943e9bd46bc Mon Sep 17 00:00:00 2001 From: me00001 <37930867+me00001@users.noreply.github.com> Date: Sun, 21 Apr 2024 14:28:52 +0300 Subject: [PATCH 3/3] Add the developer element (#63) https://freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-developer --- flatpak/sa.sy.bluerecorder.metainfo.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/flatpak/sa.sy.bluerecorder.metainfo.xml b/flatpak/sa.sy.bluerecorder.metainfo.xml index 3caa757..43ea030 100644 --- a/flatpak/sa.sy.bluerecorder.metainfo.xml +++ b/flatpak/sa.sy.bluerecorder.metainfo.xml @@ -8,6 +8,10 @@ CC0-1.0 GPL-3.0-only + + Salem Yaslem + +

A simple desktop recorder for Linux systems. Built using Rust, GTK+ 3 and ffmpeg. It supports recording audio and video on almost all Linux interfaces with support for Wayland display server on GNOME session. The following formats are currently supported: mkv, avi, mp4, wmv, gif and nut (And only WebM for Wayland's GNOME session). You can stop the recording process easily by right-clicking the icon and choosing "Stop Record". Or middle-clicking the recording icon in the notifications area (but doesn't work on all interfaces). You can choose the audio input source you want from the list. You can also set the default values you want by simply changing them in the interface, and the program will save them for you for the next time you open it. Based on GREEN RECORDER but rewritten in RUST