Giter Club home page Giter Club logo

vscode-chronicler's Introduction

VS Code Chronicler

Chronicler is a cross-platform plugin for recording screens (windows) within VS Code. The application relies upon FFmpeg as the base for recording. The primary functionality of the plugin is to start and stop recording. The status bar contains an item that will provide you the current state of the recording process, and is an actionable element for starting/stopping a recording.

Screen Capture in Action

How Recording Works

The recording process determines the location and dimensions of your VS Code window, and will start a recording session for that region, immediately. To prevent the UI from getting in the way, when stopping, use the keyboard shortcuts to terminate the process. The status bar will be your indicator of the current status of your recording. On completion you can can choose to open the file with your operating system, you can copy the path to your clipboard, or just dismiss. Additionally, if you are configured your settings for supporting the animated gif production, the file path will change to point to the .gif file instead of the .mp4 file.

Caveats

The underlying tools for screen recording, rely upon FFmpeg. This has a distinct limitation of only being able to record a portion of the screen. This means that the recording does not follow windows as they move, but specifically the initial location/size of the VS Code window.

How to Start Recording

This will initiate a new recording, and will prompt for the FFmpeg installation if not set yet. This prompt will allow you to specify the location or to download the latest version as needed.

This can be triggered by:

  • Click on the icon in the status bar to launch the recorder

  • Accessing the command, via the command palette:

    • Chronicler Start Recording - Standard recording
    • Chronicler Start Recording GIF - Standard recording, that also produces an animated GIF of the output.
    • Chronicler Start Timed-Recording - Recording with a set duration, user will be prompted, with a default of 120 seconds.
    • Chronicler Start Recording with Audio - Standard recording with audio support (OSX requires a custom build of FFmpeg to bypass choppy audio. More information on the custom build can be found here)
  • Using the predefined shortcut (by default cmd+alt+shift+r)

How to Stop Recording

This will stop the current recording, and provide a link to the final file location. This can be triggered by:

  • Click on the icon in the status bar to terminate the recorder
  • Accessing the command, via the command palette Chronicler Stop Recording
  • Using the predefined shortcut (by default cmd+alt+shift+s)

Configuration

The available configuration options are:

  • chronicler.ffmpeg-binary - (optional) This is the path to the FFMpeg binary, this will be used to convert the recordings into animated .gif files, if specified

  • chronicler.dest-folder - This is the output folder for all recordings, defaults to $HOME/Recordings

  • chronicler.recording-defaults - These are the default parameters for recording, this supports the following:

    • countdown? :number - The number of seconds to wait before recordings starts, defaults to 5.
    • duration? :number - How long to record for, defaults to 0 which is indefinite
    • animatedGif? :boolean - Flag to determine if we should produce animated GIFs or not.
    • gifScale? :number - What ratio each dimension of the GIF should be scaled by, defaults to 1.
    • fps: number - Number of frames per second, defaults to 12
    • flags? :object - Configuration flags to pass to the FFmpeg process
      • pix_fmt ?:string - The format flag to pass to ffmpeg, defaults to yuvj444p. Set to yuv420p if you want to support QuickTime on osx.
      • c:v ?:string - The video codec to use for encoding, defaults to libx264
      • preset ?:string - The ffmpeg recording preset, defaults to ultrafast. Supported: (ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow)
  • chronicler.auto-record-live-share - Determines the state for auto recording live share sessions, defaults to false.

  • chronicler.debug - Run the plugin in debug mode, provides more information when running FFmpeg

Animated GIFs

Animated GIFs are supported, if you configure chronicler.ffmpeg-binary appropriately in your vscode settings. Once setup, it will produce an additional GIF file of your mp4, encoded as best as possible.

Requirements

  • FFmpeg, 4.1+ with libx264 support.

Acknowledgements

This project was inspired by:

Known Issues

Currently, wayland support is missing

Release Notes

0.1.16

Allowing workspace root to truly be undefined, and fully support operating in a workspace free environment.

0.1.15

Resolving spawning issue for X11 due to changes in Electron

