obs-studio/obs
jp9000 54a3e6696f UI: Add recording presets to simple output
So certain high-profile individuals were complaining that it was
difficult to configure recording settings for quality in OBS.  So, I
decided to add a very easy-to-use auto-configuration for high quality
encoding -- including lossless encoding.  This feature will
automatically configure ideal recording settings based upon a specified
quality level.

Recording quality presets added to simple output:

- Same as stream: Copies the encoded streaming data with no extra usage
  hit.

- High quality: uses a higher CRF value (starting at 23) if using x264.

- Indistinguishable quality: uses a low CRF value (starting at 16) if
  using x264.

- Lossless will spawn an FFmpeg output that uses huffyuv encoding.  If a
  user tries to select lossless, they will be warned both via a dialog
  prompt and a warning message in the settings window to ensure they
  understand that it requires tremendous amounts of free space.  It will
  always use the AVI file format.

Extra Notes:

- When High/Indistinguishable quality is set, it will allow you to
  select the recording encoder.  Currently, it just allows you to select
  x264 (at either veryfast or ultrafast).  Later on, it'll be useful to
  be able to set up pre-configured presets for hardware encoders once
  more are implemented and tested.

- I decided to allow the use of x264 at both veryfast or ultrafast
  presets.  The reasoning is two-fold:

  1.) ultrafast is perfectly viable even for near indistinguishable
quality as long as it has the appropriate CRF value.  It's nice if you
want to record but would like to or need to reduce the impact of
encoding on the CPU.  It will automatically compensate for the preset at
the cost of larger file size.

  2.) It was suggested to just always use ultrafast, but ultrafast
requires 2-4x as much disk space for the same CRF (most likely due to
x264 compensating for the preset).  Providing veryfast is important if
you really want to reduce file size and/or reduce blocking at lower
quality levels.

- When a recording preset is used, a secondary audio encoder is also
  spawned at 192 bitrate to ensure high quality audio.  I chose 192
  because that's the limit of the media foundation aac encoder on
  windows, which I want to make sure is used if available due to its
  high performance.

- The CRF calculation is based upon resolution, quality, and whether
  it's set to ultrafast.  First, quality sets the base CRF, 23 for
  "good" quality, 16 for "very high" quality.  If set to ultrafast,
  it'll subtract 2 points from the CRF value to help compensate.  Lower
  resolutions will also lower the CRF value to help improve higher
  details with a smaller pixel ratio.
2015-09-19 17:04:22 -07:00
..
data UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
dist Add .desktop file for obs on linux 2014-08-05 21:15:31 +02:00
forms UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
CMakeLists.txt UI: Refactor OBSQTDisplay for windowless context 2015-08-05 01:07:11 -07:00
adv-audio-control.cpp UI: Fix rounding issues for advanced audio 2015-02-17 21:44:32 +01:00
adv-audio-control.hpp UI: Use grid layout for advanced audio properties 2015-02-11 08:02:56 -08:00
audio-encoders.cpp UI: Make bitrate map sample rate aware 2015-08-10 16:35:05 +02:00
audio-encoders.hpp UI: Add (AAC) audio encoder inspection helpers 2015-07-04 13:30:13 +02:00
crash-report.cpp UI: Add crash report dialog 2015-01-03 02:37:21 -08:00
crash-report.hpp UI: Add crash report dialog 2015-01-03 02:37:21 -08:00
display-helpers.hpp Ensure sizes passed to OBS are actual pixel sizes 2014-04-16 22:39:05 +02:00
double-slider.cpp UI: Fix DoubleSlider behavior for OBS_NUMBER_SLIDER properties 2015-07-01 08:22:04 +02:00
double-slider.hpp UI: Add #pragma once to double slider widget 2015-03-25 14:14:40 -07:00
focus-list.cpp UI: Add QListWidget subclass to emit focus change 2015-03-25 14:11:59 -07:00
focus-list.hpp UI: Add QListWidget subclass to emit focus change 2015-03-25 14:11:59 -07:00
hotkey-edit.cpp UI: Handle empty key combos from QEvents in hotkey dialog 2015-05-15 17:08:25 +02:00
hotkey-edit.hpp UI: Add OBSHotkey{Edit,Label,Widget} 2015-05-11 20:45:27 +02:00
item-widget-helpers.cpp UI: Do not delete via takeItem in ClearListItems 2015-07-02 22:07:39 -07:00
item-widget-helpers.hpp UI: Add item widget helper functions 2015-07-02 17:56:03 -07:00
mute-checkbox.hpp UI: Add 'mute' checkbox style hint 2015-03-25 10:03:24 -07:00
obs-app.cpp UI: Move reconnect options to advanced settings 2015-09-10 21:54:11 -07:00
obs-app.hpp UI: Add basic profiler integration 2015-08-12 15:30:28 +02:00
obs.rc UI: Add windows exe icon 2015-04-10 07:27:37 -07:00
platform-osx.mm Move config values from the commandline to obsconfig.h 2014-07-26 14:07:14 +02:00
platform-windows.cpp UI: Use get_win_ver (not GetVersionEx) 2015-08-01 14:51:23 -07:00
platform-x11.cpp UI: Fix bug with xinerama on linux 2014-12-22 01:12:58 +01:00
platform.hpp UI: Add funcs to get windows ver. and disable aero 2015-06-02 17:02:54 -07:00
properties-view.cpp UI: Toggle password "Show" button text when clicked 2015-07-06 13:38:57 +02:00
properties-view.hpp UI: Add editable list property to properties view 2015-06-02 17:01:39 -07:00
qt-display.cpp UI: Refactor OBSQTDisplay for windowless context 2015-08-05 01:07:11 -07:00
qt-display.hpp UI: Refactor OBSQTDisplay for windowless context 2015-08-05 01:07:11 -07:00
qt-wrappers.cpp UI: Enable drag&drop reordering for scenes 2015-06-28 05:09:45 +02:00
qt-wrappers.hpp UI: Enable drag&drop reordering for scenes 2015-06-28 05:09:45 +02:00
remote-text.cpp UI: Add RemoteTextThread class 2015-05-24 16:20:12 -07:00
remote-text.hpp UI: Add RemoteTextThread class 2015-05-24 16:20:12 -07:00
slider-absoluteset-style.cpp UI: Add SliderAbsoluteSetStyle class 2015-04-11 07:13:30 -07:00
slider-absoluteset-style.hpp UI: Add SliderAbsoluteSetStyle class 2015-04-11 07:13:30 -07:00
source-label.cpp UI: Add OBSSourceLabel 2015-05-11 20:45:27 +02:00
source-label.hpp UI: Add OBSSourceLabel 2015-05-11 20:45:27 +02:00
source-list-widget.cpp UI: Add drag&drop reordering for the sources list 2015-06-28 05:09:45 +02:00
source-list-widget.hpp UI: Add drag&drop reordering for the sources list 2015-06-28 05:09:45 +02:00
sparkle-updater.mm sparkle-updater: Enable delta update failure fallback 2014-11-01 03:06:26 +01:00
vertical-scroll-area.cpp UI: Fix property scroll area widget not resizing 2015-01-03 07:31:51 -08:00
vertical-scroll-area.hpp UI: Always hide VScrollArea horizontal scroll bar 2015-01-03 07:32:04 -08:00
visibility-checkbox.cpp UI: Add 'visibility' checkbox 2015-03-25 10:03:23 -07:00
visibility-checkbox.hpp UI: Add 'visibility' checkbox 2015-03-25 10:03:23 -07:00
visibility-item-widget.cpp UI: Fix vis. item widget appearance on linux 2015-05-01 03:55:21 -07:00
visibility-item-widget.hpp UI: Add list item widget w/ visibility checkbox 2015-03-25 14:11:58 -07:00
volume-control.cpp UI: Add optional config button to volume controls 2015-06-25 15:55:29 -07:00
volume-control.hpp UI: Add optional config button to volume controls 2015-06-25 15:55:29 -07:00
window-basic-adv-audio.cpp UI: Save project only on new changes 2015-07-02 18:08:55 -07:00
window-basic-adv-audio.hpp UI: Fix crash in advanced audio settings 2015-02-13 13:11:15 +01:00
window-basic-filters.cpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-basic-filters.hpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-basic-interaction.cpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-basic-interaction.hpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-basic-main-outputs.cpp UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
window-basic-main-outputs.hpp UI: Implement stream delay 2015-09-10 12:13:40 -07:00
window-basic-main-profiles.cpp UI: Use saving functions for profiles/scenes 2015-08-21 18:22:25 -07:00
window-basic-main-scene-collections.cpp UI: Use empty scene for new scene collection 2015-09-11 21:51:09 -07:00
window-basic-main.cpp UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
window-basic-main.hpp UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
window-basic-preview.cpp UI: Allow right-clicking to select preview items 2015-04-10 07:27:32 -07:00
window-basic-preview.hpp (API Change) Remove pointers from all typedefs 2014-09-25 21:48:11 -07:00
window-basic-properties.cpp UI: Use a default size for the properties window 2015-09-07 18:40:06 -07:00
window-basic-properties.hpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-basic-settings.cpp UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
window-basic-settings.hpp UI: Add recording presets to simple output 2015-09-19 17:04:22 -07:00
window-basic-source-select.cpp UI: Add basic hotkey integration 2015-05-11 20:45:26 +02:00
window-basic-source-select.hpp (API Change) Remove pointers from all typedefs 2014-09-25 21:48:11 -07:00
window-basic-status-bar.cpp UI: Clear reconnect timeout if reconnect canceled 2015-09-11 08:23:03 -07:00
window-basic-status-bar.hpp UI: Implement stream delay 2015-09-10 12:13:40 -07:00
window-basic-transform.cpp UI: Add basic hotkey integration 2015-05-11 20:45:26 +02:00
window-basic-transform.hpp (API Change) Remove pointers from all typedefs 2014-09-25 21:48:11 -07:00
window-license-agreement.cpp Add license agreement dialog 2014-07-13 11:40:47 -07:00
window-license-agreement.hpp Add license agreement dialog 2014-07-13 11:40:47 -07:00
window-log-reply.cpp UI: Add basic hotkey integration 2015-05-11 20:45:26 +02:00
window-log-reply.hpp Add help menu with log file uploading 2014-05-18 17:44:10 -07:00
window-main.hpp UI: Add Profiles 2015-07-03 18:35:30 -07:00
window-namedialog.cpp UI: Remove whitespace when asking for a name 2015-07-02 17:18:45 -07:00
window-namedialog.hpp Auto suggest scene and source names. 2014-05-12 15:01:51 -04:00
window-projector.cpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-projector.hpp UI: Prune obs_display code from secondary windows 2015-08-05 01:07:13 -07:00
window-remux.cpp UI: Add basic hotkey integration 2015-05-11 20:45:26 +02:00
window-remux.hpp Add UI for remuxing recordings via FFmpeg 2014-10-12 19:56:52 +02:00