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] [-tc THREADS_COUNT] -i INPUT [-vf VIDEO_FORMAT] [-sf SUBTITLES_FORMAT] [-En EXCLUDE [EXCLUDE ...]]
[-Eu EXCLUDE_UNDERSCORE] [-sc | --side-chain | -n-sc | --no-side-chain] [-sc-msl MIN_SILENCE_LEN] [-sc-st SILENCE_THRESH]
[-sc-gdo GAIN_DURING_OVERLAY]
[-v {microsoft irina desktop - russian,microsoft zira desktop - english united states),microsoft david desktop - english (united sta
tes,aleksandr-hq,arina,artemiy,evgeniy-eng,evgeniy-rus,lyubov,marianna,mikhail,pavel,tatiana,victoria,vitaliy,volodymyr,yuriy}]
[-a ALIGN] [-v-set-a VOICE_SET_ANCHOR] [-ll {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 {alibaba,argos,baidu,bing,caiyun,deepl,google,iciba,iflytek,itranslate,lingvanex,niutrans,mglip,papago,reverso,sogou,tencent,tr
anslateCom,utibet,yandex,youdao}]
fastdub is a tool for dubbing videos by subtitle files.
options:
-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)
-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, --side-chain, -n-sc, --no-side-chain
Enable audio side chain compress (ducking) (default: True)
-sc-msl MIN_SILENCE_LEN, --min-silence-len MIN_SILENCE_LEN, --attack MIN_SILENCE_LEN
Minimum silence length in ms (default: 100)
-sc-st SILENCE_THRESH, --silence-thresh SILENCE_THRESH
Silence threshold in dB
-sc-gdo GAIN_DURING_OVERLAY, --gain-during-overlay GAIN_DURING_OVERLAY
Gain during overlay in dB (default: -11)
Voicer:
-v {microsoft irina desktop - russian,microsoft zira desktop - english (united states),microsoft david desktop - english (united states),aleksand
r-hq,arina,artemiy,evgeniy-eng,evgeniy-rus,lyubov,marianna,mikhail,pavel,tatiana,victoria,vitaliy,volodymyr,yuriy}, --voice {microsoft irina deskto
p - russian,microsoft zira desktop - english (united states),microsoft david desktop - english (united states),aleksandr-hq,arina,artemiy,evgeniy-e
ng,evgeniy-rus,lyubov,marianna,mikhail,pavel,tatiana,victoria,vitaliy,volodymyr,yuriy}
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:
-ll {trace,debug,verbose,info,warning,error,fatal,panic,quiet}, --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)
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 {alibaba,argos,baidu,bing,caiyun,deepl,google,iciba,iflytek,itranslate,lingvanex,niutrans,mglip,papago,reverso,sogou,tencent,translateCom,uti
bet,yandex,youdao}, --translate-service {alibaba,argos,baidu,bing,caiyun,deepl,google,iciba,iflytek,itranslate,lingvanex,niutrans,mglip,papago,reve
rso,sogou,tencent,translateCom,utibet,yandex,youdao}
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.
### python -m pydoc -w fastdub
### You can write your issues on [GitHub](https://github.com/NIKDISSV-Forever/fastdub/issues) in English or in Russian.
# CHANGELOG
---
# 3.5.2
## Translator
- Теперь не вызовет ошибки при отсутствии интернета.
## Subtitles
- Исправлены возможные различия формата .srt (возможная `.` вместо `,`)
# 3.5.1
## Subtitles
- Исправлены возможные проблемы с разными кодировками (добавлен модуль `chardet`)
# 3.5.0
## Voiceover Process
- Добавлен аргумент `--export-video` (`-ev`): `BooleanOptionalAction`, если `False` (`--no-export-video`, `-n-ev`)
экспортирует только аудио
# 3.4.2
- Незначительные улучшения и оптимизации.
## Subtitles
- Класс `TimeLabel` теперь не является подклассом `Line`
# 3.4.1
- Исправлена документация
# 3.4.0
## General
- Добавлена возможность накладывания водяного знака на видео (см. аргумент `--watermark`)
## CLI
- Bugfix
- Аргумент `--watermark`. В него передаётся текст водяного знака.
- Теперь, при запуске с консоли, показывается мини-баннер FastDub.
## Voiceover Process
- Bugfix
- Теперь подогнанное аудио (которое начинается на '_') всегда удаляется, т.к это временный файл
## FFMpeg Wrapper
- Добавлен метод класса `FFMpegWrapper.get_video_duration_s`, который используется
в `FFMpegWrapper.get_video_duration_ms`
- В видео результат включаются: озвученное аудио, оригинальное аудио, субтитры, оригинальные субтитры (если есть)
## Submodules
### Translator
- Теперь используется последняя версия модула translators
# 3.3.0
## General
- Реализован класс `GlobalSettings`
## Audio Processing
- Функция `calc_speed_change_ffmpeg_arg` по расчету аргумента `-af` ffmpeg для изменения скорости изменена.
Значительно ускорена с применением другого алгоритма.
- Оптимизирована функция `side_chain`.
## Voiceover Process
- Подгон длины аудио и TTS теперь объеденины в один процесс для увеличения производительности.
- Теперь создаётся подпапка `_result/_working_dir` в которой сохраняются отдельные уже подогнанные строки субтитров.
После чего все части склеиваются ffmpeg-ом.
Значительно уменьшено потребление памяти.
- `moviepy` больше не является зависимость, вместо этого парсится вывод ffmpeg
## FFMpeg Wrapper
- Теперь все аргументы преобразуются в строки перед вызовом `check_call`
# 3.2.0
## CLI
- Опущены необязательные `type=str` аргументы.
- Изменена логика `BooleanOptionalAction`, теперь доступно как `--no-` так и `-n-` отрицание.
- Аргумент `--cleanup-audio` теперь `BooleanOptionalAction` (по умолчанию `True`), `--cleanup-level` удалён.
- Аргумент `--voice-set-anchor` (по умолчанию так же `!:`).
- Аргумент `--audio-format` для выходного аудио (по умолчанию `wav`).
- Аргумент `--sidechain` переименован в `--side-chain`.
- Добавлено сокращение аргументу `--traceback` - `-tb`.
## Voiceover Process
- Bugfix.
- Оптимизация подгона длительности дорожек (Fitting-а).
## TTS
- `anchor` аргумент (см. `--voice-set-anchor`).
- Оптимизация смены голосов.
## Submodules
### YouTube
- При multi-загрузке полностью загруженные видео удаляются с экрана (чтоб не занимать зря место).