0.1.14

Resolving reverted localization fix for windows.

0.1.12

Bugfix for win32 scale detection and for handling spaces in ffmpeg path in win32 Bugfix for x11, allow for host display environment variable to be honored

0.1.11

Bugfix for win32 non-US locales (different decimal point symbol).

0.1.10

Bugfix that broke darwin-based screen lookups

0.1.9

Updating screen-recorder/win-info to 0.2.x line, to support win32 desktop scaling.

0.1.8

Resolving a bug in which copying the file deletes the file as well. Additionally deleting mp4 files when deleting the animated gif.

0.1.6

Updating recording icons to use debug set, which provides color. Updating documentation.

0.1.5

Removed color styling from status bar, to better support themes. Added ability to open a recording's containing folder, or delete it on termination of recording.

0.1.4

Adding in support for ${workspaceFolder} as a valid substitution for the recording destination. Additionally, clarified and documented how to set ffmpeg flags for pix_fmt and c:v codecs. Also documented the behavior of recording, with respect to window moving.

0.1.3

Adding in new osx binary, statically compiled, and upgrading screen-recorder to 0.1.6. Additionally merged changes in for the output directory to be a properly configurable element.

0.1.2

Added in support for auto recording VS Live Share session. Added in flag to support scaling of generated GIFs. Special thanks to @lostintangent for the live share integration.

0.1.0

Exposed download functionality from @arciisine/screen-recorder, and provide ability for user to set required configuration in a guide manner. Special thanks to @DonJayamanne for the feedback.

0.0.9

Externalized the ffmpeg interactions into @arcsine/screen-recorder, fixing default recording folder

0.0.8

Aligned screen support with @arcsine/active-win, pulling in support for X11 vs linux. Additionally support for multiple displays.

0.0.6

Bug fix with respect to binary location detection, and handling.

0.0.5

Released windows compatibility, reworked ffmpeg argument generation to tailor to each platform better.

0.0.4

Issue with linux launching (odd/even pixel issue) as well as better results launching

0.0.3

Cleaned up linux support Provided link for ffmpeg 4.1 with patch applied for audio capture during screen recording UI improvements

0.0.2

Added support for:

  • Audio recordings
  • Status bar countdown (configurable)
  • Timed recordings
  • Dropping VLC, using FFmpeg solely, as it supports audio

0.0.1

Initial release, support for vlc, primarily tested on OSX

vscode-chronicler's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

vscode-chronicler's Issues

Flags not implemented

By the way, fantastic extension, puzzled why there aren't more users.

Repro: attempt to record screen in full quality (no encoding, would like text to remain crisp)

 "chronicler.recording-defaults": {
        "fps": 30,
        "countdown": 1,
        "flags": "-video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -crf 0 -preset ultrafast"
    }

Result: flags not applied, image still blurry

Feature request: Custom video recording file name

Thumbs up for this awesome plugin but found that i can't change the recorded file name.

I would suggest to allow users to have custom file naming pattern for example

$prefix-vscodeRecording-${year}${month}${day}-${hour}${minute}${second}-$suffix

Keep it up @arciisine !!

Chronicler stopping never finishes.

FFMPEG is in path (environment variables), slashes in DEST and FFMPEG paths in settings JSON are escaped.
Still, upon running, Chronicler gives an invalid exit status and when stopping, it never actually stops.

MP4 cannot be played on Quicktime

OS: macOS Mojave, Version 10.14.4
Chronicler: 0.1.3
VSCode: 1.38.1
Quicktime: 10.5 (935.3)
ffmpeg: 4.1.2
ffmpeg location: /usr/local/bin/ffmpeg (used $which ffmpeg to locate)
settings.json: "chronicler.ffmpeg-binary": "/usr/local/bin/ffmpeg",

Error message when opening in Quicktime:

The document 'c.mp4' could not be opened.
The file isn't compatible with QuickTime Player.

IMPACT

This is more of an inconvenience to have to select a different default player or open the file in the browser.

SUSPECTED CAUSE

It appears the problem may be with pix format (-pix_fmt).

Here is the info about the file:

ffmpeg -i c.mp4
ffmpeg version 4.1.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'c.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:06.50, start: 0.000000, bitrate: 4698 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 2256x1237, 4696 kb/s, 10 fps, 10 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler

The pixel format is reported as yuvj444p(pc).

Some googling suggest that QuickTime only supports yuv420p.

WORKAROUNDS [attempted]

Workaround #1: Manually convert using FFMPEG (did not succeed)

I'm not particularly skilled, but I attempted to just change the -pix_fmt yuv420p

But the file couldn't be converted because h264 requires even-numbered dimensions but the videos has an odd-numbered height of 1237.

Given that Chronicle was able to create the image

ffmpeg -i c.mp4 -f h264 -pix_fmt yuv420p c_fixed.mp4 -hide_banner

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'c.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:06.50, start: 0.000000, bitrate: 4698 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 2256x1237, 4696 kb/s, 10 fps, 10 tbr, 10240 tbn, 20 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0x11a760000] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x7f9964009000] height not divisible by 2 (2256x1237)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

I tried using -vf "pad=2256:1238" per some recommendations I found on SO, but I got the same error.

Workaround #2 : Add chronicler.flags to settings.json

"chronicler.flags": "-pix_fmt yuv420p",

I wasn't confident that this was going to work because the line is greyed out in VSCode.

A looked over the source code and I couldn't find a reference to the flags configuration setting.

Maybe it is just missing in types.ts?

Flags do not override speed of recording.

