Skip to content
shadowjohnPublic

About

我的自製簡易版桌面錄影

Resources

Stars

3 stars

Watchers

1 watching

Forks

Latest commit

 

History

18 Commits

Folders and files

Repository files navigation

my_cam 我的桌面錄影 C# 版

我的自製簡易版桌面錄影。

這份是好幾年前寫的 C# WinForms 版,現在逐步比照 my_cam_py 的穩定化方向補回來。

開發動機:

覺得人生是該寫一個桌面錄影,就開始寫了。

版本:

V1.4-P3

穩定化分支:已補強錄影流程、音源選擇、MP4 安全輸出、錯誤 log、設定記憶與建置產物清理。

作者:

羽山秋人 (https://3wa.tw)

版權:

MIT

最初開發日期:

2019-06-23

使用方法:

    1. 調整框選視窗到想錄的螢幕範圍,正向或反向拖曳都可以。
    1. 設定好 FPS,通常大概只會選 30 或 60 吧。
    1. 「錄滑鼠指標」、「錄系統聲音」與「錄麥克風」集中在同一排,可直接切換。
    1. 建議先按「自動測試」,程式會檢查目前可用音源,失敗的聲道會自動關閉。
    1. 需要手動指定時,按「音源選擇」往下展開,系統音源與麥克風會分成兩行顯示;再按一次可隱藏並縮回小視窗。
    1. 按下「開始錄影」或 F2 即開始。
    1. 再按一次「停止錄影」或 F2 後,程式會在背景完成收尾與影片、聲音合併。
    1. 完成後會提示「錄影完成」,並用檔案總管開啟到該 mp4 檔案。

快捷鍵:

  • F2:開始 / 停止錄影
  • F3:開啟輸出目錄
  • F8:說明

系統聲音注意事項:

  • C# 版目前使用 NAudio WASAPI loopback 錄系統聲音,會依下拉選到的播放裝置錄音。
  • 不同電腦的播放裝置名稱、USB 音效卡與藍牙耳機狀態可能不同,錄影前建議先按「自動測試」。
  • 找不到或開不起來的音源會略過該聲道,並保留影片輸出,避免整段錄影直接消失。
  • 程式會記住上次選擇的音源名稱,下次啟動時會盡量依名稱回選。
  • 若需要同時錄系統聲與麥克風,停止後會先混成暫存 WAV,再封裝進 MP4。


程式執行畫面

相依套件:

  • .NET Framework 4.5.2
  • WinForms
  • Accord.Video.FFMPEG
  • NAudio
  • ffmpeg.exe,有聲 MP4 合併時使用

專案保留舊 WinForms 小工具的緊致感,主要邏輯仍集中在 Form1.cs,可測的純邏輯逐步移到 RecorderCore.cs。

啟動:

建置後執行:

my_cam\bin\Debug\my_cam.exe
my_cam\bin\Release\my_cam.exe

設定與紀錄:

  • video/config.ini:保存是否錄滑鼠、是否錄系統聲、是否錄麥克風、音源面板狀態與上次音源名稱。
  • video/logs/YYYYMMDD.log:記錄音源檢查、錄音失敗、畫面擷取錯誤、背景 thread 例外與輸出狀態。
  • 錄影狀態列會顯示待命、錄影中、停止、寫入剩餘影格、關閉影片、合併聲音與完成狀態。
  • 有聲輸出會先寫入暫存檔,成功後才替換正式 MP4,避免半成品覆蓋輸出檔。
  • 完成後會顯示輸出路徑與檔案大小,並用檔案總管選取該檔案。

穩定性改善:

  • 錄影範圍會先正規化,支援反向框選。
  • 畫面 frame 改用 bounded queue,長時間錄影時會丟棄過舊 frame,避免記憶體持續膨脹。
  • 錄影時間軸改用 Stopwatch,避免 Windows 校時造成影片時長暴增。
  • 停止錄影改成背景收尾,不在 UI thread 直接等待錄影、錄音與合併工作。
  • 音源開啟失敗時會略過該聲道並保留影片輸出。
  • 背景 thread 例外會集中寫 log,並嘗試自動停止與收尾。
  • 開始錄影前會先做一次畫面擷取測試,失敗時不啟動錄音與錄影 thread。
  • 連續畫面擷取失敗達門檻時會主動停止錄影並寫 log,避免留下無效影片。
  • 影片與聲音合成優先使用 ffmpeg copy video 快速封裝,避免重新編碼影像。
  • 舊 AVI / AviFile / DirectSound / SharpDX 路徑已移除,輸出方向統一走 MP4。

MP4 音訊:

有勾選系統聲或麥克風時,程式會先錄成 WAV,停止後尋找 ffmpeg.exe 進行快速封裝。

搜尋順序:

    1. 程式目錄下的 ffmpeg.exe
    1. C:\bin\ffmpeg.exe
    1. 系統 PATH

找不到 ffmpeg 時仍會保留無聲 MP4,並在 video/logs/YYYYMMDD.log 記錄原因。

建置:

本機需有 Visual Studio / MSBuild 與 .NET Framework 4.5.2 targeting pack。

& 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe' my_cam.sln /t:Clean`;Build /p:Configuration=Debug /p:Platform='Any CPU' /nologo
& 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe' my_cam.sln /t:Clean`;Build /p:Configuration=Release /p:Platform='Any CPU' /nologo

bin / obj 已不再追蹤到 git,需要 exe 時用 MSBuild 重建。

開發驗證:

$csc='C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe'
$testExe = Join-Path $env:TEMP ('RecorderCoreTests_' + [guid]::NewGuid().ToString('N') + '.exe')
& $csc /nologo /target:exe /out:$testExe /r:System.dll /r:System.Core.dll /r:System.Drawing.dll tests\RecorderCoreTests.cs my_cam\RecorderCore.cs
& $testExe
Remove-Item -LiteralPath $testExe -Force

MP4 video-only smoke test 可在 Debug build 後執行:

$bin='D:\mytools\my_cam\my_cam\bin\Debug'
$csc='C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe'
& $csc /nologo /platform:x86 /target:exe /out:$bin\Mp4MuxSmoke.exe /r:$bin\Accord.dll /r:$bin\Accord.Math.dll /r:$bin\Accord.Math.Core.dll /r:$bin\Accord.Video.dll /r:$bin\Accord.Video.FFMPEG.dll /r:System.Drawing.dll tests\Mp4MuxSmoke.cs
& "$bin\Mp4MuxSmoke.exe"
Remove-Item -LiteralPath "$bin\Mp4MuxSmoke.exe" -Force

實錄檢查:

明天實機先建議錄:

  • 1 分鐘:確認開始、停止、完成提示與檔案總管選取檔案。
  • 5 分鐘:確認 MP4 時長、系統聲、麥克風與畫面同步。
  • 30 分鐘:觀察記憶體、frame queue、dropped frame 與停止後合成速度。

更新歷程:

(2026-05-27) V1.4-P3 維護清理: 移除 AVI / AviFile 舊流程、未使用的 Accord.Audio / DirectSound / SharpDX 參考、舊 package 目錄與被追蹤的 bin / obj 產物;補上 .gitignore 產物規則。

(2026-05-27) V1.3-P2 MP4 安全輸出: 輸出改成 MP4;影像先寫入 *_tmp.mp4,有音訊時用 ffmpeg copy video + AAC 快速封裝,失敗時保留無聲 MP4 並寫 log。

(2026-05-27) V1.2-P1 音源與 UI: 新增錄系統聲、錄麥克風、自動測試、可收合音源選擇、音源名稱記憶與系統聲 / 麥克風混音。

(2026-05-27) V1.1-P0 穩定化: 修正反向框選、bounded frame queue、停止錄影非阻塞、背景例外 log、畫面擷取 preflight 與完成後選取輸出檔。

(2019-06-23) V1.0 初版: C# WinForms 桌面錄影工具初版。

Todo:

  • 明天依實機結果確認 1 分鐘、5 分鐘、30 分鐘錄影同步與停止收尾速度。
  • 實測不同電腦的系統聲與麥克風組合。
  • 若有聲 MP4 合成仍慢,再研究更接近 oCam 的即停即完成流程。
  • 實錄壓測後,再評估是否拆分 AudioManager / OutputManager / RecorderEngine。

About

我的自製簡易版桌面錄影

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages