Docs: a FAQ page and a Getting started page, a Download button in the docs header, and the latest version on the homepage

- docs/faq.md: the FAQ and commonly requested features from docs/index.md, grouped, with each question as a heading (so it can
  be linked, and is in the page's table of contents), plus: is it safe, which operating systems, how to update, and how it
  compares to other video editors
- docs/getting-started.md: download and install, then the typical workflow from docs/index.md
- The app's /go/faq and /go/usage links, the issue templates and the README point to the new pages
- Homepage: the latest version and its date (fetched at build time, not linked), the system requirements and "Is it safe?"
  below the store badges, two more FAQ answers, the version in the structured data, and "Download" in the title

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AntZvg7M7on4kAETvpYqzp
Co-authored-by: Mikael Finstad <finstaden@gmail.com>
This commit is contained in:
Claude
2026-10-22 06:54:43 +00:00
committed by Mikael Finstad
co-authored by Mikael Finstad
parent fbfb0fcadf
commit b48fa797ff
15 changed files with 306 additions and 106 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ body:
required: true
- label: Try with the [newest version from GitHub](https://github.com/mifi/lossless-cut/releases/latest)
required: true
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs#faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting)
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs/faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting)
required: true
- label: Search for your problem under [Issues](https://github.com/mifi/lossless-cut/issues) or [Discussions](https://github.com/mifi/lossless-cut/discussions)
required: true
+1 -1
View File
@@ -8,7 +8,7 @@ body:
options:
- label: Try with the [newest version from GitHub](https://github.com/mifi/lossless-cut/releases/latest) (also it might have already been fixed in latest [nightly build](https://mifi.no/llc/nightly/))
required: true
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs#faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting)
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs/faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting)
required: true
- label: Search for your problem under [Issues](https://github.com/mifi/lossless-cut/issues) or [Discussions](https://github.com/mifi/lossless-cut/discussions)
required: true
+1 -1
View File
@@ -10,7 +10,7 @@ body:
required: true
- label: Try with the [newest version from GitHub](https://github.com/mifi/lossless-cut/releases/latest)
required: true
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs#faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting) to see if the feature already exists
- label: Read the [documentation](https://losslesscut.app/docs), [FAQ](https://losslesscut.app/docs/faq) and [Troubleshooting, known issues](https://losslesscut.app/docs/troubleshooting) to see if the feature already exists
required: true
- label: See if someone already suggested this under [Issues](https://github.com/mifi/lossless-cut/issues) or [Discussions](https://github.com/mifi/lossless-cut/discussions)
required: true
+4 -2
View File
@@ -64,7 +64,7 @@ If you prefer to download the executables manually, this will of course always b
- [More releases](https://github.com/mifi/lossless-cut/releases) - Note that APPX (Windows) and PKG (macOS) do **not** work
- [Latest nightly builds 🧪](https://mifi.no/llc/nightly/)
Note that the above are the [only official downloads](https://losslesscut.app/docs#faq). There are also unofficial releases like [Flathub](https://flathub.org/apps/details/no.mifi.losslesscut) (not maintained by me). Difference between App Stores and GitHub download? [Please see FAQ](https://losslesscut.app/docs#faq).
Note that the above are the [only official downloads](https://losslesscut.app/docs/faq#can-i-download-losslesscut-from-other-websites-or-package-managers). There are also unofficial releases like [Flathub](https://flathub.org/apps/details/no.mifi.losslesscut) (not maintained by me). Difference between App Stores and GitHub download? [Please see FAQ](https://losslesscut.app/docs/faq#is-losslesscut-free-whats-the-difference-between-the-app-store-and-github-versions).
[![](./donate.svg)](https://mifi.no/thanks)
@@ -79,7 +79,9 @@ LosslessCut uses the Chromium browser's HTML5 video player, and not all formats/
## Documentation
- Official website: [LosslessCut.app](https://losslesscut.app)
- **[Getting started, FAQ and usage documentation](https://losslesscut.app/docs)**
- **[Getting started](https://losslesscut.app/docs/getting-started)**
- [FAQ](https://losslesscut.app/docs/faq)
- [Usage documentation](https://losslesscut.app/docs)
- [Troubleshooting and known issues and limitations](https://losslesscut.app/docs/troubleshooting)
- [Contributing](CONTRIBUTING.md)
+131
View File
@@ -0,0 +1,131 @@
# FAQ
Frequently asked questions. See also [🤔 Troubleshooting](troubleshooting.md) and the [📝 Recipe cookbook](recipes.md).
## General
### Is LosslessCut free? What's the difference between the app store and GitHub versions?
LosslessCut is free and open source, and you can download it for free from [GitHub](https://github.com/mifi/lossless-cut/releases). The versions in the Mac App Store and Microsoft Store cost a little, which supports my work on LosslessCut. They're signed, so you don't get warnings when installing them, and they update automatically.
The app store versions are often a few versions behind the latest GitHub version, because I want to be sure that a new version works well before releasing it there. Consider the newest GitHub versions a public "beta". The app store and GitHub versions have the same features, except for a few platform limitations: Apple doesn't allow app store apps to open VOB files, and Mac App Store apps run in a sandbox, so they need to ask for an output folder before they can write files.
### Is LosslessCut safe?
Yes, if you get it from an [official source](#can-i-download-losslesscut-from-other-websites-or-package-managers). LosslessCut is open source, so anyone can read its code, and the GitHub releases are built from that code by GitHub Actions. The app store versions are also reviewed by Apple and Microsoft. The Windows version on GitHub isn't code signed, so Windows and antivirus software may warn about it. LosslessCut has no ads or tracking, see the [privacy policy](https://losslesscut.app/privacy-policy).
### Can I download LosslessCut from other websites or package managers?
Only the [official sources](../README.md#download) (losslesscut.app, GitHub and the app stores) are maintained by me. Downloading LosslessCut from other sources, such as other websites or package managers like WinGet or Homebrew, is entirely at your own risk, because they are not maintained or vetted by me. See also [Unofficial versions](installation.md#unofficial-versions).
### Which operating systems does it run on?
Windows 10 and 11, macOS 12 or newer, and Linux (x64 and arm64). See [Supported OS versions](requirements.md).
### How do I update LosslessCut?
The app store versions update automatically. The GitHub version checks for new versions when it starts (you can turn this off in the settings), and shows a *New version!* menu with a download link when there is one. Download it and replace the old version with it, your settings are kept.
### How does LosslessCut compare to other video editors?
LosslessCut only does what it can without re-encoding, which makes it very fast and keeps the original quality. Video editors like DaVinci Resolve, Premiere or Shotcut, and converters like HandBrake, re-encode the video, which is slow and loses some quality each time, but they can do much more, like effects, transitions or making the file smaller. See [Commonly requested features](#commonly-requested-features) and the [primer on codecs and formats](index.md#primer-videoaudio-codecs-vs-formats).
### Is LosslessCut a portable app? Where are settings and temporary files stored?
LosslessCut is *not* a [portable app](https://github.com/mifi/lossless-cut/issues/645). See [Installation and files](installation.md).
### What are all these `.llc` files that get created?
They save your segments, so that you can continue where you left off when you open the file again. You can turn them off in the settings. See also [#2115](https://github.com/mifi/lossless-cut/issues/2115).
## Using LosslessCut
### Is there a keyboard shortcut to do X?
First check the Keyboard shortcuts dialog. If you cannot find your shortcut there, [see this issue](https://github.com/mifi/lossless-cut/issues/254).
### I cannot find a particular button or function
Click the "advanced view" (baby icon) in the bottom left to enable additional functionality.
### How do I cut away a middle part of a video?
Click the Yin Yang symbol ("advanced view"). It will invert the segments.
### How can I import multiple files into my project and edit them together?
LosslessCut is not a [non-linear editor](https://github.com/mifi/lossless-cut/issues/976) (like Adobe Premiere) and it is not a linear editor (like Avidemux) - it is something in-between. You create segments on the timeline and the segments represent which portions of video will be exported. If you want more advanced workflows, you have to do it in multiple separate operations, see the recipe [Cut multiple files and merge them all](recipes.md#cut-multiple-files-and-merge-them-all).
### How do I change the default 10 second length of new segments?
The 10 second default end is only used in simple mode and cannot be changed. Instead, click "advanced view" (baby icon, bottom left). New segments are then created as [markers](index.md#markers) (without an end). Or move the playhead and press <kbd>I</kbd> / <kbd>O</kbd> to set the current segment's start / end there.
### How do I sync or shift audio/video tracks?
Since v3.69.0 you can shift all tracks of a file relative to the other files (e.g. an external audio file that you added): open the tracks dialog and set *Shift by seconds* for that file. For other cases, see the workaround in [#216](https://github.com/mifi/lossless-cut/issues/216).
### Where are settings and keyboard shortcuts stored, and how do I copy them to another computer?
See [Copy settings and keyboard shortcuts to another computer](installation.md#copy-settings-and-keyboard-shortcuts-to-another-computer).
### Can LosslessCut remember more choices, selections, settings?
Maybe, see [#371](https://github.com/mifi/lossless-cut/issues/371).
## Exporting and merging
### Where's the "Export options" dialog?
Click the icon next to the export button (bottom right, "advanced view") to toggle whether to show this dialog before each export.
### Why does my export (or *Merge cuts*) start a few seconds before my cut point?
Because lossless cuts start from the keyframe before the cut point. See [Export starts a few seconds before my cut point](troubleshooting.md#export-starts-a-few-seconds-before-my-cut-point).
### File not supported, black preview or playback stutters?
See [Preview / playback problems](troubleshooting.md#preview--playback-problems). The preview does not affect the exported file.
### Why does my merged file only play the first part, or have later parts with only audio or corrupt video?
The files must have identical codec parameters. See [Merge / concat results in corrupt or broken parts](troubleshooting.md#merge--concat-results-in-corrupt-or-broken-parts).
### How can I export all segments with the same label into their own file, or quickly select many segments?
See [Export segments with the same label into their own file](recipes.md#export-segments-with-the-same-label-into-their-own-file).
### Can I cut or merge multiple files in the same timeline?
No, and I'm not sure if this will ever be implemented. Editing multiple files will have to be done in multiple steps, see the recipe [Cut multiple files and merge them all](recipes.md#cut-multiple-files-and-merge-them-all). See also [#976](https://github.com/mifi/lossless-cut/issues/976).
### Can I overwrite the input file, or export and replace it in place?
No, overwriting the input file is not allowed by design, for [several reasons](https://github.com/mifi/lossless-cut/issues/2538#issuecomment-3476574283). But you can export and automatically delete the input file (see keyboard shortcuts). If you want the output file to have the same name as the input file, you have to choose a different output folder.
## Automation
### Can LosslessCut be automated using a CLI or API, or do external post-processing?
While it was never designed for advanced batching/automation, it does have a [basic CLI](cli.md) and an [HTTP API](api.md). More info: [#980](https://github.com/mifi/lossless-cut/issues/980) [#868](https://github.com/mifi/lossless-cut/issues/868).
### Why doesn't `--keyboard-action createNumSegments` (or another action that opens a dialog) work from a script?
Actions that open a dialog cannot be scripted. See [Actions that open a dialog cannot be scripted](cli.md#actions-that-open-a-dialog-cannot-be-scripted).
### Can LosslessCut do the same batch conversion operation on multiple files?
Probably not, but [you can probably do it yourself!](batch.md)
## Commonly requested features
### Can LosslessCut crop, resize, add effects, re-encode or mix audio?
LosslessCut can't **crop, resize, stretch, mirror/flip, reverse, overlay text/images, watermark, blur, redact, reduce quality/re-encode, create GIF, slideshow, burn subtitles, color grading, fade/transition between video clips, fade/combine/mix/merge audio tracks, mute audio channels or change audio volume**. These are all lossy operations (meaning you *have* to re-encode the file), but in the future I may start to implement such features. [See #372](https://github.com/mifi/lossless-cut/issues/372). Related: [#643](https://github.com/mifi/lossless-cut/issues/643).
### When will you implement feature X?
I have limited time and I have a lot of projects to work on, so I cannot promise any timeline. I will usually prioritize the issues with the most likes, [see here for a list of the most popular issues](https://github.com/mifi/lossless-cut/issues/691).
### Can you publish through winget, Flatpak, Docker or other package managers?
In general I don't want to maintain more build systems, but I could be open to linking to externally maintained build systems. See [winget](https://github.com/mifi/lossless-cut/issues/1279), [Flatpak](https://github.com/mifi/lossless-cut/pull/1813) and [Docker](https://github.com/mifi/lossless-cut/issues/1086).
+42
View File
@@ -0,0 +1,42 @@
# Getting started
## Download and install
Get LosslessCut from the [Mac App Store, Microsoft Store or Snap Store](https://losslesscut.app/#download), which install and update it automatically, or download it from [GitHub](../README.md#download). The GitHub version has no installer: see [Installation and files](installation.md). LosslessCut runs on Windows 10 and 11, macOS 12 or newer and Linux, see [Supported OS versions](requirements.md).
## Your first cut
- **Drag and drop** a video file into player or use <kbd>⌘</kbd>/<kbd>CTRL</kbd> + <kbd>O</kbd>.
- <kbd>SPACE</kbd> to play/pause or <kbd>←</kbd> <kbd>→</kbd> <kbd>,</kbd> <kbd>.</kbd> or mouse/trackpad wheel to seek back/forth.
- Set the start/end times of the current segment by first moving the timeline cursor and then pressing <kbd>I</kbd> to set start time and <kbd>O</kbd> to set end time. You can also press hold <kbd>SHIFT</kbd> while dragging a segment with the mouse to move or resize it
- <kbd>+</kbd> to create another marker and repeat the previous step to convert it into a segment.
- <kbd>B</kbd> to split the segment at the timeline cursor.
- <kbd>BACKSPACE</kbd> to remove cutpoint/segment.
- If you create segments without an end time, it is a [marker](index.md#markers) instead of a segment.
- Note that when exporting, all segments you create will be **preserved** and exported as new files. You can change this behavior with the **Yin Yang** symbol ☯️, in which case the behaviour is inverted and LosslessCut will instead **skip** all selected segments and export the parts **between** segments as files.
- Also note that start times will not be accurate, see [Export starts a few seconds before my cut point](troubleshooting.md#export-starts-a-few-seconds-before-my-cut-point).
- *(optional)* <kbd>+</kbd> to add another segment at the current cursor time. Then select the segment end time with <kbd>O</kbd>.
- *(optional)* If you want to merge all the selected segments into one file after cutting, change the `Export mode` from `Separate files` to `Merge cuts`.
- *(optional)* If you want to export to a certain output folder, press the `Working dir unset` button (defaults to same folder as source file).
- *(optional)* If you want to change orientation, press the **rotation** button.
- *(optional)* By default, most audio, video and subtitle tracks from the input file will be cut and exported. Press the `Tracks` button to customise and/or add new tracks from other files.
- *(optional)* Select a new output format (remux).
- *(optional)* In the right-hand segments panel, right click a segment for options, or drag-drop to reorder. Segments will appear in this order in the merged output.
- **When done, press the `Export` button (or <kbd>E</kbd>) to show an overview with export options.**
- *(optional)* Adjust any export options.
- *(optional)* Change the [Output file name template](file-name-template.md).
- **Then press `Export` again to confirm the export**
- Press the **Camera** button (or <kbd>C</kbd>) if you want to take a JPEG/PNG snapshot from the current time.
- If you want to move the original file to trash, press the **trash** button.
- For best results you may need to trial and error with another output format (Matroska can hold nearly everything), change keyframe cut mode or disable some tracks (see [known issues](troubleshooting.md)).
- Press <kbd>SHIFT</kbd> + <kbd>/</kbd> to view and edit all keyboard & mouse shortcuts.
- Default shortcuts are based on the physical key positions of a US (QWERTY) keyboard, so on other layouts (e.g. QWERTZ/AZERTY) some shortcuts are on different keys. The shortcuts dialog shows the actual keys for your layout, and you can rebind them there.
- **Note:** The original video file will not be modified. Instead, a file is created file in the same directory as the original file with from/to timestamps in the file name.
- See Keyboard shortcuts dialog for more custom actions. (<kbd>SHIFT</kbd> + <kbd>/</kbd>)
## Next steps
- [✨ Features and use cases](features.md)
- [❓ FAQ](faq.md)
- [📝 Recipe cookbook](recipes.md)
- [🤔 Troubleshooting](troubleshooting.md)
+5 -85
View File
@@ -4,97 +4,15 @@ Please read the documentation before creating an issue. Thank you 🙏
## FAQ
- **Q:** Is there a keyboard shortcut to do X?
- **A:** First check the Keyboard shortcuts dialog. If you cannot find your shortcut there, [see this issue.](https://github.com/mifi/lossless-cut/issues/254)
- **Q:** How can I import multiple files into my project and edit them together?
- **A:** LosslessCut is not a [non-linear editor](https://github.com/mifi/lossless-cut/issues/976) (like Adobe Premiere) and it is not a linear editor (like Avidemux) - it is something in-between. You create segments on the timeline and the segments represent which portions of video will be exported. If you want more advanced workflows, you have to do it in multiple separate operations.
- **Q:** Can LosslessCut be automated using a CLI or API or do external post-processing?
- **A:** While it was never designed for advanced batching/automation, it does have a [basic CLI and a HTTP API](cli.md). More info: [#980](https://github.com/mifi/lossless-cut/issues/980) [#868](https://github.com/mifi/lossless-cut/issues/868).
- **Q:** I cannot find a particular button or function.
- **A:** Click the "advanced view" (baby icon) in the bottom left to enable additional functionality.
- **Q:** Where's the "Export options" dialog?
- **A:** Click the icon next to the export button (bottom right, "advanced view") to toggle whether to show this dialog before each export.
- **Q:** How to *cut away* a middle part of a video?
- **A:** Click the Yin Yang symbol ("advanced view"). It will invert the segments.
- **Q** What's the difference between the app in the Apple/Microsoft App Store vs. GitHub releases?
- **A** LosslessCut version in the App Stores is often a few versions behind the latest GitHub version, because I want to be sure that the new versions work perfectly before releasing in the App Stores. The GitHub version will contain new, untested features and may contain some bugs (even in existing functionality). I consider the newest GitHub versions to be a public "beta" test. Then, once I'm sure that the new version works well, I will release it in the App Stores as well to give a frictionless as possible experience for customers. They have exactly the same in-app features, except for a few platform limitations: Apple doesn't allow opening VOB files with App Store apps. Apple App Store apps run in a sandbox, and therefore need to prompt for output directory before allowing writing files.
- **Q**: What are all these `.llc` files that get created?
- **A***: Their purpose is to save your segments so that when you exit/re-open LosslessCut you can continue where you left off. You can turn them off in app settings. See also [#2115](https://github.com/mifi/lossless-cut/issues/2115).
- **Q:** Why does my export (or *Merge cuts*) start a few seconds before my cut point?
- **A:** Because lossless cuts start from the keyframe before the cut point. See [Export starts a few seconds before my cut point](troubleshooting.md#export-starts-a-few-seconds-before-my-cut-point).
- **Q:** File not supported, black preview or playback stutters?
- **A:** See [Preview / playback problems](troubleshooting.md#preview--playback-problems). The preview does not affect the exported file.
- **Q:** Why does my merged file only play the first part, or have later parts with only audio or corrupt video?
- **A:** The files must have identical codec parameters. See [Merge / concat results in corrupt or broken parts](troubleshooting.md#merge--concat-results-in-corrupt-or-broken-parts).
- **Q:** How can I export all segments with the same label into their own file, or quickly select many segments?
- **A:** See [Export segments with the same label into their own file](recipes.md#export-segments-with-the-same-label-into-their-own-file).
- **Q:** How do I change the default 10 second length of new segments?
- **A:** The 10 second default end is only used in simple mode and cannot be changed. Instead, click "advanced view" (baby icon, bottom left). New segments are then created as [markers](#markers) (without an end). Or move the playhead and press <kbd>I</kbd> / <kbd>O</kbd> to set the current segment's start / end there.
- **Q:** Why doesn't `--keyboard-action createNumSegments` (or another action that opens a dialog) work from a script?
- **A:** Actions that open a dialog cannot be scripted. See [Actions that open a dialog cannot be scripted](cli.md#actions-that-open-a-dialog-cannot-be-scripted).
- **Q:** Where are settings and keyboard shortcuts stored, and how do I copy them to another computer?
- **A:** See [Copy settings and keyboard shortcuts to another computer](installation.md#copy-settings-and-keyboard-shortcuts-to-another-computer).
- **Q**: Can I download LosslessCut from other websites or package managers?
- **A**: Only the [official sources specified here](../README.md#download) are maintained by me. Downloading LosslessCut from other sources such as other websites or package managers like WinGet or Homebrew entirely at your own risk, because those are not being maintained or vetted by me.
## Commonly requested features
- **Q:** Can LosslessCut **crop, resize, stretch, mirror/flip, reverse, overlay text/images, watermark, blur, redact, reduce quality/re-encode, create GIF, slideshow, burn subtitles, color grading, fade/transition between video clips, fade/combine/mix/merge audio tracks, mute audio channels or change audio volume**?
- **A:** No, these are all lossy operations (meaning you *have* to re-encode the file), but in the future I may start to implement such features. [See #372](https://github.com/mifi/lossless-cut/issues/372). Related: [#643](https://github.com/mifi/lossless-cut/issues/643).
- **Q:** When will you implement feature X?
- **A:** I have limited time and I have a lot of projects to work on, so I cannot promise any timeline. I will usually prioritize the issues with the most likes, [see here for a list of the most popular issues](https://github.com/mifi/lossless-cut/issues/691).
- **Q:** Can LosslessCut do the same batch conversion operation on multiple files?
- **A:** Probably not, but [you can probably do it yourself!](batch.md)
- **Q:** Is LosslessCut a portable app? Where is application data, settings and temp files stored?
- **A:** See LosslessCut is *not* a [portable app](https://github.com/mifi/lossless-cut/issues/645). See [Installation and files](installation.md).
- **Q:** Can I export and replace the source file in-place?
- **A:** No, but you can export and automatically delete the input file (see keyboard shortcuts). If you want the output file to have the same name as the input file, you have to choose a different output folder.
- **Q:** Can you publish through [winget](https://github.com/mifi/lossless-cut/issues/1279), [Flatpak](https://github.com/mifi/lossless-cut/pull/1813), [Docker](https://github.com/mifi/lossless-cut/issues/1086) or other software mangers?
- **A:** In general I don't want to maintain more build systems, but I could be open to linking to externally maintained build systems.
- **Q:** How to sync/shift audio/video tracks?
- **A:** Since v3.69.0 you can shift all tracks of a file relative to the other files (e.g. an external audio file that you added): open the tracks dialog and set *Shift by seconds* for that file. For other cases, see the workaround in [#216](https://github.com/mifi/lossless-cut/issues/216).
- **Q:** How do I overwrite input file?
- **A:** That is forbidden by design, for [several reasons](https://github.com/mifi/lossless-cut/issues/2538#issuecomment-3476574283).
- **Q:** Can LosslessCut remember more choices, selections, settings?
- **A:** Maybe, see [#371](https://github.com/mifi/lossless-cut/issues/371).
- **Q:** Does LosslessCut allow me to cut/merge multiple files in the same timeline?
- **A:** No, and I'm not sure if this will ever be implemented. Editing multiple files will have to be done in multiple steps, see the recipe [Cut multiple files and merge them all](recipes.md#cut-multiple-files-and-merge-them-all). See also [#976](https://github.com/mifi/lossless-cut/issues/976).
See also [📝 Recipe cookbook](recipes.md).
See the [❓ FAQ](faq.md), for example [is LosslessCut free?](faq.md#is-losslesscut-free-whats-the-difference-between-the-app-store-and-github-versions) and [commonly requested features](faq.md#commonly-requested-features).
## Troubleshooting
If you have a problem with the app or with a file, please see the [🤔 Troubleshooting, known issues and limitations](troubleshooting.md).
## Usage: Typical workflow
## Usage
- **Drag and drop** a video file into player or use <kbd>⌘</kbd>/<kbd>CTRL</kbd> + <kbd>O</kbd>.
- <kbd>SPACE</kbd> to play/pause or <kbd>←</kbd> <kbd>→</kbd> <kbd>,</kbd> <kbd>.</kbd> or mouse/trackpad wheel to seek back/forth.
- Set the start/end times of the current segment by first moving the timeline cursor and then pressing <kbd>I</kbd> to set start time and <kbd>O</kbd> to set end time. You can also press hold <kbd>SHIFT</kbd> while dragging a segment with the mouse to move or resize it
- <kbd>+</kbd> to create another marker and repeat the previous step to convert it into a segment.
- <kbd>B</kbd> to split the segment at the timeline cursor.
- <kbd>BACKSPACE</kbd> to remove cutpoint/segment.
- If you create segments without an end time, it is a [marker](#markers) instead of a segment.
- Note that when exporting, all segments you create will be **preserved** and exported as new files. You can change this behavior with the **Yin Yang** symbol ☯️, in which case the behaviour is inverted and LosslessCut will instead **skip** all selected segments and export the parts **between** segments as files.
- Also note that start times will not be accurate, see [Export starts a few seconds before my cut point](troubleshooting.md#export-starts-a-few-seconds-before-my-cut-point).
- *(optional)* <kbd>+</kbd> to add another segment at the current cursor time. Then select the segment end time with <kbd>O</kbd>.
- *(optional)* If you want to merge all the selected segments into one file after cutting, change the `Export mode` from `Separate files` to `Merge cuts`.
- *(optional)* If you want to export to a certain output folder, press the `Working dir unset` button (defaults to same folder as source file).
- *(optional)* If you want to change orientation, press the **rotation** button.
- *(optional)* By default, most audio, video and subtitle tracks from the input file will be cut and exported. Press the `Tracks` button to customise and/or add new tracks from other files.
- *(optional)* Select a new output format (remux).
- *(optional)* In the right-hand segments panel, right click a segment for options, or drag-drop to reorder. Segments will appear in this order in the merged output.
- **When done, press the `Export` button (or <kbd>E</kbd>) to show an overview with export options.**
- *(optional)* Adjust any export options.
- *(optional)* Change the [Output file name template](file-name-template.md).
- **Then press `Export` again to confirm the export**
- Press the **Camera** button (or <kbd>C</kbd>) if you want to take a JPEG/PNG snapshot from the current time.
- If you want to move the original file to trash, press the **trash** button.
- For best results you may need to trial and error with another output format (Matroska can hold nearly everything), change keyframe cut mode or disable some tracks (see [known issues](troubleshooting.md)).
- Press <kbd>SHIFT</kbd> + <kbd>/</kbd> to view and edit all keyboard & mouse shortcuts.
- Default shortcuts are based on the physical key positions of a US (QWERTY) keyboard, so on other layouts (e.g. QWERTZ/AZERTY) some shortcuts are on different keys. The shortcuts dialog shows the actual keys for your layout, and you can rebind them there.
- **Note:** The original video file will not be modified. Instead, a file is created file in the same directory as the original file with from/to timestamps in the file name.
- See Keyboard shortcuts dialog for more custom actions. (<kbd>SHIFT</kbd> + <kbd>/</kbd>)
New to LosslessCut? See [🚀 Getting started](getting-started.md) for a typical workflow.
## Primer: Video/audio codecs vs. formats
@@ -146,6 +64,8 @@ Same as CSV but `<tab>` instead.
## More
- [🚀 Getting started](getting-started.md)
- [❓ FAQ](faq.md)
- [🤔 Troubleshooting, known issues and limitations](troubleshooting.md)
- [📝 Recipe cookbook](recipes.md)
- [📲 Installation](installation.md)
+2 -2
View File
@@ -17,8 +17,8 @@ import { discordInviteUrl, githubUrl } from './links.ts';
export const websiteUrl = 'https://losslesscut.app';
export const appLinkTargets = {
usage: '/docs#usage-typical-workflow',
faq: '/docs#faq',
usage: '/docs/getting-started#your-first-cut',
faq: '/docs/faq',
troubleshooting: '/docs/troubleshooting',
'file-name-template': '/docs/file-name-template',
'select-segments-by-expression': '/docs/expressions#select-segments-by-expression',
+4
View File
@@ -38,7 +38,9 @@ export default defineConfig({
// Docs pages (the files in ../docs) by URL path. A new doc is built, but only listed here once added.
sidebar: [
'docs',
'docs/getting-started',
'docs/features',
'docs/faq',
'docs/installation',
'docs/requirements',
'docs/troubleshooting',
@@ -51,6 +53,8 @@ export default defineConfig({
'docs/translation',
],
customCss: ['./src/styles/docs.css'],
// adds a Download button to the header
components: { SocialIcons: './src/components/DocsSocialIcons.astro' },
plugins: [starlightLinksValidator({
// the homepage isn't a Starlight page, so the validator can't check its anchors
exclude: ['/#download'],
@@ -0,0 +1,25 @@
---
// Starlight's header icons (components.SocialIcons in astro.config.ts), with a Download button first. Shown in the header, and on
// phones in the menu.
import Default from '@astrojs/starlight/components/SocialIcons.astro';
---
<a class="docs-download" href="/#download">Download</a>
<Default />
<style>
.docs-download {
padding: 0.3em 0.9em;
border-radius: 6px;
background-color: #1a7b86;
color: white;
font-size: var(--sl-text-sm);
font-weight: 600;
text-decoration: none;
white-space: nowrap;
}
.docs-download:hover {
background-color: #166b75;
color: white;
}
</style>
+32 -8
View File
@@ -1,6 +1,7 @@
// The homepage content. Rendered to static HTML at build time (no client-side JavaScript, except a small script in index.astro for
// the hero video's pause button and the feature icon animation).
import type { CSSProperties, ReactNode } from 'react';
import { Fragment } from 'react';
import type { IconNode } from 'lucide';
import { Combine, Film, Layers, ListOrdered, RefreshCw, ScanSearch, Scissors, SquarePen, Terminal } from 'lucide';
import type { IconNode as ReactIconNode } from 'lucide-react';
@@ -13,6 +14,7 @@ import logo from '../../../src/renderer/src/icon.svg?url';
import type { Video } from '../images.ts';
import { background1, background2, generationLossOriginal, generationLossReencoded, heroVideo, sceneChangesVideo, tracksScreenshot } from '../images.ts';
import type { Release } from '../latestRelease.ts';
import { authorUrl, donateUrl, githubUrl, socialLinks, storeUrls, supportEmail } from '../links.ts';
import socialIconPaths from './socialIcons.ts';
@@ -53,6 +55,22 @@ const usageScenarios = [
'Cut a file by its MP4/MKV chapters',
];
// A few from docs/faq.md, shortened
const faqs: { question: string, answer: ReactNode }[] = [
{
question: 'Why is it not free on the App Stores but free on GitHub?',
answer: 'I initially only released LosslessCut as a direct download from GitHub, as an unsigned/untrusted exe/binary file download. People were complaining that it\'s hard to download/install the unsigned exe file, as they need to go through these dialogs saying that this file is a threat to your computer, and anti-virus complaining about executables downloaded from the internet. Some wanted a way to automatically update the app when new versions are out. This can both be achieved by downloading through the MS and Apple App Store. Microsoft charges money for signing binaries and a yearly fee for publishing to the Microsoft Store. Therefore I decided I can sell it in the MS Store for those who want to support my continued work and want to have the benefits it gives, while at the same time providing more experimental unsigned downloads as usual. Of course anyone is also free to build LosslessCut from source code.',
},
{
question: 'Is LosslessCut safe?',
answer: <>Yes, if you get it from this website, GitHub or the app stores. It&apos;s open source, and it has no ads or tracking (see the <a href="/privacy-policy">privacy policy</a>). The app store versions are also reviewed by Apple and Microsoft.</>,
},
{
question: 'Which operating systems does it run on?',
answer: <>Windows 10 and 11, macOS 12 or newer, and Linux (x64 and arm64). See <a href="/docs/requirements">supported OS versions</a>.</>,
},
];
const storeBadges = [
{ href: storeUrls.mac, image: macAppStoreBadge, alt: 'LosslessCut on the Mac App Store', rounded: false },
{ href: storeUrls.microsoft, image: msStoreBadge, alt: 'LosslessCut on the Microsoft Store', rounded: true },
@@ -150,7 +168,7 @@ function StoreBadges({ height }: { height: number }) {
const formatStars = (stars: number) => (stars >= 1000 ? `${Math.floor(stars / 1000)}k+` : String(stars));
// stars: the GitHub star count, fetched at build time by index.astro (see githubStars.ts)
export default function Home({ stars }: { stars: number }) {
export default function Home({ stars, release }: { stars: number, release: Release | undefined }) {
return (
<div className="page">
<header className="hero" style={{ backgroundImage: `linear-gradient(160deg, rgba(11, 52, 56, 0.93), rgba(40, 40, 40, 0.96) 65%), url(${background1})` }}>
@@ -271,6 +289,12 @@ export default function Home({ stars }: { stars: number }) {
<StoreBadges height={50} />
<ul className="download-facts">
{release && <li>Latest version {release.version} ({release.date.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC' })})</li>}
<li><a href="/docs/requirements">Windows 10 and 11, macOS 12 or newer, Linux</a></li>
<li><a href="/docs/faq#is-losslesscut-safe">Is it safe?</a></li>
</ul>
<p className="official-sources">
⚠️ Beware of unofficial websites and app distributors. The only official sources of LosslessCut are this website, <a href={githubUrl}>GitHub</a> and the app stores above.
</p>
@@ -279,14 +303,14 @@ export default function Home({ stars }: { stars: number }) {
<div className="faq">
<h2>FAQ</h2>
<p style={{ marginBottom: '0' }}>
Why is it not free on the App Stores but free on GitHub?
</p>
<p className="faq-answer">
I initially only released LosslessCut as a direct download from GitHub, as an unsigned/untrusted exe/binary file download. People were complaining that it&apos;s hard to download/install the unsigned exe file, as they need to go through these dialogs saying that this file is a threat to your computer, and anti-virus complaining about executables downloaded from the internet. Some wanted a way to automatically update the app when new versions are out. This can both be achieved by downloading through the MS and Apple App Store. Microsoft charges money for signing binaries and a yearly fee for publishing to the Microsoft Store. Therefore I decided I can sell it in the MS Store for those who want to support my continued work and want to have the benefits it gives, while at the same time providing more experimental unsigned downloads as usual. Of course anyone is also free to build LosslessCut from source code.
</p>
{faqs.map(({ question, answer }) => (
<Fragment key={question}>
<p className="faq-question">{question}</p>
<p className="faq-answer">{answer}</p>
</Fragment>
))}
<a className="more-faq" href="/docs#faq">More FAQ...</a>
<a className="more-faq" href="/docs/faq">More FAQ...</a>
</div>
<div style={{ minHeight: '200px' }}>
+27
View File
@@ -0,0 +1,27 @@
// The latest GitHub release's version and date for the homepage, fetched once per build (or dev server), like githubStars.ts.
// If the request fails, the homepage leaves them out.
export interface Release { version: string, date: Date }
async function fetchLatestRelease(): Promise<Release | undefined> {
try {
const token = process.env['GITHUB_TOKEN'];
const response = await fetch('https://api.github.com/repos/mifi/lossless-cut/releases/latest', {
headers: { accept: 'application/vnd.github+json', ...(token && { authorization: `Bearer ${token}` }) },
signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { tag_name: tag, published_at: publishedAt } = await response.json();
if (typeof tag !== 'string' || typeof publishedAt !== 'string') throw new Error('No tag_name or published_at');
return { version: tag.replace(/^v/, ''), date: new Date(publishedAt) };
} catch (err) {
console.warn('Could not get the latest GitHub release, leaving it out:', err instanceof Error ? err.message : err);
return undefined;
}
}
let releasePromise: Promise<Release | undefined> | undefined;
export default function getLatestRelease() {
releasePromise ??= fetchLatestRelease();
return releasePromise;
}
+6 -4
View File
@@ -2,13 +2,15 @@
import Home from '../components/Home.tsx';
import getGithubStars from '../githubStars.ts';
import { ogImage } from '../images.ts';
import getLatestRelease from '../latestRelease.ts';
import { mastodonUrl } from '../links.ts';
import structuredData from '../structuredData.ts';
import getStructuredData from '../structuredData.ts';
import '../styles/home.css';
const stars = await getGithubStars();
const release = await getLatestRelease();
const title = 'LosslessCut – Free Lossless Video Cutter for Mac, Windows & Linux';
const title = 'LosslessCut – Free Lossless Video Cutter. Download for Windows, Mac & Linux';
const description = 'LosslessCut - Official downloads - free or paid version. Edit video, audio without quality loss. Cut, trim, merge on macOS, Windows and Linux.';
---
@@ -31,10 +33,10 @@ const description = 'LosslessCut - Official downloads - free or paid version. Ed
<meta property="og:image" content={ogImage}>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<script type="application/ld+json" is:inline set:html={JSON.stringify(structuredData)} />
<script type="application/ld+json" is:inline set:html={JSON.stringify(getStructuredData(release))} />
</head>
<body>
<Home stars={stars} />
<Home stars={stars} release={release} />
<!-- is:inline: plain JS, not compiled by Vite, which would look for a tsconfig and find the app's (see tsconfig.json) -->
<script is:inline>
// The framed videos (<FramedVideo> in Home.tsx): their pause buttons, playing them only while they're on screen (the hero
+6 -2
View File
@@ -1,8 +1,9 @@
// schema.org data for the homepage (https://schema.org/SoftwareApplication).
import { ogImage } from './images.ts';
import type { Release } from './latestRelease.ts';
import { authorUrl, githubUrl, socialLinks, storeUrls } from './links.ts';
export default {
export default (release: Release | undefined) => ({
'@context': 'https://schema.org',
'@graph': [
{
@@ -18,6 +19,9 @@ export default {
applicationCategory: 'MultimediaApplication',
operatingSystem: 'Windows, macOS, Linux',
image: ogImage,
...(release && { softwareVersion: release.version }),
// free from GitHub
offers: { '@type': 'Offer', price: 0, priceCurrency: 'USD' },
license: 'https://www.gnu.org/licenses/old-licenses/gpl-2.0.html',
author: {
'@type': 'Person',
@@ -31,4 +35,4 @@ export default {
],
},
],
};
});
+19
View File
@@ -446,6 +446,20 @@ so the content element keeps its layout. */
background-color: white;
color: #444;
}
.download-facts {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 6px 20px;
margin: 24px 30px 0;
padding: 0;
list-style: none;
font-size: 0.9em;
color: #555;
}
.download-facts a {
color: inherit;
}
.official-sources {
max-width: 560px;
margin: 30px 30px 0;
@@ -525,7 +539,12 @@ h2 {
font-size: 1.17em;
font-weight: bold;
}
.faq-question {
margin-bottom: 0;
max-width: 800px;
}
.faq-answer {
max-width: 800px;
font-size: 85%;
color: rgba(255, 255, 255, 0.8);
}