Chronicler has been a great vscode extension for me but by specifying the speed as medium in the flags parameter makes a screen recording duration go from 1:00 minute to 0:45 minutes (i.e it's sped up instead of normal time recording). This is an issue when used with the record audio command. The audio is recorded for 1:00 minute but the video is of 0:45 minutes, thereby cutting the audio and ending the video.

Does not work

Type: Bug

Chronicler does not work in vscode. Button on bar was not respon when I clicked
my device: macos m1 air

Extension version: 0.1.16
VS Code version: Code 1.78.2 (Universal) (b3e4e68a0bc097f0ae7907b217c1119af9e03435, 2023-05-10T14:44:45.204Z)
OS version: Darwin arm64 22.4.0
Modes:
Sandboxed: Yes

System Info
Item Value
CPUs Apple M1 (8 x 24)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
metal: disabled_off
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: enabled
Load (avg) 2, 2, 2
Memory (System) 8.00GB (0.28GB free)
Process Argv --crash-reporter-id d85ff39b-5ae9-4a53-a742-12d341ac3648
Screen Reader no
VM 0%
A/B Experiments
vsliv368cf:30146710
vsreu685:30147344
python383:30185418
vspor879:30202332
vspor708:30202333
vspor363:30204092
vslsvsres303:30308271
vserr242:30382549
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vsdfh931cf:30280410
vshan820:30294714
vstes263:30335439
vscorecescf:30445987
vscod805:30301674
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
cmake_vspar411:30581797
vsaa593cf:30376535
pythonvs932:30410667
cppdebug:30492333
vsclangdc:30486549
c4g48928:30535728
dsvsc012cf:30540253
pynewext54:30695312
azure-dev_surveyone:30548225
3biah626:30602489
pyind779:30671433
89544117:30613380
pythonsymbol12:30671437
showlangstatbar:30737416
vsctsb:30748421
pythonms35:30701012
pythonfmttext:30731395
pythoncmv:30739700
fixhidewlkth:30730051
hidesbindicator:30730055
pythongtdpath:30739704

Command failed (can't record)

Problem

Running Chronicler is failing with the following error:

Command failed: /opt/visual-studio-code/code /home/heitor/.vscode/extensions/arcsine.chronicler-0.1.14/node_modules/@arcsine/win-info/bin/win-info-x11.js active

Additionally, in Log (Extension Host), I see the following output, which I'm not sure whether it's related:

[2021-11-16 09:25:31.618] [exthost] [error] Error: info:No recording running
    at Recorder.stop (/home/heitor/.vscode/extensions/arcsine.chronicler-0.1.14/out/recorder.js:66:19)
    at Recorder.dispose (/home/heitor/.vscode/extensions/arcsine.chronicler-0.1.14/out/recorder.js:14:14)
    at h (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:14:4961)
    at w._deactivate (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:99:11584)
    at /opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:99:9997
    at Array.map (<anonymous>)
    at w.deactivateAll (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:99:9985)
    at b.terminate (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:103:735)
    at o (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:113:32681)
    at Socket.<anonymous> (/opt/visual-studio-code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:113:30296)
    at Socket.emit (events.js:327:22)
    at Pipe.<anonymous> (net.js:673:12)

Environment

OS: Arch Linux
ffmpeg version: n4.4.1
X.org version: 1.21.1.1
VS Code version: 1.62.2

Command failed (X11, Manjaro/Arch)

Thank you for Chronicler, Timothy.

Unfortunately, it fails on:

  • Manjaro (a stable sister of Arch) x64 Linux, up-to-date (but 5.19 kernel 5.19.16-2-MANJARO #1 SMP PREEMPT_DYNAMIC - I'll try with 6.0, too),
  • X11, GNOME 42.4
  • VS Code 1.72.2
    • Version: 1.72.2
    • Commit: d045a5eda657f4d7b676dedbfa7aab8207f8a075
    • Date: 2022-10-12T22:16:26.920Z
    • Electron: 19.0.17
    • Chromium: 102.0.5005.167
    • Node JS reported by VS Code is 16.14.2, but the below npx commands seem to be using Node 18.10.0)
    • V8: 10.2.154.15-electron.0
    • OS: Linux x64 5.19.16-2-MANJARO
    • Sandboxed: No
      image

Side note: ctrl+alt+shift+r doesn't seem to trigger Chronicler for me. It opens some kind of screenshot app/plugin (and not VS Code-specific: it opens it regardless of VS Code). So far I haven't figured out what that is. So for now I trigger Chronicler with Chronicler: Start Recording with Audio.

When I do start Chronicler, after the initial pause VS Code fails:

Command failed: /opt/visual-studio-code/code /home/pkehl/.vscode/extensions/arcsine.chronicler-0.1.16/node_modules/@arcsine/win-info/bin/win-info-x11.js active node:internal/errors:464 ErrorCaptureStackTrace(err); ^ Error: spawn xwininfo ENOENT at ChildProcess._handle.onexit (node:internal/child_process:283:19) at onErrorNT (node:internal/child_process:478:16) at process.processTicksAndRejections (node:internal/process/task_queues:83:21) { errno: -2, code: 'ENOENT', syscall: 'spawn xwininfo', path: 'xwininfo', spawnargs: [ '-id', '46137347' ], cmd: 'xwininfo -id 46137347', stdout: '', stderr: '' }

Troubleshooting (after I hit 'y' to install your npx scripts) - the same errors (except for different window ID) even after a reboot:

npx @arcsine/win-info
node:internal/errors:484
    ErrorCaptureStackTrace(err);
    ^

Error: spawn xwininfo ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:283:19)
    at onErrorNT (node:internal/child_process:476:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn xwininfo',
  path: 'xwininfo',
  spawnargs: [ '-id', '75497544' ],
  cmd: 'xwininfo -id 75497544',
  stdout: '',
  stderr: ''
}

Node.js v18.10.0
node:child_process:910
    throw err;
    ^

Error: Command failed: /usr/bin/node /home/pkehl/.npm/_npx/7bdea5cc73c9c05d/node_modules/@arcsine/win-info/bin/win-info-x11.js active
node:internal/errors:484
    ErrorCaptureStackTrace(err);
    ^

Error: spawn xwininfo ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:283:19)
    at onErrorNT (node:internal/child_process:476:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn xwininfo',
  path: 'xwininfo',
  spawnargs: [ '-id', '75497544' ],
  cmd: 'xwininfo -id 75497544',
  stdout: '',
  stderr: ''
}

