# FastDub
Package for voice over subtitles:
* with the ability to embed in video,
* audio ducking,
* dynamic voice changer for a single track. _Add **--voice-set-anchor** at the beginning of the subtitle line. (Applies
to
all
subsequent ones)_
> pip install -U [FastDub](https://pypi.org/project/FastDub/)
---
# Install for Ubuntu
> sudo apt update -y && sudo apt upgrade -y
>
> sudo apt install python3 python3-pip ffmpeg [espeak](http://espeak.sourceforge.net/data/) libxml2-dev libxslt1-dev
>
> ; libxml for translator functions
>
> sudo python3 -m pip install -U pip setuptools wheel
>
> sudo python3 -m pip install -U [FastDub](https://pypi.org/project/FastDub/)
# Install all dependencies
> pip install FastDub[ALL] # default
# Youtube support
## Youtube argument group
> pip install FastDub[YT]
### Process all videos from a channel
_To get the channel id if it only has a username, run the JS code in the browser console:_
```javascript
document.querySelector("body>link").href
```
**Then, in the input parameter,
you can pass a link to the channel (with an id, not with a username) or a string of the format "c/CHANNEL_ID"**
_For example:_
> python -m fastdub -i "c/[UCi-5OZ2tYuwMLIcEyOsbdRA](https://www.youtube.com/channel/UCi-5OZ2tYuwMLIcEyOsbdRA)" -yt
## YouTube Search argument group
That the input data was a request to YouTube, they must begin with "?".
_For Example:_
> python -m fastdub -i "?#python" -yt -yts-l 5
## YouTube Upload argument group
> pip install FastDub[YTU]
To download, you need to go to [credentials](https://console.cloud.google.com/apis/credentials) (Create a new project if
needed) > <kbd>+ Create credentials</kbd> > <kbd>OAuth Client ID</kbd> > <kbd>Desktop App</kbd>
After filling in the required fields, <kbd>DOWNLOAD JSON</kbd> format and save to a working folder under the name
_client_secrets.json_
* Specifying the -ytu-ps argument as non-private may result in processing errors, but this was not observed during
testing.
* Please note that video uploads require a large amount of [quota](https://console.cloud.google.com/iam-admin/quotas) (
default has 10,000 per day)
# Subtitles translate
### Translate argument group
> pip install FastDub[TR]
# Usage
> python -m fastdub --help
```
usage: fastdub [-h] [-rc {0,1,2}] [-ra | --cleanup-audio | -n-ra | --no-cleanup-audio] [-ev | --export-video | -n-ev | --no-export-video]
[-l LANGUAGE] [-ll {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}] [-tc THREADS_COUNT] -i INPUT [-vf VIDEO_FORMAT]
[-sf SUBTITLES_FORMAT] [-En EXCLUDE [EXCLUDE ...]] [-Eu EXCLUDE_UNDERSCORE] [-sc | --sidechain | -n-sc | --no-sidechain]
[-sc-args SIDECHAIN_FFMPEG_PARAMS] [-sc-lvl SIDECHAIN_LEVEL_SC]
[-v {...}]
[-a ALIGN] [-v-set-a VOICE_SET_ANCHOR] [-fll {trace,debug,verbose,info,warning,error,fatal,panic,quiet}]
[-y | --confirm | -n-y | --no-confirm] [-af AUDIO_FORMAT] [-wm WATERMARK] [-tb | --traceback | -n-tb | --no-traceback] [-yt]
[-ak API_KEYS [API_KEYS ...]] [-yts] [-yts-l YOUTUBE_SEARCH_LIMIT] [-yts-rg YOUTUBE_SEARCH_REGION] [-ytu]
[-ytu-ps {private,public,unlisted}] [-ytu-t] [-tr] [--rewrite-srt | --no-rewrite-srt]
[-ts {...}]
fastdub is a tool for dubbing videos by subtitle files.
optional arguments:
-h, --help show this help message and exit
-rc {0,1,2}, --remove-cache {0,1,2}
Remove all cache (_cached_texts directory) files
0 - No remove cache
1 - Delete cache before voice acting
2 - Delete cache after voice acting (default)
-ra, --cleanup-audio, -n-ra, --no-cleanup-audio
Remove result audio if video exists (default True) (default: True)
-ev, --export-video, -n-ev, --no-export-video
-l LANGUAGE, --language LANGUAGE
Subtitles language (ru)
-ll {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}, --loglevel {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}
Program log level
-tc THREADS_COUNT, --threads-count THREADS_COUNT
Process count to download (pass to cpu count, < 2 to disable)
*N = N * cpu count
Input:
-i INPUT, --input INPUT
Input directory/YouTube Playlist/Video URL.
-vf VIDEO_FORMAT, --video-format VIDEO_FORMAT
Video format (default: .mp4).
-sf SUBTITLES_FORMAT, --subtitles-format SUBTITLES_FORMAT
Subtitles format (default: .srt).
Input Exclude:
-En EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...]
Exclude <name> (glob)
-Eu EXCLUDE_UNDERSCORE, --exclude-underscore EXCLUDE_UNDERSCORE
Exclude files starts with underscore
Audio Ducking:
-sc, --sidechain, -n-sc, --no-sidechain
Enable audio side chain compress (ducking) (default: True)
-sc-args SIDECHAIN_FFMPEG_PARAMS, --sidechain-ffmpeg-params SIDECHAIN_FFMPEG_PARAMS
sidechain FFmpeg parameters (default '')
-sc-lvl SIDECHAIN_LEVEL_SC, --sidechain-level-sc SIDECHAIN_LEVEL_SC
Set sidechain gain. Range is between 0.015625 and 64. (default 0.8)
Voicer:
-v {...}, --voice {...}
SAPI voice for voice acting.
-a ALIGN, --align ALIGN
Audio fit align (divisor)
1 = right
2 = center (default)
-v-set-a VOICE_SET_ANCHOR, --voice-set-anchor VOICE_SET_ANCHOR
Anchor indicating voice actor change (default "!:")
FFmpeg Output:
-fll {trace,debug,verbose,info,warning,error,fatal,panic,quiet}, --ffmpeg-loglevel {trace,debug,verbose,info,warning,error,fatal,panic,quiet}
FFmpegWrapper loglevel
-y, --confirm, -n-y, --no-confirm
Don't ask for confirmation (default: True)
-af AUDIO_FORMAT, --audio-format AUDIO_FORMAT
Out audio files format (default wav)
-wm WATERMARK, --watermark WATERMARK
Add watermark to output video
Terminal Output:
-tb, --traceback, -n-tb, --no-traceback
Show debug traceback (default: False)
YouTube:
-yt, --youtube
-ak API_KEYS [API_KEYS ...], --api-keys API_KEYS [API_KEYS ...]
Youtube API key/s
YouTube Search:
-yts, --youtube-search
The input data is a query for searching on YouTube. (Adds "?" at the start of input)
-yts-l YOUTUBE_SEARCH_LIMIT, --youtube-search-limit YOUTUBE_SEARCH_LIMIT
Sets limit to the number of results. Defaults to 20.
-yts-rg YOUTUBE_SEARCH_REGION, --youtube-search-region YOUTUBE_SEARCH_REGION
Sets the result region. Defaults to "US".
YouTube Upload:
-ytu, --youtube-upload
yt_upload video to YouTube channel after voice acting.
-ytu-ps {private,public,unlisted}, --privacy-status {private,public,unlisted}
Video privacy status (If not private, errors are possible)
-ytu-t, --youtube-upload-translate
Translate title and description on upload. (+ Arguments from translate argument group)
Translate:
-tr, --translate Translate input subtitles files
--rewrite-srt, --no-rewrite-srt
Rewrite input subtitles files.
If not, add "_" to the beginning of the original subtitle file. (default: False)
-ts {...}, --translate-service {...}
Subtitle translation service. (default google)
```
**If the voice set after "!:" is not selected during voiceover, clear the cache with the -rc argument**
## Example
> python -m fastdub -i DirToDub -v "[Yuriy](https://rhvoice.su/downloads/?voice=yuriy&type=sapi)" --no-sidechain -sf vtt
> -vf mkv
All files in the folder will be voices (*.mkv, *.vtt)
Default is mp4 video and srt subtitles.
Then:
_name and name2 will be announced, and the results will be saved to a folder with the appropriate name._
## YT Example
> python -m fastdub **-yt** -i https://youtu.be/DD5UKQggXTc
> -v "[Yuriy](https://rhvoice.su/downloads/?voice=yuriy&type=sapi)"
> -l ru
### YouTube Search Example
> python -m fastdub -yt **-yts** -i "#annoyingorange" -l ru
## Translate Example
> python -m fastdub -i DirToDub -tr **-ts iciba** _-l [ru](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)_
Default service is Google.
## Other
### The `fastdub.utils` module stores helper functions.
### You can write your issues on [GitHub](https://github.com/NIKDISSV-Forever/fastdub/issues) in English or in Russian.
---
# CHANGELOG
# 3.8.0
## General
- `changelog` has been translated into English.
- Added `logging.error`
## FFmpeg Wrapper
- `ffmpeg_wrapper` module objects renamed according to PEP-8
(`FFMpeg` to `FFmpeg`)
## Translator
- `translator.get_service_by_name` is now a valid function even if required dependencies are not installed, in which
case if call it will raise `KeyError`
## YouTube
- dependency `pafy` added to `extra_requires/requires_yt.txt`
# 3.7.0
## General
- **Changed minimum supported Python version from 3.8 to 3.9**
## CLI
- Fixed bug with `logging.getLevelNamesMapping()` in `__main__.py`
# 3.6.0
## General
- Package `logging` used
- Bugfix
- optimization
## Audio Processing
- `sidechain` is now much faster using `ffmpeg`
## FFmpeg Wrapper
- The `ffmpeg-imageio` library is no longer used, instead the `ffmpeg` command is always called
## CLI
- Argument `--sidechain-ffmpeg-params` see [FFmpeg Documentation](https://ffmpeg.org/ffmpeg-all.html#sidechaincompress)
- Separate `--sidechain-level-sc` see `level_sc` higher.
- `-ll` is now program loglevel and ffmpeg loglevel is now `-fll`
# 3.5.2
## Translator
- Now it will not cause an error in the absence of the Internet.
## Subtitles
- Fixed possible .srt format differences (now `.` is allowed instead of `,`)
# 3.5.1
## Subtitles
- Fixed possible problems with different encodings (added `chardet` module)
# 3.5.0
## Voiceover Process
- Added argument `--export-video` (`-ev`): `BooleanOptionalAction` if `False` (`--no-export-video`, `-n-ev`)
only exports audio
# 3.4.2
- Minor improvements and optimizations.
## Subtitles
- The `TimeLabel` class is no longer a subclass of `Line`
# 3.4.1
- Fixed documentation
# 3.4.0
## General
- Added the ability to apply a watermark to the video (see the `--watermark` argument)
## CLI
- Bugfix
- The `--watermark` argument. The text of the watermark is passed to it.
- Now, when launched from the console, the FastDub mini-banner is shown.
## Voiceover Process
- Bugfix
- Now fitted audio (which starts with '_') is always deleted as it's a temporary file
## FFmpeg Wrapper
- Added class method `FFmpegWrapper.get_video_duration_s`
which is used in `FFmpegWrapper.get_video_duration_ms`
- The video result includes: dubbed audio, original audio, subtitles, original subtitles (if any)
## Submodules
### Translator
- The latest version of the translators module is now used
# 3.3.0
## General
- Implemented class `GlobalSettings`
## Audio Processing
- The `calc_speed_change_ffmpeg_arg` function for calculating the `-af` ffmpeg argument
for speed change has been changed.
- Significantly accelerated using a different algorithm.
- Optimized `side_chain` function.
## Voiceover Process
- Audio length trimming and TTS are now combined into one process to increase performance.
- Now a subfolder `_result_working_dir` is created in which separate already fitted subtitle lines are saved, after
which all parts are glued together with ffmpeg.
Due to this, memory consumption is significantly reduced.
- `moviepy` is no longer a dependency, ffmpeg output is parsed instead
## FFmpeg Wrapper
- Now all arguments are converted to strings before calling `check_call`
# 3.2.0
## CLI
- Omitted optional `type=str` arguments.
- Changed `BooleanOptionalAction` logic, both `--no-` and `-n-` negation are now available.
- The `--cleanup-audio` argument is now `BooleanOptionalAction` (default `True`), `--cleanup-level` has been removed.
- Argument `--voice-set-anchor` (also `!:` by default).
- `--audio-format` argument for output audio (default `wav`).
- The `--sidechain` argument has been renamed to `--side-chain`.
- Added shorthand to `--traceback` argument - `-tb`.
## Voiceover Process
- Bugfix.
- Optimization of track length fitting (Fitting).
## TTS
- `anchor` argument (see `--voice-set-anchor`).
- Voice change optimization.
## Submodules
### YouTube
- When multi-loading, fully loaded videos are removed from the screen (so as not to take up space in vain).
Raw data
{
"_id": null,
"home_page": "",
"name": "FastDub",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "",
"keywords": "dubbing,voicing,fastdub,JustDub,SpeedDub,offline,free,easiest,subtitles,videos,veed,fast",
"author": "Nikita (NIKDISSV)",
"author_email": "nikdissv@proton.me",
"download_url": "https://files.pythonhosted.org/packages/f9/6b/734b8a48e4e4694c65e34c25960d635b436e761c501f81469116b831cc8c/FastDub-3.8.0.tar.gz",
"platform": null,
"description": "# FastDub\r\n\r\nPackage for voice over subtitles:\r\n\r\n* with the ability to embed in video,\r\n* audio ducking,\r\n* dynamic voice changer for a single track. _Add **--voice-set-anchor** at the beginning of the subtitle line. (Applies\r\n to\r\n all\r\n subsequent ones)_\r\n\r\n> pip install -U [FastDub](https://pypi.org/project/FastDub/)\r\n\r\n---\r\n\r\n# Install for Ubuntu\r\n\r\n> sudo apt update -y && sudo apt upgrade -y\r\n>\r\n> sudo apt install python3 python3-pip ffmpeg [espeak](http://espeak.sourceforge.net/data/) libxml2-dev libxslt1-dev\r\n>\r\n> ; libxml for translator functions\r\n>\r\n> sudo python3 -m pip install -U pip setuptools wheel\r\n>\r\n> sudo python3 -m pip install -U [FastDub](https://pypi.org/project/FastDub/)\r\n\r\n# Install all dependencies\r\n\r\n> pip install FastDub[ALL] # default\r\n\r\n# Youtube support\r\n\r\n## Youtube argument group\r\n\r\n> pip install FastDub[YT]\r\n\r\n### Process all videos from a channel\r\n\r\n_To get the channel id if it only has a username, run the JS code in the browser console:_\r\n\r\n```javascript\r\ndocument.querySelector(\"body>link\").href\r\n```\r\n\r\n**Then, in the input parameter,\r\nyou can pass a link to the channel (with an id, not with a username) or a string of the format \"c/CHANNEL_ID\"**\r\n\r\n_For example:_\r\n\r\n> python -m fastdub -i \"c/[UCi-5OZ2tYuwMLIcEyOsbdRA](https://www.youtube.com/channel/UCi-5OZ2tYuwMLIcEyOsbdRA)\" -yt\r\n\r\n## YouTube Search argument group\r\n\r\nThat the input data was a request to YouTube, they must begin with \"?\".\r\n\r\n_For Example:_\r\n\r\n> python -m fastdub -i \"?#python\" -yt -yts-l 5\r\n\r\n## YouTube Upload argument group\r\n\r\n> pip install FastDub[YTU]\r\n\r\nTo download, you need to go to [credentials](https://console.cloud.google.com/apis/credentials) (Create a new project if\r\nneeded) > <kbd>+ Create credentials</kbd> > <kbd>OAuth Client ID</kbd> > <kbd>Desktop App</kbd>\r\n\r\nAfter filling in the required fields, <kbd>DOWNLOAD JSON</kbd> format and save to a working folder under the name\r\n_client_secrets.json_\r\n\r\n* Specifying the -ytu-ps argument as non-private may result in processing errors, but this was not observed during\r\n testing.\r\n\r\n* Please note that video uploads require a large amount of [quota](https://console.cloud.google.com/iam-admin/quotas) (\r\n default has 10,000 per day)\r\n\r\n# Subtitles translate\r\n\r\n### Translate argument group\r\n\r\n> pip install FastDub[TR]\r\n\r\n# Usage\r\n\r\n> python -m fastdub --help\r\n\r\n```\r\nusage: fastdub [-h] [-rc {0,1,2}] [-ra | --cleanup-audio | -n-ra | --no-cleanup-audio] [-ev | --export-video | -n-ev | --no-export-video]\r\n [-l LANGUAGE] [-ll {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}] [-tc THREADS_COUNT] -i INPUT [-vf VIDEO_FORMAT]\r\n [-sf SUBTITLES_FORMAT] [-En EXCLUDE [EXCLUDE ...]] [-Eu EXCLUDE_UNDERSCORE] [-sc | --sidechain | -n-sc | --no-sidechain]\r\n [-sc-args SIDECHAIN_FFMPEG_PARAMS] [-sc-lvl SIDECHAIN_LEVEL_SC]\r\n [-v {...}]\r\n [-a ALIGN] [-v-set-a VOICE_SET_ANCHOR] [-fll {trace,debug,verbose,info,warning,error,fatal,panic,quiet}]\r\n [-y | --confirm | -n-y | --no-confirm] [-af AUDIO_FORMAT] [-wm WATERMARK] [-tb | --traceback | -n-tb | --no-traceback] [-yt] \r\n [-ak API_KEYS [API_KEYS ...]] [-yts] [-yts-l YOUTUBE_SEARCH_LIMIT] [-yts-rg YOUTUBE_SEARCH_REGION] [-ytu]\r\n [-ytu-ps {private,public,unlisted}] [-ytu-t] [-tr] [--rewrite-srt | --no-rewrite-srt]\r\n [-ts {...}]\r\n\r\nfastdub is a tool for dubbing videos by subtitle files.\r\n\r\noptional arguments:\r\n -h, --help show this help message and exit\r\n -rc {0,1,2}, --remove-cache {0,1,2}\r\n Remove all cache (_cached_texts directory) files\r\n 0 - No remove cache\r\n 1 - Delete cache before voice acting\r\n 2 - Delete cache after voice acting (default)\r\n -ra, --cleanup-audio, -n-ra, --no-cleanup-audio\r\n Remove result audio if video exists (default True) (default: True)\r\n -ev, --export-video, -n-ev, --no-export-video\r\n -l LANGUAGE, --language LANGUAGE\r\n Subtitles language (ru)\r\n -ll {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}, --loglevel {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}\r\n Program log level\r\n -tc THREADS_COUNT, --threads-count THREADS_COUNT\r\n Process count to download (pass to cpu count, < 2 to disable)\r\n *N = N * cpu count\r\n\r\nInput:\r\n -i INPUT, --input INPUT\r\n Input directory/YouTube Playlist/Video URL.\r\n -vf VIDEO_FORMAT, --video-format VIDEO_FORMAT\r\n Video format (default: .mp4).\r\n -sf SUBTITLES_FORMAT, --subtitles-format SUBTITLES_FORMAT\r\n Subtitles format (default: .srt).\r\n\r\nInput Exclude:\r\n -En EXCLUDE [EXCLUDE ...], --exclude EXCLUDE [EXCLUDE ...]\r\n Exclude <name> (glob)\r\n -Eu EXCLUDE_UNDERSCORE, --exclude-underscore EXCLUDE_UNDERSCORE\r\n Exclude files starts with underscore\r\n\r\nAudio Ducking:\r\n -sc, --sidechain, -n-sc, --no-sidechain\r\n Enable audio side chain compress (ducking) (default: True)\r\n -sc-args SIDECHAIN_FFMPEG_PARAMS, --sidechain-ffmpeg-params SIDECHAIN_FFMPEG_PARAMS\r\n sidechain FFmpeg parameters (default '')\r\n -sc-lvl SIDECHAIN_LEVEL_SC, --sidechain-level-sc SIDECHAIN_LEVEL_SC\r\n Set sidechain gain. Range is between 0.015625 and 64. (default 0.8)\r\n\r\nVoicer:\r\n -v {...}, --voice {...}\r\n SAPI voice for voice acting.\r\n -a ALIGN, --align ALIGN\r\n Audio fit align (divisor)\r\n 1 = right\r\n 2 = center (default)\r\n -v-set-a VOICE_SET_ANCHOR, --voice-set-anchor VOICE_SET_ANCHOR\r\n Anchor indicating voice actor change (default \"!:\")\r\n\r\nFFmpeg Output:\r\n -fll {trace,debug,verbose,info,warning,error,fatal,panic,quiet}, --ffmpeg-loglevel {trace,debug,verbose,info,warning,error,fatal,panic,quiet} \r\n FFmpegWrapper loglevel\r\n -y, --confirm, -n-y, --no-confirm\r\n Don't ask for confirmation (default: True)\r\n -af AUDIO_FORMAT, --audio-format AUDIO_FORMAT\r\n Out audio files format (default wav)\r\n -wm WATERMARK, --watermark WATERMARK\r\n Add watermark to output video\r\n\r\nTerminal Output:\r\n -tb, --traceback, -n-tb, --no-traceback\r\n Show debug traceback (default: False)\r\n\r\nYouTube:\r\n -yt, --youtube\r\n -ak API_KEYS [API_KEYS ...], --api-keys API_KEYS [API_KEYS ...]\r\n Youtube API key/s\r\n\r\nYouTube Search:\r\n -yts, --youtube-search\r\n The input data is a query for searching on YouTube. (Adds \"?\" at the start of input)\r\n -yts-l YOUTUBE_SEARCH_LIMIT, --youtube-search-limit YOUTUBE_SEARCH_LIMIT\r\n Sets limit to the number of results. Defaults to 20.\r\n -yts-rg YOUTUBE_SEARCH_REGION, --youtube-search-region YOUTUBE_SEARCH_REGION\r\n Sets the result region. Defaults to \"US\".\r\n\r\nYouTube Upload:\r\n -ytu, --youtube-upload\r\n yt_upload video to YouTube channel after voice acting.\r\n -ytu-ps {private,public,unlisted}, --privacy-status {private,public,unlisted}\r\n Video privacy status (If not private, errors are possible)\r\n -ytu-t, --youtube-upload-translate\r\n Translate title and description on upload. (+ Arguments from translate argument group)\r\n\r\nTranslate:\r\n -tr, --translate Translate input subtitles files\r\n --rewrite-srt, --no-rewrite-srt\r\n Rewrite input subtitles files.\r\n If not, add \"_\" to the beginning of the original subtitle file. (default: False)\r\n -ts {...}, --translate-service {...}\r\n Subtitle translation service. (default google)\r\n```\r\n\r\n**If the voice set after \"!:\" is not selected during voiceover, clear the cache with the -rc argument**\r\n\r\n## Example\r\n\r\n> python -m fastdub -i DirToDub -v \"[Yuriy](https://rhvoice.su/downloads/?voice=yuriy&type=sapi)\" --no-sidechain -sf vtt\r\n> -vf mkv\r\n\r\nAll files in the folder will be voices (*.mkv, *.vtt)\r\n\r\nDefault is mp4 video and srt subtitles.\r\n\r\nThen:\r\n_name and name2 will be announced, and the results will be saved to a folder with the appropriate name._\r\n\r\n## YT Example\r\n\r\n> python -m fastdub **-yt** -i https://youtu.be/DD5UKQggXTc\r\n> -v \"[Yuriy](https://rhvoice.su/downloads/?voice=yuriy&type=sapi)\"\r\n> -l ru\r\n\r\n### YouTube Search Example\r\n\r\n> python -m fastdub -yt **-yts** -i \"#annoyingorange\" -l ru\r\n\r\n## Translate Example\r\n\r\n> python -m fastdub -i DirToDub -tr **-ts iciba** _-l [ru](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)_\r\n\r\nDefault service is Google.\r\n\r\n## Other\r\n\r\n### The `fastdub.utils` module stores helper functions.\r\n\r\n### You can write your issues on [GitHub](https://github.com/NIKDISSV-Forever/fastdub/issues) in English or in Russian.\r\n\r\n---\r\n\r\n# CHANGELOG\r\n\r\n# 3.8.0\r\n\r\n## General\r\n\r\n- `changelog` has been translated into English.\r\n- Added `logging.error`\r\n\r\n## FFmpeg Wrapper\r\n\r\n- `ffmpeg_wrapper` module objects renamed according to PEP-8\r\n (`FFMpeg` to `FFmpeg`)\r\n\r\n## Translator\r\n\r\n- `translator.get_service_by_name` is now a valid function even if required dependencies are not installed, in which\r\n case if call it will raise `KeyError`\r\n\r\n## YouTube\r\n\r\n- dependency `pafy` added to `extra_requires/requires_yt.txt`\r\n\r\n# 3.7.0\r\n\r\n## General\r\n\r\n- **Changed minimum supported Python version from 3.8 to 3.9**\r\n\r\n## CLI\r\n\r\n- Fixed bug with `logging.getLevelNamesMapping()` in `__main__.py`\r\n\r\n# 3.6.0\r\n\r\n## General\r\n\r\n- Package `logging` used\r\n- Bugfix\r\n- optimization\r\n\r\n## Audio Processing\r\n\r\n- `sidechain` is now much faster using `ffmpeg`\r\n\r\n## FFmpeg Wrapper\r\n\r\n- The `ffmpeg-imageio` library is no longer used, instead the `ffmpeg` command is always called\r\n\r\n## CLI\r\n\r\n- Argument `--sidechain-ffmpeg-params` see [FFmpeg Documentation](https://ffmpeg.org/ffmpeg-all.html#sidechaincompress)\r\n- Separate `--sidechain-level-sc` see `level_sc` higher.\r\n- `-ll` is now program loglevel and ffmpeg loglevel is now `-fll`\r\n\r\n# 3.5.2\r\n\r\n## Translator\r\n\r\n- Now it will not cause an error in the absence of the Internet.\r\n\r\n## Subtitles\r\n\r\n- Fixed possible .srt format differences (now `.` is allowed instead of `,`)\r\n\r\n# 3.5.1\r\n\r\n## Subtitles\r\n\r\n- Fixed possible problems with different encodings (added `chardet` module)\r\n\r\n# 3.5.0\r\n\r\n## Voiceover Process\r\n\r\n- Added argument `--export-video` (`-ev`): `BooleanOptionalAction` if `False` (`--no-export-video`, `-n-ev`)\r\n only exports audio\r\n\r\n# 3.4.2\r\n\r\n- Minor improvements and optimizations.\r\n\r\n## Subtitles\r\n\r\n- The `TimeLabel` class is no longer a subclass of `Line`\r\n\r\n# 3.4.1\r\n\r\n- Fixed documentation\r\n\r\n# 3.4.0\r\n\r\n## General\r\n\r\n- Added the ability to apply a watermark to the video (see the `--watermark` argument)\r\n\r\n## CLI\r\n\r\n- Bugfix\r\n- The `--watermark` argument. The text of the watermark is passed to it.\r\n- Now, when launched from the console, the FastDub mini-banner is shown.\r\n\r\n## Voiceover Process\r\n\r\n- Bugfix\r\n- Now fitted audio (which starts with '_') is always deleted as it's a temporary file\r\n\r\n## FFmpeg Wrapper\r\n\r\n- Added class method `FFmpegWrapper.get_video_duration_s`\r\n which is used in `FFmpegWrapper.get_video_duration_ms`\r\n- The video result includes: dubbed audio, original audio, subtitles, original subtitles (if any)\r\n\r\n## Submodules\r\n\r\n### Translator\r\n\r\n- The latest version of the translators module is now used\r\n\r\n# 3.3.0\r\n\r\n## General\r\n\r\n- Implemented class `GlobalSettings`\r\n\r\n## Audio Processing\r\n\r\n- The `calc_speed_change_ffmpeg_arg` function for calculating the `-af` ffmpeg argument\r\n for speed change has been changed.\r\n\r\n- Significantly accelerated using a different algorithm.\r\n\r\n- Optimized `side_chain` function.\r\n\r\n## Voiceover Process\r\n\r\n- Audio length trimming and TTS are now combined into one process to increase performance.\r\n- Now a subfolder `_result_working_dir` is created in which separate already fitted subtitle lines are saved, after\r\n which all parts are glued together with ffmpeg.\r\n Due to this, memory consumption is significantly reduced.\r\n- `moviepy` is no longer a dependency, ffmpeg output is parsed instead\r\n\r\n## FFmpeg Wrapper\r\n\r\n- Now all arguments are converted to strings before calling `check_call`\r\n\r\n# 3.2.0\r\n\r\n## CLI\r\n\r\n- Omitted optional `type=str` arguments.\r\n- Changed `BooleanOptionalAction` logic, both `--no-` and `-n-` negation are now available.\r\n- The `--cleanup-audio` argument is now `BooleanOptionalAction` (default `True`), `--cleanup-level` has been removed.\r\n- Argument `--voice-set-anchor` (also `!:` by default).\r\n- `--audio-format` argument for output audio (default `wav`).\r\n- The `--sidechain` argument has been renamed to `--side-chain`.\r\n- Added shorthand to `--traceback` argument - `-tb`.\r\n\r\n## Voiceover Process\r\n\r\n- Bugfix.\r\n- Optimization of track length fitting (Fitting).\r\n\r\n## TTS\r\n\r\n- `anchor` argument (see `--voice-set-anchor`).\r\n- Voice change optimization.\r\n\r\n## Submodules\r\n\r\n### YouTube\r\n\r\n- When multi-loading, fully loaded videos are removed from the screen (so as not to take up space in vain).\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Python CLI package for voice over subtitles, with the ability to embed in video, audio ducking, and dynamic voice changer for a single track; auto translating; download and upload to YouTube supports",
"version": "3.8.0",
"project_urls": {
"Download Voices": "https://rhvoice.su/voices",
"GitHub": "https://github.com/NIKDISSV-Forever/FastDub",
"YouTube": "https://www.youtube.com/channel/UC8JV3zPSVm9EKSWD1XdkQvw"
},
"split_keywords": [
"dubbing",
"voicing",
"fastdub",
"justdub",
"speeddub",
"offline",
"free",
"easiest",
"subtitles",
"videos",
"veed",
"fast"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7cb296249ef0c1dc42aa725f37d84c2dde9a271ba8511b03127fbb26c42846fe",
"md5": "e039631b67397f62afab13adeb2d8dd2",
"sha256": "682dac0184b7e87634e485c0b35dfcf7bd8c5d8c9aeb3de5821c280ccd0be4d1"
},
"downloads": -1,
"filename": "FastDub-3.8.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e039631b67397f62afab13adeb2d8dd2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 31361,
"upload_time": "2023-07-29T13:18:08",
"upload_time_iso_8601": "2023-07-29T13:18:08.575381Z",
"url": "https://files.pythonhosted.org/packages/7c/b2/96249ef0c1dc42aa725f37d84c2dde9a271ba8511b03127fbb26c42846fe/FastDub-3.8.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f96b734b8a48e4e4694c65e34c25960d635b436e761c501f81469116b831cc8c",
"md5": "ae5d2e244d80a4797e7e09a40fe0a144",
"sha256": "a47dec3c4b6acf2b1bad6fd9b837e2cbaa9b82df6233ac8f9b588d366ad38f83"
},
"downloads": -1,
"filename": "FastDub-3.8.0.tar.gz",
"has_sig": false,
"md5_digest": "ae5d2e244d80a4797e7e09a40fe0a144",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 23294,
"upload_time": "2023-07-29T13:18:09",
"upload_time_iso_8601": "2023-07-29T13:18:09.795450Z",
"url": "https://files.pythonhosted.org/packages/f9/6b/734b8a48e4e4694c65e34c25960d635b436e761c501f81469116b831cc8c/FastDub-3.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-29 13:18:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "NIKDISSV-Forever",
"github_project": "FastDub",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "fastdub"
}