Node.js v18.10.0

    at checkExecSyncError (node:child_process:871:11)
    at Object.execFileSync (node:child_process:907:15)
    at getActiveSync (/home/pkehl/.npm/_npx/7bdea5cc73c9c05d/node_modules/@arcsine/win-info/index.js:55:41)
    at Object.<anonymous> (/home/pkehl/.npm/_npx/7bdea5cc73c9c05d/node_modules/@arcsine/win-info/bin/win-info.js:8:43)
    at Module._compile (node:internal/modules/cjs/loader:1149:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
    at Module.load (node:internal/modules/cjs/loader:1027:32)
    at Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) {
  status: 1,
  signal: null,
  output: [
    null,
    '',
    'node:internal/errors:484\n' +
      '    ErrorCaptureStackTrace(err);\n' +
      '    ^\n' +
      '\n' +
      'Error: spawn xwininfo ENOENT\n' +
      '    at ChildProcess._handle.onexit (node:internal/child_process:283:19)\n' +
      '    at onErrorNT (node:internal/child_process:476:16)\n' +
      '    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {\n' +
      '  errno: -2,\n' +
      "  code: 'ENOENT',\n" +
      "  syscall: 'spawn xwininfo',\n" +
      "  path: 'xwininfo',\n" +
      "  spawnargs: [ '-id', '75497544' ],\n" +
      "  cmd: 'xwininfo -id 75497544',\n" +
      "  stdout: '',\n" +
      "  stderr: ''\n" +
      '}\n' +
      '\n' +
      'Node.js v18.10.0\n'
  ],
  pid: 112935,
  stdout: '',
  stderr: 'node:internal/errors:484\n' +
    '    ErrorCaptureStackTrace(err);\n' +
    '    ^\n' +
    '\n' +
    'Error: spawn xwininfo ENOENT\n' +
    '    at ChildProcess._handle.onexit (node:internal/child_process:283:19)\n' +
    '    at onErrorNT (node:internal/child_process:476:16)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {\n' +
    '  errno: -2,\n' +
    "  code: 'ENOENT',\n" +
    "  syscall: 'spawn xwininfo',\n" +
    "  path: 'xwininfo',\n" +
    "  spawnargs: [ '-id', '75497544' ],\n" +
    "  cmd: 'xwininfo -id 75497544',\n" +
    "  stdout: '',\n" +
    "  stderr: ''\n" +
    '}\n' +
    '\n' +
    'Node.js v18.10.0\n'
}

Node.js v18.10.0

and

npx @arcsine/screen-recorder test.mp4
node:internal/errors:863
  const err = new Error(message);
              ^

Error: Command failed: /usr/bin/node /home/pkehl/.npm/_npx/c71e018737289961/node_modules/@arcsine/win-info/bin/win-info-x11.js active
node:internal/errors:484
    ErrorCaptureStackTrace(err);
    ^

Error: spawn xwininfo ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:283:19)
    at onErrorNT (node:internal/child_process:476:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn xwininfo',
  path: 'xwininfo',
  spawnargs: [ '-id', '75497544' ],
  cmd: 'xwininfo -id 75497544',
  stdout: '',
  stderr: ''
}

Node.js v18.10.0

    at ChildProcess.exithandler (node:child_process:412:12)
    at ChildProcess.emit (node:events:513:28)
    at maybeClose (node:internal/child_process:1091:16)
    at ChildProcess._handle.onexit (node:internal/child_process:302:5) {
  code: 1,
  killed: false,
  signal: null,
  cmd: '/usr/bin/node /home/pkehl/.npm/_npx/c71e018737289961/node_modules/@arcsine/win-info/bin/win-info-x11.js active',
  stdout: '',
  stderr: 'node:internal/errors:484\n' +
    '    ErrorCaptureStackTrace(err);\n' +
    '    ^\n' +
    '\n' +
    'Error: spawn xwininfo ENOENT\n' +
    '    at ChildProcess._handle.onexit (node:internal/child_process:283:19)\n' +
    '    at onErrorNT (node:internal/child_process:476:16)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {\n' +
    '  errno: -2,\n' +
    "  code: 'ENOENT',\n" +
    "  syscall: 'spawn xwininfo',\n" +
    "  path: 'xwininfo',\n" +
    "  spawnargs: [ '-id', '75497544' ],\n" +
    "  cmd: 'xwininfo -id 75497544',\n" +
    "  stdout: '',\n" +
    "  stderr: ''\n" +
    '}\n' +
    '\n' +
    'Node.js v18.10.0\n'
}

Node.js v18.10.0

Please advise.

Cannot find screen recording device

Hello,

FIrst of all thank you for your work.

I receive this message when I press the button to record 'Cannot find screen recording device'

I have installed ffmpeg but i dont know what to do.

Best

Recording doesn't follow vscode window

I guess I was assuming this extension would be confined to vscode and not other apps, including the desktop. Not sure if this is within the design goals or not, but if I move my vscode window to another monitor or resize it or whatever, the original vscode window location is what continues to be recorded.

ffmpeg for mac

Hi, could you please help with ffmpeg for mac? The one is provided is not working.
Library not loaded: /usr/local/opt/x264/lib/libx264.155.dylib

Also I thought maybe for mac it would be better to use builtin screencapture utility?

Error parsing data

{
    "title": "? Untitled-1 - main - Visual Studio Code",
    "id": 1575502,
    "owner": {
        "name": "Code.exe",
        "processId": 29468,
        "path": "C:\\Users\\user\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"
    },
    "screens": [
        {
            "x": 0,
            "y": 0,
            "width": 3840,
            "height": 2120,
            "index": 0,
            "scale": {
                "x": 1,00,
                "y": 1,00
            }
        }
    ],
    "bounds": {
        "x": 2,
        "y": 2,
        "width": 1916,
        "height": 2116
    }
}

As seem on the JSON above, the scale is getting wrong decimal separator.

It seems the fix in 530c7d1 didn't apply to me.
Running VS Code v1.58.2 and Chronicler v0.1.12

Extension Chronicler - main - Visual Studio Code

My locale is pt-BR

Recording delay

On some instances, even after Chronicler indicates that the recording has started, there seems to be a lag until the actual recording begins. In that, the first second or two are missing.

Fails on WSL

Hey, I've been running VS Code in Windows Subsystem for Linux (WSL2). When I start recording I get:

SyntaxError: Unexpected end of JSON input
	at JSON.parse (<anonymous>)
	at parseJSON (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/node_modules/@arcsine/win-info/index.js:9:21)
	at Object.getActive (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/node_modules/@arcsine/win-info/index.js:46:16)
	at processTicksAndRejections (internal/process/task_queues.js:89:5)
	at async Function.getWindow (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/node_modules/@arcsine/screen-recorder/lib/os.js:38:22)
	at async Function.recordActiveWindow (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/node_modules/@arcsine/screen-recorder/lib/recorder.js:7:42)
	at async Recorder.run (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/out/recorder.js:52:21)
	at async record (/home/user/.vscode-server/extensions/arcsine.chronicler-0.1.7/out/extension.js:52:25)

Is this scenario supported or even possible?

Chronicler Record With Audio silently fails

Hi, I really like the plugin, but I can't get it to work with audio on OSX using the brew deployed version of FFMpeg. There's a note in your readme about needing a custom build of FFMpeg on OSX, but the link is dead, and the bug is marked as closed. Not sure how to proceed. I tried turning on Debug, but I can't actually find where the logs go.

Any tips?

Thanks!

ubuntu 22 lts - records black screen

I'v used it on ubuntu 18 lts and it worked. After updating to 22 lts chronicle records black screen with only the mouse visible.

The logs don't show any errors and ffmpeg is installed.

One notable thing I know changed between 18 and 22 is the fact that the later is using wayland by default. Is this maybe causing issues?

video is blank after recording

Windows 10 64gb ram, i7 cpu, Asus ROG.

Version: 1.80.2 (system setup)
Commit: 2ccd690cbff1569e4a83d7c43d45101f817401dc
Date: 2023-07-27T20:40:28.909Z
Electron: 22.3.14
ElectronBuildId: 22695494
Chromium: 108.0.5359.215
Node.js: 16.17.1
V8: 10.8.168.25-electron.0
OS: Windows_NT x64 10.0.19045

Tried recording both an editor window and the terminal window. videos are both blank.

FFMPEG - Flag Help

Hey there!

Awesome work! I'm just trying to get this do take a timelapse...a simple one. Just a frame every 1 second. I set my framerate to 1, which worked fine. I then tried to put in a flag to increase the speed by 60 and cannot seem to get any kind of flag working. From my understanding a flag for something like this would look like:
{"-filter:v":"setpts=PTS/60"}

I'm sure there is something i'm missing her with this object based flag input.

Getting error on start

I get an error when I start recording that says Invalid exit status 1. When I try to run npx @arcsine/win-info I get this:

Unexpected token W in JSON at position 19:
{
"title": "C:\WINDOWS\system32\cmd.exe ",
"id": 4655364,
"owner": {
"name": "WindowsTerminal.exe",
"processId": 8776,
"path": "C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe"
},
"screens": [
{
"x": 0,
"y": 0,
"width": 2194,
"height": 1186,
"index": 0,
"scale": {
"x": 1.75,
"y": 1.75
}
} ],
"bounds": {
"x": 45,
"y": 52,
"width": 1140,
"height": 638
}
}

C:\Users\1322919\AppData\Local\npm-cache_npx\7bdea5cc73c9c05d\node_modules@arcsine\win-info\index.js:14
throw new Error('Error parsing data');
^

Error: Error parsing data
at parseJSON (C:\Users\1322919\AppData\Local\npm-cache_npx\7bdea5cc73c9c05d\node_modules@arcsine\win-info\index.js:14:15)
at getActiveSync (C:\Users\1322919\AppData\Local\npm-cache_npx\7bdea5cc73c9c05d\node_modules@arcsine\win-info\index.js:55:16)
at Object. (C:\Users\1322919\AppData\Local\npm-cache_npx\7bdea5cc73c9c05d\node_modules@arcsine\win-info\bin\win-info.js:8:43)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47

Template string, or a list of arguments (rather than an associative object) for "duplicate" parameters

Hi Timothy,

This is on top of #37.

My specific need is small: (On my, admittedly messed up, Manjaro Linux + Pulse + Pipewire), I need

  • not to use -f pulse -i default (which, for whatever reason, doesn't pick up my microphone), but
  • to use -f pulse -i "alsa_input.usb-Logitech_USB_Headset_Logitech_USB_Headset-00.mono-fallback".
  • as an extra, it would be nice to pass in -channels 1 in it, so together as -f pulse -channels 1 -i "alsa_input.usb-Logitech_USB_Headset_Logitech_USB_Headset-00.mono-fallback".

(The above microphone ID comes from pactl list sources. I have the above microphone selected as my GNOME default sound input, but -f pulse -i default didn't pick this mic up. ``pactl list sources | grep -i default doesn't list anything. `pactl list | grep -i default` lists many default settings, but not a (choice of a) microphone. Life is too short...)

Handling the above could be easy: Just two new setting fields (like pulse_source and pulse_num_channels). However, a user may want to mix-in other sources that have their own -i (or other parameters) - like mixing in their microphone and the computer's audio output (for background music/existing instructions/...).

Please consider either supporting

  • a template string that would somehow mix user-provided config substrings (verbatim) with configuration generated by Chronicler, or
  • a prefix and postfix strings that could be added in front of and at the end of the parameters list generated by Chronicler, or
  • an array of entries (each being either an array or an object), rather than an object (so that some keys, like -i, could be duplicated), and/or
  • a "dry_run" setting, which would show the generated command in a popup/terminal/somewhere where it can be copied to clipboard, or that would copy it to the clipboard.

Of course, you and the users most likely value backwards compatibility & simplicity, so I trust your in your judgment.

Currently I have Chronicler invoke a little shell script that saves all its arguments to a temp file. Even providing this in Chronicler's GitHub repo could help people.

#!/usr/bin/env bash
echo $@ >/tmp/all_args.txt

Error Parsing Data, Invalid Exit

Hello, this is my first time running this extension.

  • Start Recording GIF
  • Windows 10
  • FFMPEG installed
  • vscode 1.57.0

I am getting two errors.

  1. When I am not on my primary monitor I get Error Parsing Data, the following is logged when running a devmode vscode window
Unexpected token I in JSON at position 708: 
{
    "title": "[Extension Development Host] - test.js - Demo - Visual Studio Code",
    "id": 2953916,
    "owner": {
        "name": "Code.exe",
        "processId": 19988,
        "path": "C:\\Users\\Marcello Bachechi\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"
    },
    "screens": [ 
        {
          "x": -547,
          "y": -1085,
          "width": 1920,
          "height": 1040,
          "index": 0,
          "scale": {
            "x": 1.40,
            "y": -216.00
          }
        },

        {
          "x": 1373,
          "y": -1080,
          "width": 1920,
          "height": 1040,
          "index": 1,
          "scale": {
            "x": 0.58,
            "y": Infinity
          }
        } ],
    "bounds": {
        "x": 1373,
        "y": -1080,
        "width": 1920,
        "height": 1040
    }
}

The next error I get is if I am on my primary monitor. I receive a non-zero exit code of 1, as soon as the count down is complete.
With the following output

C:\Program' is not recognized as an internal or external command, operable program or batch file.

(this was solved by adding quotes around the binary path for ffmpeg in settings)

Cannot read property 'toString' of undefined

When I start recording with Audio, specifically, I get a countdown, but when it hits zero I get this error:

Screen Shot 2019-10-03 at 1 57 29 PM

Environment: macOS Mojave v10.14.6
ffmpeg installed via brew install ffmpeg

4k displays support

Currently, once I'm trying to record video on my PC, I'm getting only 1/4 of screen.

smassetman_spa.mp4

Extension works fine at 1920x1080, but record only part of screen for 3840x2160

Error: "Cannot read property 'uri' of undefined" when no folder in workspace

When trying to start recording in a workspace w/ no folder Chronicler throws the "Cannot read property 'uri' of undefined" error.

See also: https://code.visualstudio.com/docs/editor/workspaces#_can-i-use-a-multiroot-workspace-without-folders

Can I use a multi-root workspace without folders?
It is possible to leave the folders section of a .code-workspace file empty so that you end up with an instance of VS Code that does not show any root folders. You can still store workspace settings and even tasks or launch configurations in this case.

Can't get the plugin to record. Maybe issue with being in a remote container?

I have a development container I run with using .devcontainer deployment in VSCode. It's running Ubuntu 20.04 (if that helps). When I attempt to record, I get the countdown... then right at "0", I get the following error. I will take a look at your repo, see if I can figure out anything. Let me know if you want me to try anything. thanks.

Command failed: /vscode/vscode-server/bin/linux-x64/dfd34e8260c270da74b5c2d86d61aee4b6d56977/node /root/.vscode-server/extensions/arcsine.chronicler-0.1.16/node_modules/@arcsine/win-info/bin/win-info-x11.js active node:internal/errors:464 ErrorCaptureStackTrace(err); ^ Error: spawn xprop ENOENT at Process.ChildProcess._handle.onexit (node:internal/child_process:282:19) at onErrorNT (node:internal/child_process:477:16) at processTicksAndRejections (node:internal/process/task_queues:83:21) { errno: -2, code: 'ENOENT', syscall: 'spawn xprop', path: 'xprop', spawnargs: [ '-root', '\t$0', '_NET_ACTIVE_WINDOW' ], cmd: 'xprop -root \t$0 _NET_ACTIVE_WINDOW', stdout: '', stderr: '' }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.