From d6c4365b8de32b621ac46074a9b69908b95686c0 Mon Sep 17 00:00:00 2001 From: navewindre Date: Sat, 5 Apr 2025 03:00:29 +0200 Subject: a --- config/mpv/scripts/jaSubs/config.py | 265 + config/mpv/scripts/jaSubs/jaSubs.py | 1069 ++++ config/mpv/scripts/jaSubs/jp.dict | 6011 ++++++++++++++++++++ config/mpv/scripts/jaSubs/main.lua | 143 + config/mpv/scripts/jasubs/config.py | 265 - config/mpv/scripts/jasubs/jaSubs.py | 1069 ---- config/mpv/scripts/jasubs/jp.dict | 6011 -------------------- config/mpv/scripts/jasubs/main.lua | 143 - config/mpv/scripts/subs2srs/.gitignore | 5 + config/mpv/scripts/subs2srs/LICENSE | 674 +++ config/mpv/scripts/subs2srs/Makefile | 36 + config/mpv/scripts/subs2srs/README.md | 478 ++ config/mpv/scripts/subs2srs/ankiconnect.lua | 241 + config/mpv/scripts/subs2srs/cfg_mgr.lua | 240 + .../mpv/scripts/subs2srs/encoder/codec_support.lua | 40 + config/mpv/scripts/subs2srs/encoder/encoder.lua | 729 +++ config/mpv/scripts/subs2srs/find_anki_col.sh | 5 + config/mpv/scripts/subs2srs/helpers.lua | 280 + config/mpv/scripts/subs2srs/howto/add_dialog.md | 9 + config/mpv/scripts/subs2srs/howto/create_card.md | 14 + .../scripts/subs2srs/howto/create_quick_card.md | 31 + config/mpv/scripts/subs2srs/howto/flatpak.md | 27 + config/mpv/scripts/subs2srs/howto/goldendict.md | 45 + config/mpv/scripts/subs2srs/howto/yomichan.md | 24 + config/mpv/scripts/subs2srs/main.lua | 1 + config/mpv/scripts/subs2srs/menu.lua | 77 + config/mpv/scripts/subs2srs/osd_styler.lua | 97 + config/mpv/scripts/subs2srs/platform/init.lua | 14 + config/mpv/scripts/subs2srs/platform/nix.lua | 49 + config/mpv/scripts/subs2srs/platform/win.lua | 72 + config/mpv/scripts/subs2srs/subs2srs.lua | 746 +++ config/mpv/scripts/subs2srs/subtitles/observer.lua | 344 ++ .../scripts/subs2srs/subtitles/secondary_sid.lua | 196 + config/mpv/scripts/subs2srs/subtitles/sub_list.lua | 74 + config/mpv/scripts/subs2srs/subtitles/subtitle.lua | 56 + config/mpv/scripts/subs2srs/test.lua | 32 + config/mpv/scripts/subs2srs/utils/base64.lua | 46 + .../scripts/subs2srs/utils/filename_factory.lua | 89 + config/mpv/scripts/subs2srs/utils/forvo.lua | 145 + config/mpv/scripts/subs2srs/utils/pause_timer.lua | 33 + config/mpv/scripts/subs2srs/utils/play_control.lua | 61 + config/mpv/scripts/subs2srs/utils/switch.lua | 38 + config/mpv/scripts/subs2srs/utils/timings.lua | 28 + config/mpv/scripts/subs2srsa/.gitignore | 5 - config/mpv/scripts/subs2srsa/LICENSE | 674 --- config/mpv/scripts/subs2srsa/Makefile | 36 - config/mpv/scripts/subs2srsa/README.md | 478 -- config/mpv/scripts/subs2srsa/ankiconnect.lua | 241 - config/mpv/scripts/subs2srsa/cfg_mgr.lua | 240 - .../scripts/subs2srsa/encoder/codec_support.lua | 40 - config/mpv/scripts/subs2srsa/encoder/encoder.lua | 729 --- config/mpv/scripts/subs2srsa/find_anki_col.sh | 5 - config/mpv/scripts/subs2srsa/helpers.lua | 280 - config/mpv/scripts/subs2srsa/howto/add_dialog.md | 9 - config/mpv/scripts/subs2srsa/howto/create_card.md | 14 - .../scripts/subs2srsa/howto/create_quick_card.md | 31 - config/mpv/scripts/subs2srsa/howto/flatpak.md | 27 - config/mpv/scripts/subs2srsa/howto/goldendict.md | 45 - config/mpv/scripts/subs2srsa/howto/yomichan.md | 24 - config/mpv/scripts/subs2srsa/main.lua | 1 - config/mpv/scripts/subs2srsa/menu.lua | 77 - config/mpv/scripts/subs2srsa/osd_styler.lua | 97 - config/mpv/scripts/subs2srsa/platform/init.lua | 14 - config/mpv/scripts/subs2srsa/platform/nix.lua | 49 - config/mpv/scripts/subs2srsa/platform/win.lua | 72 - config/mpv/scripts/subs2srsa/subs2srs.lua | 746 --- .../mpv/scripts/subs2srsa/subtitles/observer.lua | 344 -- .../scripts/subs2srsa/subtitles/secondary_sid.lua | 196 - .../mpv/scripts/subs2srsa/subtitles/sub_list.lua | 74 - .../mpv/scripts/subs2srsa/subtitles/subtitle.lua | 56 - config/mpv/scripts/subs2srsa/test.lua | 32 - config/mpv/scripts/subs2srsa/utils/base64.lua | 46 - .../scripts/subs2srsa/utils/filename_factory.lua | 89 - config/mpv/scripts/subs2srsa/utils/forvo.lua | 145 - config/mpv/scripts/subs2srsa/utils/pause_timer.lua | 33 - .../mpv/scripts/subs2srsa/utils/play_control.lua | 61 - config/mpv/scripts/subs2srsa/utils/switch.lua | 38 - config/mpv/scripts/subs2srsa/utils/timings.lua | 28 - 78 files changed, 12564 insertions(+), 12564 deletions(-) create mode 100644 config/mpv/scripts/jaSubs/config.py create mode 100644 config/mpv/scripts/jaSubs/jaSubs.py create mode 100644 config/mpv/scripts/jaSubs/jp.dict create mode 100644 config/mpv/scripts/jaSubs/main.lua delete mode 100644 config/mpv/scripts/jasubs/config.py delete mode 100644 config/mpv/scripts/jasubs/jaSubs.py delete mode 100644 config/mpv/scripts/jasubs/jp.dict delete mode 100644 config/mpv/scripts/jasubs/main.lua create mode 100644 config/mpv/scripts/subs2srs/.gitignore create mode 100644 config/mpv/scripts/subs2srs/LICENSE create mode 100644 config/mpv/scripts/subs2srs/Makefile create mode 100644 config/mpv/scripts/subs2srs/README.md create mode 100644 config/mpv/scripts/subs2srs/ankiconnect.lua create mode 100644 config/mpv/scripts/subs2srs/cfg_mgr.lua create mode 100644 config/mpv/scripts/subs2srs/encoder/codec_support.lua create mode 100644 config/mpv/scripts/subs2srs/encoder/encoder.lua create mode 100755 config/mpv/scripts/subs2srs/find_anki_col.sh create mode 100644 config/mpv/scripts/subs2srs/helpers.lua create mode 100644 config/mpv/scripts/subs2srs/howto/add_dialog.md create mode 100644 config/mpv/scripts/subs2srs/howto/create_card.md create mode 100644 config/mpv/scripts/subs2srs/howto/create_quick_card.md create mode 100644 config/mpv/scripts/subs2srs/howto/flatpak.md create mode 100644 config/mpv/scripts/subs2srs/howto/goldendict.md create mode 100644 config/mpv/scripts/subs2srs/howto/yomichan.md create mode 100644 config/mpv/scripts/subs2srs/main.lua create mode 100644 config/mpv/scripts/subs2srs/menu.lua create mode 100644 config/mpv/scripts/subs2srs/osd_styler.lua create mode 100644 config/mpv/scripts/subs2srs/platform/init.lua create mode 100644 config/mpv/scripts/subs2srs/platform/nix.lua create mode 100644 config/mpv/scripts/subs2srs/platform/win.lua create mode 100644 config/mpv/scripts/subs2srs/subs2srs.lua create mode 100644 config/mpv/scripts/subs2srs/subtitles/observer.lua create mode 100644 config/mpv/scripts/subs2srs/subtitles/secondary_sid.lua create mode 100644 config/mpv/scripts/subs2srs/subtitles/sub_list.lua create mode 100644 config/mpv/scripts/subs2srs/subtitles/subtitle.lua create mode 100644 config/mpv/scripts/subs2srs/test.lua create mode 100644 config/mpv/scripts/subs2srs/utils/base64.lua create mode 100644 config/mpv/scripts/subs2srs/utils/filename_factory.lua create mode 100644 config/mpv/scripts/subs2srs/utils/forvo.lua create mode 100644 config/mpv/scripts/subs2srs/utils/pause_timer.lua create mode 100644 config/mpv/scripts/subs2srs/utils/play_control.lua create mode 100644 config/mpv/scripts/subs2srs/utils/switch.lua create mode 100644 config/mpv/scripts/subs2srs/utils/timings.lua delete mode 100644 config/mpv/scripts/subs2srsa/.gitignore delete mode 100644 config/mpv/scripts/subs2srsa/LICENSE delete mode 100644 config/mpv/scripts/subs2srsa/Makefile delete mode 100644 config/mpv/scripts/subs2srsa/README.md delete mode 100644 config/mpv/scripts/subs2srsa/ankiconnect.lua delete mode 100644 config/mpv/scripts/subs2srsa/cfg_mgr.lua delete mode 100644 config/mpv/scripts/subs2srsa/encoder/codec_support.lua delete mode 100644 config/mpv/scripts/subs2srsa/encoder/encoder.lua delete mode 100755 config/mpv/scripts/subs2srsa/find_anki_col.sh delete mode 100644 config/mpv/scripts/subs2srsa/helpers.lua delete mode 100644 config/mpv/scripts/subs2srsa/howto/add_dialog.md delete mode 100644 config/mpv/scripts/subs2srsa/howto/create_card.md delete mode 100644 config/mpv/scripts/subs2srsa/howto/create_quick_card.md delete mode 100644 config/mpv/scripts/subs2srsa/howto/flatpak.md delete mode 100644 config/mpv/scripts/subs2srsa/howto/goldendict.md delete mode 100644 config/mpv/scripts/subs2srsa/howto/yomichan.md delete mode 100644 config/mpv/scripts/subs2srsa/main.lua delete mode 100644 config/mpv/scripts/subs2srsa/menu.lua delete mode 100644 config/mpv/scripts/subs2srsa/osd_styler.lua delete mode 100644 config/mpv/scripts/subs2srsa/platform/init.lua delete mode 100644 config/mpv/scripts/subs2srsa/platform/nix.lua delete mode 100644 config/mpv/scripts/subs2srsa/platform/win.lua delete mode 100644 config/mpv/scripts/subs2srsa/subs2srs.lua delete mode 100644 config/mpv/scripts/subs2srsa/subtitles/observer.lua delete mode 100644 config/mpv/scripts/subs2srsa/subtitles/secondary_sid.lua delete mode 100644 config/mpv/scripts/subs2srsa/subtitles/sub_list.lua delete mode 100644 config/mpv/scripts/subs2srsa/subtitles/subtitle.lua delete mode 100644 config/mpv/scripts/subs2srsa/test.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/base64.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/filename_factory.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/forvo.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/pause_timer.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/play_control.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/switch.lua delete mode 100644 config/mpv/scripts/subs2srsa/utils/timings.lua diff --git a/config/mpv/scripts/jaSubs/config.py b/config/mpv/scripts/jaSubs/config.py new file mode 100644 index 0000000..66bcbf1 --- /dev/null +++ b/config/mpv/scripts/jaSubs/config.py @@ -0,0 +1,265 @@ +#! /usr/bin/env python + +# v. 2.9 +# Interactive subtitles for `mpv` for language learners. + +######################################### +# all *_B variables are boolean +###### + +# make sure selected translation function supports your language and so that codes of your languages are correct +# for instance Pons doesn't support Hebrew, Google and Reverso do, but their codes are different: 'iw' and 'he' respectively +# translate from language +lang_from = 'ja' +# translate to language +lang_to = 'en' + +# dictionaries to use, one or more +# or other function's name you might write that will return ([[word, translation]..], [morphology = '', gender = '']) # available: +# jisho +# google +# tab_divided_dict - simple offline dictionary with word \t translation per line + +# Online Usage: +translation_function_names = ['jisho', 'google'] +# Offline Usage: +#translation_function_names = ['tab_divided_dict'] + +# for automatic switch to Hebrew. Skip if it isn't your language. +translation_function_names_2 = ['google'] + +# deepl/google +translation_function_name_full_sentence = 'google' + +# number of translations in popup +number_of_translations = 4 +# number of translations to save in files for each word; 0 - to save all +number_of_translations_to_save = 50 + +# gtts|pons|forvo # gtts is google-text-to-speech +listen_via = 'gtts' + +# path to the offline dictionary +tab_divided_dict_fname = '~/.config/mpv/scripts/jaSubs/jp.dict' +# strip <.*?> +tab_divided_dict_remove_tags_B = True + +pause_during_translation_B = True +# don't hide subtitle when its time is up and keep it on screen until the next line +extend_subs_duration2max_B = True +# limit extension duration in seconds; N == 0: do not limit +extend_subs_duration_limit_sec = 1 +# show jaSubs only in fullscreen +hide_when_not_fullscreen_B = False + +# interval between checking for the next subtitle; in seconds +update_time = .01 +# interval in seconds between checking if mpv is in focus using `xdotool` and/or in fullscreen; in seconds +focus_checking_time = .2 + +# firefox "https://en.wiktionary.org/wiki/${word}" +show_in_browser = 'echo "${word}" | xclip -selection clipboard' + +# for going through lines step by step +# skip pausing when subs are less then X words +auto_pause_min_words = 10 +# 0 - don't pause +# 1 - pause after subs change +# 2 - pause before subs change +# wheel click on jaSubs cycles through options +auto_pause = 0 + +######################################################### +######################################################### +### LOOKS ### +######################################################### +######################################################### + +# show subtitles at the top of the screen +subs_top_placement_B = False +# distance to the edge; in px +subs_screen_edge_padding = 70 +subs_padding_between_lines = 0 + +# when subtitle consists of only one overly long line - splitting into two +split_long_lines_B = True +# split when there are more than N words in line +split_long_lines_words_min = 8 +# split when there are more than N characters in line +split_long_lines_chars_min = 80 + +# Qt's line wrapping doesn't work well +split_long_lines_in_popup_B = True +# split when there are more than N symbols in given line +split_long_lines_in_popup_symbols_min = 80 + +# ~ http://doc.qt.io/qt-5/stylesheet-reference.html +''' +/* Examples of css: */ + +background: transparent; /* fully transparent */ +background: black; /* black background*/ +background: #ffffff; /* white background*/ +background: rgba(0, 0, 0, 20%); /* semi-opaque black 20% */ +background: rgba(0, 0, 0, 50%); /* semi-opaque black 50% */ +background: rgba(0, 0, 0, 80%); /* semi-opaque black 80% */ +background: rgba(255, 255, 255, 40%); /* semi-opaque white 40% */ +background: rgba(44, 44, 44, 90%); /* semi-opaque dark-grey 90% */ + +/* Font colors: */ +color: white; +color: #BAC4D6; +color: rgb(217, 49, 49); /* red */ +color: rgba(217, 49, 49, 70%); /* semi-opaque red 70% */ + +font-family: "Trebuchet MS"; +font-weight: bold; +font-size: 33px; + +font: bold italic large "Times New Roman" 34px; + + font-family: "FiraGO"; + font-family: "Trebuchet MS"; + font-family: "American Typewriter"; +''' + +# CSS styles for subtitles +style_subs = ''' + /* looks of subtitles */ + QFrame { + background: transparent; + color: white; + color: #FFF0CD; + + font-family: "American Typewriter"; + /* font-weight: bold; */ + font-size: 40px; + } +''' + +# CSS styles for translations(popup) +style_popup = ''' + /* main */ + QFrame { + background: rgb(21, 22, 25); + + font-family: "Trebuchet MS"; + font-weight: regular; + font-size: 32px; + } + /* original language */ + QLabel#first_line { + color: #DCDCCC; + } + + /* original language - underlining exact word */ + QLabel#first_line_emphasize_word { + color: #DCDCCC; + text-decoration: underline; + } + + /* translation */ + QLabel#second_line { + color: #8B8F88; + } + + /* colorizing morphology */ + [morphology=""] { color: #e86969; } + [morphology="m"] { color: #5EB0FF; } + [morphology="f"] { color: #E34840; } + [morphology="nt"] { color: #8BC34A; } + + /* delimiter between dictionaries */ + QFrame#delimiter { + background: #8B8F88; + font-size: 4px; /* emulating thickness */ + } +''' + +# for subtitles to be visible on background with similar color +# might look ugly with some fonts +outline_B = True +outline_color = '#000000' +# ~ N/2.5 == size in px; here it's 2px of outline + another ~ 3px of blur +outline_thickness = 5 +outline_blur = 7 +# change if outline is cropped from top/bottom of some letters depending on font +# in px; can take negative values +outline_top_padding = -2 +outline_bottom_padding = 2 + +# highlighting the word under cursor +hover_color = '#F44336' +hover_hightlight = True # may look ugly due to only int precision of QFontMetrics +hover_underline = False +hover_underline_thickness = 5 + +######################################################### +######################################################### +### reassigning mouse buttons ### +######################################################### +######################################################### + +# functions' names are self-explanatory +# ['mouse_event', 'modifier_key', 'self_explanatory_function_name'], + +# to one button multiple functions can be assigned +# by left-click this will open word in browser and save it to file. +# ['LeftButton', 'NoModifier', 'f_show_in_browser'], +# ['LeftButton', 'NoModifier', 'f_save_word_to_file'], + +# https://doc.qt.io/qt-5/qt.html#MouseButton-enum +# mouse_event: + # LeftButton + # RightButton + # MiddleButton (wheel-click) + # BackButton (Typically present on the 'thumb' side of a mouse with extra buttons. This is NOT the tilt wheel.) + # ForwardButton + + # wheel scroll up/down left/right names' are arbitrary and not from Qt + # ScrollUp + # ScrollDown + # ScrollLeft (This is the tilt wheel.) + # ScrollRight + +# Note: On macOS, the ControlModifier value corresponds to the Command keys on the keyboard. +# https://doc.qt.io/qt-5/qt.html#KeyboardModifier-enum +# modifier_key: + # NoModifier + # ControlModifier + # ShiftModifier + # AltModifier + +# self_explanatory_function_name: + # f_show_in_browser + # f_auto_pause_options + # f_listen + # f_scroll_translations_down + # f_scroll_translations_up + # f_subs_screen_edge_padding_decrease + # f_subs_screen_edge_padding_increase + # f_font_size_decrease + # f_font_size_increase + # f_auto_pause_min_words_decrease + # f_auto_pause_min_words_increase + # f_translation_full_sentence + # f_save_word_to_file + # f_deepl_translation < obsolete, changed into f_translation_full_sentence + +mouse_buttons = [ + ['LeftButton', 'NoModifier', 'f_show_in_browser'], + ['RightButton', 'NoModifier', 'f_copy_reading'], + ['MiddleButton', 'NoModifier', 'f_auto_pause_options'], + + ['ScrollDown', 'ControlModifier', 'f_font_size_decrease'], + ['ScrollUp', 'ControlModifier', 'f_font_size_increase'], + + # ['ScrollLeft', 'NoModifier', 'f_auto_pause_min_words_decrease'], + # ['ScrollRight', 'NoModifier', 'f_auto_pause_min_words_increase'], + + ['ScrollDown', 'ShiftModifier', 'f_subs_screen_edge_padding_decrease'], + ['ScrollUp', 'ShiftModifier', 'f_subs_screen_edge_padding_increase'], +] + +# obsolete vars +hover_underline_width = hover_underline_thickness diff --git a/config/mpv/scripts/jaSubs/jaSubs.py b/config/mpv/scripts/jaSubs/jaSubs.py new file mode 100644 index 0000000..809abdf --- /dev/null +++ b/config/mpv/scripts/jaSubs/jaSubs.py @@ -0,0 +1,1069 @@ +#! /usr/bin/env python + +# v. 2.10 +# Interactive subtitles for `mpv` for language learners. + +import os, subprocess, sys +import random, re, time +import requests +import threading, queue +import calendar, math, base64 +import numpy +import ast + +from urllib.parse import quote +from json import loads +from json.decoder import JSONDecodeError + +import warnings +from six.moves import urllib + +from PyQt5.QtCore import Qt, QThread, QObject, pyqtSignal, pyqtSlot, QSize, QEvent +from PyQt5.QtWidgets import QApplication, QFrame, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy, QWidget +from PyQt5.QtGui import QPalette, QPaintEvent, QPainter, QPainterPath, QFont, QFontMetrics, QColor, QPen, QBrush + +# Import Japanese tokinizer +from sudachipy import tokenizer +from sudachipy import dictionary +tokenizer_obj = dictionary.Dictionary(dict="full").create(tokenizer.Tokenizer.SplitMode.C) + +form = 0 +was_paused = 0 +tthread = 0 +app = 0 +current_text = '' + +pth = os.path.expanduser('~/.config/mpv/scripts/') +os.chdir(pth) +import config as config + +def katakana_to_hiragana(text): + return "".join(chr(ord(c) - 0x60) if "ァ" <= c <= "ン" else c for c in text) + +# returns ([[word: reading, translation]..], [morphology = '', gender = '']) +# jisho.org +def jisho(word): + DOMAIN = 'jisho.org' + VERSION = '1' + + base_url = f'https://{DOMAIN}/api/v{VERSION}' + + def get(url, params=None): + if params is None: + params = {} + + response = requests.get( + url, + params=params, + ) + + json = response.json() + if response.status_code != 200: + raise APIException(response.status_code, + response.content.decode()) + + try: + word = json['data'][0]['japanese'][0]['word'] + ': ' + json['data'][0]['japanese'][0]['reading'] + reading = json['data'][0]['japanese'][0]['reading'] + translations = json['data'][0]['senses'][0]['english_definitions'] + pairs = [[word, '']] + for definition in translations: + pairs.append(['', definition]) + + return pairs, [reading, ''] + except: + return [['No translation Found', ''], ['', '']] + + def search(keyword): + url = f'{base_url}/search/words' + params = {'keyword': keyword} if keyword else {} + return get(url, params=params) + + return search(word) + + +# offline dictionary with word \t translation +def tab_divided_dict(word): + if word in offdict: + tr = re.sub('<.*?>', '', offdict[word]) if config.tab_divided_dict_remove_tags_B else offdict[word] + tr = tr.replace('\\n', '\n').replace('\\~', '~') + return [[tr, '-']], ['', ''] + else: + return [], ['', ''] + +# Google +# https://github.com/Saravananslb/py-googletranslation +class TokenAcquirer: + """Google Translate API token generator + + translate.google.com uses a token to authorize the requests. If you are + not Google, you do have this token and will have to pay for use. + This class is the result of reverse engineering on the obfuscated and + minified code used by Google to generate such token. + + The token is based on a seed which is updated once per hour and on the + text that will be translated. + Both are combined - by some strange math - in order to generate a final + token (e.g. 464393.115905) which is used by the API to validate the + request. + + This operation will cause an additional request to get an initial + token from translate.google.com. + + Example usage: + >>> from pygoogletranslation.gauthtoken import TokenAcquirer + >>> acquirer = TokenAcquirer() + >>> text = 'test' + >>> tk = acquirer.do(text) + >>> tk + 464393.115905 + """ + + def __init__(self, tkk='0', tkk_url='https://translate.google.com/translate_a/element.js', proxies=None): + + if proxies is not None: + self.proxies = proxies + else: + self.proxies = None + + r = requests.get(tkk_url, proxies=self.proxies) + + if r.status_code == 200: + re_tkk = re.search("(?<=tkk=\\')[0-9.]{0,}", str(r.content.decode("utf-8"))) + if re_tkk: + self.tkk = re_tkk.group(0) + else: + self.tkk = '0' + else: + self.tkk = '0' + + + def _xr(self, a, b): + size_b = len(b) + c = 0 + while c < size_b - 2: + d = b[c + 2] + d = ord(d[0]) - 87 if 'a' <= d else int(d) + d = self.rshift(a, d) if '+' == b[c + 1] else a << d + a = a + d & 4294967295 if '+' == b[c] else a ^ d + + c += 3 + return a + + def acquire(self, text): + a = [] + # Convert text to ints + for i in text: + val = ord(i) + if val < 0x10000: + a += [val] + else: + # Python doesn't natively use Unicode surrogates, so account for those + a += [ + math.floor((val - 0x10000) / 0x400 + 0xD800), + math.floor((val - 0x10000) % 0x400 + 0xDC00) + ] + + b = self.tkk + d = b.split('.') + b = int(d[0]) if len(d) > 1 else 0 + + # assume e means char code array + e = [] + g = 0 + size = len(a) + while g < size: + l = a[g] + # just append if l is less than 128(ascii: DEL) + if l < 128: + e.append(l) + # append calculated value if l is less than 2048 + else: + if l < 2048: + e.append(l >> 6 | 192) + else: + # append calculated value if l matches special condition + if (l & 64512) == 55296 and g + 1 < size and \ + a[g + 1] & 64512 == 56320: + g += 1 + l = 65536 + ((l & 1023) << 10) + (a[g] & 1023) # This bracket is important + e.append(l >> 18 | 240) + e.append(l >> 12 & 63 | 128) + else: + e.append(l >> 12 | 224) + e.append(l >> 6 & 63 | 128) + e.append(l & 63 | 128) + g += 1 + a = b + for i, value in enumerate(e): + a += value + a = self._xr(a, '+-a^+6') + a = self._xr(a, '+-3^+b+-f') + a ^= int(d[1]) if len(d) > 1 else 0 + if a < 0: # pragma: nocover + a = (a & 2147483647) + 2147483648 + a %= 1000000 # int(1E6) + return '{}.{}'.format(a, a ^ b) + + def do(self, text): + tk = self.acquire(text) + return tk + + + def rshift(self, val, n): + """python port for '>>>'(right shift with padding) + """ + return (val % 0x100000000) >> n + +# translate.google.com +def google(word): + word = word.replace('\n', ' ').strip() + url = 'https://translate.google.com/translate_a/single?client=t&sl={lang_from}&tl={lang_to}&hl={lang_to}&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=1&pc=1&ssel=3&tsel=3&kc=2&q={word}'.format(lang_from = config.lang_from, lang_to = config.lang_to, word = quote(word)) + + pairs = [] + fname = 'urls/' + url.replace('/', "-") + try: + if ' ' in word: + raise Exception('skip saving') + + p = open(fname).read().split('=====/////-----') + try: + word_descr = p[1].strip() + except: + word_descr = '' + + for pi in p[0].strip().split('\n\n'): + pi = pi.split('\n') + pairs.append([pi[0], pi[1]]) + except: + acquirer = TokenAcquirer() + tk = acquirer.do(word) + + url = '{url}&tk={tk}'.format(url = url, tk = tk) + p = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36'}).text + p = loads(p) + + try: + pairs.append([p[0][0][0], p[0][0][1]]) + except: + pass + + if p[1] != None: + for translations in p[1]: + for translation in translations[2]: + try: + t1 = translation[5] + ' ' + translation[0] + except: + t1 = translation[0] + + t2 = ', '.join(translation[1]) + + if not len(t1): + t1 = '-' + if not len(t2): + t2 = '-' + + pairs.append([t1, t2]) + + word_descr = '' + + return pairs, ['', ''] + +def pause_on_popup(): + global was_paused + if mpv_pause_status(): + was_paused = 1 + mpv_pause() + +def resume_on_popup(): + global was_paused + if not was_paused: + mpv_resume() + was_paused = 0 + +def mpv_pause(): + os.system('echo \'{ "command": ["set_property", "pause", true] }\' | socat - "' + mpv_socket + '" > /dev/null') + +def mpv_resume(): + os.system('echo \'{ "command": ["set_property", "pause", false] }\' | socat - "' + mpv_socket + '" > /dev/null') + +def mpv_pause_status(): + stdoutdata = subprocess.getoutput('echo \'{ "command": ["get_property", "pause"] }\' | socat - "' + mpv_socket + '"') + + try: + return loads(stdoutdata)['data'] + except: + return mpv_pause_status() + +def mpv_fullscreen_status(): + stdoutdata = subprocess.getoutput('echo \'{ "command": ["get_property", "fullscreen"] }\' | socat - "' + mpv_socket + '"') + + try: + return loads(stdoutdata)['data'] + except: + return mpv_fullscreen_status() + +def mpv_message(message, timeout = 3000): + os.system('echo \'{ "command": ["show-text", "' + message + '", "' + str(timeout) + '"] }\' | socat - "' + mpv_socket + '" > /dev/null') + +def stripsd2(phrase): + return ''.join(e for e in phrase.strip().lower() if e == ' ' or (e.isalnum() and not e.isdigit())).strip() + +def r2l(l): + l2 = '' + + try: + l2 = re.findall('(?!%)\W+$', l)[0][::-1] + except: + pass + + l2 += re.sub('^\W+|(?!%)\W+$', '', l) + + try: + l2 += re.findall('^\W+', l)[0][::-1] + except: + pass + + return l2 + +def split_long_lines(line, chunks = 2, max_symbols_per_line = False): + if max_symbols_per_line: + chunks = 0 + while 1: + chunks += 1 + new_lines = [] + for i in range(chunks): + new_line = ' '.join(numpy.array_split(line.split(' '), chunks)[i]) + new_lines.append(new_line) + + if len(max(new_lines, key = len)) <= max_symbols_per_line: + return '\n'.join(new_lines) + else: + new_lines = [] + for i in range(chunks): + new_line = ' '.join(numpy.array_split(line.split(' '), chunks)[i]) + new_lines.append(new_line) + + return '\n'.join(new_lines) + +def dir2(name): + print('\n'.join(dir( name ))) + exit() + +class thread_subtitles(QObject): + update_subtitles = pyqtSignal(bool, bool) + update_screen_sig = pyqtSignal() + + @pyqtSlot() + def main(self): + global subs + + was_hidden = 0 + inc = 0 + auto_pause_2_ind = 0 + last_updated = time.time() + + while 1: + time.sleep(config.update_time) + # hide subs when mpv isn't in focus or in fullscreen + if inc * config.update_time > config.focus_checking_time - 0.0001: + process_output = subprocess.getoutput('xdotool getwindowfocus getwindowname') + # "Add" - anki add card dialog + while ( (process_output != 'Add') and 'mpv' not in process_output ) or (config.hide_when_not_fullscreen_B and not mpv_fullscreen_status()) or (os.path.exists(mpv_socket + '_hide')): + if not was_hidden: + self.update_subtitles.emit(True, False) + was_hidden = 1 + else: + time.sleep(config.focus_checking_time) + process_output = subprocess.getoutput('xdotool getwindowfocus getwindowname') + inc = 0 + self.update_screen_sig.emit() + inc += 1 + + if was_hidden: + was_hidden = 0 + self.update_subtitles.emit(False, False) + continue + + try: + tmp_file_subs = open(sub_file).read() + except: + continue + + if config.extend_subs_duration2max_B and not len(tmp_file_subs): + if not config.extend_subs_duration_limit_sec: + continue + if config.extend_subs_duration_limit_sec > time.time() - last_updated: + continue + + last_updated = time.time() + + while tmp_file_subs != subs: + if config.auto_pause == 2: + if not auto_pause_2_ind and len(re.sub(' +', ' ', stripsd2(subs.replace('\n', ' '))).split(' ')) > config.auto_pause_min_words - 1 and not mpv_pause_status(): + mpv_pause() + auto_pause_2_ind = 1 + + if auto_pause_2_ind and mpv_pause_status(): + break + + auto_pause_2_ind = 0 + + subs = tmp_file_subs + if config.auto_pause == 1: + if len(re.sub(' +', ' ', stripsd2(subs.replace('\n', ' '))).split(' ')) > config.auto_pause_min_words - 1: + mpv_pause() + + self.update_subtitles.emit(False, False) + +class thread_translations(QObject): + get_translations = pyqtSignal(str, int, bool) + + @pyqtSlot() + def main(self): + while 1: + to_new_word = False + + try: + word, globalX = config.queue_to_translate.get(False) + except: + time.sleep(config.update_time) + continue + + # changing cursor to hourglass during translation + QApplication.setOverrideCursor(Qt.WaitCursor) + + threads = [] + for translation_function_name in config.translation_function_names: + threads.append(threading.Thread(target = globals()[translation_function_name], args = (word,))) + for x in threads: + x.start() + while any(thread.is_alive() for thread in threads): + if config.queue_to_translate.qsize(): + to_new_word = True + break + time.sleep(config.update_time) + + QApplication.restoreOverrideCursor() + + if to_new_word: + continue + + if config.block_popup: + continue + + self.get_translations.emit(word, globalX, False) + +# drawing layer +# because can't calculate outline with precision +class drawing_layer(QLabel): + def __init__(self, line, subs, parent=None): + super().__init__(None) + self.line = line + self.setStyleSheet(config.style_subs) + self.psuedo_line = 0 + + def draw_text_n_outline(self, painter: QPainter, x, y, outline_width, outline_blur, text): + outline_color = QColor(config.outline_color) + + font = self.font() + text_path = QPainterPath() + text_path.addText(x, y, font, text) + + # draw blur + range_width = range(outline_width, outline_width + outline_blur) + # ~range_width = range(outline_width + outline_blur, outline_width, -1) + + for width in range_width: + if width == min(range_width): + alpha = 200 + else: + alpha = (max(range_width) - width) / max(range_width) * 200 + alpha = int(alpha) + + blur_color = QColor(outline_color.red(), outline_color.green(), outline_color.blue(), alpha) + blur_brush = QBrush(blur_color, Qt.SolidPattern) + blur_pen = QPen(blur_brush, width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) + + painter.setPen(blur_pen) + painter.drawPath(text_path) + + # draw outline + outline_color = QColor(outline_color.red(), outline_color.green(), outline_color.blue(), 255) + outline_brush = QBrush(outline_color, Qt.SolidPattern) + outline_pen = QPen(outline_brush, outline_width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) + + painter.setPen(outline_pen) + painter.drawPath(text_path) + + # draw text + color = self.palette().color(QPalette.Text) + painter.setPen(color) + painter.drawText(x, y, text) + + if config.outline_B: + def paintEvent(self, evt: QPaintEvent): + if not self.psuedo_line: + self.psuedo_line = 1 + return + + x = y = 0 + y += self.fontMetrics().ascent() + painter = QPainter(self) + + self.draw_text_n_outline( + painter, + x, + y + config.outline_top_padding - config.outline_bottom_padding, + config.outline_thickness, + config.outline_blur, + text = self.line + ) + + def resizeEvent(self, *args): + self.setFixedSize( + self.fontMetrics().width(self.line), + self.fontMetrics().height() + + config.outline_bottom_padding + + config.outline_top_padding + ) + + def sizeHint(self): + return QSize( + self.fontMetrics().width(self.line), + self.fontMetrics().height() + ) + +class events_class(QLabel): + mouseHover = pyqtSignal(str, int, bool) + redraw = pyqtSignal(bool, bool) + + def __init__(self, word, subs, skip = False, parent=None, reading=None): + super().__init__(word) + self.setMouseTracking(True) + self.word = word + self.subs = subs + self.skip = skip + if reading is not None: + self.reading = reading + else: + self.reading = "" + self.highlight = False + + self.setStyleSheet('background: transparent; color: transparent;') + + def highligting(self, color, underline_width): + color = QColor(color) + color = QColor(color.red(), color.green(), color.blue(), 200) + painter = QPainter(self) + + if config.hover_underline: + font_metrics = QFontMetrics(self.font()) + text_width = font_metrics.width(self.word) + text_height = font_metrics.height() + + brush = QBrush(color) + pen = QPen(brush, underline_width, Qt.SolidLine, Qt.RoundCap) + painter.setPen(pen) + if not self.skip: + painter.drawLine(0, text_height - underline_width, text_width, text_height - underline_width) + + if config.hover_hightlight: + x = y = 0 + y += self.fontMetrics().ascent() + + painter.setPen(color) + painter.drawText(x, y + config.outline_top_padding - config.outline_bottom_padding, self.word) + + if config.outline_B: + def paintEvent(self, evt: QPaintEvent): + if self.highlight: + self.highligting(config.hover_color, config.hover_underline_thickness) + + ##################################################### + + def resizeEvent(self, event): + text_height = self.fontMetrics().height() + text_width = self.fontMetrics().width(self.word) + + self.setFixedSize(text_width, text_height + config.outline_bottom_padding + config.outline_top_padding) + + def enterEvent(self, event): + if not self.skip: + self.highlight = True + self.repaint() + config.queue_to_translate.put((self.word, event.globalX())) + + @pyqtSlot() + def leaveEvent(self, event): + if not self.skip: + self.highlight = False + self.repaint() + + config.scroll = {} + self.mouseHover.emit('', 0, False) + QApplication.restoreOverrideCursor() + + def wheel_scrolling(self, event): + if event.y() > 0: + return 'ScrollUp' + if event.y(): + return 'ScrollDown' + if event.x() > 0: + return 'ScrollLeft' + if event.x(): + return 'ScrollRight' + + def wheelEvent(self, event): + for mouse_action in config.mouse_buttons: + if self.wheel_scrolling(event.angleDelta()) == mouse_action[0]: + if event.modifiers() == eval('Qt.%s' % mouse_action[1]): + exec('self.%s(event)' % mouse_action[2]) + + def mousePressEvent(self, event): + for mouse_action in config.mouse_buttons: + if 'Scroll' not in mouse_action[0]: + if event.button() == eval('Qt.%s' % mouse_action[0]): + if event.modifiers() == eval('Qt.%s' % mouse_action[1]): + exec('self.%s(event)' % mouse_action[2]) + + ##################################################### + + def f_show_in_browser(self, event): + config.avoid_resuming = True + os.system(config.show_in_browser.replace('${word}', self.word)) + + def f_copy_reading(self, event): + os.system('echo "' + self.reading + '" | xclip -selection clipboard') + + def f_auto_pause_options(self, event): + if config.auto_pause == 2: + config.auto_pause = 0 + else: + config.auto_pause += 1 + mpv_message('auto_pause: %d' % config.auto_pause) + + @pyqtSlot() + def f_subs_screen_edge_padding_decrease(self, event): + config.subs_screen_edge_padding -= 5 + mpv_message('subs_screen_edge_padding: %d' % config.subs_screen_edge_padding) + self.redraw.emit(False, True) + + @pyqtSlot() + def f_subs_screen_edge_padding_increase(self, event): + config.subs_screen_edge_padding += 5 + mpv_message('subs_screen_edge_padding: %d' % config.subs_screen_edge_padding) + self.redraw.emit(False, True) + + @pyqtSlot() + def f_font_size_decrease(self, event): + config.style_subs = re.sub('font-size: (\d+)px;', lambda size: [ 'font-size: %dpx;' % ( int(size.group(1)) - 1 ), mpv_message('font: %s' % size.group(1)) ][0], config.style_subs, flags = re.I) + self.redraw.emit(False, True) + + @pyqtSlot() + def f_font_size_increase(self, event): + config.style_subs = re.sub('font-size: (\d+)px;', lambda size: [ 'font-size: %dpx;' % ( int(size.group(1)) + 1 ), mpv_message('font: %s' % size.group(1)) ][0], config.style_subs, flags = re.I) + self.redraw.emit(False, True) + + @pyqtSlot() + def f_translation_full_sentence(self, event): + self.mouseHover.emit(self.subs , event.globalX(), True) + + def f_auto_pause_min_words_decrease(self, event): + config.auto_pause_min_words -= 1 + mpv_message('auto_pause_min_words: %d' % config.auto_pause_min_words) + + def f_auto_pause_min_words_increase(self, event): + config.auto_pause_min_words += 1 + mpv_message('auto_pause_min_words: %d' % config.auto_pause_min_words) + + +class main_class(QWidget): + class PopupThread(QThread): + def setPopup(self, popup): + self.popup = popup + def run(self): + self.popup.show() + + def __init__(self): + super().__init__() + + self.thread_subs = QThread() + self.obj = thread_subtitles() + self.obj.update_subtitles.connect(self.render_subtitles) + self.obj.update_screen_sig.connect(update_screen) + self.obj.moveToThread(self.thread_subs) + self.thread_subs.started.connect(self.obj.main) + self.thread_subs.start() + + self.thread_translations = QThread() + self.obj2 = thread_translations() + self.obj2.get_translations.connect(self.render_popup) + self.obj2.moveToThread(self.thread_translations) + self.thread_translations.started.connect(self.obj2.main) + self.thread_translations.start() + + # start the forms + self.subtitles_base() + self.subtitles_base2() + self.popup_base() + + def clearLayout(self, layout): + if layout == 'subs': + layout = self.subtitles_vbox + self.subtitles.hide() + elif layout == 'subs2': + layout = self.subtitles_vbox2 + self.subtitles2.hide() + elif layout == 'popup': + layout = self.popup_vbox + self.popup.hide() + + if layout is not None: + while layout.count(): + item = layout.takeAt(0) + widget = item.widget() + + if widget is not None: + widget.deleteLater() + else: + self.clearLayout(item.layout()) + + def subtitles_base(self): + self.subtitles = QFrame() + self.subtitles.setAttribute(Qt.WA_TranslucentBackground) + self.subtitles.setWindowFlags(Qt.X11BypassWindowManagerHint) + self.subtitles.setStyleSheet(config.style_subs) + + self.subtitles_vbox = QVBoxLayout(self.subtitles) + self.subtitles_vbox.setSpacing(config.subs_padding_between_lines) + self.subtitles_vbox.setContentsMargins(0, 0, 0, 0) + + def subtitles_base2(self): + self.subtitles2 = QFrame() + self.subtitles2.setAttribute(Qt.WA_TranslucentBackground) + self.subtitles2.setWindowFlags(Qt.X11BypassWindowManagerHint) + self.subtitles2.setStyleSheet(config.style_subs) + + self.subtitles_vbox2 = QVBoxLayout(self.subtitles2) + self.subtitles_vbox2.setSpacing(config.subs_padding_between_lines) + self.subtitles_vbox2.setContentsMargins(0, 0, 0, 0) + + if config.pause_during_translation_B: + self.subtitles2.enterEvent = lambda event : [pause_on_popup(), setattr(config, 'block_popup', False)][0] + self.subtitles2.leaveEvent = lambda event : [resume_on_popup(), setattr(config, 'block_popup', True)][0] if not config.avoid_resuming else [setattr(config, 'avoid_resuming', False), setattr(config, 'block_popup', True)][0] + + def popup_base(self): + self.popup = QFrame() + self.popup.setWindowFlags(Qt.X11BypassWindowManagerHint) + self.popup.setStyleSheet(config.style_popup) + + self.popup_inner = QFrame() + outer_box = QVBoxLayout(self.popup) + outer_box.addWidget(self.popup_inner) + + self.popup_vbox = QVBoxLayout(self.popup_inner) + self.popup_vbox.setSpacing(0) + + def render_subtitles(self, hide = False, redraw = False): + if hide or not len(subs): + try: + self.subtitles.hide() + self.subtitles2.hide() + finally: + return + + if redraw: + self.subtitles.setStyleSheet(config.style_subs) + self.subtitles2.setStyleSheet(config.style_subs) + else: + self.clearLayout('subs') + self.clearLayout('subs2') + + if hasattr(self, 'popup'): + self.popup.hide() + + # if subtitle consists of one overly long line - split into two + if config.split_long_lines_B and len(subs.split('\n')) == 1 and len(subs.split(' ')) > config.split_long_lines_words_min - 1: + subs2 = split_long_lines(subs) + elif config.split_long_lines_B and len(subs) > config.split_long_lines_chars_min - 1: + subs2 = split_long_lines(subs, config.split_long_lines_chars_min) + else: + subs2 = subs + + subs2 = re.sub(' +', ' ', subs2).strip() + + ############################## + + for line in subs2.split('\n'): + line2 = ' %s ' % line.strip() + ll = drawing_layer(line2, subs2) + + hbox = QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + hbox.setSpacing(0) + hbox.addStretch() + hbox.addWidget(ll) + hbox.addStretch() + self.subtitles_vbox.addLayout(hbox) + + #################################### + + hbox = QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + hbox.setSpacing(0) + hbox.addStretch() + + line2 += '\00' + + # Japanese Fix + mode = tokenizer.Tokenizer.SplitMode.C + tokens = tokenizer_obj.tokenize(line2, mode) + line2 = [m.surface() for m in tokens] + readings = [m.reading_form() for m in tokens] + + for i in range(len(line2)): + smbl = line2[i] + word = smbl + if smbl.isalpha(): + ll = events_class(word, subs2, reading=katakana_to_hiragana(readings[i])) + ll.mouseHover.connect(self.render_popup) + ll.redraw.connect(self.render_subtitles) + + hbox.addWidget(ll) + else: + ll = events_class(smbl, subs2, skip = True) + hbox.addWidget(ll) + + hbox.addStretch() + self.subtitles_vbox2.addLayout(hbox) + + self.subtitles.adjustSize() + self.subtitles2.adjustSize() + + w = self.subtitles.geometry().width() + h = self.subtitles.height = self.subtitles.geometry().height() + + x = (config.screen_width/2) - (w/2) + config.screen_start + + if config.subs_top_placement_B: + y = config.subs_screen_edge_padding + else: + y = config.screen_height - config.subs_screen_edge_padding - h + + self.subtitles.setGeometry(int(x), int(y), 0, 0) + self.subtitles.show() + + self.subtitles2.setGeometry(int(x), int(y), 0, 0) + self.subtitles2.show() + + + class TranslationThread(QThread): + translation_done = pyqtSignal(str, bool, list) + + def __init__(self, text, is_line, parent=None): + super().__init__(parent) + self.text = text + self.is_line = is_line + + def run(self): + if self.is_line: + line = globals()[config.translation_function_name_full_sentence](self.text) + if config.translation_function_name_full_sentence == 'google': + try: + line = line[0][0][0].strip() + except: + line = 'Google translation failed.' + if config.split_long_lines_B and len(line.split('\n')) == 1 and len(line.split(' ')) > config.split_long_lines_words_min - 1: + line = split_long_lines(line) + self.translation_done.emit(line, True, []) + else: + word = self.text + translations = [] + for translation_function_name in config.translation_function_names: + pairs, word_descr = globals()[translation_function_name](word) + if not pairs: + pairs = [['', '[Not found]']] + translations.append((pairs, word_descr)) + self.translation_done.emit(word, False, translations) + + def render_popup(self, text, x_cursor_pos, is_line): + global tthread + global app + global current_text + if len(current_text) and text == current_text and hasattr(self, 'popup') and self.popup.isVisible(): + return + if text == '': + if hasattr(self, 'popup'): + self.popup.hide() + return + + current_text = text + QApplication.setOverrideCursor(Qt.WaitCursor) + + def update_popup(result, is_line, data): + self.clearLayout('popup') + word = text + if is_line: + ll = QLabel(result) + ll.setObjectName("first_line") + self.popup_vbox.addWidget(ll) + else: + for translation_function_name_i, (pairs, word_descr) in enumerate(data): + for i1, pair in enumerate(pairs[:config.number_of_translations]): + if type(pair) == type(''): + continue + if config.split_long_lines_in_popup_B: + pair[0] = split_long_lines(pair[0], max_symbols_per_line = config.split_long_lines_in_popup_symbols_min) + pair[1] = split_long_lines(pair[1], max_symbols_per_line = config.split_long_lines_in_popup_symbols_min) + + if pair[0] == '-': + pair[0] = '' + if pair[1] == '-': + pair[1] = '' + + if pair[0] != '': + # to emphasize the exact form of the word + # to ignore case on input and match it on output + chnks = re.split(word, pair[0], flags = re.I) + exct_words = re.findall(word, pair[0], flags = re.I) + + hbox = QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + + for i2, chnk in enumerate(chnks): + if len(chnk): + ll = QLabel(chnk) + ll.setObjectName("first_line") + hbox.addWidget(ll) + if i2 + 1 < len(chnks): + ll = QLabel(exct_words[i2]) + ll.setObjectName("first_line_emphasize_word") + hbox.addWidget(ll) + + # filling the rest of the line with empty bg + ll = QLabel() + ll.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + hbox.addWidget(ll) + + self.popup_vbox.addLayout(hbox) + + if pair[1] != '': + ll = QLabel(pair[1]) + ll.setObjectName("second_line") + self.popup_vbox.addWidget(ll) + + # padding + ll = QLabel() + ll.setStyleSheet("font-size: 6px;") + self.popup_vbox.addWidget(ll) + + if len(word_descr[0]): + ll = QLabel(word_descr[0]) + ll.setProperty("morphology", word_descr[1]) + ll.setAlignment(Qt.AlignRight) + self.popup_vbox.addWidget(ll) + + # delimiter between dictionaries + if translation_function_name_i + 1 < len(config.translation_function_names): + ll = QLabel() + ll.setObjectName("delimiter") + self.popup_vbox.addWidget(ll) + + app.sendPostedEvents() + + self.popup_inner.adjustSize() + self.popup.adjustSize() + + w = self.popup.geometry().width() + h = self.popup.geometry().height() + + if w > config.screen_width: + w = config.screen_width - 20 + + if x_cursor_pos == -1: + x = config.screen_start + (config.screen_width/2) - (w/2) + else: + x = x_cursor_pos - w/2 + if x+w - config.screen_start > config.screen_width: + x = config.screen_start + config.screen_width - w + + if config.subs_top_placement_B: + y = self.subtitles.height + config.subs_screen_edge_padding + else: + y = config.screen_height - config.subs_screen_edge_padding - self.subtitles.height - h - 20 + + self.popup.setGeometry(int(x), int(y), int(w), int(0)) + # without this the window flickers for a split second over the subtitles + # causing it to get stuck in a loop of opening and closing the popup + app.sendPostedEvents() + self.popup.show() + QApplication.restoreOverrideCursor() + + + tthread = self.TranslationThread(text, is_line) + tthread.translation_done.connect(update_popup) + tthread.start() + +def update_screen(): + if not mpv_fullscreen_status(): + mpv_id = subprocess.getoutput('xdotool search --class mpv') + process_output = subprocess.getoutput('xdotool getwindowgeometry ' + mpv_id) + if 'invalid' in process_output: + return + pos = re.search(r"Position:\s*(\d+),(\d+)", process_output) + size = re.search(r"Geometry:\s*(\d+)x(\d+)", process_output) + x = 0 + y = 0 + if pos: + x, y = map(int, pos.groups()) + if size: + w, h = map(int, size.groups()) + + if 'x' in locals(): + config.screen_start = x + elif not config.screen_start: + config.screen_start = 0; + if 'y' in locals() and 'h' in locals(): + config.screen_height = y + h + elif not config.screen_height: + config.screen_height = app.primaryScreen().geometry().height() + if 'w' in locals(): + config.screen_width = w + elif not config.screen_width: + config.screen_width = app.primaryScreen().geometry().width() + else: + config.screen_start = app.primaryScreen().geometry().topLeft().x() + config.screen_width = app.primaryScreen().size().width() + config.screen_height = app.primaryScreen().size().height() + + form.obj.update_subtitles.emit(False, True) + +if __name__ == "__main__": + print('[py part] Starting jaSubs ...') + + try: + os.mkdir('urls') + except: + pass + + if 'tab_divided_dict' in config.translation_function_names: + offdict = { x.split('\t')[0].strip().lower() : x.split('\t')[1].strip() for x in open(os.path.expanduser(config.tab_divided_dict_fname)).readlines() if '\t' in x } + + mpv_socket = sys.argv[1] + sub_file = sys.argv[2] + # sub_file = '/tmp/mpv_sub_' + # mpv_socket = '/tmp/mpv_socket_' + + subs = '' + + app = QApplication(sys.argv) + + config.avoid_resuming = False + config.block_popup = False + config.scroll = {} + config.queue_to_translate = queue.Queue() + + form = main_class() + update_screen() + app.exec_() diff --git a/config/mpv/scripts/jaSubs/jp.dict b/config/mpv/scripts/jaSubs/jp.dict new file mode 100644 index 0000000..55e162b --- /dev/null +++ b/config/mpv/scripts/jaSubs/jp.dict @@ -0,0 +1,6011 @@ +それ それ - that, that one - Pronoun +一つ ひとつ - one (thing) - Noun +一 いち - one - Noun +二 に - two - Noun +二つ ふたつ - two (things) - Noun +三 さん - three - Noun +三つ みっつ - three (things) - Noun +四つ よっつ - four (things) - Noun +四 し - four - Noun +これ これ - this, this one - Noun +四 よん - four - Noun +五つ いつつ - five (things) - Noun +五 ご - five - Noun +六つ むっつ - six (things) - Noun +六 ろく - six - Noun +七 なな - seven - Noun +七つ ななつ - seven (things) - Noun +八 はち - eight - Noun +八つ やっつ - eight (things) - Noun +なる なる - become - Verb +九 きゅう - nine - Noun +九つ ここのつ - nine (things) - Noun +十 じゅう - ten - Noun +百 ひゃく - hundred - Noun +千 せん - thousand - Noun +万 まん - ten thousand - Noun +円 えん - circle - Noun +円 えん - yen - Noun +時 とき - time - Noun +する する - do, make - Verb +時々 ときどき - sometimes - Adverb +日 にち - day - Noun +六日 むいか - six days, 6th of the month - Noun +三日 みっか - three days, 3rd of the month - Noun +五日 いつか - five days, 5th of the month - Noun +八日 ようか - eight days, 8th of the month - Noun +二十日 はつか - 20 days, 20th of the month - Noun +二日 ふつか - two days, 2nd of the month - Noun +九日 ここのか - nine days, 9th of the month - Noun +ところ ところ - place - Noun +一日 ついたち - 1st of the month - Noun +十日 とおか - ten days, 10th of the month - Noun +七日 なのか - seven days, 7th of the month - Noun +四日 よっか - four days, 4th of the month - Noun +月 つき - moon - Noun +水 みず - water - Noun +金 かね - money - Noun +日曜日 にちようび - Sunday - Noun +土曜日 どようび - Saturday - Noun +やる やる - do - Verb +金曜日 きんようび - Friday - Noun +月曜日 げつようび - Monday - Noun +木曜日 もくようび - Thursday - Noun +曜日 ようび - day of the week - Noun +火曜日 かようび - Tuesday - Noun +水曜日 すいようび - Wednesday - Noun +週 しゅう - week - Noun +年 とし - year, age - Noun +分かる わかる - understand - Verb +そう そう - in such manner, that way - Adverb +何 なに - what, which - Noun +先 さき - ahead, first - Noun +今年 ことし - this year - Noun +今 いま - now - Adverb +今日 きょう - today - Noun +今月 こんげつ - this month - Noun +今週 こんしゅう - this week - Noun +来る くる - come - Verb +来 くる - come - Verb +来年 らいねん - next year - Noun +もう もう - already, yet - Adverb +行く いく - go - Verb +帰る かえる - return, go back - Verb +大きい おおきい - big - Adjective +小さい ちいさい - small - Adjective +少ない すくない - few, little - Adjective +少し すこし - a bit, a little while - Adverb +多い おおい - lots of - Adjective +多分 たぶん - probably, perhaps - Adverb +上げる あげる - raise, improve - Verb +よく よく - often - Adverb +上る のぼる - go up - Verb +上 うえ - up, above - Noun +下 した - under, below - Noun +右 みぎ - right - Noun +左 ひだり - left - Noun +方 ほう - direction, side - Noun +大人 おとな - adult - Noun +人 ひと - person - Noun +一人 ひとり - one, one person - Noun +どう どう - how, what - Adverb +入れる いれる - put in - Verb +入る はいる - enter - Verb +出る でる - go out, leave - Verb +出来る できる - can do, be good at - Verb +出す だす - take out - Verb +本 ほん - book, volume - Noun +休む やすむ - take a day off, take a break - Verb +体 からだ - body, health - Noun +目 め - eye - Noun +どこ どこ - where - Noun +口 くち - mouth - Noun +耳 みみ - ear, hearing - Noun +上手 じょうず - good, skilled - Adjectival Noun +手 て - hand - Noun +足 あし - leg, foot - Noun +空く すく - be empty - Verb +男 おとこ - man, male - Noun +女 おんな - woman, girl - Noun +子供 こども - child, kid - Noun +あげる あげる - give - Verb +好き すき - favorite, liked - Adjectival Noun +大好き だいすき - love - Adjective +私 わたし - I - Noun +友達 ともだち - friend, companion - Noun +家 うち - house, home - Noun +気 き - spirit, temperament - Noun +元気 げんき - healthy, energetic - Adjective +天気 てんき - weather - Noun +晴れる はれる - be sunny, clear up - Verb +こう こう - like this, this kind of - Adverb +昨日 きのう - yesterday - Noun +開ける あける - open, unlock - Verb +開く ひらく - open - Verb +閉じる とじる - close - Verb +閉める しめる - shut, close - Verb +閉まる しまる - be shut, be closed - Verb +聞く きく - hear, ask - Verb +時間 じかん - time, hour - Noun +高い たかい - high, tall - Adjective +くれる くれる - be given - Verb +安い やすい - inexpensive, cheap - Adjective +低い ひくい - low, short - Adjective +前 まえ - front, before - Noun +後 あと - after - Adverb +後ろ うしろ - back, behind - Noun +午後 ごご - afternoon, p.m. - Noun +午前 ごぜん - morning, a.m. - Noun +朝 あさ - morning - Noun +昼 ひる - daytime, midday - Noun +かなり かなり - fairly, rather - Adverb +晩 ばん - evening (usually from sunset to bedtime) - Noun +今晩 こんばん - this evening, tonight - Noun +夜 よる - night (from sunset to sunrise) - Noun +食べる たべる - eat - Verb +飲む のむ - drink - Verb +ご飯 ごはん - cooked rice, meal - Noun +買う かう - buy - Verb +見る みる - see, look at - Verb +見せる みせる - show - Verb +もっと もっと - more - Adverb +見つける みつける - find - Verb +見える みえる - be visible - Verb +見つかる みつかる - be found, be caught - Verb +言う いう - say, tell - Verb +話す はなす - speak, tell - Verb +読む よむ - read - Verb +漢字 かんじ - character, kanji - Noun +書く かく - write - Verb +覚える おぼえる - memorize, learn - Verb +そこ そこ - there - Pronoun +会う あう - meet - Verb +仕事 しごと - work, job - Noun +場合 ばあい - situation, case - Noun +車 くるま - car, automobile - Noun +電車 でんしゃ - train - Noun +駅 えき - railway station - Noun +道 みち - road, street - Noun +他 ほか - other - Noun +止める やめる - stop, give up, abolish - Verb +ここ ここ - here - Pronoun +歩く あるく - walk, go on foot - Verb +走る はしる - run - Verb +近く ちかく - near, close to - Adverb +近い ちかい - near, soon - Adjective +近く ちかく - vicinity, nearby - Noun +遠い とおい - far, distant - Adjective +長い ながい - long - Adjective +短い みじかい - short, brief - Adjective +広い ひろい - wide, big - Adjective +もらう もらう - receive - Verb +全部 ぜんぶ - all, wholly - Adverb +国 くに - country - Noun +白い しろい - white, blank - Adjective +赤い あかい - red - Adjective +部屋 へや - room - Noun +米 こめ - rice (grain) - Noun +未だ まだ - yet, more - Adverb +有る ある - exist, possess - Verb +無い ない - to not be - Adjective +とても とても - very - Adverb +作る つくる - make, create - Verb +使う つかう - use - Verb +消す けす - switch off, turn off - Verb +売る うる - sell - Verb +店 みせ - shop, store - Noun +春 はる - spring - Noun +夏 なつ - summer - Noun +秋 あき - autumn, fall - Noun +冬 ふゆ - winter - Noun +みんな みんな - all, everybody - Noun +暑い あつい - hot, warm (temperature of the air) - Adjective +熱い あつい - hot (things, touch) - Adjective +寒い さむい - cold (temperature of the air) - Adjective +暖かい あたたかい - warm - Adjective +新しい あたらしい - new - Adjective +古い ふるい - old - Adjective +良い いい - good - Adjective +悪い わるい - bad - Adjective +思う おもう - think - Verb +いつも いつも - always - Adverb +忘れる わすれる - forget, leave behind - Verb +考える かんがえる - think, consider - Verb +決める きめる - decide, agree upon - Verb +決まる きまる - be decided - Verb +知る しる - know - Verb +一番 いちばん - most - Adverb +住む すむ - live, reside - Verb +名前 なまえ - name - Noun +食べ物 たべもの - food - Noun +いつ いつ - when - Noun +飲み物 のみもの - beverage, drink - Noun +重い おもい - heavy - Adjective +軽い かるい - light, light weight - Adjective +送る おくる - send - Verb +取る とる - take, get - Verb +待つ まつ - wait, wait for - Verb +持つ もつ - have, possess - Verb +気持ち きもち - feeling, sensation - Noun +生きる いきる - live (one's life) - Verb +どちら どちら - which - Noun +先生 せんせい - teacher - Noun +大学 だいがく - university, college - Noun +学生 がくせい - student - Noun +大学生 だいがくせい - university student - Noun +学校 がっこう - school - Noun +高校生 こうこうせい - high school student - Noun +教える おしえる - teach, tell - Verb +勉強 べんきょう - study - Verbal Noun +強い つよい - strong - Adjective +どれ どれ - what, which - Noun +弱い よわい - weak - Adjective +引く ひく - draw, pull - Verb +質問 しつもん - question - Verbal Noun +難しい むずかしい - difficult - Adjective +数 かず - number - Noun +勝つ かつ - win - Verb +負ける まける - lose - Verb +本当に ほんとうに - really, truly - Adverb +要る いる - need, require - Verb +ドア ドア - door - Noun +時計 とけい - clock, watch - Noun +払う はらう - pay - Verb +切る きる - cut - Verb +変える かえる - change - Verb +乗る のる - ride, take - Verb +着る きる - wear, put on - Verb +立つ たつ - stand, rise - Verb +座る すわる - sit, sit down - Verb +次 つぎ - next - Noun +しゃべる しゃべる - chat, talk - Verb +動く うごく - move - Verb +働く はたらく - work - Verb +早い はやい - early - Adjective +速い はやい - fast - Adjective +遅い おそい - slow, late - Adjective +始める はじめる - begin, start - Verb +始まる はじまる - begin - Verb +終わる おわる - finish, end - Verb +終わり おわり - end, conclusion - Noun +テーブル テーブル - table - Noun +去年 きょねん - last year - Noun +紙 かみ - paper - Noun +楽しむ たのしむ - enjoy - Verb +楽しい たのしい - fun, enjoyable - Adjective +歌う うたう - sing - Verb +欲しい ほしい - want, desire - Adjective +色 いろ - color - Noun +茶色 ちゃいろ - light brown - Noun +直ぐ すぐ - at once, soon - Adverb +ゲーム ゲーム - game - Noun +書き直す かきなおす - rewrite - Verb +直る なおる - be repaired, return to normal - Verb +線 せん - line - Noun +曲がる まがる - turn - Verb +同じ おなじ - same, identical - Adjectival Noun +違う ちがう - differ, be wrong - Verb +図書館 としょかん - library - Noun +泊まる とまる - stay overnight - Verb +遊ぶ あそぶ - play - Verb +どうして どうして - why - Adverb +服 ふく - clothes - Noun +お父さん おとうさん - father - Noun +父 ちち - (speaker's)father - Noun +お母さん おかあさん - mother - Noun +母 はは - (speaker's)mother - Noun +親 おや - parent - Noun +姉 あね - older sister - Noun +お姉さん おねえさん - older sister - Noun +妹 いもうと - younger sister - Noun +おなか おなか - stomach - Noun +兄 あに - older brother - Noun +お兄さん おにいさん - older brother - Noun +弟 おとうと - younger brother - Noun +娘 むすめ - daughter, girl - Noun +息子 むすこ - son - Noun +若い わかい - young - Adjective +彼女 かのじょ - she, one's girlfriend - Pronoun +彼 かれ - he, one's boyfriend - Noun +結婚 けっこん - marriage - Verbal Noun +ミーティング ミーティング - meeting - Noun +自転車 じてんしゃ - bicycle - Noun +自分 じぶん - self, oneself - Noun +ご主人 ごしゅじん - (your) husband - Noun +答える こたえる - answer, reply - Verb +別 べつ - another, different - Adjectival Noun +病気 びょうき - illness - Verbal Noun +死ぬ しぬ - die - Verb +痛い いたい - painful - Adjective +酒 さけ - alcoholic drink, Japanese rice wine - Noun +つける つける - switch on - Verb +一杯 いっぱい - full - Adverb +飛ぶ とぶ - fly - Verb +飛行機 ひこうき - airplane - Noun +お願い おねがい - favor - Verbal Noun +続く つづく - continue, follow - Verb +日記 にっき - diary - Noun +首 くび - neck - Noun +頭 あたま - head - Noun +顔 かお - face - Noun +あれ あれ - that over there - Noun +感じる かんじる - feel, sense - Verb +探す さがす - search for, look for - Verb +落ちる おちる - fall, sink - Verb +お手洗い おてあらい - toilet, bathroom - Noun +冷たい つめたい - cold (things, touch) - Adjective +汚い きたない - dirty - Adjective +太い ふとい - thick, fat - Adjective +曇る くもる - become cloudy - Verb +神 かみ - god, spirit - Noun +まずい まずい - bad-tasting, bad - Adjective +建てる たてる - build, erect - Verb +置く おく - put, leave - Verb +辺 へん - area; vicinity - Noun +黄色い きいろい - yellow - Adjective +一緒に いっしょに - together, at the same time - Adverb +緑 みどり - green, foliage - Noun +易しい やさしい - easy, simple - Adjective +留学生 りゅうがくせい - student studying abroad - Noun +戻る もどる - return, turn back - Verb +そば そば - side, vicinity - Noun +起きる おきる - get up, get out of bed - Verb +起こる おこる - happen - Verb +起こす おこす - wake up - Verb +起きる おきる - occur, wake up - Verb +寝る ねる - sleep, go to sleep - Verb +細い ほそい - thin, slender, narrow - Adjective +載せる のせる - place, put on - Verb +締める しめる - tighten, fasten - Verb +甘い あまい - sweet - Adjective +こっち こっち - here - Pronoun +辛い からい - spicy, salty - Adjective +優しい やさしい - gentle, kind - Adjective +夫 おっと - husband - Noun +妻 つま - wife - Noun +誰 だれ - who, whom - Noun +愛する あいする - love, care for - Verb +笑う わらう - laugh, smile - Verb +酸っぱい すっぱい - sour - Adjective +言葉 ことば - word, language - Noun +よう よう - way, like, kind - Noun +呼ぶ よぶ - call, name - Verb +胸 むね - chest - Noun +腰 こし - hip, lower back - Noun +背 せ - height, stature - Noun +片仮名 かたかな - katakana - Noun +平仮名 ひらがな - hiragana - Noun +悲しい かなしい - sad - Adjective +美しい うつくしい - beautiful - Adjective +授業 じゅぎょう - class, lesson - Verbal Noun +あそこ あそこ - over there - Pronoun +手伝う てつだう - help, assist - Verb +狭い せまい - narrow, restricted - Adjective +触る さわる - touch, feel - Verb +嫌い きらい - dislike - Adjective +浴びる あびる - take (a shower) - Verb +渇く かわく - be thirsty - Verb +髪の毛 かみのけ - hair - Noun +肩 かた - shoulder - Noun +鼻 はな - nose - Noun +おいしい おいしい - tasty - Adjective +腕 うで - arm - Noun +掛ける かける - hang, put on - Verb +僕 ぼく - I (young male) - Noun +駄目 だめ - no good - Adjectival Noun +大丈夫 だいじょうぶ - alright, OK - Adjectival Noun +風邪 かぜ - cold (illness) - Noun +奇麗 きれい - beautiful - Adjectival Noun +嬉しい うれしい - happy, glad - Adjective +なる なる - become - Verb +ため ため - sake, purpose - Noun +より より - more, further - Adverb +七 しち - seven - Noun +九 く - nine - Noun +億 おく - hundred million - Noun +寺 てら - buddhist temple - Noun +ドル ドル - dollar - Noun +日 ひ - sun, sunlight, day - Noun +火 ひ - fire - Noun +木 き - tree, wood - Noun +金 きん - gold, sum of money, Friday - Noun +システム システム - system - Noun +十分 じゅうぶん - full, plentiful - Adjectival Noun +分 ぶん - amount, part, share - Noun +分ける わける - divide into parts, sort, share - Verb +分かれる わかれる - be divided, disperse, branch off - Verb +コンピューター コンピューター - computer - Noun +何か なにか - something - Noun +何 なん - what, which - Noun +先ず まず - first - Adverb +先月 せんげつ - last month - Noun +やる やる - give (to an inferior) - Verb +先週 せんしゅう - last week - Noun +今まで いままで - until now, so far - Adverb +来月 らいげつ - next month - Noun +来週 らいしゅう - next week - Noun +ロボット ロボット - robot - Noun +行う おこなう - do, carry out - Verb +行き いき - going - Noun +行き ゆき - going - Noun +帰り かえり - return, going home - Noun +ほとんど ほとんど - almost, hardly - Adverb +大きさ おおきさ - size, dimensions - Noun +大分 だいぶ - very, greatly - Adverb +中 なか - inside, middle - Noun +少年 しょうねん - boy - Noun +パソコン パソコン - personal computer - Noun +少しも すこしも - at all - Adverb +少々 しょうしょう - a little, a few - Adverb +多く おおく - many, much, largely - Adverb +上がる あがる - go up, rise - Verb +もう もう - another, again - Adverb +上がる あがる - get nervous, get stage fright - Verb +年上 としうえ - older, senior - Noun +上り のぼり - going up, ascent - Noun +下げる さげる - lower, turn down - Verb +プログラム プログラム - program - Noun +下がる さがる - come down, hang down, fall - Verb +下りる おりる - go down, come down - Verb +下ろす おろす - bring down, take down, pull down - Verb +下り くだり - downhill, going down - Noun +よく よく - well - Adverb +年下 としした - younger, junior - Noun +下る くだる - go down, go down or away from a central place - Verb +一方 いっぽう - one way - Noun +方 かた - person (polite form) - Noun +まま まま - as is, still (in the current state) - Noun +二人 ふたり - two persons - Noun +大人しい おとなしい - gentle, quiet, subdued - Adjective +人々 ひとびと - people - Noun +一人で ひとりで - by oneself - Adverb +テレビ テレビ - television - Noun +外人 がいじん - foreigner, alien - Noun +外 そと - outside, open air - Noun +休日 きゅうじつ - holiday, day off - Noun +休み やすみ - rest, holiday, absence - Noun +ソフト ソフト - software, programme - Noun +力 ちから - strength, power - Noun +協力 きょうりょく - cooperation, collaboration - Verbal Noun +人口 じんこう - population - Noun +出口 でぐち - exit, exit ramp - Noun +ただ ただ - free - Noun +入り口 いりぐち - entrance - Noun +右手 みぎて - right hand - Noun +左手 ひだりて - left hand - Noun +下手 へた - not good at - Adjectival Noun +これら これら - these - Noun +足りる たりる - suffice, serve, be satisfied - Verb +足す たす - add, supplement - Verb +山 やま - mountain - Noun +川 かわ - river, stream - Noun +いずれ いずれ - eventually, sometime - Adverb +空く あく - become available or vacant - Verb +空手 からて - karate, empty hand - Noun +空 そら - sky, weather - Noun +海外 かいがい - overseas, abroad - Noun +あまり あまり - (not) much - Adverb +海 うみ - sea, ocean - Noun +毎日 まいにち - every day - Noun +毎年 まいとし - every year - Noun +毎年 まいねん - every year (also まいとし) - Noun +なお なお - still, in addition - Adverb +毎週 まいしゅう - every week - Noun +毎月 まいつき - every month - Noun +石 いし - stone, small rock - Noun +田んぼ たんぼ - rice field - Noun +ほぼ ほぼ - almost, nearly - Adverb +花 はな - flower - Noun +林 はやし - woods, grove - Noun +森 もり - thick woods, forest - Noun +子 こ - child, kid - Noun +サービス サービス - service, on the house - Verbal Noun +女の子 おんなのこ - girl, daughter - Noun +男の子 おとこのこ - boy, baby boy - Noun +私たち わたしたち - we - Noun +達する たっする - attain, reach - Verb +グループ グループ - group - Noun +家 いえ - house, home - Noun +家内 かない - my wife - Noun +客 きゃく - visitor, customer - Noun +空気 くうき - air, atmosphere - Noun +ホテル ホテル - hotel - Noun +気に入る きにいる - like, be pleased with - Verb +人気 にんき - popularity, popular feeling, business conditions - Noun +雨 あめ - rain - Noun +雪 ゆき - snow, snowfall - Noun +まとめる まとめる - gather together, put in order - Verb +青い あおい - blue - Adjective +青 あお - blue, green, green light - Noun +晴れ はれ - fine weather, clear sky - Noun +明らか あきらか - clear, obvious - Adjective +やはり やはり - as expected, also, still - Adverb +明るい あかるい - bright, cheerful - Adjective +明日 あした - tomorrow - Noun +暗い くらい - dark, dreary, shadowy - Adjective +昨年 さくねん - last year - Noun +はっきり はっきり - clearly - Adverb +一昨年 おととし - the year before last - Noun +一昨日 おととい - day before yesterday - Noun +東 ひがし - east, eastern - Noun +西 にし - west, western - Noun +つまり つまり - in short, basically - Adverb +南 みなみ - south - Noun +北 きた - north - Noun +方向 ほうこう - direction, course - Noun +向かう むかう - face, confront, head toward - Verb +ビル ビル - building - Noun +向こう むこう - the other side, the other party, opponent - Noun +向く むく - turn, face, look - Verb +開く あく - open - Verb +聞こえる きこえる - hear, be heard - Verb +もちろん もちろん - of course, no doubt - Adverb +年間 ねんかん - period of one year - Noun +この間 このあいだ - the other day, recently - Noun +間 あいだ - interval - Noun +人間 にんげん - human being, people - Noun +かつて かつて - once, formerly - Adverb +高さ たかさ - height - Noun +最大 さいだい - biggest, largest - Noun +初めて はじめて - for the first time - Adverb +最初 さいしょ - first, outset - Noun +スポーツ スポーツ - sport - Noun +初め はじめ - beginning - Noun +今後 こんご - after this, in the future - Noun +後 のち - after, afterwards - Noun +最後 さいご - last, final - Noun +なぜ なぜ - why, for what reason - Adverb +明後日 あさって - day after tomorrow - Noun +牛 うし - cattle, cow - Noun +半分 はんぶん - half - Noun +半年 はんとし - half a year - Noun +そのまま そのまま - like that, unchanged - Adverb +半月 はんつき - half a month - Noun +半日 はんにち - half a day - Noun +毎朝 まいあさ - every morning - Noun +今朝 けさ - this morning - Noun +もし もし - if, in case of - Adverb +昼休み ひるやすみ - noon recess, lunch break - Noun +昼前 ひるまえ - in the morning, before noon - Noun +昼間 ひるま - daytime, day - Noun +毎晩 まいばん - every evening - Noun +つもり つもり - intention, purpose - Noun +今夜 こんや - tonight, this evening - Noun +昨夜 ゆうべ - last night, last evening - Noun +夜中 よなか - midnight, dead of night - Noun +夕方 ゆうがた - evening - Noun +やっと やっと - at last, finally - Adverb +昼食 ちゅうしょく - lunch - Noun +朝食 ちょうしょく - breakfast - Noun +夕食 ゆうしょく - supper - Noun +夕飯 ゆうはん - evening meal, supper - Noun +ニュース ニュース - news - Noun +見方 みかた - view, way of looking - Noun +花見 はなみ - flower viewing - Noun +言い方 いいかた - way of speaking, expression - Noun +話 はなし - talk, story - Noun +ずっと ずっと - all day, from start to finish - Adverb +読み よみ - reading, judgment, foresight - Noun +読み方 よみかた - way of reading, reading - Noun +語る かたる - to talk about; to tell - Verb +言語 げんご - language - Noun +ビデオ ビデオ - video - Noun +英語 えいご - English - Noun +文字 もじ - character, letter - Noun +ローマ字 ろーまじ - Roman alphabet - Noun +字 じ - character, letter - Noun +マンション マンション - apartment, apartment block, condominium - Noun +書き方 かきかた - how to write, way of writing - Noun +覚める さめる - awake, wake up - Verb +覚ます さます - awaken, wake up - Verb +大会 たいかい - mass meeting, tournament - Noun +しばらく しばらく - a while - Adverb +会話 かいわ - conversation - Verbal Noun +話し合う はなしあう - discuss, talk over - Verb +合う あう - fit - Verb +間に合う まにあう - be in time, serve the purpose - Verb +ガス ガス - gas - Noun +会社 かいしゃ - company, corporation - Noun +社会 しゃかい - society - Noun +社員 しゃいん - staff member, employee - Noun +仕方 しかた - way, method - Noun +うまい うまい - good at - Adjective +食事 しょくじ - meal, dinner - Verbal Noun +火事 かじ - fire - Noun +大事 だいじ - importance - Adjectival Noun +事故 じこ - accident, incident - Noun +サラリーマン サラリーマン - office worker, salaried worker, company employee - Noun +工事 こうじ - construction - Verbal Noun +工場 こうじょう - factory, plant - Noun +電話 でんわ - telephone, phone call - Verbal Noun +電気 でんき - electricity, electric light - Noun +バス バス - bus - Noun +車 くるま - car - Noun +駅員 えきいん - station employee - Noun +通り とおり - passage, street - Noun +通る とおる - pass, take, go through - Verb +クラス クラス - class - Noun +通う かよう - go to and from, frequent a place - Verb +交通事故 こうつうじこ - traffic accident - Noun +水道 すいどう - water supply - Noun +車道 しゃどう - road, roadway - Noun +トラック トラック - truck, lorry - Noun +道路 どうろ - road, street - Noun +土地 とち - land - Noun +地図 ちず - map, atlas - Noun +他 た - others, other things - Noun +パーティー パーティー - party - Verbal Noun +止める とめる - stop, turn off - Verb +止まる とまる - come to a stop, cease - Verb +止む やむ - stop, abate - Verb +歩道 ほどう - sidewalk, footpath - Noun +うまい うまい - delicious, tasty - Adjective +渡す わたす - carry across, hand over - Verb +渡る わたる - cross, go across - Verb +年度 ねんど - fiscal year, school year - Noun +今度 こんど - this time, next time - Noun +ガラス ガラス - glass - Noun +何度 なんど - how many times - Noun +最近 さいきん - recently - Noun +遠く とおく - great distance - Adverb +社長 しゃちょう - president (of a company) - Noun +コース コース - course, route - Noun +会長 かいちょう - president, chairperson - Noun +長さ ながさ - length - Noun +長男 ちょうなん - eldest son - Noun +長女 ちょうじょ - eldest daughter - Noun +アパート アパート - apartment, flat, apartment house - Noun +広がる ひろがる - spread out, reach - Verb +広さ ひろさ - area, extent - Noun +全体 ぜんたい - whole, total - Noun +全く まったく - entirely, truly, indeed - Adverb +レコード レコード - record - Noun +安全 あんぜん - safety, security - Adjectival Noun +一部 いちぶ - one part - Noun +部分 ぶぶん - part, section - Noun +国内 こくない - domestic, internal - Noun +どんどん どんどん - knock - Adverb +全国 ぜんこく - the whole country - Noun +外国 がいこく - foreign country - Noun +国会 こっかい - National Diet, parliament - Noun +帰国 きこく - return to one's country - Verbal Noun +カメラ カメラ - camera - Noun +外国人 がいこくじん - foreigner - Noun +外国語 がいこくご - foreign language - Noun +世界 せかい - world - Noun +白 しろ - white - Noun +テープ テープ - tape, cassette - Noun +黒い くろい - black, dark - Adjective +黒 くろ - black - Noun +赤ちゃん あかちゃん - baby - Noun +赤 あか - red, crimson - Noun +ビール ビール - beer, lager - Noun +銀行 ぎんこう - bank - Noun +銀 ぎん - silver - Noun +地下鉄 ちかてつ - subway - Noun +牛肉 ぎゅうにく - beef - Noun +ページ ページ - page - Noun +肉 にく - flesh, meat - Noun +魚 さかな - fish - Noun +分野 ぶんや - field, sphere - Noun +野菜 やさい - vegetable - Noun +グラフ グラフ - chart, graph - Noun +本屋 ほんや - bookstore, bookseller - Noun +八百屋 やおや - vegetable store, greengrocer - Noun +そば屋 そばや - soba restaurant - Noun +たばこ屋 たばこや - cigarette shop, tobacco store - Noun +ポスト ポスト - post box, letter box - Noun +茶 ちゃ - tea (plain form) - Noun +お茶 おちゃ - tea (polite) - Noun +茶わん ちゃわん - tea cup, rice bowl - Noun +味 あじ - taste, flavor - Noun +テスト テスト - test, exam - Verbal Noun +未来 みらい - future - Noun +週末 しゅうまつ - weekend - Noun +料理 りょうり - cooking, dealing with something - Verbal Noun +無理 むり - unreasonable, impossible, forced - Adjectival Noun +あちこち あちこち - all over - Noun +無くす なくす - lose, get rid of - Verb +無くなる なくなる - disappear, run short, get lost - Verb +作文 さくぶん - composition, essay - Noun +用いる もちいる - use, make use of - Verb +ゴルフ ゴルフ - golf - Noun +用事 ようじ - things to do, errand - Noun +交通費 こうつうひ - traveling expense, transportation cost - Noun +消える きえる - to go out (lights), to disappear - Verb +消しゴム けしごむ - eraser - Noun +ラジオ ラジオ - radio - Noun +売れる うれる - sell, be in demand - Verb +売り場 うりば - sales floor, department - Noun +店員 てんいん - clerk, salesperson - Noun +売店 ばいてん - booth, shop - Noun +タクシー タクシー - taxi, cab - Noun +商品 しょうひん - goods, commodities - Noun +作品 さくひん - work of art, piece - Noun +販売 はんばい - sale, selling - Verbal Noun +二階 にかい - second floor, upstairs - Noun +ゆっくり ゆっくり - slowly - Adverb +段階 だんかい - stage - Noun +階段 かいだん - steps, flight of stairs - Noun +段々 だんだん - gradually, by degrees - Adverb +値段 ねだん - price - Noun +レストラン レストラン - restaurant - Noun +価格 かかく - price, cost - Noun +合格 ごうかく - passing an examination, eligibility - Verbal Noun +夏休み なつやすみ - summer vacation - Noun +冬休み ふゆやすみ - winter vacation - Noun +カード カード - card, credit card - Noun +四季 しき - the four seasons - Noun +暑さ あつさ - heat, summer heat - Noun +熱 ねつ - heat, fever - Noun +寒さ さむさ - coldness, cold - Noun +アルバイト アルバイト - casual job, student job, part-time job - Verbal Noun +暖める あたためる - warm, warm up, heat up - Verb +暖まる あたたまる - get warm - Verb +温度 おんど - temperature - Noun +気温 きおん - temperature - Noun +コピー コピー - copy, photocopy - Verbal Noun +台 だい - stand, platform - Noun +風 かぜ - wind - Noun +台風 たいふう - typhoon - Noun +事情 じじょう - circumstances, conditions - Noun +ぶつかる ぶつかる - hit, bump into - Verb +情報 じょうほう - information - Noun +報告 ほうこく - report - Verbal Noun +新聞 しんぶん - newspaper - Noun +新年 しんねん - New Year - Noun +フィルム フィルム - film - Noun +良い よい - good, suitable, preferable - Adjective +中心 ちゅうしん - center, middle - Noun +安心 あんしん - peace of mind, relief - Verbal Noun +思い出す おもいだす - recollect, recall - Verb +デパート デパート - department store, department - Noun +思い出 おもいで - recollections, memory - Noun +考え かんがえ - thought, view, idea - Noun +解決 かいけつ - solution, settlement - Verbal Noun +知らせる しらせる - let know, inform - Verb +ベッド ベッド - bed - Noun +能力 のうりょく - ability, capacity - Noun +可能 かのう - possible, potential - Adjectival Noun +可 か - permitted, OK - Noun +郵便 ゆうびん - mail service, mail - Noun +コート コート - coat, jacket - Noun +不便 ふべん - inconvenient - Adjectival Noun +郵便屋さん ゆうびんやさん - mailman - Noun +郵便局 ゆうびんきょく - post office - Noun +交番 こうばん - police box - Noun +ノート ノート - note book, laptop - Noun +番地 ばんち - house number, address - Noun +番号 ばんごう - number, series of digits - Noun +場所 ばしょ - place, space - Noun +近所 きんじょ - neighborhood - Noun +ワイン ワイン - wine - Noun +台所 だいどころ - kitchen - Noun +住所 じゅうしょ - one's dwelling, address - Noun +便所 べんじょ - bathroom - Noun +有名 ゆうめい - famous - Adjectival Noun +おかしい おかしい - strange, funny, suspicious - Adjective +名字 みょうじ - surname - Noun +氏名 しめい - full name - Noun +各国 かっこく - each country - Noun +町 まち - town, neighborhood - Noun +トイレ トイレ - toilet - Noun +都市 とし - city - Noun +都合 つごう - circumstances - Noun +朝御飯 あさごはん - breakfast - Noun +買い物 かいもの - shopping, purchase - Verbal Noun +キャンプ キャンプ - camping, camp - Verbal Noun +荷物 にもつ - baggage, package - Noun +品物 しなもの - goods, thing - Noun +見物 けんぶつ - sightseeing - Verbal Noun +物 もの - thing, object - Noun +プラスチック プラスチック - plastic - Noun +忘れ物 わすれもの - something left behind, lost item - Noun +重さ おもさ - weight - Noun +配る くばる - distribute - Verb +配達 はいたつ - delivery - Verbal Noun +カラー カラー - color - Noun +心配 しんぱい - worry, anxiety - Verbal Noun +見送る みおくる - see (someone) off - Verb +見送り みおくり - seeing someone off - Verbal Noun +受ける うける - receive, accept - Verb +ピアノ ピアノ - piano - Noun +受け取る うけとる - receive, understand - Verb +取れる とれる - come off, be removed - Verb +書き取る かきとる - write down, take notes - Verb +届く とどく - to reach, to arrive - Verb +スキー スキー - ski, skiing - Noun +届ける とどける - deliver, give notice - Verb +持つ もつ - maintain, last long - Verb +金持ち かねもち - wealthy person - Noun +持って行く もっていく - take - Verb +なかなか なかなか - not at all (with negative verb), hardly - Adverb +持って来る もってくる - bring - Verb +打つ うつ - hit, strike - Verb +投げる なげる - throw, abandon - Verb +生まれる うまれる - be born - Verb +プール プール - pool - Noun +生む うむ - have children - Verb +女性 じょせい - woman, female - Noun +生産 せいさん - production - Verbal Noun +お土産 おみやげ - souvenir - Noun +ホーム ホーム - platform - Noun +生活 せいかつ - living; life (one's daily existence) - Verbal Noun +生徒 せいと - pupil, student - Noun +中学 ちゅうがく - junior high school - Noun +入学 にゅうがく - enter a school, matriculate - Verbal Noun +エレベーター エレベーター - elevator - Noun +中学生 ちゅうがくせい - junior high school student - Noun +小学生 しょうがくせい - elementary school student - Noun +見学 けんがく - inspection, field trip - Verbal Noun +通学 つうがく - school commute - Verbal Noun +メモ メモ - memorandum, memo pad - Noun +高校 こうこう - high school - Noun +小学校 しょうがっこう - elementary school - Noun +中学校 ちゅうがっこう - junior high school - Noun +校長 こうちょう - principal, schoolmaster - Noun +パン パン - bread - Noun +休校 きゅうこう - temporary closure of school - Verbal Noun +教会 きょうかい - church - Noun +教育 きょういく - education - Verbal Noun +育てる そだてる - bring up - Verb +びっくりする びっくりする - to be surprised - Verb +育つ そだつ - be brought up, grow - Verb +制度 せいど - system, organization - Noun +強さ つよさ - strength, power - Noun +取引 とりひき - transaction, dealings - Verbal Noun +ズボン ズボン - trousers, pants - Noun +引き出し ひきだし - drawer, withdrawal - Noun +押さえる おさえる - hold down - Verb +押し入れ おしいれ - closet - Noun +練習 れんしゅう - practice, training - Verbal Noun +おもちゃ おもちゃ - toy, plaything - Noun +習う ならう - learn, study - Verb +慣れる なれる - grow accustomed to - Verb +習慣 しゅうかん - custom, habit - None +研究 けんきゅう - research, study - Verbal Noun +グラム グラム - gram - Noun +試験 しけん - test, examination - Verbal Noun +問題 もんだい - problem, question - Noun +簡単 かんたん - simple, easy - Adjectival Noun +複雑 ふくざつ - complicated, intricate - Adjectival Noun +コーヒー コーヒー - coffee - Noun +数字 すうじ - figure, numeral - Noun +数学 すうがく - mathematics - Noun +数える かぞえる - count, calculate - Verb +今回 こんかい - this time - Noun +テント テント - tent - Noun +回る まわる - to turn, to revolve - Verb +回す まわす - turn, rotate - Verb +個人 こじん - individual - Noun +担当 たんとう - person in charge - Verbal Noun +ボート ボート - boat - Noun +当たる あたる - hit, strike - Verb +当時 とうじ - at that time - Noun +本当 ほんとう - truth, reality - Noun +当然 とうぜん - natural, as a matter of course - Adjectival Noun +ボール ボール - ball - Noun +全然 ぜんぜん - wholly, (not) at all (with negative verb) - Adverb +方法 ほうほう - method, procedure - Noun +法律 ほうりつ - law - Noun +規則 きそく - rule, regulation - Noun +オートバイ オートバイ - motorbike, motorcycle - Noun +経験 けいけん - experience - Verbal Noun +経つ たつ - pass, elapse - Verb +経済 けいざい - economy, economics - Noun +経営 けいえい - management, operation - Verbal Noun +ひどい ひどい - cruel, severe - Adjective +株 かぶ - stocks, shares - Noun +企業 きぎょう - corporation, business - Noun +作業 さぎょう - work, operation - Verbal Noun +産業 さんぎょう - industry - Noun +あなた あなた - you - Noun +工業 こうぎょう - (manufacturing) industry - Noun +商業 しょうぎょう - commerce, trade - Noun +利用 りよう - utilization, usage - Verbal Noun +便利 べんり - convenience, handiness - Adjectival Noun +スイッチ スイッチ - switch - Noun +技術 ぎじゅつ - skill, technology - Noun +手術 しゅじゅつ - surgical operation - Verbal Noun +製造 せいぞう - production, manufacture - Verbal Noun +必ず かならず - without fail, certainly - Adverb +プレゼント プレゼント - present, gift - Verbal Noun +必要 ひつよう - need, necessity - Adjectival Noun +重要 じゅうよう - important, essential - Adjectival Noun +要求 ようきゅう - demand, requirement - Verbal Noun +目覚まし時計 めざましどけい - alarm clock - Noun +いつでも いつでも - at any time; always - Adverb +計算 けいさん - calculation - Verbal Noun +引き算 ひきざん - subtraction - Verbal Noun +足し算 たしざん - addition - Verbal Noun +交差点 こうさてん - crossing, intersection - Noun +テニス テニス - tennis - Verbal Noun +割る わる - divide, crack, split - Verb +割れる われる - crack, be divided, split - Verb +割り算 わりざん - division - Verbal Noun +残る のこる - remain, be left over - Verb +こちら こちら - here, this way - Noun +残す のこす - to leave (behind); to reserve - Verb +返す かえす - return, repay - Verb +返事 へんじ - answer, reply - Verbal Noun +借りる かりる - borrow - Verb +ボタン ボタン - button - Noun +貸す かす - lend, lease - Verb +貸し出す かしだす - lend, lend out - Verb +申し込む もうしこむ - apply, make a proposal - Verb +期待 きたい - expectation, anticipation - Verbal Noun +おかしい おかしい - funny, amusing, comical - Adjective +期間 きかん - period, term - Noun +時期 じき - time, season - Noun +限る かぎる - to limit, to be limited to - Verb +急ぐ いそぐ - hurry, hasten - Verb +コート コート - court - Noun +急に きゅうに - suddenly, unexpectedly - Adverb +急 きゅう - urgent, dire, pressing - Adjectival Noun +急行 きゅうこう - express train, going in a hurry - Noun +切れる きれる - run out, expire, can cut - Verb +ドラマ ドラマ - drama, theater, soap opera - Noun +切手 きって - postage stamp - Noun +売り切れる うりきれる - be sold out, go out of stock - Verb +売り切れ うりきれ - sellout, sold out - Noun +大切 たいせつ - important, valuable - Adjectival Noun +ビザ ビザ - visa - Noun +切符 きっぷ - ticket - Noun +入場券 にゅうじょうけん - entrance ticket - Noun +家賃 やちん - rent - Noun +時代 じだい - era, antiquity - Noun +ポケット ポケット - pocket - Noun +代わる かわる - substitute, be substituted for - Verb +代える かえる - substitute, use in place of - Verb +指 ゆび - finger, toe - Noun +決定 けってい - decision, settlement - Verbal Noun +そろそろ そろそろ - soon, quietly - Adverb +一定 いってい - constant, standardized - Verbal Noun +定期券 ていきけん - commuter's pass - Noun +予定 よてい - schedule, plan - Verbal Noun +天気予報 てんきよほう - weather forecast - Noun +ぶどう ぶどう - grapes - Noun +予習 よしゅう - preparation for a lesson - Verbal Noun +予約 よやく - reservation, subscription - Verbal Noun +約束 やくそく - promise, vow - Verbal Noun +変わる かわる - change - Verb +めったに めったに - rarely - Adverb +大変 たいへん - awful, serious - Adjectival Noun +変 へん - strange, weird, funny - Adjectival Noun +変化 へんか - change - Verbal Noun +強化 きょうか - strengthening - Verbal Noun +クリスマス クリスマス - Christmas - Noun +文化 ぶんか - culture - Noun +増える ふえる - increase, accrue - Verb +増やす ふやす - increase, add - Verb +減る へる - decrease, diminish - Verb +ネクタイ ネクタイ - tie, necktie - Noun +減らす へらす - decrease, reduce - Verb +乗り物 のりもの - vehicle - Noun +降りる おりる - get off, descend - Verb +降ろす おろす - unload, set down (下ろす) - Verb +バイオリン バイオリン - violin - Noun +降る ふる - fall, come down - Verb +着く つく - arrive - Verb +着物 きもの - clothes, kimono - Noun +下着 したぎ - underwear - Noun +パスポート パスポート - passport - Noun +上着 うわぎ - coat, jacket - Noun +着せる きせる - to put clothes on (someone) - Verb +脱ぐ ぬぐ - remove clothes, take off - Verb +立場 たちば - standpoint, position - Noun +バッグ バッグ - bag - Noun +目立つ めだつ - stand out, be conspicuous - Verb +立てる たてる - stand, set up, establish - Verb +役に立つ やくにたつ - be useful, be helpful - Verb +出席 しゅっせき - attendance, presence - Verbal Noun +ゴム ゴム - elastic - Noun +席 せき - seat, one's place - Noun +欠席 けっせき - absence, nonattendance - Verbal Noun +次男 じなん - second son - Noun +次女 じじょ - second daughter - Noun +ギター ギター - guitar - Noun +運ぶ はこぶ - carry, transport - Verb +運転 うんてん - drive - Verbal Noun +運転手 うんてんしゅ - driver - Noun +転ぶ ころぶ - tumble down, fall over - Verb +セーター セーター - sweater, pullover - Noun +移る うつる - move, shift - Verb +移す うつす - move, shift, transfer - Verb +動き うごき - movement, motion - Noun +運動 うんどう - movement, exercise - Verbal Noun +やっぱり やっぱり - just as I thought, after all - Adverb +活動 かつどう - activity - Verbal Noun +動物 どうぶつ - animal - Noun +動かす うごかす - move, operate - Verb +不動産屋 ふどうさんや - real estate agent, realtor - Noun +カーテン カーテン - curtain - Noun +早く はやく - early, soon - Adverb +早口 はやくち - fast talking - Noun +速さ はやさ - speed - Noun +速達 そくたつ - special delivery, express mail - Noun +シャツ シャツ - shirt - Noun +遅れる おくれる - be late - Verb +開始 かいし - beginning - Verbal Noun +始めに はじめに - in the beginning, early in - Adverb +現在 げんざい - the present, present time - Noun +ナイフ ナイフ - knife - Noun +実現 じつげん - implementation, realization - Verbal Noun +実施 じっし - enforcement, putting into practice - Verbal Noun +事実 じじつ - fact, truth - Noun +実行 じっこう - practice, execution - Verbal Noun +バイク バイク - motorbike, motor cycle - Noun +実験 じっけん - experiment - Verbal Noun +通過 つうか - passage through (e.g. train skipping a station), passing (e.g. exam) - Verbal Noun +過ぎる すぎる - pass by, exceed - Verb +昼過ぎ ひるすぎ - early afternoon - Noun +いつか いつか - some time, some day - Adverb +過去 かこ - the past - Noun +開発 かいはつ - development - Verbal Noun +発生 はっせい - occurrence, happening - Verbal Noun +発言 はつげん - utterance, speech - Verbal Noun +オレンジ オレンジ - orange - Noun +発見 はっけん - discovery, revelation - Verbal Noun +出発 しゅっぱつ - departure - Verbal Noun +発車 はっしゃ - departure of a vehicle - Verbal Noun +発表 はっぴょう - announcement - Verbal Noun +きつい きつい - tight, difficult - Adjective +表現 ひょうげん - expression - Verbal Noun +代表 だいひょう - representative - Verbal Noun +表 おもて - surface, front side, outside - Noun +表 ひょう - table (e.g. Table 1), list - Noun +さっき さっき - some time ago, only a moment ago - Adverb +手紙 てがみ - letter - Noun +絵 え - picture, painting, drawing - Noun +雑誌 ざっし - magazine, journal - Noun +音 おと - sound, noise - Noun +テキスト テキスト - text, text file - Noun +音 おと - sound, speech sound, Chinese pronunciation of a character - Noun +音楽 おんがく - music - Noun +薬 くすり - medicine; drug; chemical - Noun +歌 うた - song - Noun +ビニール ビニール - plastic bag (vinyl) - Noun +歌手 かしゅ - singer - Noun +欲しがる ほしがる - desire, wish for, covet - Verb +計画 けいかく - plan, project - Verbal Noun +映画 えいが - movie - Noun +りんご りんご - apple - Noun +面白い おもしろい - interesting, amusing - Adjective +写る うつる - to be photographed; to be projected (e.g. in mirror) - Verb +写す うつす - copy, photograph - Verb +写真 しゃしん - photograph - Noun +アルバム アルバム - album - Noun +真っ赤 まっか - deep red - Adjectival Noun +真面目 まじめ - serious, sober, earnest - Adjectival Noun +真ん中 まんなか - center, middle - Noun +真っ白 まっしろ - pure-white - Adjectival Noun +スカート スカート - skirt - Noun +真っ暗 まっくら - pitch-dark - Adjectival Noun +真っ黒 まっくろ - deep-black, jet-black - Adjectival Noun +真っ青 まっさお - deep-blue, pale (skin) - Adjectival Noun +色々 いろいろ - various - Adjectival Noun +ペン ペン - pen - Noun +人形 にんぎょう - doll - Noun +形 かたち - shape, form - Noun +大型 おおがた - large, large scale - Noun +種類 しゅるい - kind, species - Noun +おしゃべり おしゃべり - chatter, talkative - Verbal Noun +直す なおす - repair, cure, alter - Verb +真っ直ぐ まっすぐ - dead straight, honestly - Adverb +直接 ちょくせつ - directly - Adverb +角 かど - corner, edge, angle - Noun +きっと きっと - surely, certainly - Adverb +三角 さんかく - triangle - Noun +四角 しかく - square, quadrilateral - Adjectival Noun +四角い しかくい - square, four-sided - Adjective +四つ角 よつかど - crossroad, intersection - Noun +メニュー メニュー - menu, bill of fare - Noun +曲 きょく - song, melody, tune - Noun +曲げる まげる - bend, curve - Verb +曲がり角 まがりかど - street corner - Noun +同様 どうよう - similar, same (kind) - Adjectival Noun +アイスクリーム アイスクリーム - ice cream - Noun +間違い まちがい - mistake, error - Noun +間違える まちがえる - make a mistake, confuse (transitive) - Verb +間違う まちがう - be mistaken, be incorrect - Verb +似ている にている - look like, resemble - Verb +おしゃれ おしゃれ - dressing up smartly, trendy - Verbal Noun +以上 いじょう - not less than, more than - Noun +旅行 りょこう - travel, trip - Verbal Noun +大使館 たいしかん - embassy - Noun +旅館 りょかん - Japanese inn - Noun +ジュース ジュース - juice, soft drink - Noun +映画館 えいがかん - movie theater - Noun +宿題 しゅくだい - homework - Noun +泊める とめる - lodge, give shelter - Verb +遊び あそび - play, amusement - Noun +ゼロ ゼロ - zero - Noun +洋服 ようふく - Western-style clothes - Noun +教室 きょうしつ - classroom - Noun +図書室 としょしつ - library - Noun +窓 まど - window - Noun +ピンク ピンク - pink - Noun +親しい したしい - intimate, familiar - Adjective +親切 しんせつ - kind, friendly - Adjectival Noun +不親切 ふしんせつ - unkind, inattentive - Adjectival Noun +家族 かぞく - family, household - Noun +グラス グラス - glass - Noun +万歳 ばんざい - Banzai! Hurrah! Long live...! - Verbal Noun +二十歳 はたち - 20 years old - Noun +姉さん ねえさん - older sister, girl, miss - Noun +兄さん にいさん - older brother - Noun +ダンス ダンス - dance, dancing - Verbal Noun +兄弟 きょうだい - sibling - Noun +業者 ぎょうしゃ - businessman - Noun +若者 わかもの - young person, youth - Noun +彼ら かれら - they - Noun +おじ おじ - uncle - Noun +結合 けつごう - combination, joining - Verbal Noun +結果 けっか - result, outcome - Noun +果物 くだもの - fruit - Noun +課題 かだい - task; homework; subject - Noun +サッカー サッカー - soccer, football - Noun +課 か - section, division, lesson - Noun +効果 こうか - effect, result - Noun +自動車 じどうしゃ - automobile - Noun +自然 しぜん - nature - Noun +スープ スープ - soup, broth - Noun +自然 しぜん - natural, naturally - Adjectival Noun +自習 じしゅう - self-study, self-teaching - Verbal Noun +理由 りゆう - reason, cause - Noun +自由 じゆう - freedom - Adjectival Noun +バナナ バナナ - banana - Noun +信じる しんじる - believe, trust, have faith in - Verb +信号 しんごう - signal, traffic light - Noun +頼む たのむ - ask, request, entrust - Verb +市民 しみん - citizens, the public - Noun +うるさい うるさい - noisy, annoying, pesky - Adjective +住民 じゅうみん - residents, dwellers - Noun +主人 しゅじん - master, husband - Noun +議員 ぎいん - legislator - Noun +会議 かいぎ - conference, meeting - Verbal Noun +パトカー パトカー - police car, patrol car - Noun +対する たいする - face, be in response to - Verb +対立 たいりつ - opposition, antagonism - Verbal Noun +反対 はんたい - oppose, object - Verbal Noun +答え こたえ - answer, solution - Noun +ハンバーガー ハンバーガー - hamburger - Noun +特に とくに - especially, particularly - Adverb +特急 とっきゅう - super-express - Noun +特別 とくべつ - special, extraordinary - Adjectival Noun +別々 べつべつ - separately - Adjectival Noun +エスカレーター エスカレーター - escalator - Noun +別れる わかれる - separate, part from - Verb +一般 いっぱん - general, common - Noun +目的 もくてき - purpose, objective - Noun +普通 ふつう - normal, regular - Adjectival Noun +タオル タオル - towel - Noun +並ぶ ならぶ - line up - Verb +並べる ならべる - line up, display, set up - Verb +平和 へいわ - peace, harmony - Adjectival Noun +高等学校 こうとうがっこう - senior high school - Noun +パチンコ パチンコ - pachinko (vertical pinball) - Noun +病院 びょういん - hospital - Noun +入院 にゅういん - be hospitalized - Verbal Noun +大学院 だいがくいん - graduate school - Noun +医者 いしゃ - doctor - Noun +みかん みかん - tangerine, mandarin orange - Noun +お医者さん おいしゃさん - doctor - Noun +歯医者 はいしゃ - dentist - Noun +歯 は - tooth - Noun +歯ブラシ はぶらし - toothbrush - Noun +ケーキ ケーキ - cake - Noun +科学 かがく - science - Noun +教科書 きょうかしょ - textbook - Noun +理科 りか - science - Noun +亡くなる なくなる - die - Verb +コップ コップ - cup, glass - Noun +忙しい いそがしい - busy, occupied - Adjective +疲れる つかれる - get tired, become fatigued - Verb +禁煙 きんえん - no smoking, giving up smoking - Verbal Noun +酔っ払い よっぱらい - drunkard, boozer - Noun +ナイロン ナイロン - nylon - Noun +酔っ払う よっぱらう - get drunk - Verb +危ない あぶない - dangerous, uncertain - Adjective +危険 きけん - danger, dangerous - Adjectival Noun +存在 そんざい - existence, being - Verbal Noun +スーツ スーツ - suit - Noun +注目 ちゅうもく - attention, notice - Verbal Noun +注文 ちゅうもん - order, request - Verbal Noun +意味 いみ - meaning, significance - Noun +意見 いけん - opinion - Noun +チケット チケット - ticket - Noun +注意 ちゅうい - caution; being careful - Verbal Noun +用意 ようい - preparation, getting ready - Verbal Noun +確か たしか - for sure, for certain - Adjectival Noun +確認 かくにん - confirmation - Verbal Noun +チョコレート チョコレート - chocolate - Noun +機能 きのう - function, feature - Verbal Noun +ジェット機 ジェットき - jet airplane - Noun +機械 きかい - machine - Noun +材料 ざいりょう - ingredients; material - Noun +チャンネル チャンネル - channel - Noun +具体的 ぐたいてき - concrete, specific - Adjectival Noun +基づく もとづく - be based on - Verb +基本 きほん - basis, foundation - Noun +基準 きじゅん - standard, criterion - Noun +つまらない つまらない - boring, dull - Adjective +備える そなえる - furnish, equip - Verb +準備 じゅんび - provide for, prepare for - Verbal Noun +設計 せっけい - design, plan - Verbal Noun +施設 しせつ - facilities, institution - Noun +マッチ マッチ - match, matchbox - Noun +設ける もうける - set up, establish - Verb +説明 せつめい - explanation - Verbal Noun +小説 しょうせつ - novel, story - Noun +公開 こうかい - opening (to the public) - Verbal Noun +いとこ いとこ - cousin - Noun +公園 こうえん - park, public garden - Noun +動物園 どうぶつえん - zoo - Noun +祭り まつり - festival - Noun +国際 こくさい - international - Noun +ストーブ ストーブ - paraffin heater, stove - Noun +実際 じっさい - reality; actual conditions - Adverb +飛行場 ひこうじょう - airport, airfield - Noun +航空便 こうくうびん - airmail - Noun +船便 ふなびん - +ail (ship) +Jisho +ガソリンスタンド ガソリンスタンド - gas station - Noun +船 ふね - ship, boat, vessel - Noun +空港 くうこう - airport - Noun +港 みなと - port, harbor - Noun +島 しま - island, isle - Noun +デート デート - date - Verbal Noun +完成 かんせい - completion, finish - Verbal Noun +平成 へいせい - Heisei era - Noun +成功 せいこう - success - Verbal Noun +原因 げんいん - cause, origin - Noun +ふすま ふすま - sliding door, fusuma - Noun +資金 しきん - funds, capital - Noun +投資 とうし - investment - Verbal Noun +願う ねがう - wish, ask a favor, apply for - Verb +正確 せいかく - accurate, precise - Adjectival Noun +レモン レモン - lemon - Noun +正しい ただしい - correct, righteous, lawful - Adjective +正月 しょうがつ - New Year - Noun +正直 しょうじき - honesty; integrity - Adjectival Noun +異なる ことなる - differ - Verb +チーズ チーズ - cheese - Noun +通常 つうじょう - usual, common - Noun +非常に ひじょうに - very, extremely - Adverb +調べる しらべる - investigate, check - Verb +強調 きょうちょう - emphasis, stressed point - Verbal Noun +ドライブ ドライブ - drive - Verbal Noun +季節 きせつ - season - Noun +調査 ちょうさ - investigation, inquiry - Verbal Noun +提供 ていきょう - offer, provide - Verbal Noun +提案 ていあん - proposition, proposal - Verbal Noun +ラケット ラケット - racket - Noun +案内 あんない - guide, inform - Verbal Noun +示す しめす - show, indicate - Verb +連れて行く つれていく - take (a person) along - Verb +連れて来る つれてくる - bring (a person) - Verb +スチュワーデス スチュワーデス - flight attendant - Noun +続ける つづける - continue, keep up - Verb +相手 あいて - opponent; partner - Noun +会談 かいだん - conversation, meeting - Verbal Noun +相談 そうだん - consultation, advice - Verbal Noun +テープレコーダー テープレコーダー - tape recorder, cassette recorder - Noun +記者 きしゃ - journalist, reporter - Noun +記録 きろく - record, documentation - Verbal Noun +録音 ろくおん - sound recording - Verbal Noun +登る のぼる - climb, mount, go up - Verb +ひげ ひげ - moustache, beard - Noun +関する かんする - to concern, relate to - Verb +関連 かんれん - connection, relation - Verbal Noun +関係 かんけい - relation, relationship - Verbal Noun +状況 じょうきょう - state of affairs, conditions - Noun +ぐっすり ぐっすり - sound asleep - Adverb +状態 じょうたい - state, appearance - Noun +治る なおる - be cured, get well - Verb +政治 せいじ - politics - Noun +治す なおす - cure, heal - Verb +ソース ソース - sauce, Worcestershire sauce - Noun +政府 せいふ - government, administration - Noun +党 とう - political party - Noun +対策 たいさく - measure, countermeasure - Noun +政策 せいさく - policy, political measures - Noun +タイプライター タイプライター - typewriter - Noun +選ぶ えらぶ - choose, elect - Verb +選手 せんしゅ - player (in game) - Noun +選挙 せんきょ - election - Verbal Noun +候補 こうほ - candidacy, candidate - Noun +トマト トマト - tomato - Noun +首相 しゅしょう - prime minister - Noun +首都 しゅと - capital - Noun +改革 かいかく - reform - Verbal Noun +革 かわ - leather - Noun +バター バター - butter - Noun +命令 めいれい - command, order - Verbal Noun +番組 ばんぐみ - program (e.g. TV) - Noun +組み立てる くみたてる - build, set up, construct - Verb +組織 そしき - organization, tissue (biological) - Verbal Noun +バレーボール バレーボール - volleyball - Noun +進める すすめる - advance, promote - Verb +進む すすむ - advance, move forward - Verb +進学 しんがく - entering a higher-level school, esp. going on to university - Verbal Noun +拡大 かくだい - magnification, enlargement - Verbal Noun +おかず おかず - side dish - Noun +責任 せきにん - responsibility, liability - Noun +辞める やめる - resign, retire - Verb +辞書 じしょ - dictionary - Noun +通勤 つうきん - commuting to work - Verbal Noun +カレンダー カレンダー - calendar - Noun +勤める つとめる - serve, hold a job - Verb +事務所 じむしょ - office, one's place of business - Noun +事務室 じむしつ - office - Noun +従来 じゅうらい - former, existing - Noun +ハンドバッグ ハンドバッグ - handbag - Noun +成績 せいせき - results, grades - Noun +集める あつめる - collect, gather - Verb +集まる あつまる - gather, be collected - Verb +採用 さいよう - employment - Verbal Noun +ベル ベル - bell - Noun +給料 きゅうりょう - salary, pay - Noun +卒業 そつぎょう - graduation - Verbal Noun +就職 しゅうしょく - finding employment - Verbal Noun +退院 たいいん - discharge from a hospital - Verbal Noun +インク インク - ink - Noun +契約 けいやく - contract, agreement - Verbal Noun +交渉 こうしょう - negotiation, bargaining - Verbal Noun +事件 じけん - affair, case - Noun +条件 じょうけん - condition - Noun +クーラー クーラー - air conditioning, cooler - Noun +参加 さんか - participation - Verbal Noun +増加 ぞうか - increase, gain - Verbal Noun +加える くわえる - add, include - Verb +加工 かこう - processing, manufacturing - Verbal Noun +ミルク ミルク - milk, baby milk - Noun +比べる くらべる - compare, contrast - Verb +批判 ひはん - criticism, comment - Verbal Noun +評価 ひょうか - evaluation, appraisal - Verbal Noun +対象 たいしょう - target, object (e.g. of worship) - Noun +サラダ サラダ - salad - Noun +故障 こしょう - malfunction, fault, breakdown - Verbal Noun +修理 しゅうり - repair, mending - Verbal Noun +乗り換える のりかえる - +ransfer (trains); to change (bus, train) +Jisho +乗り換え のりかえ - change, transfer (trains, buses) - Verbal Noun +おじさん おじさん - uncle - Noun +換える かえる - to exchange; to interchange - Verb +着替える きがえる - change clothes - Verb +被る かぶる - wear, put on - Verb +破る やぶる - tear, break through, breach (transitive) - Verb +ベルト ベルト - belt - Noun +破れる やぶれる - tear, rip open - Verb +壊す こわす - break, destroy, smash - Verb +壊れる こわれる - break, break down, get out of order - Verb +救急車 きゅうきゅうしゃ - ambulance - Noun +ラーメン ラーメン - ramen (Chinese noodles) - Noun +助ける たすける - help, save - Verb +立派 りっぱ - fine, excellent - Adjectival Noun +警察 けいさつ - police - Noun +管理 かんり - management, administration - Verbal Noun +ライター ライター - lighter - Noun +盗む ぬすむ - steal, rob - Verb +殺す ころす - kill - Verb +逮捕 たいほ - arrest, capture - Verbal Noun +逃げる にげる - escape, run away - Verb +ワイシャツ ワイシャツ - (business) shirt, (white) shirt - Noun +戦争 せんそう - war, battle - Verbal Noun +競争 きょうそう - competition - Verbal Noun +混む・込む こむ・こむ - be crowded, be congested - Verb +大統領 だいとうりょう - president (of a country) - Noun +シャワー シャワー - shower - Noun +捨てる すてる - discard, abandon - Verb +拾う ひろう - pick up, find - Verb +池 いけ - pond - Noun +電池 でんち - battery - Noun +うどん うどん - noodles, Japanese wheat noodles - Noun +深い ふかい - deep, profound, intimate - Adjective +深さ ふかさ - depth, profundity - Noun +浅い あさい - shallow, superficial - Adjective +落とす おとす - drop, lose - Verb +ごみ ごみ - rubbish, trash - Noun +泳ぐ およぐ - swim - Verb +水泳 すいえい - swimming - Verbal Noun +流れる ながれる - flow, pass, drift away - Verb +流行る はやる - be in fashion, be popular - Verb +スーパーマーケット スーパーマーケット - supermarket - Noun +洗う あらう - wash - Verb +洗面所 せんめんじょ - washroom, bathroom - Noun +油 あぶら - oil, animal oil - Noun +沈む しずむ - to sink, to set (sun) - Verb +ハンカチ ハンカチ - handkerchief - Noun +久しぶり ひさしぶり - after a long time - Adjectival Noun +氷 こおり - ice - Noun +冷える ひえる - cool down, feel chilly - Verb +冷やす ひやす - cool, chill - Verb +ビデオテープ ビデオテープ - videotape - Noun +冷める さめる - cool off, subside - Verb +凍る こおる - freeze, congeal - Verb +冷蔵庫 れいぞうこ - refrigerator - Noun +涼しい すずしい - cool, refreshing - Adjective +ぶらぶら ぶらぶら - wander aimlessly, hang about - Adverb +汚す よごす - make dirty, soil - Verb +汚れ よごれ - dirt, filth - Noun +汚れる よごれる - become dirty, become defiled - Verb +景色 けしき - scenery, landscape - Noun +アナウンサー アナウンサー - news reader, announcer - Noun +影響 えいきょう - influence, effect - Verbal Noun +光る ひかる - shine, emit light - Verb +太る ふとる - grow fat, fatten - Verb +太陽 たいよう - sun - Noun +スプーン スプーン - spoon - Noun +星 ほし - star; heavenly body - Noun +地球 ちきゅう - the Earth - Noun +野球 やきゅう - baseball - Noun +雲 くも - cloud - Noun +ブラウス ブラウス - blouse - Noun +曇り くもり - cloudiness, cloudy weather - Noun +地震 じしん - earthquake - Noun +震える ふるえる - tremble, quiver, shake - Verb +振る ふる - wave, shake - Verb +リボン リボン - ribbon - Noun +揺れる ゆれる - shake, sway, rock - Verb +神社 じんじゃ - Shinto shrine - Noun +秘密 ひみつ - secret, privacy - Adjectival Noun +厳しい きびしい - strict, severe, intense - Adjective +いかが いかが - how, what - Adverb +年寄り としより - old people - Noun +歴史 れきし - history - Noun +世紀 せいき - century - Noun +建設 けんせつ - construction - Verbal Noun +ステレオ ステレオ - stereo - Noun +建物 たてもの - building, structure - Noun +建つ たつ - be built, be erected - Verb +構成 こうせい - organization - Verbal Noun +構造 こうぞう - construction, structure - Noun +フォーク フォーク - fork - Noun +橋 はし - bridge - Noun +柱 はしら - pillar, mainstay - Noun +位置 いち - position, place - Verbal Noun +離婚 りこん - divorce - Verbal Noun +おば おば - aunt - Noun +停車 ていしゃ - +e.g. train) +oun Jisho +バス停 ばすてい - bus stop - Noun +周辺 しゅうへん - environs, circumference - Noun +隣 となり - neighbor; next to - Noun +きらきら きらきら - shining, sparkling - Adverb +黄色 きいろ - yellow - Noun +横 よこ - sideways, side, width across - Noun +横書き よこがき - horizontal writing - Noun +判断 はんだん - judgment, decision - Verbal Noun +どうぞ どうぞ - please - Adverb +断る ことわる - refuse, turn down - Verb +横断歩道 おうだんほどう - crosswalk - Noun +大幅 おおはば - drastic; substantial - Na-adjective +訪れる おとずれる - visit, call on - Verb +ネックレス ネックレス - necklace - Noun +訪ねる たずねる - visit, call on - Verb +冷房 れいぼう - air conditioning - Verbal Noun +暖房 だんぼう - heating - Verbal Noun +文房具 ぶんぼうぐ - stationery - Noun +パジャマ パジャマ - pajamas - Noun +諸国 しょこく - various countries - Noun +緑色 みどりいろ - green - Noun; Na-adjective; No-adjective +貿易 ぼうえき - +foreign) +oun Jisho +輸入 ゆにゅう - import - Verbal Noun +ボールペン ボールペン - ballpoint pen - Noun +輸出 ゆしゅつ - export - Verbal Noun +指輪 ゆびわ - ring - Noun +往復 おうふく - going and returning, round trip - Noun +復習 ふくしゅう - review - Verbal Noun +すいか すいか - watermelon - Noun +繰り返す くりかえす - repeat - Verb +留学 りゅうがく - studying abroad - Verbal Noun +停留所 ていりゅうじょ - (bus) stop, station - Noun +書留 かきとめ - registered mail - Noun +そちら そちら - there, that way - Noun +守る まもる - to guard; to keep (a promise) - Verb +留守 るす - not at home - Noun +住宅 じゅうたく - housing, residence - Noun +自宅 じたく - one's house, one's home - Noun +そば そば - buckwheat noodles, soba - Noun +お宅 おたく - your home, you - Noun +早起き はやおき - early rising - Verbal Noun +昼寝 ひるね - nap - Verbal Noun +静か しずか - quiet, tranquil - Adjectival Noun +どっち どっち - どちら (which way, which) - Noun +暇 ひま - free time, spare time - Noun +趣味 しゅみ - hobby, interest - Noun +両方 りょうほう - both - Noun +両替 りょうがえ - money exchange - Verbal Noun +バスケットボール バスケットボール - basketball - Noun +両親 りょうしん - parents; both parents - Noun +片道 かたみち - +way (trip) +Jisho +内側 うちがわ - inside, interior - Noun +向こう側 むこうがわ - other side - Noun +サンドイッチ サンドイッチ - sandwich - Noun +外側 そとがわ - exterior, outside - Noun +左側 ひだりがわ - left side - Noun +右側 みぎがわ - right side - Noun +裏 うら - rear, reverse side, inside - Noun +にこにこ にこにこ - smile - Adverb +裏返す うらがえす - turn over, turn inside out - Verb +週刊誌 しゅうかんし - weekly magazine - Noun +朝刊 ちょうかん - morning edition - Noun +夕刊 ゆうかん - evening edition - Noun +ウール ウール - wool - Noun +詳しい くわしい - detailed, complete - Adjective +細かい こまかい - small, fine - Adjective +細か こまか - small, detailed - Adjectival Noun +積もる つもる - accumulate, pile up - Verb +コーラ コーラ - cola, coke - Noun +訳 やく - translation, rendering - Noun +訳す やくす - translate - Verb +検討 けんとう - consideration; examination - Verbal Noun +塗る ぬる - spread on, paint - Verb +トイレットペーパー トイレットペーパー - toilet paper - Noun +付く つく - to adhere, to be connected with - Verb +付ける つける - attach, set (a price), apply - Verb +受け付ける うけつける - receive, accept - Verb +片付ける かたづける - put in order, do away with - Verb +どなた どなた - who - Noun +受付 うけつけ - reception (desk) - Noun +近付く ちかづく - approach, get acquainted - Verb +片付く かたづく - be put in order, be settled - Verb +気を付ける きをつける - take care of, pay attention to - Verb +ハイキング ハイキング - hiking - Verbal Noun +貼る はる - stick, paste - Verb +記念日 きねんび - holiday; anniversary; memorial day - Noun +残念 ざんねん - regretful, disappointing - Adjectival Noun +例えば たとえば - for example - Adverb +ハム ハム - ham - Noun +例文 れいぶん - example sentence - Noun +例 れい - example, precedent - Noun +余る あまる - to be left over; to be too many - Verb +除く のぞく - exclude; remove - Verb +ボーイフレンド ボーイフレンド - boyfriend - Noun +削る けずる - grind down (plane), trim, scale back - Verb +遅刻 ちこく - tardiness, lateness - Verbal Noun +緩い ゆるい - slack, loose - Adjective +苦しい くるしい - painful, difficult - Adjective +アイロン アイロン - iron - Noun +苦い にがい - bitter - Adjective +苦手 にがて - hard to deal with, not good at - Adjectival Noun +困る こまる - be at a loss, in a jam, in trouble - Verb +貧乏 びんぼう - poverty, destitution - Adjectival Noun +カレーライス カレーライス - curried rice - Noun +不幸 ふこう - unhappiness, misfortune, bereavement - Adjectival Noun +幸せ しあわせ - happiness, good fortune - Adjectival Noun +塩 しお - salt - Noun +塩辛い しおからい - salty - Adjective +キャッシュカード キャッシュカード - cash card - Noun +砂糖 さとう - sugar - Noun +規模 きぼ - scale, scope - Noun +農業 のうぎょう - agriculture - Noun +濃い こい - thick, concentrated, dark-colored - Adjective +イヤリング イヤリング - earrings - Noun +薄い うすい - thin, diluted, pale - Adjective +厚い あつい - thick, bulky - Adjective +厚さ あつさ - thickness - Noun +迫る せまる - to draw near; to urge - Verb +ガールフレンド ガールフレンド - girlfriend - Noun +伸びる のびる - stretch, grow - Verb +引っ越す ひっこす - to move (house) - Verb +越える こえる - go over, go across, go beyond - Verb +引っ越し ひっこし - moving - Verbal Noun +カセットテープ カセットテープ - cassette tape - Noun +追い越す おいこす - outrun, overtake - Verb +上昇 じょうしょう - ascension, rising - Verbal Noun +改札口 かいさつぐち - ticket barrier, wicket - Noun +失礼 しつれい - rudeness; excuse me - Verbal Noun +かゆい かゆい - itchy - Adjective +お礼 おれい - thanks, reward - Verbal Noun +謝る あやまる - apologize - Verb +注射 ちゅうしゃ - injection, shot - Verbal Noun +程度 ていど - degree, extent - Noun +ぐらぐら ぐらぐら - wobble - Adverb +誘う さそう - invite, entice - Verb +導入 どうにゅう - introduction; installation - Verbal Noun +努力 どりょく - endeavor, effort - Verbal Noun +怒る おこる - get angry, scold - Verb +ジャム ジャム - jam - Noun +独身 どくしん - single life, celibacy - Noun +占める しめる - occupy; hold; account for - Verb +処理 しょり - processing; dealing with - Verbal Noun +紹介 しょうかい - introduction, presentation - Verbal Noun +スリッパ スリッパ - slippers - Noun +招く まねく - invite, beckon, cause - Verb +招待 しょうたい - invitation - Verbal Noun +夫婦 ふうふ - husband and wife, married couple - Noun +奥 おく - interior; inner part - Noun +トランプ トランプ - (a pack of) cards, (playing) cards - Verbal Noun +奥さん おくさん - married lady, your wife - Noun +皆さん みなさん - everybody, ladies and gentlemen - Noun +皆様 みなさま - everyone, ladies and gentlemen - Noun +誰か だれか - someone - Noun +よろしい よろしい - all right - Adjective +国籍 こくせき - nationality, citizenship - Noun +愛 あい - love - Verbal Noun +可愛い かわいい - cute, charming, sweet - Adjective +恋人 こいびと - lover, sweetheart - Noun +ラッシュアワー ラッシュアワー - rush hour - Noun +誕生日 たんじょうび - birthday - Noun +祝日 しゅくじつ - holiday - Noun +お祝い おいわい - celebrate - Verbal Noun +夢 ゆめ - dream - Noun +カップ カップ - cup - Noun +泣く なく - cry, weep - Verb +涙 なみだ - tear - Noun +喜ぶ よろこぶ - be happy, be delighted - Verb +恥ずかしい はずかしい - shy; ashamed; embarrassed - Adjective +スケート スケート - skate, skates - Noun +弁当 べんとう - box lunch, picnic lunch - Noun +看護婦 かんごふ - female nurse - Noun +患者 かんじゃ - patient - Noun +述べる のべる - to mention; to state - Verb +たくさん たくさん - a lot, plenty - Adverb +訴える うったえる - sue - Verb +迷う まよう - to lose one's way; to hesitate; to be perplexed - Verb +迷惑 めいわく - trouble, annoyance - Verbal Noun +地域 ちいき - region, area - Noun +ピクニック ピクニック - picnic - Noun +政権 せいけん - political power - Noun +贈る おくる - to give (as a gift) - Verb +贈り物 おくりもの - present, gift - Noun +与える あたえる - give; bestow - Verb +あちら あちら - way over there - Noun +貯金 ちょきん - savings, deposit - Verbal Noun +預ける あずける - deposit, entrust - Verb +預かる あずかる - receive on deposit, take charge of - Verb +得意 とくい - one's forte, pride, customer - Adjectival Noun +どきどき どきどき - feel excited, feel nervous - Adverb +燃える もえる - burn - Verb +焼ける やける - burn, be scorched, be baked - Verb +すき焼き すきやき - sukiyaki - Noun +焼く やく - burn, bake, be envious - Verb +まあまあ まあまあ - OK, not bad, average - Adjective +乾く かわく - to get dry - Verb +乾杯 かんぱい - a toast, drinking one's glass dry - Verbal Noun +乾かす かわかす - dry - Verb +新幹線 しんかんせん - Shinkansen, bullet train - Noun +マフラー マフラー - scarf, muffler - Noun +素晴らしい すばらしい - splendid, excellent - Adjective +海岸 かいがん - beach, coast - Noun +家庭 かてい - home, family - Noun +庭 にわ - garden, yard - Noun +アクセサリー アクセサリー - accessories, jewelry - Noun +桜 さくら - cherry tree, cherry blossom - Noun +咲く さく - bloom, blossom - Verb +吹く ふく - blow, play on a wind instrument - Verb +散歩 さんぽ - walk, stroll - Verbal Noun +あくび あくび - yawn - Verbal Noun +植える うえる - plant; grow - Verb +屋根 やね - roof - Noun +黒板 こくばん - blackboard - Noun +掲示板 けいじばん - bulletin board; BBS - Noun +からから からから - thirsty, dry; loud laughter - Adjective +草 くさ - grass, weed - Noun +葉 は - leaf - Noun +絵葉書 えはがき - picture postcard - Noun +葉書 はがき - postcard - Noun +ふらふら ふらふら - unsteady (e.g.on one's feet); dizzy - Adverb +吸う すう - inhale, suck - Verb +普及 ふきゅう - spread, promulgation - Verbal Noun +胃 い - stomach - Noun +皿 さら - plate, counter for plates or helpings - Noun +こぼす こぼす - spill - Verb +血 ち - blood - Noun +内容 ないよう - contents - Noun +背景 はいけい - background, scenery, setting - Noun +骨 ほね - bone, frame, backbone (spirit) - Noun +ランチ ランチ - lunch - Noun +滑る すべる - slide, slip, flunk an examination - Verb +折れる おれる - snap, be folded, give in - Verb +折る おる - break off, fold, bend - Verb +健康 けんこう - healthy - Adjectival Noun +レシート レシート - receipt - Noun +珍しい めずらしい - rare, precious - Adjective +撮る とる - to take (a photo); to film - Verb +再び ふたたび - again, a second time - Adverb +再来年 さらいねん - the year after next - Noun +チョーク チョーク - chalk - Noun +再来月 さらいげつ - the month after next - Noun +再来週 さらいしゅう - the week after next - Noun +放送 ほうそう - broadcasting - Verbal Noun +装置 そうち - equipment, device - Noun +ティッシュ ティッシュ - tissue - Noun +仮名 かな - kana, Japanese syllabary - Noun +送り仮名 おくりがな - kana suffix - Noun +鏡 かがみ - mirror - Noun +悲しむ かなしむ - feel sad, lament - Verb +ノック ノック - knock - Verbal Noun +固い かたい - hard; stiff - Adjective +美術館 びじゅつかん - art museum - Noun +美人 びじん - beautiful woman - Noun +美容院 びよういん - beauty parlour; hairdressing salon - Noun +よろしく よろしく - properly; best regards; please take care of me - Adverb +博物館 はくぶつかん - museum - Noun +開催 かいさい - holding a meeting; open an exhibition - Verbal Noun +特徴 とくちょう - distinctive feature, characteristic - Noun +許す ゆるす - permit, forgive - Verb +がらがら がらがら - empty (also gargling, raspy) - Adjective +免許証 めんきょしょう - license - Noun +教師 きょうし - teacher - Noun +教授 きょうじゅ - professor - Noun +伝える つたえる - convey, transmit - Verb +ぎらぎら ぎらぎら - dazzling, glaring, blinding - Adverb +鳥 とり - bird; chicken - Noun +鳴る なる - to sound, to ring, to roar - Verb +鳴く なく - chirp, meow, to make sound (animal) - Verb +声 こえ - voice, sound - Noun +そっち そっち - that way, there, thou (そちら) - Noun +卵 たまご - egg - Noun +犬 いぬ - dog - Noun +馬 うま - horse - Noun +駐車場 ちゅうしゃじょう - parking lot - Noun +ピンポン ピンポン - table tennis, ping pong - Verbal Noun +騒ぐ さわぐ - make a racket, mess around, make a fuss - Verb +刺す さす - stab, prick, sting - Verb +刺身 さしみ - sashimi, sliced raw meat - Noun +激しい はげしい - violent, intense - Adjective +ぺこぺこ ぺこぺこ - hungry, starving - Adjective +驚く おどろく - be surprised, be startled - Verb +倒れる たおれる - fall over, succumb - Verb +倒す たおす - bring down, overthrow, defeat - Verb +傾向 けいこう - tendency, disposition - Noun +ぺらぺら ぺらぺら - fluently - Adjectival Noun +柔道 じゅうどう - judo - Noun +柔らかい やわらかい - soft - Adjective +柔らか やわらか - soft, tender, gentle - Adjectival Noun +主張 しゅちょう - insistence, assertion - Verbal Noun +レインコート レインコート - raincoat - Noun +引っ張る ひっぱる - pull, drag - Verb +突き当たる つきあたる - to run into; to come to the end of (a street) - Verb +突き当たり つきあたり - end of a street/hallway - Noun +壁 かべ - wall, partition - Noun +アイス アイス - popsicle, ice lolly - Noun +弾く ひく - to play (piano, guitar) - Verb +丸い まるい - round - Adjective +丸 まる - circle, wholeness - Noun +攻撃 こうげき - attack, criticism - Verbal Noun +いつごろ いつごろ - about when; how soon - Noun +絶対に ぜったいに - absolutely, unconditionally - Adverb +消防車 しょうぼうしゃ - firetruck - Noun +嫌 いや - dislike, have a dislike for - Adjectival Noun +大嫌い だいきらい - hate - Adjectival Noun +ウィスキー ウィスキー - whisky - Noun +大抵 たいてい - generally, mostly - Adverb +大勢 おおぜい - many; crowd; great number of people - Noun +姿 すがた - figure, appearance - Noun +姿勢 しせい - posture, attitude - Noun +エアメール エアメール - airmail - Noun +恐ろしい おそろしい - terrible, frightening - Adjective +怖い こわい - scary; (I'm) afraid - Adjective +糸 いと - thread, yarn - Noun +孫 まご - grandchild - Noun +シャープペンシル シャープペンシル - mechanical pencil - Noun +木綿 もめん - cotton - Noun +偉い えらい - great, admirable, eminent - Adjective +爪 つめ - nail, claw - Noun +机 つくえ - desk - Noun +セロテープ セロテープ - cellophane tape, Scotch tape, Sellotape - Noun +棚 たな - shelf - Noun +本棚 ほんだな - bookshelf - Noun +方針 ほうしん - objective; plan; policy - Noun +釣る つる - to fish; to angle - Verb +やけど やけど - burn - Verbal Noun +お釣り おつり - change (i.e. money) - Noun +鍵 かぎ - key, lock - Noun +鍋 なべ - pot - Noun +寿司 すし - sushi - Noun +アイスコーヒー アイスコーヒー - iced coffee - Noun +泥棒 どろぼう - thief, crook - Verbal Noun +湯 ゆ - hot water, hot bath, hot spring - Noun +沸く わく - to grow hot or boil (e.g. water); be excited - Verb +沸かす わかす - boil, excite (transitive) - Verb +あっち あっち - あちら (distant: that way, that, there) - Noun +洗濯機 せんたくき - washing machine - Noun +洗濯 せんたく - washing; laundry - Verbal Noun +濡れる ぬれる - get wet - Verb +喫茶店 きっさてん - coffee shop, tea house, café - Noun +あんなに あんなに - to that extent; to that degree; so - Adverb +怠ける なまける - be lazy, to neglect (e.g. one's work) - Verb +一生懸命 いっしょうけんめい - very hard; with utmost effort; for dear life - Adverb +休憩 きゅうけい - rest; break; recess - Verbal Noun +天井 てんじょう - ceiling - Noun +いたずら いたずら - mischief, prank - Verbal Noun +納豆 なっとう - natto (fermented soybeans) - Noun +化粧 けしょう - make-up; cosmetics - Verbal Noun +畑 はたけ - field (for fruits, vegetables, etc.), vegetable garden - Noun +炊く たく - cook, boil - Verb +ウェートレス ウェートレス - waitress - Noun +自炊 じすい - cooking food for oneself - Verbal Noun +灰皿 はいざら - ashtray - Noun +灰 はい - ashes - Noun +灰色 はいいろ - ash color, gray - Noun +おばさん おばさん - aunt - Noun +西暦 せいれき - Christian Era, A.D. - Noun +毛 け - hair, fur - Noun +髪 かみ - hair (on the head) - Noun +舌 した - tongue - Noun +くし くし - comb - Noun +臭い くさい - stinking; smelly - Adjective +匂い におい - smell, odor - Noun +居る いる - いる (to exist, animate objects) - Verb +履く はく - put on footwear, wear - Verb +クリーニング クリーニング - cleaning, laundry - Verbal Noun +戸 と - door, shutter - Noun +扇風機 せんぷうき - electric fan - Noun +豚 ぶた - pig - Noun +豚肉 ぶたにく - pork - Noun +ごちそう ごちそう - feast, treat - Noun +鶏 にわとり - chicken - Noun +腕時計 うでどけい - wrist watch - Noun +お菓子 おかし - sweets, snacks - Noun +お辞儀 おじぎ - bow - Verbal Noun +ごちそうする ごちそうする - treat - Verb +寝坊 ねぼう - late riser, oversleeping - Verbal Noun +旗 はた - flag - Noun +鉛筆 えんぴつ - pencil - Noun +万年筆 まんねんひつ - fountain pen - Noun +こぼれる こぼれる - spill, overflow (intransitive) - Verb +箱 はこ - box, case - Noun +本箱 ほんばこ - bookcase - Noun +手袋 てぶくろ - gloves - Noun +袋 ふくろ - bag, sack - Noun +こんなに こんなに - so; like this; in this way (The こんなに group indicates amount or extent (this many/this much)) - Adverb +財布 さいふ - purse, wallet - Noun +毛布 もうふ - blanket - Noun +布団 ふとん - futon (quilted mattress laid out on the floor) - Noun +小包 こづつみ - parcel, package - Noun +ざあざあ ざあざあ - pouring (sound of rushing water; sound of pouring rain) - Adverb +包む つつむ - wrap, pack - Verb +飾る かざる - decorate - Verb +手帳 てちょう - notebook - Noun +電話帳 でんわちょう - telephone book - Noun +ジャガイモ ジャガイモ - potato - Noun +牛乳 ぎゅうにゅう - milk - Noun +玄関 げんかん - entrance, door - Noun +眼鏡 めがね - glasses, judgment (when めがね) - Noun +眠い ねむい - sleepy - Adjective +ソファー ソファー - sofa, sofa bed - Noun +眠る ねむる - sleep - Verb +封筒 ふうとう - envelope - Noun +出掛ける でかける - go out, be about to go out - Verb +掛かる かかる - to hang, to take (a resource, e.g. money) - Verb +たばこ たばこ - tobacco, cigarette - Noun +掛け算 かけざん - multiplication - Verbal Noun +拍手 はくしゅ - applause, clapping - Verbal Noun +掃除 そうじ - cleaning; sweeping - Verbal Noun +掃く はく - sweep, brush - Verb +ちょうど ちょうど - just; right; exactly - Adverb +掃除機 そうじき - vacuum cleaner - Noun +握る にぎる - to grip; to make (e.g., hand-rolled sushi balls) - Verb +握手 あくしゅ - handshake - Verbal Noun +迎える むかえる - welcome, go out to meet, invite - Verb +ちょっと ちょっと - just a moment, just a little, easily - Adverb +お巡りさん おまわりさん - policeman - Noun +幾つ いくつ - how many?, how old? - Noun +幾ら いくら - how much?; how many? - Noun +冗談 じょうだん - joke - Noun +つく つく - to be lit (e.g. electricity comes on); to be lighted - Verb +穴 あな - hole - Noun +寂しい さびしい - lonely; solitary - Adjective +丁寧 ていねい - polite, courteous, careful - Adjectival Noun +可哀相 かわいそう - poor, pitiable, pathetic - Adjectival Noun +てんぷら てんぷら - tempura, Japanese deep-fried breaded food - Noun +怪我 けが - injury - Verbal Noun +我慢 がまん - patience, self-restraint - Verbal Noun +幼稚園 ようちえん - kindergarten - Noun +隠れる かくれる - to hide; to conceal oneself; to disappear - Verb +とんとん とんとん - tapping - Adverb +日陰 ひかげ - the shade - Noun +随分 ずいぶん - extremely, considerably - Adverb +頑張る がんばる - to persevere; to keep at it; be tenacious - Verb +頃 ころ - (approximate) time - Noun +にんじん にんじん - carrot - Noun +この頃 このごろ - now, these days, recently - Noun +消防署 しょうぼうしょ - fire station - Noun +尋ねる たずねる - inquire, search for - Verb +缶詰 かんづめ - canned goods, confining someone (e.g. so they can concentrate on work) - Noun +ぬるい ぬるい - tepid, lukewarm - Adjective +缶 かん - can, tin - Noun +腐る くさる - rot, corrode - Verb +豆腐 とうふ - tofu - Noun +床 ゆか - floor - Noun +パーセント パーセント - percent - Noun +床屋 とこや - barber, barbershop - Noun +畳 たたみ - tatami, mat - Noun +畳む たたむ - to fold (clothes, umbrella), to close (a shop) - Verb +干す ほす - to dry; to air out - Verb +ひざ ひざ - knee - Noun +帽子 ぼうし - cap, hat - Noun +是非 ぜひ - by all means, certainly - Adverb +敬語 けいご - honorific language, polite speech - Noun +尊敬 そんけい - respect, esteem, honor - Verbal Noun +ひじ ひじ - elbow - Noun +敷く しく - to spread out; to lay out - Verb +雷 かみなり - thunder, lightning - Noun +零 れい - zero, naught - Noun +仕舞う しまう - finish; put away - Verb +ひも ひも - laces, string, rope - Noun +踊る おどる - to dance (orig. a hopping dance) - Verb +踊り おどり - dance, dancing - Noun +踏む ふむ - step on, tread on - Verb +踏切 ふみきり - railroad crossing - Noun +まく まく - scatter, plant - Verb +蹴る ける - kick - Verb +食堂 しょくどう - dining hall, cafeteria, restaurant - Noun +猫 ねこ - cat, feline - Noun +文章 ぶんしょう - writing, writing style - Noun +やかん やかん - kettle - Noun +丈夫 じょうぶ - healthy; robust - Adjectival Noun +又 また - again, also, or - Adverb +お祖父さん おじいさん - grandfather - Noun +お祖母さん おばあさん - grandmother - Noun +ようこそ ようこそ - welcome - Adverb +祖父 そふ - grandfather - Noun +祖母 そぼ - grandmother - Noun +邪魔 じゃま - hindrance; obstacle (orig. demon who obstructs humans) - Adjectival Noun +風邪薬 かぜぐすり - remedy for a cold - Noun +ウェーター ウェーター - waiter - Noun +風呂屋 ふろや - bathhouse, public bath - Noun +風呂 ふろ - bath - Noun +昭和 しょうわ - Showa era - Noun +紫 むらさき - purple - Noun +そんなに そんなに - that, so (amount/extent) - Adverb +紅茶 こうちゃ - black tea - Noun +梅雨 つゆ - "rainy season (""the plum rain"")" - Noun +桃 もも - peach, peach tree - Noun +遭う あう - meet with, encounter (遭う may have an undesirable nuance compared to 会う) - Verb +枕 まくら - pillow - Noun +嘘 うそ - lie - Noun +遠慮 えんりょ - restraint; prudence; forethought - Verbal Noun +叱る しかる - to scold - Verb +傘 かさ - umbrella, parasol - Noun +お嬢さん おじょうさん - young lady, your daughter - Noun +年賀状 ねんがじょう - New Year's card - Noun +賑やか にぎやか - bustling; busy; lively - Adjectival Noun +蚊 か - mosquito - Noun +拭く ふく - wipe, dry - Verb +挨拶 あいさつ - greet, greeting - Verbal Noun +伴う ともなう - accompany, go with - Verb +巻く まく - roll up, wind, wrap - Verb +靴 くつ - shoes, boots - Noun +靴下 くつした - socks, stockings - Noun +磨く みがく - to polish; to shine; to brush (e.g. teeth) - Verb +歯磨き はみがき - toothpaste, brushing one's teeth - Noun +廊下 ろうか - corridor; hallway - Noun +瓶 びん - bottle; jar - Noun +褒める ほめる - praise, commend - Verb +元旦 がんたん - New Year's Day - Noun +袖 そで - sleeve - Noun +長袖 ながそで - clothes with long sleeves - Noun +半袖 はんそで - short-sleeves - Noun +馬鹿 ばか - fool, nonsense - Adjectival Noun +凄い すごい - wonderful, great, incredible - Adjective +剃る そる - shave - Verb +喧嘩 けんか - fight, quarrel, argument - Verbal Noun +叩く たたく - to strike; to clap - Verb +噛む かむ - bite, chew - Verb +味噌汁 みそしる - miso soup - Noun +姪 めい - niece - Noun +苺 いちご - strawberry - Noun +茄子 なす - eggplant - Noun +逢う あう - meet (like 会う; 逢う is often used for close friends, etc. and may be associated with drama or pathos) - Verb +椅子 いす - chair - Noun +痩せる やせる - lose weight, become thin - Verb +箸 はし - chopsticks - Noun +糊 のり - glue, starch - Noun +醤油 しょうゆ - soy sauce - Noun +鋏 はさみ - scissors, pincers, tongs - Noun +鞄 かばん - bag, handbag, briefcase - Noun +顎 あご - jaw, chin - Noun +飴 あめ - candy, sweets - Noun +石鹸 せっけん - soap - Noun +一時 いちじ - temporarily - Adverb +月日 がっぴ - date - Noun +金もうけ かねもうけ - making money - Verbal Noun +先に さきに - before, ahead - Adverb +先日 せんじつ - the other day, a few days ago - Noun +今日 こんにち - today, these days (written same as きょう) - Noun +今ごろ いまごろ - about this time - Noun +ケース ケース - case - Noun +今にも いまにも - at any moment; soon - Adverb +今に いまに - before long, someday - Adverb +行き来 いきき - coming and going; keeping in touch - Verbal Noun +行 ぎょう - line, row - Noun +帰す かえす - send home, see out - Verb +大いに おおいに - very, greatly - Adverb +大げさ おおげさ - exaggerate - Adjective +イメージ イメージ - image - Verbal Noun +大水 おおみず - flood - Noun +水中 すいちゅう - in the water, underwater - Noun +小 しょう - smallness, small size - Noun +少なくとも すくなくとも - at least - Adverb +少々 しょうしょう - a little, a few - Noun +上がる あがる - be completed - None +上がる あがる - eat, drink - Verb +せい せい - consequence; result; blame - Noun +上 じょう - upper, best - Noun +上 かみ - superiors, people in authority - Noun +下さる くださる - to give, to kindly do for one - Verb +下水 げすい - sewerage, drainage - Noun +上下 じょうげ - top and bottom - Verbal Noun +上下 うえした - above and below - Noun +下 げ - lowness (of degree, value, etc.); inferiority - Noun +左右 さゆう - left and right - Noun +いつも いつも - always, usually - Noun +四方 しほう - all directions, far and wide - Noun +方々 かたがた - people - Noun +大人 おとな - adult - Adjective +外出 がいしゅつ - outing; trip; going out - Verbal Noun +内 うち - inside - Noun +週休 しゅうきゅう - weekend - Noun +一体 いったい - what on earth, what the… - Adverb +きっかけ きっかけ - chance, opportunity - Noun +出力 しゅつりょく - output - Verbal Noun +火力 かりょく - heating power, heat - Noun +水力 すいりょく - waterpower, hydraulic power - Noun +口げんか くちげんか - quarrel - Verbal Noun +大手 おおて - big company - Noun +足下 あしもと - at one's feet; underfoot - Noun +火山 かざん - volcano - Noun +すっかり すっかり - all, completely - Adverb +小川 おがわ - brook, stream - Noun +空中 くうちゅう - in the air, in the sky - Noun +空ける あける - empty, clear out - Verb +空っぽ からっぽ - empty - Adjectival Noun +空き あき - vacancy, free time - Noun +空 から - emptiness, hollow - Noun +海水 かいすい - seawater - Noun +海上 かいじょう - (by, at, on) sea; maritime - Noun +シリーズ シリーズ - series - Noun +水田 すいでん - (water-filled) paddy field - Noun +森林 しんりん - forest, woods - Noun +男らしい おとこらしい - manly, masculine - Adjective +女らしい おんならしい - womanly, feminine - Adjective +少女 しょうじょ - girl - Noun +女子 じょし - woman, girl - Noun +好む このむ - like, be fond of - Verb +エイズ エイズ - AIDS - Noun +好み このみ - taste, preference - Noun +上達 じょうたつ - improvement (e.g. in skill, ability); progress - Verbal Noun +一家 いっか - a household, a family - Noun +家出 いえで - running away from home - Verbal Noun +大家 おおや - landlord - Noun +元来 がんらい - originally, essentially - Adverb +元日 がんじつ - New Year's Day - Noun +エンジン エンジン - engine - Noun +お中元 おちゅうげん - summer gift (Bon Festival gift) - Noun +天の川 あまのがわ - Milky Way - Noun +気分 きぶん - feeling, mood - Noun +元気 げんき - lively; healthy - Noun +気体 きたい - gas, vapor - Noun +気力 きりょく - willpower; energy; vitality - Noun +大雨 おおあめ - heavy rain - Noun +クラス クラス - class, lesson - Noun +小雨 こさめ - light rain; drizzle - Noun +雨天 うてん - rainy weather - Noun +大雪 おおゆき - heavy snow - Noun +青年 せいねん - youth, young man - Noun +青空 あおぞら - blue sky - Noun +明日 あす - tomorrow (other reading of あした) - Noun +明ける あける - to dawn - Verb +明かり あかり - light - Noun +スピード スピード - speed - Noun +明け方 あけがた - dawn, near daybreak - Noun +一昨年 いっさくねん - the year before last (other reading of おととし) - Noun +一昨日 いっさくじつ - the day before yesterday - Noun +昨日 さくじつ - yesterday (other reading of きのう) - Noun +向上 こうじょう - improvement - Verbal Noun +一向に いっこうに - absolutely, (not) at all (in negative sentence) - Adverb +開き あき - opening; gap - Noun +いかに いかに - how, in what way - Adverb +聞かす きかす - to inform about; to read to; to sing to - Verb +聞き手 ききて - listener, audience - Noun +客間 きゃくま - guest room, parlor - Noun +間 かん - interval, duration of time (other reading of あいだ) - Noun +空間 くうかん - space, room - Noun +円高 えんだか - high-valued yen; strong yen - Noun +最高 さいこう - highest; supreme; the most - Noun +スタート スタート - start, begin - Verbal Noun +最低 さいてい - lowest; disgusting - Noun +最小 さいしょう - the smallest, minimum - Noun +最上 さいじょう - best - Noun +最中 さいちゅう - in the middle of, during - Noun +初日 しょにち - first day, opening day - Noun +お前 おまえ - you (formerly honorific, now sometimes derog. term referring to an equal or inferior) - Noun +前後 ぜんご - before and after; order; around - Noun +後方 こうほう - behind; in the rear; in back - Noun +セット セット - set - Verbal Noun +後ろ向き うしろむき - facing backward - Noun +明々後日 しあさって - three days from today - Noun +後半 こうはん - latter half, second half - Noun +朝日 あさひ - morning sun - Noun +昨晩 さくばん - last night, last evening - Noun +昨夜 さくや - last night (other reading of ゆうべ) - Noun +食う くう - to eat, to make a living - Verb +アップ アップ - close-up - Verbal Noun +外食 がいしょく - eating out, dining out - Verbal Noun +食パン しょくぱん - (loaf of) bread - Noun +一見 いっけん - glimpse; at a glance - Adverb +言い出す いいだす - begin to speak - Verb +外来語 がいらいご - loanword, foreign word - Noun +英文 えいぶん - English, English writing - Noun +漢語 かんご - Chinese-character compounds - Noun +エネルギー エネルギー - energy - Noun +下書き したがき - draft - Verbal Noun +後書き あとがき - postscript, afterword - Noun +覚え おぼえ - recollection, memory - Noun +開会 かいかい - opening of a meeting - Verbal Noun +会 かい - meeting, association - Noun +合わせる あわせる - to match (rhythm, speed, etc.) - Verb +合わす あわす - match, add - Verb +社会人 しゃかいじん - working adult; full-fledged member of society - Noun +かえって かえって - on the contrary, rather - Adverb +会員 かいいん - member - Noun +一員 いちいん - member - Noun +仕上げ しあげ - end; finishing touches; being finished - Verbal Noun +仕上げる しあげる - finish, complete - Verb +人事 じんじ - human affairs, personnel affairs - Noun +行事 ぎょうじ - event, function - Noun +事 こと - thing, matter - Noun +コンクリート コンクリート - concrete - Noun +家事 かじ - housework, domestic duties - Noun +人工 じんこう - artificial; man-made - Noun +会場 かいじょう - venue, meeting place - Noun +出場 しゅつじょう - participation - Verbal Noun +車内 しゃない - inside a vehicle - Noun +下車 げしゃ - getting off (from train, bus, etc.) - Verbal Noun +駅前 えきまえ - in front of the station - Noun +いよいよ いよいよ - at last; more and more - Adverb +外交 がいこう - diplomacy, foreign relations - Noun +交わす かわす - to exchange (messages, greetings, arguments, etc.) - Verb +交通 こうつう - traffic, transportation - Verbal Noun +大通り おおどおり - main street - Noun +書道 しょどう - Japanese calligraphy - Noun +十字路 じゅうじろ - crossroads - Noun +空き地 あきち - unoccupied ground, vacant land - Noun +オリンピック オリンピック - the Olympics - Noun +図 ず - drawing, diagram - Noun +合図 あいず - signal, sign - Verbal Noun +行き止まり いきどまり - dead end - Noun +初歩 しょほ - first steps, basics - Noun +高度 こうど - high degree; advanced - Adjectival Noun +一度に いちどに - all at once - Adverb +遠足 えんそく - excursion, hike - Noun +駅長 えきちょう - stationmaster - Noun +ストップ ストップ - stop - Verbal Noun +全員 ぜんいん - all members, entire staff - Noun +全て すべて - all, entirely - Adverb +外部 がいぶ - the outside, external - Noun +一部分 いちぶぶん - part, portion - Noun +国家 こっか - nation, country - Noun +国々 くにぐに - nations, countries - Noun +国外 こくがい - abroad, outside the country - Noun +きちんと きちんと - properly, neatly - Adverb +出国 しゅっこく - departure from a country, emigration - Verbal Noun +国土 こくど - country, territory - Noun +国語 こくご - national language, Japanese - Noun +国交 こっこう - diplomatic relations - Noun +国道 こくどう - national highway - Noun +世間 せけん - world, the public - Noun +世話 せわ - looking after; help - Verbal Noun +クラブ クラブ - club - Noun +出世 しゅっせ - success in life, promotion - Verbal Noun +青白い あおじろい - pale, pallid - Adjective +黒字 くろじ - balance (figure) in the black, surplus - Noun +赤道 せきどう - equator - Noun +赤字 あかじ - deficit, in the red - Noun +国鉄 こくてつ - Japan National Railways - Noun +私鉄 してつ - private railway - Noun +家屋 かおく - house, building - Noun +じっと じっと - without moving - Adverb +屋上 おくじょう - rooftop - Noun +味わう あじわう - to taste, to appreciate - Verb +地味 じみ - plain, subdued - Adjectival Noun +月末 げつまつ - end of the month - Noun +末っ子 すえっこ - youngest child - Noun +末 すえ - (after) the end - Noun +飲料水 いんりょうすい - drinking water - Noun +コンサート コンサート - concert - Noun +食料 しょくりょう - food, food supplies - Noun +見解 けんかい - opinion, view - Noun +有りのまま ありのまま - the truth; as it is - Adjectival Noun +作家 さっか - writer, novelist - Noun +使用 しよう - usage - Verbal Noun +作用 さよう - action, effect - Verbal Noun +使用人 しようにん - servant - Noun +いけない いけない - wrong, must not - Adjective +私用 しよう - private business, private use - Noun +会費 かいひ - membership fee - Noun +国費 こくひ - national expenditure - Noun +食費 しょくひ - food expenses, board - Noun +私費 しひ - private expense - Noun +消費 しょうひ - consumption, spending - Verbal Noun +消火 しょうか - fire fighting; extinguishing a fire - Verbal Noun +売り上げ うりあげ - amount sold; sales - Noun +あらかじめ あらかじめ - in advance - Adverb +売り出す うりだす - put on sale - Verb +書店 しょてん - bookstore - Noun +開店 かいてん - opening of a store, setting up - Verbal Noun +小売店 こうりてん - retail store, outlet - Noun +商社 しょうしゃ - trading firm - Noun +商店 しょうてん - shop, store - Noun +商売 しょうばい - trade, business - Verbal Noun +しばしば しばしば - often, frequently - Adverb +商人 しょうにん - merchant, trader - Noun +食品 しょくひん - food, foodstuff - Noun +品 しな - article, item (other reading of ひん) - Noun +上品 じょうひん - elegance, refinement - Adjectival Noun +下品 げひん - vulgarity; meanness - Adjective +手段 しゅだん - means, way - Noun +一段と いちだんと - more; further - Adverb +ショック ショック - shock, surprise - Adjectival Noun +値 あたい - value, worth - Noun +値する あたいする - be worth, deserve - Verb +価値 かち - value, merit - Noun +高価 こうか - high-priced - Adjectival Noun +人格 じんかく - personality - Noun +格好 かっこう - shape (figure), appearance - Verbal Noun +青春 せいしゅん - youth; springtime of life - Noun +アンテナ アンテナ - antenna - Noun +春分 しゅんぶん - vernal equinox - Noun +初夏 しょか - early summer - Noun +秋分 しゅうぶん - autumnal equinox - Noun +春夏秋冬 しゅんかしゅうとう - four seasons, all year round - Noun +夏季 かき - summer, summer season - Noun +寒気 さむけ - chill - Noun +暖か あたたか - warm, warmhearted - Adjective +高温 こうおん - high temperature - Noun +あえて あえて - boldly - Adverb +温暖 おんだん - warm, mild - Adjectival Noun +北風 きたかぜ - north wind - Noun +秋風 あきかぜ - autumn breeze - Noun +情熱 じょうねつ - passion, enthusiasm - Noun +広告 こうこく - advertisement - Verbal Noun +新た あらた - new, fresh - Adjective +新聞社 しんぶんしゃ - newspaper company - Noun +カバー カバー - cover, covering - Verbal Noun +新人 しんじん - newcomer, freshman - Noun +最悪 さいあく - the worst - Adjectival Noun +悪用 あくよう - abuse, misuse - Noun +悪 あく - evil, badness - Noun +悪女 あくじょ - wicked or ugly woman - Noun +心理 しんり - mental state, psychology - Noun +心 こころ - heart, mind - Noun +ジャーナリスト ジャーナリスト - journalist - Noun +思い おもい - thoughts, feelings - Noun +思わず おもわず - unintentionally, reflexively - Adverb +思いがけない おもいがけない - unexpected - Adjective +思いやり おもいやり - thoughtfulness, kindness - Noun +決して けっして - never, by no means - Adverb +決心 けっしん - determination, resolve - Verbal Noun +決まり きまり - rule, settlement (conclusion) - Noun +知り合う しりあう - get acquainted with - Verb +スタイル スタイル - style - Noun +知れる しれる - become known, be found out - Verb +知り合い しりあい - acquaintance - Noun +知らせ しらせ - information, notice - Noun +知らず知らず しらずしらず - unawares, without knowing it - Adverb +才能 さいのう - talent, ability - Noun +小便 しょうべん - urine, pee - Verbal Noun +局 きょく - bureau, public service office - Noun +インタビュー インタビュー - interview - Verbal Noun +住まい すまい - dwelling, residence - Noun +氏 し - Mr., Mrs. - Noun +人名 じんめい - person's name - Noun +国名 こくめい - country name - Noun +各地 かくち - every place, various places - Noun +県 けん - prefecture - Noun +市内 しない - in the city - Noun +シーズン シーズン - season - Noun +市長 しちょう - mayor - Noun +市場 いちば - market, marketplace - Noun +市場 しじょう - (the) market (as a concept) (other reading of いちば) - Noun +市外 しがい - city outskirts, suburbs - Noun +市 し - city - Noun +下町 したまち - low-lying part of a city (usu. containing shops, factories, etc.) - Noun +区分 くぶん - division, section - Verbal Noun +区 く - ward - Noun +アイデア アイデア - idea - Noun +様々 さまざま - various, diverse - Adjective +出荷 しゅっか - shipping - Verbal Noun +人物 じんぶつ - character, person - Noun +見物人 けんぶつにん - spectator, sightseer - Noun +入れ物 いれもの - receptacle, container - Noun +作物 さくもつ - crop - Noun +食物 しょくもつ - food - Noun +いかにも いかにも - indeed; phrase indicating agreement - Adverb +書物 しょもつ - books - Noun +重ねる かさねる - pile up, repeat - Verb +重なる かさなる - be piled up, come one after another - Verb +重大 じゅうだい - important, serious - Adjective +重み おもみ - weight, importance - Noun +重たい おもたい - heavy - Adjective +気軽 きがる - lighthearted, easy - Adjectival Noun +いきなり いきなり - suddenly, without warning - Adverb +重量 じゅうりょう - weight - Noun +少量 しょうりょう - small quantity - Noun +小量 しょうりょう - small amount - Noun +受け入れる うけいれる - to accept; to receive; to agree - Verb +受け止める うけとめる - catch; react to - Verb +受かる うかる - to pass (examination) - Verb +受け取り うけとり - receipt - Noun +いつまでも いつまでも - forever - Adverb +聞き取り ききとり - listening comprehension - Noun +書き取り かきとり - dictation; writing kanji text from hiragana/sound - Noun +受け持つ うけもつ - to take (be in) charge of - Verb +打ち上げる うちあげる - to launch; to shoot up - Verb +打ち合わせ うちあわせ - meeting, arrangement - Verbal Noun +打ち明ける うちあける - confide in, reveal - Verb +打ち合わせる うちあわせる - to arrange (e.g. a meeting) - Verb +打ち消し うちけし - negation, denial - Noun +しっかり しっかり - mature, reliable - Adverb +市役所 しやくしょ - municipal office, city hall - Noun +区役所 くやくしょ - ward office - Noun +重役 じゅうやく - executive; company director - Noun +生じる しょうじる - happen, cause - Verb +人生 じんせい - human life, life - Noun +生まれ うまれ - birth, origin - Noun +一生 いっしょう - a lifetime - Noun +アンケート アンケート - questionnaire - Noun +生み出す うみだす - create, produce - Verb +生き方 いきかた - way of life, lifestyle - Noun +生かす いかす - take advantage of, make use of - Verb +生き物 いきもの - living creature - Noun +生け花 いけばな - flower arrangement - Noun +生年月日 せいねんがっぴ - date of birth - Noun +生理 せいり - period, menstruation - Noun +スケジュール スケジュール - schedule - Noun +生まれつき うまれつき - by birth, by nature - Adverb +生 せい - life (apparently uncommon reading of なま) - Noun +生物 せいぶつ - living creature, lifeform - Noun +生き生きと いきいきと - lively, vividly - Adverb +性能 せいのう - ability; performance - Noun +性格 せいかく - character, personality - Noun +性 せい - sex, nature (of a person) - Noun +国産 こくさん - domestically produced - Noun +ガソリン ガソリン - gasoline - Noun +産地 さんち - producing area - Noun +出産 しゅっさん - childbirth - Verbal Noun +活用 かつよう - utilization, conjugation - Verbal Noun +活字 かつじ - printed type - Noun +学会 がっかい - academic association, academic conference - Noun +学年 がくねん - school year, grade - Noun +工学 こうがく - engineering - Noun +カット かっと - cut - Verbal Noun +学長 がくちょう - college president - Noun +語学 ごがく - language study - Noun +工学部 こうがくぶ - department of engineering - Noun +学費 がくひ - school expenses, tuition - Noun +学部 がくぶ - department of a university - Noun +学力 がくりょく - scholastic performance, academic ability - Noun +休学 きゅうがく - temporary absence from school; suspension - Verbal Noun +スター スター - star - Noun +教員 きょういん - teacher, teaching staff - Noun +キリスト教 きりすときょう - Christianity - Noun +イスラム教 イスラムきょう - Islam, Muslim religion - Noun +教わる おそわる - be taught, learn - Verb +教え おしえ - lesson, teachings - Noun +制御 せいぎょ - control, command - Verbal Noun +強力 きょうりょく - powerful - Adjectival Noun +強制 きょうせい - compulsion, force - Verbal Noun +カメラマン カメラマン - photographer, cameraman - Noun +最強 さいきょう - strongest - Noun +心強い こころづよい - reassuring, heartening - Adjective +強引 ごういん - overbearing, coercive, pushy - Adjective +引用 いんよう - quotation, citation - Verbal Noun +字引 じびき - dictionary - Noun +学習 がくしゅう - study, learning - Verbal Noun +試合 しあい - match, game - Verbal Noun +アルコール アルコール - alcohol, alcoholic beverage - Noun +試みる こころみる - try, attempt - Verb +受験 じゅけん - take an examination - Verbal Noun +性質 せいしつ - nature (disposition), property (quality) - Noun +悪質 あくしつ - bad, malignant - Adjectival Noun +質 しつ - quality - Noun +学問 がくもん - learning, scholarship - Verbal Noun +有り難い ありがたい - thankful; appreciated - Adjective +せめて せめて - at least - Adverb +重点 じゅうてん - important point, emphasis - Noun +弱点 じゃくてん - weak point - Noun +少数 しょうすう - small number, minority - Noun +小数 しょうすう - fraction (part of); decimal fraction - Noun +回路 かいろ - circuit - Noun +回数 かいすう - frequency, number of times - Noun +前回 ぜんかい - previous time; last time - Noun +ストレス ストレス - stress - Noun +後回し あとまわし - deferment, postponement - Noun +個性 こせい - individuality; personality; idiosyncrasy - Noun +個々 ここ - individual; one by one; separate - Noun +勝手 かって - selfish, self-centered - Adjective +決勝 けっしょう - decision of a contest; finals (in sports) - Noun +勝ち かち - win, victory - Noun +勝負 しょうぶ - match; victory or defeat - Verbal Noun +担ぐ かつぐ - to shoulder; to carry on one's shoulder - Verb +コード コード - cord - Noun +当てる あてる - hit, guess (an answer) - Verb +当たり前 あたりまえ - of course, obvious - Adjectival Noun +見当 けんとう - estimate, aim - Noun +当たり あたり - hit, success - Noun +規制 きせい - regulation, control - Verbal Noun +経費 けいひ - expense - Noun +済む すむ - to finish - Verb +コーチ コーチ - coach - Verbal Noun +済ませる すませる - finish off, get done with - Verb +済ます すます - to finish; to settle - Verb +株式 かぶしき - stock - Noun +式 しき - ceremony; style - Noun +業界 ぎょうかい - industry, business world - Noun +営業 えいぎょう - business, sales - Verbal Noun +休業 きゅうぎょう - suspension of business, closure - Verbal Noun +ステージ ステージ - stage - Noun +事業 じぎょう - business - Noun +金利 きんり - interest, interest rate - Noun +利く きく - to do its work; to carry out its function well - Verb +収入 しゅうにゅう - income, earnings - Noun +芸術 げいじゅつ - (fine) art; the arts - Noun +製品 せいひん - manufactured goods - Noun +製作 せいさく - manufacture, production - Verbal Noun +作製 さくせい - manufacture, production - Verbal Noun +アドバイス アドバイス - advice - Verbal Noun +必ずしも かならずしも - not always, not necessarily (used with neg. verb) - Adverb +求人 きゅうじん - recruiting, offer of job - Verbal Noun +額 がく - picture frame (other reading of ひたい) - Noun +金額 きんがく - amount of money, sum - Noun +計 けい - total; plot - Noun +合計 ごうけい - sum total - Verbal Noun +家計 かけい - family finances - Noun +アルミニウム アルミニウム - aluminum - Noun +会計 かいけい - account, finance, bill - Noun +寒暖計 かんだんけい - thermometer - Noun +差 さ - difference - Noun +格差 かくさ - gap, disparity - Noun +差し出す さしだす - to present; to hold out - Verb +時差 じさ - time difference - Noun +差す さす - to hold up (an umbrella, etc.) - Verb +オーケストラ オーケストラ - orchestra, orchestral music - Noun +差し上げる さしあげる - respectfully give - Verb +学割 がくわり - student discount - Noun +時間割り じかんわり - timetable (esp. a weekly school timetable); - Noun +残業 ざんぎょう - overtime - Verbal Noun +残暑 ざんしょ - lingering summer heat - Noun +支店 してん - branch office; branch store - Noun +支持 しじ - support; holding up - Verbal Noun +支出 ししゅつ - expenditure; expenses - Verbal Noun +おじさん おじさん - Mister, middle-aged man - Noun +支配 しはい - domination; control; management - Verbal Noun +収支 しゅうし - income and expenses - Noun +支度 したく - preparation; arrangements - Verbal Noun +支える ささえる - support, maintain - Verb +支社 ししゃ - branch office - Noun +支払う しはらう - pay - Verb +支払い しはらい - payment, payout - Verbal Noun +コンクール コンクール - contest, competition - Noun +言い返す いいかえす - talk back, retort; to say over - Verb +返る かえる - to return; to come back - Verb +借り かり - borrowing, debt - Noun +借金 しゃっきん - borrowing money, debt - Verbal Noun +貸し出し かしだし - lending; loaning - Verbal Noun +貸し かし - loan, renting - Noun +申請 しんせい - application; request - Verbal Noun +アマチュア アマチュア - amateur - Noun +込める こめる - to put into (e.g. emotion, effort); to concentrate on - Verb +打ち込む うちこむ - devote oneself; hammer in - Verb +思い込む おもいこむ - assume, believe - Verb +初期 しょき - early days, initial stage - Noun +学期 がっき - school term; semester - Noun +後期 こうき - latter period - Noun +前期 ぜんき - previous term, first term - Noun +きつい きつい - severe, hard, strict (tight) - Adjective +期日 きじつ - fixed date, due date - Noun +新学期 しんがっき - new term, new semester - Noun +限り かぎり - limit, as far as possible - Noun +制限 せいげん - restriction, limit - Verbal Noun +限界 げんかい - boundary, limit - Noun +期限 きげん - time limit, term - Noun +限度 げんど - limit, bounds - Noun +大急ぎ おおいそぎ - in a great hurry - Adjectival Noun +コーナー コーナー - corner - Noun +急用 きゅうよう - urgent business - Noun +一切 いっさい - not at all, not one bit (with negative) - Adverb +区切る くぎる - divide (an area); punctuate - Verb +思い切って おもいきって - boldly, decisively - Adverb +品切れ しなぎれ - out of stock - Noun +思い切り おもいきり - with all one's heart; resignation; resolution - Adverb +切れ きれ - sharpness - Noun +ぎりぎり ぎりぎり - just in time, barely - Adverb +券 けん - ticket - Noun +回数券 かいすうけん - book of tickets - Noun +世代 せだい - generation - Noun +代わり かわり - substitution - Noun +近代 きんだい - modern times - Noun +古代 こだい - ancient times, antiquity - Noun +代わる代わる かわるがわる - by turns, alternately - Adverb +ウサギ ウサギ - rabbit, hare - Noun +指す さす - point to, aim at - Verb +小指 こゆび - little finger, little toe - Noun +安定 あんてい - stability, composure - Verbal Noun +規定 きてい - regulation, provision - Verbal Noun +定める さだめる - to establish; to determine - Verb +指定 してい - designation, appointment - Verbal Noun +悪化 あっか - worsening, aggravation - Verbal Noun +化学 かがく - chemistry - Noun +グラウンド グラウンド - sports field - Noun +消化 しょうか - digestion - Verbal Noun +更に さらに - furthermore, still more - Adverb +今更 いまさら - now (after such a long time); too late - Adverb +急増 きゅうぞう - sudden increase - Verbal Noun +減少 げんしょう - decrease, reduction - Verbal Noun +乗車券 じょうしゃけん - railway ticket, bus ticket - Noun +乗車 じょうしゃ - taking a train, bus, etc.; getting on board - Verbal Noun +さっぱり さっぱり - completely, not at all (with negative) - Adverb +乗客 じょうきゃく - passenger - Noun +雨降り あめふり - rainfall, rainy weather - Noun +税金 ぜいきん - tax - Noun +税 ぜい - tax - Noun +私立 しりつ - private (establishment) - Noun +市立 しりつ - municipal, city (establishment) - Noun +県立 けんりつ - prefectural (institution) - Noun +シャッター シャッター - shutter - Noun +国立 こくりつ - national - Noun +座席 ざせき - seat - Noun +客席 きゃくせき - guest seating (e.g. theater, stadium); passenger seat (e.g. taxi) - Noun +欠点 けってん - weak point, defect - Noun +欠ける かける - to be chipped; to be lacking - Verb +欠く かく - lack - Verb +次回 じかい - next time - Noun +運用 うんよう - making use of; operation; management - Verbal Noun +スピーカー スピーカー - speaker - Noun +運営 うんえい - operation, management - Verbal Noun +運賃 うんちん - passenger fare - Noun +運 うん - fortune; luck - Noun +運送 うんそう - shipping, transportation - Verbal Noun +回転 かいてん - revolution, rotation - Verbal Noun +転がる ころがる - roll over, tumble - Verb +転がす ころがす - roll, roll over (transitive) - Verb +セールスマン セールスマン - sales representative, salesperson - Noun +移転 いてん - moving; change of address - Verbal Noun +移動 いどう - movement, shift - Verbal Noun +行動 こうどう - action, conduct - Verbal Noun +運動会 うんどうかい - sports festival, athletic meet - Noun +運動場 うんどうじょう - sports ground; playground - Noun +運動場 うんどうじょう - playground, sports field - Noun +高速 こうそく - high speed - Noun +おしゃべり おしゃべり - chatter, idle talk - Noun +急速 きゅうそく - rapid, swift - Adjective +高速道路 こうそくどうろ - freeway, highway - Noun +早速 さっそく - immediately - Adverb +時速 じそく - speed per hour - Noun +全速力 ぜんそくりょく - full speed - Noun +遅れ おくれ - delay, being late - Noun +遅らす おくらす - delay, put off - Verb +カラオケ カラオケ - karaoke - Noun +終える おえる - end, finish - Verb +最終 さいしゅう - last, final - Noun +終点 しゅうてん - last stop (e.g. train) - Noun +始終 しじゅう - from beginning to end, at all times - Adverb +終電 しゅうでん - last train - Noun +現地 げんち - actual place; local - Noun +現代 げんだい - present age, modern times - Noun +現金 げんきん - cash; ready money - Adjectival Noun +こっそり こっそり - stealthily, secretly - Adverb +現れる あらわれる - appear, emerge - Verb +現場 げんば - actual spot, job site, crime scene - Noun +現住所 げんじゅうしょ - present address - Noun +現す あらわす - show, reveal - Verb +現れ あらわれ - embodiment, manifestation - Noun +在学 ざいがく - (enrolled) in school - Verbal Noun +現実 げんじつ - actuality, reality - Noun +ジョギング ジョギング - jogging - Verbal Noun +実は じつは - actually - None +実用 じつよう - practical use, utility - Noun +実力 じつりょく - real ability, capability - Noun +実習 じっしゅう - practice, training - Verbal Noun +実物 じつぶつ - real thing, actual object - Noun +実に じつに - truly, surely - Adverb +過ごす すごす - pass, let pass - Verb +あれこれ あれこれ - this and that, one thing or another - Noun +経過 けいか - passage; progress - Verbal Noun +過ち あやまち - fault, mistake - Noun +去る さる - go away, leave - Verb +活発 かっぱつ - lively, active - Adjectival Noun +始発 しはつ - first departure (of the day: train, bus, etc.); first train - Noun +表す あらわす - express, represent - Verb +言い表わす いいあらわす - express, say - Verb +絵本 えほん - picture book - Noun +およそ およそ - just about - Adverb +雑音 ざつおん - noise (jarring, grating) - Noun +足音 あしおと - sound of footsteps - Noun +音読み おんよみ - Chinese-derived kanji reading - Verbal Noun +五十音 ごじゅうおん - Japanese ordering of kana - Noun +気楽 きらく - easygoing, comfortable - Adjectival Noun +行楽 こうらく - excursion, outing, pleasure trip - Noun +薬指 くすりゆび - third finger, ring finger - Noun +サークル サークル - circle, club - Noun +食欲 しょくよく - appetite - Noun +映る うつる - be reflected, appear - Verb +映す うつす - reflect, project - Verb +企画 きかく - plan, project - Verbal Noun +画家 がか - artist, painter - Noun +区画 くかく - division, section - Noun +画面 がめん - screen - Noun +キリスト キリスト - Christ, Christianity - Noun +地面 じめん - ground; earth's surface - Noun +水面 すいめん - surface of the water - Noun +一面 いちめん - whole surface - Noun +真実 しんじつ - truth, reality - Noun +真理 しんり - truth - Noun +金色 きんいろ - golden color - Noun +形式 けいしき - form (as opposed to substance) - Noun +小型 こがた - small-sized - Noun +あっさり あっさり - plainly, matter-of-factly - Adverb +型 かた - type (e.g. of machine, goods, etc.), mold - Noun +一種 いっしゅ - a kind of, a sort of - Noun +各種 かくしゅ - each kind, various - Noun +一種 いっしゅ - a kind of, of sorts - Adverb +人種 じんしゅ - race - Noun +種目 しゅもく - event; item of business - Noun +人類 じんるい - mankind, humankind - Noun +せっせと せっせと - hard, diligently - Adverb +書類 しょるい - documents, papers - Noun +接近 せっきん - approach, proximity - Verbal Noun +間接 かんせつ - indirect - Noun +接する せっする - come in contact, adjoin - Verb +角度 かくど - angle - Noun +三角形 さんかくけい - triangle - Noun +曲線 きょくせん - curve, curved line - Noun +カタログ カタログ - catalogue - Noun +作曲 さっきょく - composition - Verbal Noun +共通 きょうつう - commonality - Verbal Noun +共通語 きょうつうご - common language, lingua franca - Noun +共同 きょうどう - joint, commonality - Verbal Noun +合同 ごうどう - combination, joint - Verbal Noun +一同 いちどう - everybody, all - Noun +以前 いぜん - before, ago - Noun +ジャズ ジャズ - jazz - Noun +以下 いか - below - Noun +以降 いこう - hereafter - Noun +以来 いらい - since - Noun +以後 いご - from now on, after that - Noun +下宿 げしゅく - lodging, boarding house - Verbal Noun +漢和 かんわ - Chinese and Japanese - Noun +英和 えいわ - English-Japanese - Noun +西洋 せいよう - the West, the Occident - Noun +サイン サイン - signature, autograph - Verbal Noun +海洋 かいよう - ocean, sea - Noun +西洋人 せいようじん - Westerner - Noun +制服 せいふく - uniform - Noun +室内 しつない - indoors - Noun +親子 おやこ - parent and child - Noun +親類 しんるい - relatives, kin - Noun +親しむ したしむ - get close to, get familiar with - Verb +ごまかす ごまかす - deceive, evade - Verb +親切 しんせつ - kindness - Noun +親友 しんゆう - close friend - Noun +親指 おやゆび - thumb - Noun +親しみ したしみ - intimacy, familiarity - Noun +水族館 すいぞくかん - aquarium - Noun +歳末 さいまつ - year end - Noun +姉妹 しまい - sisters - Noun +インテリ インテリ - intelligent - Noun +次第に しだいに - gradually, by degrees - Adverb +次第 しだい - as soon as - Noun +息 いき - breath - Noun +休息 きゅうそく - rest, break - Verbal Noun +消費者 しょうひしゃ - consumer - Noun +学者 がくしゃ - scholar - Noun +後者 こうしゃ - the latter - Noun +作者 さくしゃ - author, writer - Noun +いちいち いちいち - one by one, in detail - Adverb +前者 ぜんしゃ - the former - Noun +結局 けっきょく - after all; eventually; in the end - Adverb +新婚 しんこん - newlywed - Noun +婚約 こんやく - engagement, betrothal - Verbal Noun +課長 かちょう - section chief - Noun +効く きく - be effective - Verb +効力 こうりょく - effect, validity - Noun +ストライキ ストライキ - strike - Noun +効き目 ききめ - effect, efficacy - Noun +自動 じどう - automatic operation - Noun +自国 じこく - one's own country - Noun +各自 かくじ - each one, every individual - Noun +自然に しぜんに - naturally, instinctively - Adverb +経由 けいゆ - via, through - Verbal Noun +自信 じしん - self-confidence - Noun +あんまり あんまり - (not) that much, (not) so much - Adverb +信用 しんよう - trust, credit - Verbal Noun +信頼 しんらい - reliance, confidence - Verbal Noun +依頼 いらい - request, commission - Verbal Noun +人民 じんみん - the people, populace - Noun +国民 こくみん - the people, nation - Noun +主要 しゅよう - main, principal - Adjectival Noun +主に おもに - mainly, mostly - Adverb +主役 しゅやく - leading part, starring role - Noun +うるさい うるさい - noisy, bothersome - Adjective +主体 しゅたい - agent, main constituent, protagonist - Noun +主題 しゅだい - subject, theme - Noun +自主 じしゅ - independence, autonomy - Noun +主食 しゅしょく - staple food - Noun +主 おも - main, chief - Adjective +主義 しゅぎ - principle, -ism - Noun +共産主義 きょうさんしゅぎ - Communism - Noun +カーブ カーブ - curve, bend - Verbal Noun +義理 ぎり - sense of duty, justice - Noun +議会 ぎかい - assembly, council - Noun +協議 きょうぎ - conference, deliberation - Verbal Noun +議長 ぎちょう - chairman, president - Noun +議題 ぎだい - topic for discussion, agenda - Noun +議論 ぎろん - argument, discussion - Verbal Noun +結論 けつろん - conclusion - Verbal Noun +ガイド ガイド - guide - Verbal Noun +言論 げんろん - speech, discussion - Noun +世論 せろん - public opinion - Noun +違反 いはん - violation, breach - Verbal Noun +応じる おうじる - answer, comply with - Verb +応用 おうよう - application; put to practical use - Verbal Noun +一応 いちおう - tentatively; for the time being; more or less - Adverb +回答 かいとう - reply, answer - Verbal Noun +かえる かえる - frog - Noun +解答 かいとう - solution, answer - Verbal Noun +区別 くべつ - distinction, classification - Verbal Noun +差別 さべつ - discrimination - Verbal Noun +性別 せいべつ - sex, gender - Noun +一般に いっぱんに - generally, in general - Adverb +経済的 けいざいてき - economical, economic - Adjective +自主的 じしゅてき - autonomous, voluntary - Adjective +合理的 ごうりてき - rational, logical - Adjective +ずれる ずれる - off track, out of line - Verb +形式的 けいしきてき - formal - Adjective +実用的 じつようてき - practical - Adjective +女性的 じょせいてき - feminine, womanly - Adjective +水平 すいへい - horizontal, level - Adjectival Noun +水平線 すいへいせん - horizon - Noun +高等 こうとう - higher, high-grade - Adjectival Noun +上等 じょうとう - first-class, premium - Adjectival Noun +オーバー オーバー - exaggerate - Verbal Noun +急病 きゅうびょう - sudden illness - Noun +医学 いがく - medical science, medicine - Noun +科学者 かがくしゃ - scientist - Noun +科目 かもく - subject - Noun +学科 がっか - subject, department - Noun +外科 げか - surgery - Noun +歯科 しか - dentistry - Noun +エアコン エアコン - air-conditioning, air conditioner - Noun +自然科学 しぜんかがく - natural science - Noun +人文科学 じんぶんかがく - humanities - Noun +社会科学 しゃかいかがく - social sciences - Noun +死 し - death - Noun +死者 ししゃ - dead person, the deceased - Noun +死体 したい - corpse, body - Noun +生死 せいし - life and death - Noun +死亡 しぼう - death - Verbal Noun +しょっちゅう しょっちゅう - frequently, repeatedly - Adverb +痛み いたみ - pain, ache - Noun +痛む いたむ - feel pain, hurt - Verb +禁止 きんし - prohibition, forbiddance - Verbal Noun +禁じる きんじる - prohibit, forbid - Verb +煙 けむり - smoke, fumes - Noun +酒屋 さかや - liquor store - Noun +禁酒 きんしゅ - abstention from alcohol - Verbal Noun +スタンド スタンド - table lamp, desk lamp - Noun +険しい けわしい - steep; grim - Adjective +証券 しょうけん - bill, bond - Noun +証明 しょうめい - proof, evidence - Verbal Noun +生存 せいぞん - existence, survival - Verbal Noun +ご存じ ごぞんじ - know - Noun +合意 ごうい - mutual agreement - Verbal Noun +意向 いこう - intention, inclination - Noun +がっかり がっかり - feel disappointed - Adverb +意欲 いよく - volition, motivation - Noun +決意 けつい - resolution, determination - Verbal Noun +意図 いと - intention, aim - Verbal Noun +意外 いがい - unexpected, unforeseen - Adjectival Noun +意義 いぎ - meaning, significance - Noun +好意 こうい - favor, affection - Noun +意地悪 いじわる - nastiness, ill-natured person - Verbal Noun +確保 かくほ - securement; guarantee - Verbal Noun +スライド スライド - slide - Verbal Noun +確立 かくりつ - establishment - Verbal Noun +確定 かくてい - decision, confirmation - Verbal Noun +確実 かくじつ - certain, secure - Adjective +確信 かくしん - firm belief, conviction - Verbal Noun +効率 こうりつ - efficiency - Noun +確率 かくりつ - probability, rate - Noun +軽率 けいそつ - rash; thoughtless - Adjective +おっしゃる おっしゃる - say - Verb +機会 きかい - opportunity, occasion - Noun +危機 きき - crisis, emergency - Noun +機長 きちょう - airplane captain - Noun +時機 じき - opportunity, chance - Noun +楽器 がっき - musical instrument - Noun +食器 しょっき - tableware, dinner set - Noun +器用 きよう - skillful, clever - Adjectival Noun +クラシック クラシック - classical music, the classics - Adjectival Noun +受話器 じゅわき - (telephone) receiver - Noun +器 うつわ - bowl; container - Noun +消火器 しょうかき - fire extinguisher - Noun +器械 きかい - machine; instrument - Noun +取材 しゅざい - collection of data, gathering of news - Verbal Noun +材木 ざいもく - timber, wood - Noun +具合 ぐあい - condition, health - Noun +さっと さっと - quickly, suddenly - Adverb +器具 きぐ - utensil, implement - Noun +家具 かぐ - furniture - Noun +雨具 あまぐ - rain gear, rainwear - Noun +基地 きち - base, military base - Noun +水準 すいじゅん - level, standard - Noun +基準 きじゅん - standard, criterion - Noun +準急 じゅんきゅう - local express train - Noun +設立 せつりつ - establishment, foundation - Verbal Noun +キャンセル キャンセル - cancellation - Verbal Noun +設備 せつび - equipment, facilities - Verbal Noun +説 せつ - theory, opinion - Noun +解説 かいせつ - explanation, commentary - Verbal Noun +社説 しゃせつ - editorial - Noun +学説 がくせつ - theory - Noun +公式 こうしき - formal, official - Adjectival Noun +公共 こうきょう - public society, community - Noun +シーツ シーツ - sheet - Noun +公平 こうへい - impartiality, fairness - Adjectival Noun +公立 こうりつ - public - Noun +学園 がくえん - educational institution; campus - Noun +祭日 さいじつ - national holiday, festival day - Noun +国際的 こくさいてき - international - Adjective +国際化 こくさいか - internationalization - Verbal Noun +交際 こうさい - association, friendship - Verbal Noun +かかる かかる - catch; get (an illness) - Verb +際 さい - occasion, time - Noun +航空 こうくう - aviation; flying - Noun +航空機 こうくうき - aircraft, airplane - Noun +航空券 こうくうけん - airline ticket - Noun +完全 かんぜん - perfect, complete - Adjectival Noun +成長 せいちょう - growth - Verbal Noun +成立 せいりつ - establishment; coming into existence - Verbal Noun +形成 けいせい - formation - Verbal Noun +コック コック - cook, chef - Noun +結成 けっせい - formation; combination - Verbal Noun +成果 せいか - result, fruit - Noun +賛成 さんせい - approval, agreement - Verbal Noun +合成 ごうせい - composition, synthesis - Verbal Noun +成人 せいじん - adult, grownup - Verbal Noun +成年 せいねん - adult age - Noun +失う うしなう - lose, miss - Verb +えび えび - lobster, shrimp - Noun +失業 しつぎょう - unemployment, loss of job - Verbal Noun +失敗 しっぱい - failure, mistake - Verbal Noun +勝敗 しょうはい - victory or defeat - Noun +原則 げんそく - principle, general rule - Noun +原料 げんりょう - raw material - Noun +原理 げんり - principle, theory - Noun +原子力 げんしりょく - atomic energy, nuclear power - Noun +グリーン グリーン - green - Noun +高原 こうげん - plateau, highland - Noun +資料 しりょう - materials; data; document - Noun +資産 しさん - property, assets - Noun +資格 しかく - qualifications, competence - Noun +資本主義 しほんしゅぎ - capitalism - Noun +資源 しげん - resources - Noun +願書 がんしょ - application form - Noun +正式 せいしき - formal, official - Adjectival Noun +ジーパン ジーパン - jeans - Noun +正面 しょうめん - front, face - Noun +正午 しょうご - noon, noontime - Noun +正義 せいぎ - justice, righteousness - Noun +正門 せいもん - main gate, main entrance - Noun +正解 せいかい - right answer, correct solution - Verbal Noun +正方形 せいほうけい - square - Noun +正 せい - true; regular; original - Noun +ジャーナリズム ジャーナリズム - journalism - Noun +正座 せいざ - sitting upright with legs folded under one - Verbal Noun +正当 せいとう - just, legal - Adjectival Noun +異性 いせい - opposite sex - Noun +異常 いじょう - extraordinary, exceptional - Adjectival Noun +正常 せいじょう - normality, normalcy - Adjectival Noun +意識 いしき - consciousness, awareness - Verbal Noun +常識 じょうしき - common sense, common knowledge - Noun +スピーチ スピーチ - speech - Noun +調べ しらべ - investigation, inquiry - Noun +好調 こうちょう - favorable condition - Adjectival Noun +下調べ したしらべ - preliminary investigation, preparation - Verbal Noun +整備 せいび - maintenance, servicing - Verbal Noun +整理 せいり - sorting; arrangement; organization - Verbal Noun +節約 せつやく - economizing, saving - Verbal Noun +検査 けんさ - inspection, examination - Verbal Noun +ああ ああ - that kind of - Adverb +案 あん - plan, proposal - Noun +案外 あんがい - unexpectedly - Adverb +案の定 あんのじょう - just as thought; as usual - Adverb +国連 こくれん - United Nations - Noun +接続 せつぞく - connection, joining - Verbal Noun +外相 がいしょう - Minister of Foreign Affairs - Noun +真相 しんそう - the truth - Noun +相変わらず あいかわらず - as usual, as before - Adverb +アクセント アクセント - accent, stress - Noun +雑談 ざつだん - chat, idle talk - Verbal Noun +記事 きじ - article, news story - Noun +記号 きごう - symbol, sign - Noun +記入 きにゅう - entry, filling in of forms - Verbal Noun +暗記 あんき - memorization - Verbal Noun +記憶 きおく - memory, recollection - Verbal Noun +関心 かんしん - concern, interest - Noun +コマーシャル コマーシャル - commercial, advertising - Noun +税関 ぜいかん - custom house, customs - Noun +関節 かんせつ - joint (knee joint, elbow joint, etc.) - Noun +関わる かかわる - involve, concern - Verb +機関 きかん - engine; organisation - Noun +係 かかり - person in charge - Noun +現状 げんじょう - present condition - Noun +事態 じたい - situation, state of affairs - Noun +しつこい しつこい - persistent - Adjective +実態 じったい - the actual situation, the realities - Noun +行政 ぎょうせい - administration - Noun +政治家 せいじか - politician - Noun +治まる おさまる - settle down, be cured - Verb +政党 せいとう - political party - Noun +策 さく - scheme, policy - Noun +挙げる あげる - cite, give (an example) - Verb +気候 きこう - climate - Noun +しゃがむ しゃがむ - squat down - Verb +補う おぎなう - supplement (compensate for); replenish - Verb +足首 あしくび - ankle - Noun +首脳 しゅのう - leader - Noun +頭 かしら - head, chief - Noun +頭痛 ずつう - headache - Noun +顔色 かおいろ - complexion, expression - Noun +朝顔 あさがお - morning glory - Noun +コンテスト コンテスト - contest - Noun +改正 かいせい - revision, amendment - Verbal Noun +改良 かいりょう - improvement, reform - Verbal Noun +改める あらためる - reform, change - Verb +改造 かいぞう - remodeling, reorganization - Verbal Noun +改めて あらためて - once again - Adverb +改まる あらたまる - be renewed, change - Verb +革命 かくめい - revolution - Noun +キャベツ キャベツ - cabbage - Noun +生命 せいめい - life - Noun +命 いのち - life - Noun +運命 うんめい - fate - Noun +組合 くみあい - union, guild - Noun +仕組み しくみ - structure; mechanism - Noun +組 くみ - school class; group of people - Noun +組む くむ - pair up, partner with - Verb +組み合わせる くみあわせる - to join together; to combine - Verb +アイドル アイドル - idol, pop singer - Noun +組み込む くみこむ - incorporate, insert - Verb +組み合わせ くみあわせ - combination - Noun +織物 おりもの - cloth, textile - Noun +進出 しんしゅつ - advancement - Verbal Noun +進行 しんこう - advancement - Verbal Noun +進歩 しんぽ - progress, advancement - Verbal Noun +前進 ぜんしん - advancement - Verbal Noun +からかう からかう - make fun of, tease - Verb +進路 しんろ - course, route - Noun +行進 こうしん - march, parade - Verbal Noun +推進 すいしん - promotion - Verbal Noun +主任 しゅにん - person in charge - Noun +辞任 じにん - resignation - Verbal Noun +お世辞 おせじ - compliment, flattery - Noun +委員会 いいんかい - committee - Noun +すっきり すっきり - refreshed - Adverb +委員 いいん - committee member, delegate - Noun +出勤 しゅっきん - to go to work, attendance at work - Verbal Noun +勤勉 きんべん - diligence, hard work - Adjectival Noun +勤務 きんむ - duty; work - Verbal Noun +義務 ぎむ - duty, obligation - Noun +事務 じむ - office work - Noun +公務員 こうむいん - public officer, government worker - Noun +あいにく あいにく - unfortunately - Adverb +事務員 じむいん - clerk, clerical staff - Noun +従う したがう - follow, obey - Verb +従業員 じゅうぎょういん - employee, worker - Noun +雇用 こよう - employment - Verbal Noun +実績 じっせき - achievement, performance - Noun +業績 ぎょうせき - achievement, performance - Noun +応募 おうぼ - application - Verbal Noun +集中 しゅうちゅう - concentration, convergence - Verbal Noun +おばさん おばさん - middle-aged woman - Noun +集合 しゅうごう - gathering, assembly - Verbal Noun +集まり あつまり - gathering, assembly - Noun +収集 しゅうしゅう - collection, gathering - Verbal Noun +採算 さいさん - profit - Noun +採点 さいてん - marking, grading - Verbal Noun +供給 きょうきゅう - supply, provision - Verbal Noun +月給 げっきゅう - monthly salary - Noun +ジャンプ ジャンプ - jump - Verbal Noun +時給 じきゅう - hourly wage - Noun +需要 じゅよう - demand - Noun +就任 しゅうにん - inauguration, appointment - Verbal Noun +職員 しょくいん - staff, employee - Noun +職場 しょくば - place of work, office - Noun +職業 しょくぎょう - occupation - Noun +条約 じょうやく - treaty - Noun +あちらこちら あちらこちら - all over, here and there - Noun +参考 さんこう - reference, consultation - Noun +参議院 さんぎいん - House of Councilors, Upper House - Noun +お参り おまいり - visiting a shrine or temple - Verbal Noun +参考書 さんこうしょ - reference book - Noun +加わる くわわる - join in; participate - Verb +いい加減 いいかげん - irresponsible, half-baked - Adjectival Noun +追う おう - chase, pursue - Verb +追い出す おいだす - kick out; expel - Verb +いつのまにか いつのまにか - before it is noticed; unawares - Adverb +感じ かんじ - feeling, impression - Noun +感情 かんじょう - feeling, emotion - Noun +感覚 かんかく - sense, sensation - Noun +感動 かんどう - emotionally moving - Verbal Noun +実感 じっかん - true sense, realization - Verbal Noun +感心 かんしん - admiration - Verbal Noun +思想 しそう - thought, conception - Noun +おごる おごる - treat - Verb +感想 かんそう - thought, impression - Noun +空想 くうそう - fantasy, daydreams - Verbal Noun +現像 げんぞう - developing (film) - Verbal Noun +現象 げんしょう - phenomenon - Noun +気象 きしょう - weather condition - Noun +障子 しょうじ - paper sliding-door - Noun +修正 しゅうせい - correction, revision - Verbal Noun +おやつ おやつ - snack, refreshment - Noun +傷 きず - wound, scar - Noun +傷める いためる - damage, spoil - Verb +交換 こうかん - exchange, bartering - Verbal Noun +言い換える いいかえる - express in different words, paraphrase - Verb +着替え きがえ - change of clothes - Verbal Noun +交替 こうたい - alternation, shift - Verbal Noun +火災 かさい - fire, conflagration - Noun +災難 さいなん - calamity, misfortune - Noun +ごろごろ ごろごろ - rumble - Adverb +障害 しょうがい - obstacle, disorder - Noun +災害 さいがい - calamity, disaster - Noun +公害 こうがい - environmental pollution - Noun +水害 すいがい - flood damage - Noun +害 がい - harm, damage - Verbal Noun +被せる かぶせる - to cover (with something) - Verb +救う すくう - save, relieve - Verb +シューズ シューズ - shoes, sports shoes - Noun +救い すくい - rescue, relief - Noun +助手 じょしゅ - assistant, helper - Noun +救助 きゅうじょ - rescue, relief - Verbal Noun +支援 しえん - support, backing - Verbal Noun +援助 えんじょ - aid, assistance - Verbal Noun +応援 おうえん - support, cheering - Verbal Noun +小遣い こづかい - pocket money, allowance - Noun +キス キス - kiss - Verbal Noun +警告 けいこく - warning, admonition - Verbal Noun +警官 けいかん - police officer, policeman - Noun +管 かん - pipe, tube - Noun +犯す おかす - commit a crime, rape - Verb +強盗 ごうとう - robbery - Noun +自殺 じさつ - suicide - Verbal Noun +殺人 さつじん - murder, homicide - Noun +くるくる くるくる - round and round, spin - Adverb +奪う うばう - rob, take by force - Verb +戦後 せんご - postwar period - Noun +作戦 さくせん - tactic, strategy - Noun +戦場 せんじょう - battlefield - Noun +戦前 せんぜん - prewar period - Noun +戦死 せんし - death in war - Verbal Noun +争い あらそい - conflict, battle - Noun +争う あらそう - compete, fight - Verb +サボる サボる - blow off, play truant - Verb +競技 きょうぎ - match, sporting event - Verbal Noun +混雑 こんざつ - confusion, disorder - Verbal Noun +混乱 こんらん - disorder, confusion - Verbal Noun +捜す さがす - look for, search for - Verb +索引 さくいん - index - Noun +落ち着く おちつく - calm down, settle in - Verb +落ち着き おちつき - calmness, composure - Noun +ショッピング ショッピング - shopping - Verbal Noun +落とし物 おとしもの - lost property - Noun +交流 こうりゅう - interaction, contact - Verbal Noun +一流 いちりゅう - top-ranked, world-class - Noun +上流 じょうりゅう - upstream - Noun +下流 かりゅう - downstream - Noun +海流 かいりゅう - ocean current - Noun +三流 さんりゅう - third-rate - Noun +スマート スマート - smart, sophisticated - Adjective +洪水 こうずい - flood, inundation - Noun +崩れる くずれる - crumble, collapse - Verb +崩す くずす - destroy, break - Verb +水洗 すいせん - flushing, rinsing with water - Verbal Noun +洗い物 あらいもの - dishes to be washed - Noun +石油 せきゆ - petroleum, oil - Noun +油絵 あぶらえ - oil painting - Noun +浮かぶ うかぶ - float - Verb +ずらり ずらり - line up neatly - Adverb +浮かべる うかべる - set afloat - Verb +浮く うく - float - Verb +沈める しずめる - sink, submerge - Verb +将来 しょうらい - future (usually near) - Noun +永遠 えいえん - eternity - Adjectival Noun +永久 えいきゅう - eternity - Adjectival Noun +河口 かこう - river mouth, estuary - Noun +いらっしゃる いらっしゃる - come, go - Verb +冷ます さます - cool, let cool - Verb +車庫 しゃこ - garage - Noun +金庫 きんこ - vault, safe - Noun +心臓 しんぞう - heart - Adjectival Noun +軽快 けいかい - light, cheerful - Adjective +快い こころよい - pleasant, agreeable - Adjective +快晴 かいせい - good weather - Noun +ウナギ ウナギ - eel - Noun +最適 さいてき - optimum - Adjectival Noun +指摘 してき - pointing out, identification - Verbal Noun +湿度 しつど - humidity - Noun +湿っぽい しめっぽい - damp, gloomy - Adjective +湿気 しっけ - moisture, dampness - Noun +湿る しめる - get damp, get wet - Verb +汚染 おせん - pollution, contamination - Verbal Noun +景気 けいき - economic climate - Noun +ガード ガード - guard rail - Noun +影 かげ - shadow, shade - Noun +境界 きょうかい - boundary, border - Noun +環境 かんきょう - environment, surroundings - Noun +国境 こっきょう - national border - Noun +境 さかい - boundary, border - Noun +観察 かんさつ - observation, supervision - Verbal Noun +外観 がいかん - external appearance - Noun +かぼちゃ かぼちゃ - pumpkin - Noun +客観的 きゃっかんてき - objective - Adjective +主観 しゅかん - subjectivity, subject - Noun +主観的 しゅかんてき - subjective - Adjective +観客 かんきゃく - audience, spectator - Noun +観光 かんこう - sightseeing - Noun +観測 かんそく - observation - Verbal Noun +推測 すいそく - conjecture, guess - Verbal Noun +クイズ クイズ - quiz, quiz show - Noun +宇宙 うちゅう - universe, space - Noun +衛星 えいせい - satellite - Noun +衛生 えいせい - hygiene, sanitation - Noun +衛生的 えいせいてき - sanitary, hygienic - Adjective +球 きゅう - globe, ball - Noun +震度 しんど - seismic intensity - Noun +振動 しんどう - vibration - Verbal Noun +クリーム クリーム - cream - Noun +神経 しんけい - sensitivity, nerves - Noun +神様 かみさま - god, the divine - Noun +神道 しんとう - Shinto - Noun +精神 せいしん - mind, spirit - Noun +精算 せいさん - settlement of accounts, adjustment - Verbal Noun +厳重 げんじゅう - strict, secure - Adjective +貴重 きちょう - precious, valuable - Adjectival Noun +貴重品 きちょうひん - valuables - Noun +ぐるぐる ぐるぐる - round and round - Adverb +跡 あと - trace, track - Noun +足跡 あしあと - footprint - Noun +好奇心 こうきしん - curiosity - Noun +奇跡 きせき - miracle, wonder - Noun +奇数 きすう - odd number - Noun +経歴 けいれき - personal history, resume - Noun +学歴 がくれき - educational history - Noun +さぞ さぞ - I am sure; no doubt - Adverb +王 おう - king - Noun +王様 おうさま - king - Noun +建築 けんちく - construction, architecture - Verbal Noun +新築 しんちく - new building - Verbal Noun +構想 こうそう - conception, plan - Verbal Noun +構える かまえる - set up (shop) - Verb +結構 けっこう - I'm fine; no thank you - Adjective +サングラス サングラス - sunglasses - Noun +結構 けっこう - quite - Adverb +構う かまう - mind, care for - Verb +位 くらい - rank, dignity - Noun +設置 せっち - establishment - Verbal Noun +距離 きょり - distance, interval - Noun +一周 いっしゅう - once around - Verbal Noun +辺り あたり - vicinity, around - Noun +周囲 しゅうい - circumference, surroundings - Noun +きっちり きっちり - exactly - Adverb +囲む かこむ - enclose, encircle - Verb +横断 おうだん - crossing, traversing - Verbal Noun +継続 けいぞく - continuation - Verbal Noun +欧米 おうべい - Europe and America - Noun +州 しゅう - state - Noun +陸 おか - land, shore - Noun +極めて きわめて - extremely, very - Adverb +きゅうり きゅうり - cucumber - Noun +消極的 しょうきょくてき - negative, passive - Adjective +極端 きょくたん - extreme - Adjectival Noun +最先端 さいせんたん - cutting edge, forefront - Noun +一緒 いっしょ - together - Verbal Noun +外貨 がいか - foreign currency - Noun +貨物 かもつ - freight, cargo - Noun +車輪 しゃりん - wheel - Noun +すっと すっと - quickly; directly - Adverb +回復 かいふく - recovery, rehabilitation - Verbal Noun +渋い しぶい - bitter, astringent - Adjective +渋滞 じゅうたい - delay, traffic jam - Verbal Noun +一帯 いったい - area, vicinity - Noun +帯 おび - belt, sash - Noun +温帯 おんたい - temperate zone - Noun +守備 しゅび - defense, fielding - Verbal Noun +帰宅 きたく - return home - Verbal Noun +すらすら すらすら - unhesitantly; smoothly - Adverb +住宅地 じゅうたくち - residential district - Noun +宛先 あてさき - recipient, addressee - Noun +宛名 あてな - name of recipient, addressee - Noun +後戻り あともどり - turning back, retreat - Verbal Noun +起こす おこす - bring about, cause; wake up - Verb +起源 きげん - origin, beginning - Noun +起き上がる おきあがる - get up, rise - Verb +うろうろ うろうろ - wander - Adverb +寝室 しんしつ - bedroom - Noun +静まる しずまる - become quiet, calm down - Verb +休暇 きゅうか - holiday, vacation - Noun +片手 かたて - one hand - Noun +片方 かたほう - one side - Noun +片側 かたがわ - one side - Noun +裏切る うらぎる - betray - Verb +おまけ おまけ - extra; freebie - Verbal Noun +裏口 うらぐち - back door - Noun +裏返し うらがえし - inside out; upside down - Verbal Noun +裏門 うらもん - back gate - Noun +裏表 うらおもて - inside-out, both sides - Noun +項目 こうもく - (data) item; entry - Noun +印象 いんしょう - impression - Noun +印 しるし - mark, symbol - Noun +クッキー クッキー - cookie, biscuit - Noun +印刷 いんさつ - printing - Verbal Noun +週刊 しゅうかん - published weekly - Noun +月刊 げっかん - published monthly - Noun +出版 しゅっぱん - publishing, publication - Verbal Noun +出版社 しゅっぱんしゃ - publishing company - Noun +詳細 しょうさい - details, particulars - Adjectival Noun +心細い こころぼそい - helpless, lonely - Adjective +掲示 けいじ - notice, bulletin - Verbal Noun +コンセント コンセント - outlet, wall socket - Noun +積極的 せっきょくてき - positive, active - Adjective +言い訳 いいわけ - excuse; explanation - Verbal Noun +誤り あやまり - error, mistake - Noun +誤る あやまる - make a mistake - Verb +誤解 ごかい - misunderstanding - Verbal Noun +気付く きづく - notice, become aware of - Verb +くっ付く くっつく - stick, cling - Verb +ずるい ずるい - cunning, sneaky - Adjective +追い付く おいつく - overtake, catch up with - Verb +顔付き かおつき - face, expression - Noun +思い付く おもいつく - think of, hit upon - Verb +後片付け あとかたづけ - cleaning up - Verbal Noun +傷付く きずつく - get injured, be hurt - Verb +傷付ける きずつける - wound, hurt - Verb +くっ付ける くっつける - attach, paste - Verb +せっかち せっかち - impatient - Adjectival Noun +言付ける ことづける - leave a message - Verb +金属 きんぞく - metal - Noun +所属 しょぞく - belong to; member - Verbal Noun +大蔵省 おおくらしょう - Ministry of Finance - Noun +外務省 がいむしょう - Ministry of Foreign Affairs - Noun +帰省 きせい - homecoming - Verbal Noun +省略 しょうりゃく - omission, abbreviation - Verbal Noun +概念 がいねん - general idea, concept - Noun +うちわ うちわ - round paper fan - Noun +記念 きねん - commemoration, memory - Verbal Noun +信念 しんねん - belief, conviction - Noun +順調 じゅんちょう - favorable condition, smooth progress - Adjectival Noun +順 じゅん - order, sequence - Noun +順番 じゅんばん - order of things; turn (in line); - Noun +順位 じゅんい - order, rank - Noun +順々に じゅんじゅんに - by turns, in order - Adverb +うっかり うっかり - carelessly, accidentally - Adverb +順序 じゅんじょ - order - Noun +逆 ぎゃく - reverse, inverse - Adjectival Noun +逆らう さからう - disobey, go against - Verb +逆さ さかさ - reverse, inversion - Adjectival Noun +逆さま さかさま - upside-down, reverse - Adjectival Noun +行列 ぎょうれつ - queue, line - Verbal Noun +整列 せいれつ - row, (standing in a) line - Verbal Noun +くだらない くだらない - worthless, trifling - Adjective +実例 じつれい - example, instance - Noun +余り あまり - remainder, leftover - Adverb +削減 さくげん - curtailment, reduction - Verbal Noun +削除 さくじょ - deletion, elimination - Verbal Noun +既に すでに - already, previously - Adverb +既製 きせい - ready-made, ready-to-wear - Noun +深刻 しんこく - serious, grave - Adjective +刻む きざむ - cut fine - Verb +ずうずうしい ずうずうしい - cheeky, impudent - Adjective +時刻 じこく - time, hour - Noun +締め切り しめきり - deadline, time limit - Noun +締め切る しめきる - close, fix a deadline - Verb +締まる しまる - tighten, be compact - Verb +栄える さかえる - flourish, thrive - Verb +栄養 えいよう - nutrition, nourishment - Noun +教養 きょうよう - culture, education - Noun +すやすや すやすや - sleeping peacefully - Adverb +休養 きゅうよう - rest, recreation - Verbal Noun +苦しむ くるしむ - suffer, be troubled - Verb +苦情 くじょう - complaint, grievance - Noun +苦心 くしん - pains, efforts - Verbal Noun +苦しみ くるしみ - distress, suffering - Noun +苦痛 くつう - pain, agony - Noun +苦しめる くるしめる - torment, trouble - Verb +セルフサービス セルフサービス - self-service - Noun +苦労 くろう - difficulty, hardship - Verbal Noun +勤労 きんろう - labor, work - Verbal Noun +過労 かろう - overwork - Noun +困難 こんなん - difficulty, hardship - Verbal Noun +甘える あまえる - depend on, take advantage of - Verb +甘やかす あまやかす - be indulgent to, spoil - Verb +辛い からい - strict, severe, spicy - Adjective +アルファベット アルファベット - alphabet - Noun +幸い さいわい - happiness, good fortune - Adjectival Noun +幸運 こううん - good fortune, good luck - Adjectival Noun +幸福 こうふく - happiness, good fortune - Adjectival Noun +砂 すな - sand, grit - Noun +砂漠 さばく - desert - Noun +漁業 ぎょぎょう - fishing industry - Noun +薄暗い うすぐらい - gloomy, dim - Adjective +薄める うすめる - thin, dilute - Verb +いびき いびき - snoring - Noun +薄着 うすぎ - light clothing - Verbal Noun +厚着 あつぎ - heavy clothing - Verbal Noun +圧力 あつりょく - pressure - Noun +気圧 きあつ - atmospheric pressure - Noun +高気圧 こうきあつ - high pressure - Noun +縮小 しゅくしょう - reduction, curtailment - Verbal Noun +越す こす - go over, surmount - Verb +いやらしい いやらしい - disgusting, nasty - Adjective +追い抜く おいぬく - pass, overtake - Verb +札 さつ - note, paper money - Noun +改札 かいさつ - ticket gate - Verbal Noun +感謝 かんしゃ - gratitude, thanks - Verbal Noun +月謝 げっしゃ - monthly (tuition) fee - Noun +射す さす - shine on - Verb +過程 かてい - process, course - Noun +イントネーション イントネーション - intonation - Noun +課程 かてい - course, curriculum - Noun +行程 こうてい - journey; a distance - Noun +先程 さきほど - some time ago, a little while ago - Noun +優れる すぐれる - be superior to; excel - Verb +女優 じょゆう - actress - Noun +透き通る すきとおる - be transparent - Verb +指導 しどう - guide, lead - Verbal Noun +希望 きぼう - hope, wish - Verbal Noun +がたがた がたがた - rattle - Adjective +失望 しつぼう - disappointment, loss of hope - Verbal Noun +意志 いし - will, volition - Noun +志す こころざす - have an ambition for, aspire - Verb +怒り いかり - anger, rage - Noun +自身 じしん - self - Noun +出身 しゅっしん - person's origin - Noun +全身 ぜんしん - the whole body - Noun +カンニング カンニング - cheating - Verbal Noun +身長 しんちょう - stature, height - Noun +心身 しんしん - mind and body - Noun +受け身 うけみ - passiveness, passive voice - Noun +証拠 しょうこ - proof, evidence - Noun +照明 しょうめい - illumination, lighting - Verbal Noun +工夫 くふう - contrivance, scheme - Verbal Noun +主婦 しゅふ - housewife - Noun +あぐら あぐら - sit cross legged - Noun +産婦人科 さんふじんか - obstetrics and gynecology - Noun +奥様 おくさま - married woman, someone's wife - Noun +お互い おたがい - each other - Noun +交互 こうご - by turns, alternatively - Noun +高齢 こうれい - advanced age, elderly - Noun +愛情 あいじょう - love, affection - Noun +可愛らしい かわいらしい - lovely, charming - Adjective +可愛がる かわいがる - love, cherish - Verb +いやいや いやいや - reluctantly - Adverb +恋 こい - love, romance - Noun +失恋 しつれん - broken heart - Verbal Noun +恋する こいする - love, fall in love with - Verb +延長 えんちょう - extension, prolongation - Verbal Noun +延期 えんき - postponement, deferment - Verbal Noun +祝う いわう - celebrate, congratulate - Verb +祝い いわい - celebration, congratulation - Noun +ウエスト ウエスト - the waist - Noun +純粋 じゅんすい - pure, unmixed - Adjectival Noun +慎重 しんちょう - careful, discreet - Adjectival Noun +笑顔 えがお - smiling face, smile - Noun +大喜び おおよろこび - great joy, delight - Verbal Noun +看護 かんご - nursing - Verbal Noun +看病 かんびょう - nursing (a patient) - Verbal Noun +肯定 こうてい - affirmation - Verbal Noun +オルガン オルガン - organ, pipe organ - Noun +記述 きじゅつ - description - Verbal Noun +裁判 さいばん - trial, judgment - Verbal Noun +裁判所 さいばんしょ - courthouse - Noun +訴え うったえ - lawsuit, appeal - Noun +区域 くいき - zone - Noun +疑い うたがい - doubt, suspicion - Noun +疑問 ぎもん - question, doubt - Noun +からから からから - laugh loudly - Adverb +疑う うたがう - doubt, be suspicious - Verb +疑わしい うたがわしい - doubtful, questionable - Adjective +著しい いちじるしい - remarkable, conspicuous - Adjective +著す あらわす - write - Verb +権利 けんり - right, privilege - Noun +権力 けんりょく - power, authority - Noun +人権 じんけん - human rights - Noun +棄権 きけん - dropping out, renouncing rights - Verbal Noun +きっちん きっちん - kitchen - Noun +侵す おかす - invade, violate - Verb +行為 こうい - act, conduct - Noun +賞 しょう - prize, award - Noun +賞品 しょうひん - prize, trophy - Noun +観賞 かんしょう - ornamental; admiration - Verbal Noun +財政 ざいせい - public finance, financial affairs - Noun +財産 ざいさん - fortune, asset - Noun +くしゃくしゃ くしゃくしゃ - messy, crumpled - Adverb +金融 きんゆう - finance - Noun +間隔 かんかく - interval, space - Noun +終了 しゅうりょう - end, expiry - Verbal Noun +完了 かんりょう - completion - Verbal Noun +修了 しゅうりょう - completion (of a course) - Verbal Noun +承認 しょうにん - approval, recognition - Verbal Noun +承知 しょうち - consent, knowledge - Verbal Noun +けち けち - stingy, miser - Adjectival Noun +納める おさめる - pay a tax or fee - Verb +説得 せっとく - persuasion - Verbal Noun +所得 しょとく - income, earnings - Noun +得る える - obtain, gain - Verb +乾燥 かんそう - drying up, desiccation - Verbal Noun +幹部 かんぶ - executive - Noun +酸素 さんそ - oxygen - Noun +素直 すなお - honest, straightforward - Adjective +ざらざら ざらざら - rough, gritty - Noun +水素 すいそ - hydrogen - Noun +素早い すばやい - nimble, quick - Adjective +石炭 せきたん - coal - Noun +岩 いわ - rock, cliff - Noun +岸 きし - shore, bank - Noun +校庭 こうてい - schoolyard, campus - Noun +解散 かいさん - breakup, dissolution - Verbal Noun +スモッグ スモッグ - smog - Noun +植物 しょくぶつ - plant, vegetation - Noun +植民地 しょくみんち - colony, settlement - Noun +植木 うえき - garden plant, shrub - Noun +植物園 しょくぶつえん - botanical garden - Noun +根拠 こんきょ - grounds, basis - Noun +根本 こんぽん - basis, root - Noun +板 いた - board, plank - Noun +すり すり - pickpocket - Noun +看板 かんばん - signboard, sign - Noun +草花 くさばな - plants and flowers - Noun +草木 くさき - plants and trees - Noun +言葉遣い ことばづかい - wording, language - Noun +落ち葉 おちば - fallen leaves - Noun +木の葉 このは - tree leaves - Noun +書き言葉 かきことば - written language - Noun +吸収 きゅうしゅう - absorption, merger - Verbal Noun +おにぎり おにぎり - rice ball - Noun +呼吸 こきゅう - breathing, respiration - Verbal Noun +吸い込む すいこむ - inhale, suck in - Verb +及ぶ およぶ - reach to, come up to - Verb +扱う あつかう - handle, deal with - Verb +高級 こうきゅう - high rank, high class - Adjectival Noun +級 きゅう - grade, class - Noun +上級 じょうきゅう - higher grade, advanced class - Noun +かみそり かみそり - razor - Noun +初級 しょきゅう - beginner class, elementary level - Noun +血管 けっかん - blood vessel - Noun +出血 しゅっけつ - bleeding, hemorrhage - Verbal Noun +液体 えきたい - liquid, fluid - Noun +血液 けつえき - blood - Noun +液 えき - liquid, fluid - Noun +背中 せなか - back - Noun +がやがや がやがや - chatter loudly - Adverb +背広 せびろ - business suit - Noun +骨折 こっせつ - fracture, broken bone - Verbal Noun +健全 けんぜん - healthy, sound - Adjective +健康 けんこう - health - Noun +診断 しんだん - diagnosis - Verbal Noun +診察 しんさつ - medical examination - Verbal Noun +医療 いりょう - medical service, healthcare - Noun +きょろきょろ きょろきょろ - look around - Adverb +気の毒 きのどく - pitiable, regrettable - Adjectival Noun +消毒 しょうどく - disinfection, sterilization - Verbal Noun +症状 しょうじょう - symptom - Noun +清書 せいしょ - clean copy - Verbal Noun +清潔 せいけつ - clean; pure - Adjectival Noun +監督 かんとく - supervisor, film director - Verbal Noun +撮影 さつえい - photographing; filming - Verbal Noun +描く えがく - draw - Verb +くしゃみ くしゃみ - sneeze - Noun +活躍 かつやく - activity (esp. energetic) - Verbal Noun +再開 さいかい - reopening, restart - Verbal Noun +再生 さいせい - playback; resuscitation - Verbal Noun +再会 さいかい - reunion - Verbal Noun +編む あむ - knit; compile - Verb +解放 かいほう - release, setting free - Verbal Noun +開放 かいほう - opening - Verbal Noun +ぐずぐず ぐずぐず - drag one's feet, waste time - Adverb +重視 じゅうし - importance, value - Verbal Noun +視点 してん - viewpoint - Noun +近視 きんし - nearsightedness, shortsightedness - Noun +衣類 いるい - clothes, garments - Noun +衣服 いふく - clothes, dress - Noun +衣料 いりょう - clothing, garments - Noun +衣食住 いしょくじゅう - clothing and food and housing - Noun +くすぐったい くすぐったい - ticklish - Adjective +仮に かりに - supposing that, even if - Adverb +仮定 かてい - assumption, supposition - Verbal Noun +仮 かり - provisional, temporary - Noun +仮名遣い かなづかい - kana orthography, use of kana - Noun +演説 えんぜつ - speech, address - Verbal Noun +公演 こうえん - public performance - Verbal Noun +演じる えんじる - perform, play - Verb +出演 しゅつえん - appearance on stage, performance - Verbal Noun +くたびれる くたびれる - get tired, be worn out - Verb +劇 げき - drama, play - Noun +劇場 げきじょう - theater - Noun +演劇 えんげき - drama, play - Noun +喜劇 きげき - comedy - Noun +悲しみ かなしみ - grief, sadness - Noun +集団 しゅうだん - group, mass - Noun +固定 こてい - fixing, fixation - Verbal Noun +いらいら いらいら - be irritated - Adjective +固める かためる - harden, strengthen - Verb +固まる かたまる - harden, solidify - Verb +固体 こたい - solid, solid matter - Noun +固有 こゆう - peculiar to, characteristic - Adjectival Noun +主催 しゅさい - sponsorship, promotion - Verbal Noun +促す うながす - hasten, urge - Verb +催促 さいそく - demand, urging - Verbal Noun +エチケット エチケット - etiquette - Noun +古典 こてん - classics - Noun +辞典 じてん - dictionary - Noun +殊に ことに - especially, exceptionally - Adverb +象徴 しょうちょう - symbol, symbolize - Verbal Noun +微か かすか - faint, dim - Adjective +ご免 ごめん - sorry - Noun +許可 きょか - permission, approval - Verbal Noun +訓練 くんれん - training, practice - Verbal Noun +かっと かっと - lose one's temper, fly into a rage - Adverb +訓読み くんよみ - Japanese pronunciation - Verbal Noun +訓 くん - Japanese reading of kanji - Noun +助詞 じょし - particle, postposition - Noun +形容詞 けいようし - adjective - Noun +上司 じょうし - boss - Noun +司会 しかい - host; leading a meeting - Verbal Noun +購入 こうにゅう - purchase - Verbal Noun +がらがら がらがら - gargle (also empty, raspy) - Adverb +講演 こうえん - lecture - Verbal Noun +講義 こうぎ - lecture - Verbal Noun +休講 きゅうこう - cancellation of lecture - Verbal Noun +医師 いし - doctor, physician - Noun +講師 こうし - speaker, lecturer - Noun +技師 ぎし - engineer, technician - Noun +師走 しわす - December - Noun +かんかん かんかん - furious - Adverb +お手伝い おてつだい - helper, assistant - Verbal Noun +小鳥 ことり - small bird - Noun +大声 おおごえ - loud voice - Noun +歌声 うたごえ - singing voice - Noun +騒ぎ さわぎ - clamor, commotion - Noun +騒がしい さわがしい - noisy - Adjective +飼う かう - to keep (a pet or other animal) - Verb +これまで これまで - until now, until here - Noun +刺さる ささる - to stick into; to pierce - Verb +急激 きゅうげき - sudden, abrupt - Adjectival Noun +刺激 しげき - stimulus, stimulation - Verbal Noun +感激 かんげき - deep emotion, moving - Verbal Noun +興味 きょうみ - interest - Noun +興奮 こうふん - excitement, agitation - Verbal Noun +驚き おどろき - surprise, amazement - Noun +驚かす おどろかす - surprise, amaze - Verb +じめじめ じめじめ - feel damp, clammy - Adverb +至る いたる - come to, reach - Verb +至る所 いたるところ - everywhere, all over - Noun +至急 しきゅう - urgent, pressing - Noun +一致 いっち - accord, agreement - Verbal Noun +致す いたす - humbly do - Verb +傾く かたむく - decline, go down - Verb +傾ける かたむける - lean, cock (one's head) - Verb +じろじろ じろじろ - stare - Adverb +坂 さか - slope, incline - Noun +狭まる せばまる - become narrow, contract - Verb +狭める せばめる - narrow, contract - Verb +徐行 じょこう - going slowly - Verbal Noun +硬さ かたさ - hardness - Noun +柔軟 じゅうなん - pliable, soft - Adjective +緊急 きんきゅう - urgent, pressing - Adjectival Noun +あり あり - ant - Noun +緊張 きんちょう - tension, mental strain - Verbal Noun +拡張 かくちょう - expansion, extension - Verbal Noun +出張 しゅっちょう - business trip - Verbal Noun +衝突 しょうとつ - collision, conflict - Verbal Noun +煙突 えんとつ - chimney, smokestack - Noun +避ける さける - avoid, evade - Verb +軍事 ぐんじ - military affairs - Noun +軍 ぐん - army, troops - Noun +あいづち あいづち - interjections during a conversation that indicate the listener is paying attention and understanding the speaker - Noun +自衛隊 じえいたい - Self Defense Forces - Noun +軍隊 ぐんたい - army, troops - Noun +核 かく - core, atomic nucleus - Noun +結核 けっかく - tuberculosis - Noun +専攻 せんこう - major, specialization - Verbal Noun +攻める せめる - attack, take the offensive - Verb +撃つ うつ - shoot at, attack - Verb +かちかち かちかち - hard, solid - Adjective +暴れる あばれる - act violently, rage about - Verb +襲う おそう - raid, attack - Verb +絶対 ぜったい - absolutely - Adverb +気絶 きぜつ - fainting - Verbal Noun +消防 しょうぼう - fire fighting, fire prevention - Noun +嫌う きらう - dislike - Verb +嫌がる いやがる - dislike, hate - Verb +くたくた くたくた - exhausted - Adjective +機嫌 きげん - mood, health - Noun +好き嫌い すききらい - likes and dislikes, taste - Noun +抗議 こうぎ - protest - Verbal Noun +素敵 すてき - lovely, nice - Adjective +脅かす おどかす - threaten, intimidate - Verb +権威 けんい - authority, power - Noun +威張る いばる - put on airs, be arrogant - Verb +情勢 じょうせい - state of things, situation - Noun +こしょう こしょう - pepper - Noun +勢力 せいりょく - influence, power - Noun +勢い いきおい - vigor, momentum - Noun +恐れ おそれ - fear, risk - Noun +恐れる おそれる - fear - Verb +恐らく おそらく - probably - Adverb +怖がる こわがる - be afraid of, fear - Verb +巨大 きょだい - huge, gigantic - Adjectival Noun +すべすべ すべすべ - smooth - Adverb +拒否 きょひ - denial, rejection - Verbal Noun +系列 けいれつ - affiliation - Noun +系統 けいとう - system, lineage - Noun +子孫 しそん - descendant, offspring - Noun +絹 きぬ - silk - Noun +維持 いじ - maintenance, upkeep - Verbal Noun +紳士 しんし - gentleman - Noun +せっかく せっかく - with much trouble, specially - Adverb +偉大 いだい - great, mighty - Adjective +刀 かたな - sword, blade - Noun +孤独 こどく - solitary, lonely - Adjectival Noun +事柄 ことがら - matter, affair - Noun +柄 がら - pattern, design - Noun +柄 え - handle, grip - Noun +枝 えだ - branch, twig - Noun +あきれる あきれる - be stunned in disappointment or disbelief - Verb +枯れる かれる - wither, die - Verb +木枯らし こがらし - cold wintry wind - Noun +詩 し - poetry - Noun +詩人 しじん - poet - Noun +誠実 せいじつ - sincerity, honesty - Adjectival Noun +盛ん さかん - prosperous, active - Adjective +謙遜 けんそん - humility, modesty - Verbal Noun +兼ねる かねる - serve two functions, combine - Verb +あだ名 あだな - nickname - Noun +鋭い するどい - pointed, acute - Adjective +鎖 くさり - chain, tether - Noun +鑑賞 かんしょう - viewing, enjoyment (of art) - Verbal Noun +印鑑 いんかん - personal seal - Noun +鐘 かね - bell, gong - Noun +寿命 じゅみょう - life span - Noun +海水浴 かいすいよく - sea bathing - Verbal Noun +あふれる あふれる - over flow, flood - Verb +沿岸 えんがん - coast, shore - Noun +砂浜 すなはま - sandy beach - Noun +沖 おき - open sea; offshore - Noun +泉 いずみ - spring, fountain - Noun +温泉 おんせん - hot spring - Noun +澄む すむ - clear, become clear - Verb +叫び さけび - shout, cry - Noun +いか いか - squid - Noun +叫ぶ さけぶ - shout, cry out - Verb +喫煙 きつえん - smoking - Verbal Noun +懸ける かける - stake - Verb +恩 おん - debt of gratitude, kindness - Noun +市街 しがい - the streets, urban areas - Noun +粉 こな - powder, flour - Noun +小麦 こむぎ - wheat - Noun +小麦粉 こむぎこ - flour - Noun +いつのまに いつのまに - when - Adverb +大麦 おおむぎ - barley - Noun +炊事 すいじ - cooking - Verbal Noun +暦 こよみ - calendar, almanac - Noun +皮 かわ - peel, fur - Noun +毛皮 けがわ - fur - Noun +毛糸 けいと - woolen yarn, wool - Noun +尾 お - tail - Noun +インフレーション インフレーション - inflation - Noun +白髪 しらが - white hair, gray hair - Noun +耳鼻科 じびか - otorhinology, ear-nose-throat - Noun +唇 くちびる - lip, lips - Noun +解釈 かいしゃく - interpretation, explanation - Verbal Noun +居間 いま - living room - Noun +居る おる - to exist (humble) - Verb +一層 いっそう - more, even more - Adverb +ウィークエンド ウィークエンド - weekend - Noun +高層 こうそう - high altitude, high-rise - Noun +覆う おおう - cover, hide - Verb +戸籍 こせき - family register - Noun +ガラス戸 がらすど - glass door - Noun +新鮮 しんせん - fresh - Adjective +鮮やか あざやか - vivid - Adjective +群集 ぐんしゅう - crowd - Verbal Noun +郡 ぐん - county - Noun +うがい うがい - gargling - Verbal Noun +君 きみ - you - Noun +脂 あぶら - fat, grease - Noun +脂肪 しぼう - fat, grease - Noun +胃腸 いちょう - stomach and intestines - Noun +肝心 かんじん - vital, essential - Adjectival Noun +山脈 さんみゃく - mountain range - Noun +暮らす くらす - live, earn one's livelihood - Verb +うきうき うきうき - feel excited - Adverb +暮らし くらし - living, livelihood - Noun +暮れ くれ - dusk, the end (of a season or a year) - Noun +暮れる くれる - grow dark - Verb +お歳暮 おせいぼ - year-end gift - Noun +芝生 しばふ - lawn, turf - Noun +茎 くき - stem - Noun +推薦 すいせん - recommendation, nomination - Verbal Noun +うつむく うつむく - look downward - Verb +荒れる あれる - be wild; to fall into ruin - Verb +荒い あらい - wild, reckless - Adjective +荒い あらい - harsh, rough - Adjective +荒す あらす - damage, ransack, lay waste - Verb +慌ただしい あわただしい - busy; hurried - Adjective +慌てる あわてる - be disconcerted; hurry - Verb +儀式 ぎしき - ceremony, ritual - Noun +うなずく うなずく - nod - Verb +行儀 ぎょうぎ - manners, behavior - Noun +犠牲 ぎせい - sacrifice - Noun +赤ん坊 あかんぼう - baby - Noun +お坊さん おぼうさん - monk, priest - Noun +国旗 こっき - national flag - Noun +筋肉 きんにく - muscle, sinews - Noun +筋道 すじみち - logic; reason - Noun +筋 すじ - muscle - Noun +おだてる おだてる - flatter - Verb +裂ける さける - split, tear - Verb +座布団 ざぶとん - cushion - Noun +自己 じこ - oneself, self - Noun +抱える かかえる - hold in one's arms - Verb +抱く いだく - embrace, hug - Verb +句 く - phrase, clause - Noun +慣用句 かんようく - idiom, common phrase - Noun +かかと かかと - heel - Noun +下旬 げじゅん - end of the month (last third of a month) - Noun +上旬 じょうじゅん - first 10 days of month - Noun +飽きる あきる - to get tired of; to have had enough - Verb +飾り かざり - ornament, decoration - Noun +餌 えさ - bait, feed - Noun +旧 きゅう - old, former - Noun +育児 いくじ - childcare, child-raising - Noun +がさがさ がさがさ - rustle - Adverb +小児科 しょうにか - pediatrics - Noun +姓名 せいめい - full name - Noun +姓 せい - surname, family name - Noun +幼い おさない - young, childish - Adjective +眼科 がんか - ophthalmology - Noun +近眼 きんがん - nearsightedness, shortsightedness - Noun +居眠り いねむり - doze, nap - Verbal Noun +一瞬 いっしゅん - instant, moment - Noun +かじる かじる - nibble, bite - Verb +瞬間 しゅんかん - instant, moment - Noun +睡眠 すいみん - sleep, slumber - Verbal Noun +垂直 すいちょく - vertical, perpendicular - Adjectival Noun +心掛ける こころがける - keep in mind, try - Verb +腰掛ける こしかける - sit down - Verb +追い掛ける おいかける - chase, run after - Verb +腰掛け こしかけ - stool, seat - Noun +がぶがぶ がぶがぶ - (the sound of) guzzling - Adverb +お目に掛かる おめにかかる - meet, have the honor of seeing - Verb +拝む おがむ - bow in veneration, worship - Verb +括弧 かっこ - parentheses, brackets - Verbal Noun +指揮 しき - command, direction - Verbal Noun +輝く かがやく - shine brilliantly, glitter - Verb +抑える おさえる - suppress, bring under control - Verb +信仰 しんこう - faith, religious belief - Verbal Noun +からす からす - crow, raven - Noun +偶然 ぐうぜん - chance, accident - Adjectival Noun +偶数 ぐうすう - even number - Noun +隅 すみ - nook, corner - Noun +城 しろ - castle, fort - Noun +栽培 さいばい - cultivation - Verbal Noun +警戒 けいかい - vigilance, precaution - Verbal Noun +幾ら いくら - no matter how much - Adverb +伺う うかがう - politely ask - Verb +がん がん - cancer - Noun +後悔 こうかい - regret - Verbal Noun +悔しい くやしい - vexing, frustrating - Adjective +俺 おれ - I, me - Noun +相撲 すもう - sumo wrestling - Noun +偏る かたよる - be one-sided; be partial to - Verb +一遍に いっぺんに - all at once - Adverb +宗教 しゅうきょう - religion - Noun +ぎっしり ぎっしり - tightly - Adverb +審議 しんぎ - deliberation, consideration - Verbal Noun +憲法 けんぽう - constitution, constitutional law - Noun +衰える おとろえる - weaken, decline - Verb +惜しむ おしむ - regret - Verb +惜しい おしい - regrettable; almost but not quite - Adjective +恨み うらみ - resentment; hatred - Noun +恨む うらむ - hold a grudge, feel resentment - Verb +ぎゅうぎゅう ぎゅうぎゅう - packed, crammed - Adverb +覚悟 かくご - readiness, resolution - Noun +怪しい あやしい - suspicious, dubious - Adjective +怪しむ あやしむ - suspect - Verb +自慢 じまん - showing off; pride - Verbal Noun +食卓 しょくたく - dining table - Noun +歓迎 かんげい - welcome - Verbal Noun +勧める すすめる - suggest, recommend - Verb +ぎょうざ ぎょうざ - Chinese dumpling - Noun +焦点 しょうてん - focus, focal point - Noun +焦る あせる - feel pressured, feel hurried - Verb +焦げる こげる - scorch, burn - Verb +英雄 えいゆう - hero - Noun +雄 おす - male - Noun +獲得 かくとく - acquisition - Verbal Noun +収穫 しゅうかく - harvest, harvesting - Verbal Noun +稲 いね - rice plant - Noun +きれ きれ - a cut of cloth - Noun +稼ぐ かせぐ - earn, make money - Verb +原稿用紙 げんこうようし - Japanese writing paper (lined with a square grid, one square per character) - Noun +穏やか おだやか - calm, mild - Adjective +隠す かくす - hide, conceal - Verb +お陰 おかげ - help, thanks to - Noun +陰 かげ - shade, behind the scenes - Noun +塊 かたまり - lump, clod - Noun +くすぐる くすぐる - tickle - Verb +卑しい いやしい - lowly; crude; greedy - Adjective +砕く くだく - crush, smash - Verb +砕ける くだける - be crushed, break down - Verb +基礎 きそ - basis, foundation - Noun +貝 かい - shellfish, shell - Noun +賢い かしこい - wise, smart - Adjective +頻りに しきりに - frequently, repeatedly - Adverb +げらげら げらげら - guffaw; out loud - Adverb +頑固 がんこ - stubborn, obstinate - Adjectival Noun +頂く いただく - receive, eat - Verb +一斉に いっせいに - all together, all at once - Adverb +洗剤 せんざい - detergent, cleanser - Noun +真剣 しんけん - serious, sincere - Adjective +刑務所 けいむしょ - prison - Noun +刑事 けいじ - detective - Noun +強烈 きょうれつ - strong; intense - Adjective +ゴールデンウィーク ゴールデンウィーク - golden week - Noun +獣 けもの - beast, brute, animal - Noun +駆ける かける - gallop, run quickly - Verb +駆け足 かけあし - gallop, run - Verbal Noun +丘 おか - hill, slope - Noun +官庁 かんちょう - government office - Noun +県庁 けんちょう - prefectural office - Noun +擦る こする - rub, strike - Verb +こたつ こたつ - kotatsu, heated table with a coverlet - Noun +汗 あせ - sweat - Noun +軸 じく - axis - Noun +後輩 こうはい - one's junior - Noun +香り かおり - aroma; smell - Noun +香水 こうすい - perfume - Noun +合唱 がっしょう - chorus - Verbal Noun +結晶 けっしょう - crystal; crystallization - Verbal Noun +ことわざ ことわざ - proverb, common saying - Noun +敬う うやまう - respect, honor - Verb +座敷 ざしき - tatami room, Japanese-style room - Noun +敷金 しききん - (security) deposit; caution money - Noun +劣る おとる - be inferior to, be worse than - Verb +勘定 かんじょう - check, tab - Verbal Noun +勘 かん - sense, intuition - Noun +勘違い かんちがい - misunderstanding - Verbal Noun +霧 きり - fog, mist - Noun +これから これから - from now on, after this - Noun +霜 しも - frost - Noun +公衆 こうしゅう - the public - Noun +衆議院 しゅうぎいん - House of Representatives, Lower House - Noun +観衆 かんしゅう - audience - Noun +群衆 ぐんしゅう - the masses, multitude - Noun +暑中見舞い しょちゅうみまい - summer greeting - Noun +お仕舞い おしまい - the end - Noun +さす さす - pour - Verb +金銭 きんせん - money, cash - Noun +児童 じどう - child, juvenile - Noun +埋める うめる - bury, fill up (other reading of うずめる) - Verb +埋める うずめる - bury, fill in - Verb +墨 すみ - black ink - Noun +講堂 こうどう - lecture hall, auditorium - Noun +奨学金 しょうがくきん - scholarship - Noun +JR じぇいあーる - JR, Japan Railways - Noun +狂う くるう - become insane, get out of order - Verb +猿 さる - monkey, ape - Noun +地獄 じごく - hell, inferno - Noun +章 しょう - chapter; medal - Noun +頑丈 がんじょう - solid, strong - Adjectival Noun +親戚 しんせき - a relative - Noun +祈る いのる - pray, wish for - Verb +しびれる しびれる - become numb, get pins and needles - Verb +祈り いのり - prayer - Noun +襟 えり - collar, lapel - Noun +先祖 せんぞ - forefather, ancestor - Noun +粗筋 あらすじ - outline, plot - Noun +酢 す - vinegar - Noun +郊外 こうがい - suburbs, outskirts - Noun +近郊 きんこう - suburbs, outskirts - Noun +邪魔 じゃま - hindrance, obstruction - Verbal Noun +じゃぶじゃぶ じゃぶじゃぶ - vigorously; splashing water sound - Adverb +お年玉 おとしだま - New Year's gift - Noun +改善 かいぜん - improvement - Verbal Noun +親善 しんぜん - friendship - Noun +網 あみ - net, netting - Noun +縛る しばる - bind, tie - Verb +絞る しぼる - wring out, squeeze - Verb +紺 こん - dark blue, navy blue - Noun +じゃんじゃん じゃんじゃん - many times, repeatedly - Adverb +紅葉 こうよう - autumn leaves, crimson foliage - Verbal Noun +口紅 くちべに - lipstick, rouge - Noun +梅 うめ - plum - Noun +梅干 うめぼし - pickled plum - Noun +巣 す - nest, den - Noun +囲碁 いご - "game of ""go""" - Noun +嘘つき うそつき - liar - Noun +しわ しわ - wrinkle - Noun +考慮 こうりょ - consideration, deliberation - Verbal Noun +癖 くせ - habit, mannerism - Noun +下痢 げり - diarrhea - Verbal Noun +崖 がけ - cliff - Noun +嵐 あらし - storm - Noun +海峡 かいきょう - straits, channel - Noun +噂 うわさ - gossip, rumor - Verbal Noun +田舎 いなか - country, countryside - Noun +ずるがしこい ずるがしこい - sly, cunning - Adjective +校舎 こうしゃ - school building - Noun +お嬢さん おじょうさん - young lady, someone's daughter - Noun +娯楽 ごらく - amusement, pastime - Noun +生涯 しょうがい - one's lifetime - Noun +汽車 きしゃ - train - Noun +賭ける かける - bet, stake - Verb +蛍光灯 けいこうとう - fluorescent lamp - Noun +せいぜい せいぜい - at most - Adverb +車掌 しゃしょう - train conductor - Noun +芋 いも - potato, yam - Noun +菊 きく - chrysanthemum - Noun +軽蔑 けいべつ - contempt, disdain - Verbal Noun +揚げる あげる - deep-fry - Verb +諦める あきらめる - abandon, give up - Verb +演奏 えんそう - musical performance - Verbal Noun +ぜいたく ぜいたく - luxury, extravagance - Verbal Noun +窮屈 きゅうくつ - tight, cramped - Adjective +貨幣 かへい - money, currency - Noun +真珠 しんじゅ - pearl - Noun +故郷 こきょう - hometown, birthplace - Noun +花瓶 かびん - flower vase - Noun +一旦 いったん - once, for a while - Adverb +乞食 こじき - beggar - Noun +亀 かめ - turtle, tortoise - Noun +がくんと がくんと - sharply - Adverb +羨ましい うらやましい - envious, envy - Adjective +漕ぐ こぐ - row - Verb +稽古 けいこ - practice, learning - Verbal Noun +歌舞伎 かぶき - kabuki - Noun +囁く ささやく - whisper - Verb +咳 せき - cough - Noun +噛み付く かみつく - bite at - Verb +きらりと きらりと - sparkle - Adverb +屑 くず - waste, scraps - Noun +紙屑 かみくず - wastepaper - Noun +掻く かく - scratch - Verb +掻き回す かきまわす - stir up, agitate - Verb +憧れ あこがれ - yearning, longing - Noun +憧れる あこがれる - yearn after, adore - Verb +溺れる おぼれる - drown, be drowned - Verb +ごくんと ごくんと - in one gulp - Adverb +御無沙汰 ごぶさた - be out of touch - Verbal Noun +汲む くむ - collect, scoop up - Verb +苛め いじめ - bullying - Noun +苛める いじめる - bully; tease - Verb +曖昧 あいまい - ambiguous, vague - Adjective +大晦日 おおみそか - new year's eve - Noun +臆病 おくびょう - cowardice, timidity - Adjectival Noun +車椅子 くるまいす - wheelchair - Noun +柿 かき - persimmon, persimmon tree - Noun +お詫び おわび - apologize - Verbal Noun +釘 くぎ - nail, spike - Noun +錆びる さびる - rust, get rusty - Verb +爽やか さわやか - refreshing, clear - Adjective +雀 すずめ - sparrow - Noun +甥 おい - nephew - Noun +嗅ぐ かぐ - smell, sniff - Verb +炒める いためる - cook; stir-fry - Verb +一まず ひとまず - first of all - Adverb +万一 まんいち - if by any chance - Adverb +日ごろ ひごろ - routinely, daily - Adverb +日ソ にっそ - Japanese-Soviet - Noun +日 にち - Japan - Noun +データ データ - data - Noun +日時 にちじ - date and time - Noun +日日 ひにち - date, number of days - Noun +日々 ひび - daily, every day - Noun +三日月 みかづき - new moon, crescent moon - Noun +月日 つきひ - time, days (other reading of がっぴ) - Noun +ただ ただ - simply, merely - Adverb +土 つち - soil, ground - Noun +年月 としつき - time, years - Noun +年月日 ねんがっぴ - date - Noun +年月 ねんげつ - years, time (other reading of としつき) - Noun +年々 ねんねん - year by year, annually - Adverb +もっとも もっとも - quite right - Adjective +何か なにか - something, some - Adverb +何とか なんとか - somehow or other, something - Adverb +何より なにより - above all, before everything else - Noun +何と なんと - what, how - Adverb +何となく なんとなく - in some way, somehow - Adverb +何だか なんだか - somehow, somewhat - Adverb +メーカー メーカー - maker, manufacturer - Noun +何で なんで - why, what for - Adverb +何十 なんじゅう - several tens - Noun +何て なんて - what, how - Adverb +何しろ なにしろ - anyhow, as you know - Adverb +何千 なんぜん - several thousand, thousands - Noun +レベル レベル - level - Noun +何百 なんびゃく - several hundred, hundreds - Noun +やって来る やってくる - come, turn up - Verb +来日 らいにち - coming to Japan - Verbal Noun +日帰り ひがえり - a day trip - Verbal Noun +大して たいして - very, greatly - Adverb +むしろ むしろ - rather; instead - Adverb +大金 たいきん - large sum of money - Noun +大 だい - bigness, large size - Noun +日中 にっちゅう - during the day; Sino-Japanese - Noun +日中 にっちゅう - Sino-Japanese; during the day - Noun +中年 ちゅうねん - middle age - Noun +中 ちゅう - middle, medium size - Noun +ますます ますます - increasingly - Adverb +年中 ねんじゅう - all year - Adverb +大小 だいしょう - sizes; large and small - Noun +多少 たしょう - a little, somewhat - Adverb +ぶら下がる ぶらさがる - hang down, dangle - Verb +ぶら下げる ぶらさげる - hang, suspend - Verb +モデル モデル - model - Noun +下 もと - under (esp. influence or guidance) - Noun +やり方 やりかた - way of doing - Noun +方々 ほうぼう - everywhere, here and there (other reading of かたがた) - Noun +行方 ゆくえ - one's whereabouts - Noun +一人一人 ひとりひとり - each and every person - Noun +もたらす もたらす - bring about, lead to - Verb +日の入り ひのいり - sunset - Noun +出入り でいり - coming and going - Verbal Noun +出来上がる できあがる - be completed, be finished - Verb +人出 ひとで - turnout, crowd - Noun +日の出 ひので - sunrise - Noun +それぞれ それぞれ - each, respective - Adverb +出来上がり できあがり - completion, finish - Noun +出来るだけ できるだけ - as much as possible - Adverb +外す はずす - remove; leave - Verb +外れる はずれる - come off - Verb +外れ はずれ - "failure; extremity (was ""blank"")" - Noun +その内 そのうち - before long, sooner or later - Adverb +トップ トップ - top - Noun +本来 ほんらい - originally, essentially - Adverb +本人 ほんにん - the person himself, the said person - Noun +本年 ほんねん - this year - Noun +本日 ほんじつ - today - Noun +休める やすめる - to rest - Verb +ブーム ブーム - boom - Noun +一休み ひとやすみ - rest - Verbal Noun +大体 だいたい - outline, generally - Adverb +入力 にゅうりょく - input, power input - Verbal Noun +体力 たいりょく - physical strength - Noun +目上 めうえ - one's superiors, one's elders - Noun +漸く ようやく - at last; gradually (steadily) - Adverb +目方 めかた - weight - Noun +目下 めした - one's inferiors - Noun +目下 もっか - now, at present (other reading of めした) - Noun +出入り口 でいりぐち - doorway, gateway - Noun +一口 ひとくち - mouthful, bite - Noun +人手 ひとで - hand, manpower - Noun +チーム チーム - team - Noun +手入れ ていれ - care, repairs - Verbal Noun +手本 てほん - model, example - Noun +手足 てあし - hands and feet, limbs - Noun +田 た - rice field, rice paddy - Noun +花火 はなび - fireworks, firecrackers - Noun +タイプ タイプ - type - Noun +男女 だんじょ - men and women, both sexes - Noun +男子 だんし - boy, young man - Noun +私 わたくし - I, myself - Noun +友人 ゆうじん - friend - Noun +友 とも - friend, companion - Noun +ビジネス ビジネス - business - Noun +元 もと - origin, source - Noun +手元 てもと - at hand - Noun +元々 もともと - originally, by nature - Adverb +天 てん - sky, Heaven - Noun +本気 ほんき - seriousness, earnestness - Adjectival Noun +明日 みょうにち - tomorrow - Noun +ネットワーク ネットワーク - network - Noun +東西 とうざい - east and west - Noun +南西 なんせい - southwest - Noun +南東 なんとう - southeast - Noun +南北 なんぼく - north and south - Noun +北西 ほくせい - northwest - Noun +やや やや - little, somewhat - Adverb +北東 ほくとう - northeast - Noun +向ける むける - turn toward, point at - Verb +向き むき - direction, turn - Noun +向かい むかい - opposite side - Noun +入門 にゅうもん - initiation - Noun +デモ デモ - demonstration - Noun +門 もん - gate, entrance - Noun +開ける ひらける - to become opened up; develop (other reading of あける) - Verb +中間 ちゅうかん - middle, between - Noun +手間 てま - time, labour/trouble - Noun +間 ま - interval, duration of time, chamber - Noun +ワープロ ワープロ - word processor - Noun +高まる たかまる - rise, increase - Verb +高める たかめる - raise, enhance - Verb +安っぽい やすっぽい - cheap, tacky - Adjective +低下 ていか - falling, lowering - Verbal Noun +低 てい - low - Noun +最も もっとも - the most - Adverb +メンバー メンバー - member - Noun +月初め つきはじめ - at the beginning of the month - Noun +前年 ぜんねん - the year before - Noun +前方 ぜんぽう - front - Noun +手前 てまえ - in front - Noun +前向き まえむき - facing forward, positively - Adjectival Noun +ハードウェア ハードウェア - hardware - Noun +人前 ひとまえ - in front of other people - Noun +前もって まえもって - in advance - Adverb +出前 でまえ - home delivery of food - Noun +前半 ぜんはん - first half - Noun +半ば なかば - middle, halfway - Noun +マスコミ マスコミ - mass communication - Noun +半年 はんとし - half a year - Noun +明朝 みょうちょう - tomorrow morning - Noun +晩年 ばんねん - late in life - Noun +夜間 やかん - night, nighttime - Noun +夜空 よぞら - night sky - Noun +夜明け よあけ - dawn, daybreak - Noun +やがて やがて - soon, before long - Adverb +月夜 つきよ - moonlit night - Noun +夜 よ - night, evening - Noun +七夕 たなばた - Tanabata Festival, Star Festival - Noun +夕日 ゆうひ - setting sun - Noun +飲み水 のみみず - drinking water - Noun +わずか わずか - few, little - Adjectival Noun +飯 めし - cooked rice, meal - Noun +見上げる みあげる - look up - Verb +見下ろす みおろす - look down, overlook - Verb +見出し みだし - headline, heading - Noun +見本 みほん - sample, model - Noun +パターン パターン - pattern - Noun +見つめる みつめる - stare - Verb +見晴らし みはらし - view, outlook - Noun +月見 つきみ - moon viewing - Noun +よそ見 よそみ - look around - Verbal Noun +見かけ みかけ - looks, appearance - Noun +方言 ほうげん - dialect - Noun +ついに ついに - at last, finally - Adverb +一言 ひとこと - single word; a few words - Noun +文明 ぶんめい - civilization, culture - Noun +本文 ほんぶん - text, this text - Noun +文 ぶん - writings, sentence - Noun +読書 どくしょ - reading a book - Verbal Noun +まるで まるで - just like, completely - Adverb +読み書き よみかき - reading and writing - Noun +目覚ましい めざましい - striking, marvelous - Adjective +見覚え みおぼえ - recognition, remembrance - Noun +目覚まし めざまし - waking up - Noun +閉会 へいかい - closure (of a ceremony, event, meeting, etc.) - Verbal Noun +どんどん どんどん - steadily - Adverb +出会う であう - meet - Verb +話し合い はなしあい - talk, discussion - Noun +見合い みあい - meeting with a view to marriage - Verbal Noun +間に合わせる まにあわせる - make do - Verb +本社 ほんしゃ - head office - Noun +それほど それほど - so much, that much - Adverb +入社 にゅうしゃ - entering a company - Verbal Noun +満足 まんぞく - satisfaction, contentment - Verbal Noun +満たす みたす - fill, satisfy - Verb +満ちる みちる - be filled, expire - Verb +満員 まんいん - full to capacity - Noun +満月 まんげつ - full moon - Noun +もはや もはや - already, no longer (with negative verb) - Adverb +出来事 できごと - occurrence, incident - Noun +見事 みごと - splendid, admirable - Adjectival Noun +大工 だいく - carpenter - Noun +場 ば - opportunity, occasion; place - Noun +入場 にゅうじょう - entrance, admission - Verbal Noun +デザイン デザイン - design - Verbal Noun +電力 でんりょく - electric power, electricity - Noun +電子 でんし - electron, electronic - Noun +交じる まじる - be mingled, be mixed - Verb +交わる まじわる - associate with, socialize; cross - Verb +交ぜる まぜる - include; mix - Verb +ファン ファン - fan, lover - Noun +交ざる まざる - mix, socialize with - Verb +交わる まじわる - cross; mingle with - Verb +見通し みとおし - perspective, prospect - Noun +通じる つうじる - pass, communicate with - Verb +通す とおす - let pass, run through - Verb +通行 つうこう - passage, traffic - Noun +なさる なさる - do (honorific) - Verb +人通り ひとどおり - pedestrian traffic - Noun +一通り ひととおり - briefly, once over - Adverb +通路 つうろ - passage, alley - Noun +地上 ちじょう - above ground - Noun +地 ち - ground, place - Noun +まとまる まとまる - be collected - Verb +地下道 ちかどう - underground passage; subterranean tunnel - Noun +地下 ちか - underground - Noun +地方 ちほう - district, region - Noun +図る はかる - strive for, attempt - Verb +図書 としょ - books - Noun +ルール ルール - rule - Noun +他方 たほう - other side - Noun +他人 たにん - another person, stranger - Noun +中止 ちゅうし - suspension, stopping - Verbal Noun +通行止め つうこうどめ - road closed - Noun +見渡す みわたす - look out over - Verb +二度と にどと - never again - Adverb +ヘリコプター ヘリコプター - helicopter - Noun +度々 たびたび - often - Adverb +この度 このたび - on this occasion - Noun +毎度 まいど - every time, always - Noun +間近 まぢか - nearby, close at hand - Adjectival Noun +近道 ちかみち - shortcut - Noun +ともかく ともかく - "anyhow, at any rate (was ""at least"")" - Adverb +長年 ながねん - many years, long time - Noun +年長 ねんちょう - seniority - Adjectival Noun +長らく ながらく - for a long time - Adverb +長話 ながばなし - long conversation, talk for a long time - Verbal Noun +短大 たんだい - junior college - Noun +つい つい - inadvertently, accidentally - Adverb +短気 たんき - short temper - Adjectival Noun +広げる ひろげる - spread, unfold - Verb +広場 ひろば - plaza, open space - Noun +広まる ひろまる - to spread; to be propagated - Verb +広める ひろめる - spread, extend - Verb +トンネル トンネル - tunnel - Noun +全力 ぜんりょく - all one's might, full capacity - Noun +部門 ぶもん - division, department - Noun +本部 ほんぶ - head office, headquarters - Noun +部長 ぶちょう - section chief, department head - Noun +内部 ないぶ - interior, inner parts - Noun +部下 ぶか - subordinate - Noun +バランス バランス - balance - Noun +大部分 だいぶぶん - most, greater part - Noun +大国 たいこく - world power, large country - Noun +入国 にゅうこく - entry into a country, immigration - Verbal Noun +本国 ほんごく - one's native country - Noun +天国 てんごく - paradise - Noun +どうしても どうしても - by any means, really - Adverb +世の中 よのなか - the world, society - Noun +中世 ちゅうせい - Middle Ages - Noun +世 よ - world; society; generation - Noun +明白 めいはく - obvious; clear - Adjectival Noun +鉄道 てつどう - railway - Noun +どうか どうか - please; somehow or other - Adverb +鉄 てつ - iron - Noun +肉体 にくたい - body, flesh - Noun +白菜 はくさい - nappa cabbage - Noun +日米 にちべい - Japan and U.S. - Noun +味方 みかた - friend, ally - Noun +年末 ねんまつ - end of year - Noun +プロ プロ - pro, professional - Noun +末 まつ - the end of (other reading of すえ) - Noun +料金 りょうきん - charge, fee - Noun +地理 ちり - geography - Noun +理解 りかい - understanding, comprehension - Verbal Noun +解く とく - solve; unravel - Verb +チャンス チャンス - chance - Noun +分解 ぶんかい - taking apart - Verbal Noun +解ける とける - to be solved; to come untied - Verb +有力 ゆうりょく - powerful, influential - Adjectival Noun +有する ゆうする - have, possess - Verb +有料 ゆうりょう - fee-charging, toll - Noun +どうも どうも - for some reason, somehow; thanks - Adverb +無理 むり - impossibility - Noun +無料 むりょう - no charge, free - Noun +無事 ぶじ - safely, peacefully - Adverb +無口 むくち - not speaking much, reticence - Adjectival Noun +間も無く まもなく - soon, in a short time - Adverb +無言 むごん - silence, muteness - Noun +ハード ハード - hard - Adjective +無茶 むちゃ - reckless, excessive - Adjectival Noun +無理やり むりやり - by force, against one's will - Adverb +作り上げる つくりあげる - make up, build up - Verb +作り話 つくりばなし - fable, fiction - Noun +大使 たいし - ambassador - Noun +マイナス マイナス - minus, below zero - Verbal Noun +使い道 つかいみち - use, application - Noun +使い つかい - errand - Noun +用 よう - task; things to do - Noun +無用 むよう - useless, unnecessary - Adjectival Noun +費用 ひよう - expenses - Noun +とにかく とにかく - in any case, anyway - Adverb +費やす ついやす - expend, waste - Verb +安売り やすうり - sale - Verbal Noun +売買 ばいばい - buying and selling, trade - Verbal Noun +閉店 へいてん - shop closing - Verbal Noun +本店 ほんてん - head office - Noun +パイプ パイプ - pipe - Noun +部品 ぶひん - parts, accessories - Noun +日用品 にちようひん - groceries, daily necessities - Noun +段 だん - step, grade - Noun +値上がり ねあがり - price rise - Verbal Noun +値上げ ねあげ - price hike - Verbal Noun +値下がり ねさがり - fall in price - Verbal Noun +たちまち たちまち - in a moment, instantly - Adverb +値下げ ねさげ - price reduction - Verbal Noun +地価 ちか - price of land - Noun +体格 たいかく - physique, build - Noun +冬季 とうき - winter season - Noun +熱する ねっする - to heat - Verb +プラス プラス - plus, advantage - Verbal Noun +低温 ていおん - low temperature - Noun +体温 たいおん - body temperature - Noun +友情 ゆうじょう - friendship - Noun +人情 にんじょう - human feelings, humanity - Noun +情けない なさけない - pitiful, shameful - Adjective +リード リード - the lead, take a lead - Verbal Noun +報道 ほうどう - news, report - Verbal Noun +電報 でんぽう - telegram - Noun +中古 ちゅうこ - secondhand goods - Noun +古本 ふるほん - secondhand book - Noun +昔 むかし - old times, the old days - Noun +悪口 わるくち - slander, abuse - Noun +たとえ たとえ - even if, granting that - Adverb +熱心 ねっしん - enthusiasm, zeal - Adjectival Noun +良心 りょうしん - conscience - Noun +内心 ないしん - innermost thoughts, one's real intention - Noun +用心 ようじん - care, caution - Verbal Noun +忘年会 ぼうねんかい - year-end party - Noun +なるべく なるべく - as...as possible, if possible - Adverb +度忘れ どわすれ - memory lapse, forgetting for a moment something one knows well - Verbal Noun +知事 ちじ - governor - Noun +未知 みち - unknown - Noun +通知 つうち - notification - Verbal Noun +無知 むち - ignorance - Adjectival Noun +テーマ テーマ - the theme, the subject - Noun +知人 ちじん - acquaintance, friend - Noun +天才 てんさい - genius - Noun +本能 ほんのう - instinct - Noun +有能 ゆうのう - able, competent - Adjectival Noun +知能 ちのう - intelligence, mental capacity - Noun +無能 むのう - inefficiency, incompetence - Adjectival Noun +ムード ムード - mood - Noun +能 のう - noh play; ability - Noun +能 のう - ability, capability - Noun +不安 ふあん - uneasiness, anxiety - Adjectival Noun +不満 ふまん - dissatisfaction, discontent - Adjectival Noun +不足 ふそく - insufficiency, lack - Verbal Noun +退く どく - move out of the way - Verb +不可能 ふかのう - impossible - Adjectival Noun +不十分 ふじゅうぶん - insufficiency, lack - Adjectival Noun +不明 ふめい - unknown - Adjectival Noun +不良 ふりょう - bad, defective - Adjectival Noun +不合格 ふごうかく - (examination) failure - Noun +マーケット マーケット - market - Noun +不通 ふつう - interruption of service - Noun +便り たより - news, correspondence - Noun +大便 だいべん - stool, feces - Verbal Noun +番 ばん - one's turn, watch - Noun +長所 ちょうしょ - strong point, merit - Noun +ファッション ファッション - fashion - Noun +短所 たんしょ - shortcoming, defect - Noun +所々 ところどころ - here and there, at places - Noun +名 な - name, reputation - Noun +名人 めいじん - master, expert - Noun +地名 ちめい - place name - Noun +名所 めいしょ - famous place, sights - Noun +ブレーキ ブレーキ - brake - Noun +町外れ まちはずれ - outskirts of a town - Noun +町中 まちなか - the downtown area, the central area of a town - Noun +村 むら - village, hamlet - Noun +都内 とない - metropolitan area (of Tokyo) +Jisho +都心 としん - heart of a city - Noun +ミス ミス - mistake - Verbal Noun +都 と - metropolitan (of Tokyo); less common reading of みやこ - Noun +都会 とかい - city, town - Noun +都 みやこ - capital, city - Noun +様子 ようす - appearance; situation - Noun +物価 ぶっか - prices (in general) - Noun +ヨット ヨット - sailboat, yacht - Noun +物体 ぶったい - object, physical body - Noun +本物 ほんもの - real thing, genuine article - Noun +物理 ぶつり - physics, natural law - Noun +物事 ものごと - things, everything - Noun +名物 めいぶつ - famous product; special product - Noun +物知り ものしり - knowledgeable person, know-it-all - Noun +なかなか なかなか - rather, pretty - Adverb +物覚え ものおぼえ - memory - Noun +体重 たいじゅう - body weight - Noun +手軽 てがる - easy, simple - Adjective +多量 たりょう - large quantity, great deal - Noun +量る はかる - measure, weigh - Verb +ロック ロック - rock (music) - Noun +量 りょう - quantity, volume - Noun +大量 たいりょう - large quantity, great volume - Noun +年配 ねんぱい - age, elderly age - Noun +送金 そうきん - money transfer, remittance - Verbal Noun +郵送 ゆうそう - mailing - Verbal Noun +わざわざ わざわざ - go to a lot of trouble; doing something especially rather than incidentally - Adverb +取り上げる とりあげる - take up, confiscate - Verb +取り入れる とりいれる - take in, adopt - Verb +取り決め とりきめ - decision, agreement - Noun +取れる とれる - be harvested; come off - Verb +取り消す とりけす - cancel, nullify - Verb +取消し とりけし - cancellation, annulment - Verbal Noun +パイロット パイロット - pilot - Noun +取り出す とりだす - take out, pull out - Verb +届け とどけ - report, delivery - Noun +待ち合わせ まちあわせ - appointment; waiting - Verbal Noun +待ち遠しい まちどおしい - anxiously awaited - Adjective +待ち合わせる まちあわせる - wait for, meet by appointment - Verb +どうやら どうやら - seems, looks like - Adverb +持ち物 もちもの - one's property, one's baggage - Noun +長持ち ながもち - endurance, lasting long - Verbal Noun +値打ち ねうち - value, worth - Noun +投書 とうしょ - letter to the editor - Verbal Noun +役所 やくしょ - public office - Noun +ふと ふと - suddenly, unexpectedly - Adverb +役人 やくにん - government official - Noun +役目 やくめ - duty, role - Noun +役 やく - role, part - Noun +生える はえる - grow, spring up - Verb +長生き ながいき - long life, longevity - Verbal Noun +ベテラン ベテラン - veteran - Noun +生やす はやす - grow, cultivate (a beard) - Verb +生 なま - raw, fresh (other reading of せい) - Adjectival Noun +無生物 むせいぶつ - inanimate object - Noun +男性 だんせい - male, man - Noun +理性 りせい - reason, reasoning power - Noun +ボーナス ボーナス - bonus - Noun +土産 みやげ - souvenir - Noun +徒歩 とほ - walking, going on foot - Noun +学ぶ まなぶ - learn, study - Verb +文学 ぶんがく - literature - Noun +体育 たいいく - physical education - Noun +そっくり そっくり - identical, look alike - Adjective +体制 たいせい - system, structure - Noun +強まる つよまる - become strong, gain strength - Verb +強める つよめる - strengthen, emphasize - Verb +力強い ちからづよい - powerful, vigorous - Adjective +強気 つよき - strong; confident - Adjectival Noun +レンズ レンズ - lens - Noun +弱まる よわまる - weaken, abate - Verb +弱める よわめる - weaken, lower - Verb +弱る よわる - weaken, be debilitated - Verb +弱み よわみ - weakness, shortcoming - Noun +弱気 よわき - timid, weak-spirited - Adjectival Noun +引き受ける ひきうける - undertake - Verb +ペース ペース - pace - Noun +引き上げる ひきあげる - pull up, salvage - Verb +引き出す ひきだす - take out; draw out - Verb +引き取る ひきとる - take over, take custody - Verb +値引き ねびき - discount - Verbal Noun +長引く ながびく - be prolonged, drag on - Verb +マラソン マラソン - marathon - Noun +引きずる ひきずる - drag along, pull - Verb +引き分け ひきわけ - draw, drawn game - Noun +引き止める ひきとめる - detain, keep - Verb +見習う みならう - learn, follow someone's example - Verb +慣れ なれ - getting used to, habituation - Noun +よほど よほど - very, by far - Adverb +慣らす ならす - accustom - Verb +入試 にゅうし - entrance examination - Noun +試す ためす - try, test - Verb +試し ためし - trial, test - Noun +体験 たいけん - (personal) experience - Verbal Noun +物質 ぶっしつ - matter, substance - Noun +ラグビー ラグビー - rugby - Noun +品質 ひんしつ - quality - Noun +本質 ほんしつ - essence, reality - Noun +問う とう - ask, question - Verb +問い合わせる といあわせる - inquire, contact - Verb +問い とい - question, inquiry - Noun +ラッシュ ラッシュ - rush, rush hour - Noun +問屋 とんや - wholesale store, wholesaler - Noun +話題 わだい - topic of conversation - Noun +題名 だいめい - title - Noun +題 だい - title, topic - Noun +単語 たんご - word - Noun +ロープ ロープ - rope - Noun +単に たんに - merely, simply - Adverb +地点 ちてん - site, spot, point - Noun +満点 まんてん - full marks, perfect score - Noun +点 てん - spot, point, issue - Noun +多数 たすう - large number, multitude - Noun +ダム ダム - dam - Noun +複数 ふくすう - plural - Noun +無数 むすう - countless, innumerable - Adjectival Noun +日数 にっすう - number of days - Noun +点数 てんすう - points, score - Noun +単数 たんすう - singular - Noun +手数 てすう - trouble, bother - Noun +ダウン ダウン - down, malfunction - Verbal Noun +人数 にんずう - number of people - Noun +回り まわり - vicinity, whereabouts - Noun +回り道 まわりみち - roundabout way, detour - Noun +枚数 まいすう - number of flat things - Noun +負け まけ - defeat, loss - Noun +トレーニング トレーニング - training, workout - Verbal Noun +負担 ふたん - burden, charge - Verbal Noun +分担 ぶんたん - assigning tasks, sharing burden - Verbal Noun +当初 とうしょ - original, initial - Noun +当局 とうきょく - the authorities concerned - Noun +当日 とうじつ - that day - Noun +そっと そっと - softly, gently - Adverb +手当て てあて - allowance, medical care - Verbal Noun +当分 とうぶん - for some time, for the present - Adverb +当人 とうにん - the person in question - Noun +当番 とうばん - being on duty, person on duty - Noun +日当たり ひあたり - exposure to the sun - Noun +天然 てんねん - nature - Noun +マーク マーク - logo - Verbal Noun +文法 ぶんぽう - grammar - Noun +法学部 ほうがくぶ - law department - Noun +法 ほう - law, rule - Noun +法則 ほうそく - law, rule - Noun +不規則 ふきそく - irregular - Adjectival Noun +たった たった - only, merely - Adverb +経る へる - pass, pass through - Verb +有利 ゆうり - advantageous, profitable - Adjectival Noun +不利 ふり - disadvantage - Adjectival Noun +利口 りこう - clever, bright - Adjectival Noun +利子 りし - interest - Noun +たまたま たまたま - by chance, accidentally - Adverb +左利き ひだりきき - left-handedness, left-hander - Noun +利益 りえき - profit, benefit - Noun +有益 ゆうえき - beneficial, profitable - Adjectival Noun +買収 ばいしゅう - buying up, bribing - Verbal Noun +年収 ねんしゅう - annual income - Noun +木造 もくぞう - wooden - Noun +テンポ テンポ - tempo, pace - Noun +必然 ひつぜん - inevitable, necessary - Noun +要する ようする - require, need - Verb +不要 ふよう - unnecessary, waste - Adjectival Noun +要するに ようするに - in a word, in short - Adverb +不必要 ふひつよう - unnecessary, superfluous - Adjectival Noun +プラン プラン - plan - Noun +要点 ようてん - main point, gist - Noun +求める もとめる - seek, wish for - Verb +要請 ようせい - request, demand - Verbal Noun +額 ひたい - forehead, brow - Noun +計る はかる - compute, measure - Verb +ほっと ほっと - feel relieved - Adverb +体温計 たいおんけい - thermometer - Noun +日差し ひざし - rays of the sun, sunlight - Noun +物差し ものさし - ruler - Noun +役割 やくわり - role, part - Noun +割合 わりあい - rate, proportion - Adverb +なるほど なるほど - I see, really - Adverb +割り当て わりあて - assignment, allotment - Noun +割り当てる わりあてる - assign, allot - Verb +割り引く わりびく - give a discount, make a reduction - Verb +割に わりに - comparatively, rather - Adverb +割り わり - rate - Noun +割り引き わりびき - discount, reduction - Verbal Noun +バイト バイト - part-time job - Verbal Noun +割合に わりあいに - relatively, rather - Adverb +残り のこり - remainder, leftover - Noun +残らず のこらず - entirely, without exception - Adverb +払い はらい - payment, account - Noun +引き返す ひきかえす - turn back, retrace one's steps - Verb +ぶつける ぶつける - bump - Verb +取り返す とりかえす - take back, regain - Verb +申し出る もうしでる - offer, propose - Verb +申し上げる もうしあげる - speak humbly, do - Verb +申す もうす - speak humbly, state humbly - Verb +持ち込む もちこむ - bring in, carry on - Verb +タイヤ タイヤ - tire - Noun +見込み みこみ - hope, prospect - Noun +申し込み もうしこみ - application, proposal - Noun +払い込む はらいこむ - pay in, pay up - Verb +飲み込む のみこむ - swallow, grasp - Verb +割り込む わりこむ - cut in - Verb +引っ込む ひっこむ - draw back, pull in - Verb +マイク マイク - mic, microphone - Noun +人込み ひとごみ - crowd - Noun +長期 ちょうき - long period - Noun +短期 たんき - short-term - Noun +短期大学 たんきだいがく - junior college - Noun +有限 ゆうげん - limited, finite - Adjectival Noun +ゆとり ゆとり - room, leeway - Noun +無限 むげん - infinite, endless - Adjectival Noun +無制限 むせいげん - unlimited, free - Adjectival Noun +値切る ねぎる - bargain, haggle - Verb +前売り券 まえうりけん - advance ticket - Noun +年代 ねんだい - age, date - Noun +ぼんやり ぼんやり - vaguely, absent-mindedly - Adjective +代金 だいきん - charge, fee - Noun +目指す めざす - aim for, have an eye on - Verb +指差す ゆびさす - point to - Verb +人差し指 ひとさしゆび - index finger - Noun +中指 なかゆび - middle finger - Noun +定年 ていねん - mandatory retirement age - Noun +たまらない たまらない - can't stand, can't put up with - Adjective +不安定 ふあんてい - instability - Adjectival Noun +定員 ていいん - fixed staff number, capacity - Noun +定期 ていき - fixed term, regular - Noun +定価 ていか - fixed price - Noun +未定 みてい - undecided, pending - Noun +モーター モーター - motor, engine - Noun +定食 ていしょく - day's special, set menu - Noun +定休日 ていきゅうび - regular holiday - Noun +予算 よさん - budget - Noun +予報 よほう - forecast, prediction - Verbal Noun +予言 よげん - prediction, forecast - Verbal Noun +まして まして - much more - Adverb +束 たば - bundle, counter for bundles - Noun +花束 はなたば - bunch of flowers - Noun +変更 へんこう - alteration, change - Verbal Noun +夜更かし よふかし - sitting up late at night - Verbal Noun +増す ます - increase, augment - Verb +ピストル ピストル - pistol - Noun +増大 ぞうだい - increase, enlargement - Verbal Noun +増減 ぞうげん - increase and decrease, rise and fall - Verbal Noun +乗り出す のりだす - lean forward, embark on - Verb +乗り込む のりこむ - board, march into - Verb +乗り降り のりおり - getting on and off - Verbal Noun +着ける つける - pull up, park (a vehicle) - Verb +たっぷり たっぷり - fully, amply - Adverb +水着 みずぎ - bathing suit - Noun +役立つ やくだつ - be of use, serve a purpose - Verb +立ち上がる たちあがる - stand up, take action - Verb +中立 ちゅうりつ - neutrality - Verbal Noun +都立 とりつ - metropolitan, Tokyo metropolitan - Noun +つくづく つくづく - truly, deeply - Adverb +立て込む たてこむ - full of, crowded with - Verb +夕立 ゆうだち - sudden evening shower - Noun +立ち止まる たちどまる - stop, halt - Verb +着席 ちゃくせき - taking a seat - Verbal Noun +次々に つぎつぎに - one after another, in succession - Adverb +どうせ どうせ - anyway - Adverb +次ぐ つぐ - rank next to, come next - Verb +取り次ぐ とりつぐ - relay a message, transfer a call - Verb +目次 もくじ - table of contents - Noun +不運 ふうん - misfortune, bad luck - Adjectival Noun +動向 どうこう - trend, tendency - Noun +動作 どうさ - movements, actions - Noun +リズム リズム - rhythm - Noun +動力 どうりょく - power - Noun +働き はたらき - work, function - Noun +早朝 そうちょう - early morning - Noun +早める はやめる - move forward (in time), expedite - Verb +早まる はやまる - make a hasty decision, jump the gun - Verb +ハンドル ハンドル - steering wheel - Noun +速度 そくど - speed, velocity - Noun +速達便 そくたつびん - special delivery, express mail - Noun +乗り遅れる のりおくれる - miss - Verb +始め はじめ - beginning, origin - Noun +始まり はじまり - beginning - Noun +プリント プリント - print - Verbal Noun +年始 ねんし - beginning of the year - Noun +不在 ふざい - absence - Noun +実る みのる - bear fruit, ripen - Verb +実 み - fruit, nut - Noun +通り過ぎる とおりすぎる - go past, pass - Verb +発売 はつばい - sale, selling - Verbal Noun +まぶしい まぶしい - dazzling, glaring - Adjective +発つ たつ - start, leave - Verb +発行 はっこう - publication, issue - Verbal Noun +発達 はったつ - development, growth - Verbal Noun +発明 はつめい - invention - Verbal Noun +発電 はつでん - generation of electricity - Verbal Noun +よそ よそ - somewhere else - Noun +発電所 はつでんしょ - power plant, generating station - Noun +発熱 はつねつ - generation of heat, get a fever - Verbal Noun +表情 ひょうじょう - expression, look - Noun +用紙 ようし - blank form, stationery - Noun +表紙 ひょうし - cover, binding - Noun +つぐ つぐ - pour, pour into - Verb +白紙 はくし - blank sheet, clean slate - Noun +音 ね - sound, note - Noun +発音 はつおん - pronunciation - Verbal Noun +物音 ものおと - noise, sound - Noun +楽しみ たのしみ - pleasure, something looked forward to - Noun +ディスコ ディスコ - disco - Noun +楽 らく - comfort, relief - Adjectival Noun +薬品 やくひん - medicine, drug - Noun +薬局 やっきょく - drugstore, pharmacy - Noun +目薬 めぐすり - eye drops - Noun +欲 よく - desire, greed - Noun +欲求 よっきゅう - want, desire - Verbal Noun +ぴったり ぴったり - exactly right, perfect - Adjectival Noun +表面 ひょうめん - surface, appearance - Noun +場面 ばめん - scene, situation - Noun +面する めんする - face - Verb +方面 ほうめん - direction - Noun +半面 はんめん - profile, one side - Noun +まさか まさか - never in a million years - Adverb +面 めん - surface, aspect - Noun +真っ先 まっさき - first thing, forefront - Noun +真夏 まなつ - midsummer - Noun +真夜中 まよなか - midnight, middle of the night - Noun +真っ最中 まっさいちゅう - midst - Noun +どっと どっと - burst (out laughing) - Adverb +真心 まごころ - sincerity, true heart - Noun +無色 むしょく - colorless, neutral - Noun +ばら色 ばらいろ - rose color - Noun +水色 みずいろ - sky blue, turquoise - Noun +長方形 ちょうほうけい - rectangle - Noun +地形 ちけい - geographical features, topography - Noun +もうける もうける - make a profit - Verb +種 たね - seed - Noun +分類 ぶんるい - classification - Verbal Noun +直前 ちょくぜん - just before, immediately prior - Noun +直ちに ただちに - at once, immediately - Adverb +見直す みなおす - reconsider, change one's opinion for the better - Verb +ゆったり ゆったり - comfortable - Adverb +直後 ちょくご - immediately after - Noun +立ち直る たちなおる - recover, regain one's footing - Verb +やり直し やりなおし - doing over, redoing - Noun +やり直す やりなおす - do over again - Verb +直通 ちょくつう - direct link - Verbal Noun +ちっとも ちっとも - nothing at all - Adverb +面接 めんせつ - interview - Verbal Noun +無線 むせん - radio, wireless - Noun +線路 せんろ - line, track - Noun +直線 ちょくせん - straight line - Noun +電線 でんせん - electric wire - Noun +脱線 だっせん - derailment - Verbal Noun +ドレス ドレス - dress - Noun +白線 はくせん - white line, warning line - Noun +方角 ほうがく - direction - Noun +直角 ちょっかく - right angle - Noun +町角 まちかど - street corner - Noun +真四角 ましかく - square - Adjectival Noun +パンク パンク - puncture - Verbal Noun +共に ともに - together, both - Adverb +同時 どうじ - simultaneous - Noun +同一 どういつ - sameness, identity - Adjectival Noun +同情 どうじょう - sympathy, compassion - Verbal Noun +同性 どうせい - of the same sex - Noun +のんびり のんびり - take it easy - Adverb +違いない ちがいない - no mistaking it, for certain - Adjective +人違い ひとちがい - mistaken identity - Verbal Noun +見違える みちがえる - mistake, fail to recognize - Verb +違い ちがい - difference, mistake - Noun +似る にる - resemble, be alike - Verb +はめる はめる - put on, wear - Verb +似合う にあう - suit, match well - Verb +似せる にせる - imitate, forge - Verb +旅 たび - journey, travel - Verbal Noun +旅客 りょかく - traveler, passenger - Noun +旅費 りょひ - traveling expenses - Noun +和らげる やわらげる - soften, relieve - Verb +ふた ふた - lid, cover - Noun +和語 わご - native Japanese word - Noun +和風 わふう - Japanese style - Noun +和食 わしょく - Japanese-style food - Noun +和やか なごやか - peaceful, mild - Adjective +和らぐ やわらぐ - soften, calm down - Verb +レポート レポート - report, paper - Verbal Noun +和式 わしき - Japanese style - Noun +和英 わえい - Japanese-English - Noun +東洋 とうよう - Orient - Noun +洋風 ようふう - Western style - Noun +洋画 ようが - foreign film - Noun +マネー マネー - money, finance - Noun +洋式 ようしき - Western style - Noun +洋食 ようしょく - Western cooking, European dish - Noun +洋間 ようま - Western-style room - Noun +和服 わふく - Japanese clothes, kimono - Noun +待合室 まちあいしつ - waiting room - Noun +和室 わしつ - Japanese style room - Noun +もろい もろい - weak, brittle - Adjective +洋室 ようしつ - Western-style room - Noun +窓口 まどぐち - window - Noun +父母 ふぼ - father and mother, parents - Noun +母親 ははおや - mother - Noun +父親 ちちおや - father - Noun +ユーモア ユーモア - humor - Noun +父兄 ふけい - parents, legal guardians - Noun +第一 だいいち - number one, the best - Noun +利息 りそく - interest - Noun +若々しい わかわかしい - youthful, young-looking - Adjective +読者 どくしゃ - reader, subscriber - Noun +バック バック - back - Verbal Noun +歩行者 ほこうしゃ - pedestrian - Noun +文学者 ぶんがくしゃ - literary person, literati - Noun +歩行者天国 ほこうしゃてんごく - vehicle-free promenade - Noun +者 もの - person, fellow - Noun +結ぶ むすぶ - tie, join - Verb +結び むすび - end, close - Noun +そびえる そびえる - tower - Verb +未婚 みこん - unmarried - Noun +果たす はたす - accomplish, realize - Verb +果たして はたして - as was expected, really - Adverb +日課 にっか - daily routine - Noun +有効 ゆうこう - effective, valid - Adjectival Noun +タレント タレント - celebrity, talent - Noun +無効 むこう - invalidity, ineffectiveness - Adjectival Noun +自ら みずから - oneself - Adverb +不自然 ふしぜん - unnatural, artificial - Adjectival Noun +不自由 ふじゆう - inconvenience, discomfort - Verbal Noun +通信 つうしん - correspondence, communication - Verbal Noun +たまに たまに - occasionally, by chance - Adverb +頼る たよる - rely on, depend on - Verb +頼み たのみ - request, favor - Noun +頼もしい たのもしい - reliable, dependable - Adjective +民間 みんかん - citizens, civilians - Noun +民族 みんぞく - race, people - Noun +ペンキ ペンキ - paint - Noun +持ち主 もちぬし - owner, proprietor - Noun +民主 みんしゅ - democracy - Noun +家主 やぬし - landlord - Noun +定義 ていぎ - definition - Verbal Noun +不思議 ふしぎ - mystery, wonder - Adjectival Noun +理論 りろん - theory - Noun +ベンチ ベンチ - bench - Noun +論理 ろんり - logic - Noun +論文 ろんぶん - thesis, paper - Noun +論じる ろんじる - argue, discuss - Verb +無論 むろん - of course, no doubt - Adverb +世論 よろん - public opinion - Noun +めいめい めいめい - each, individual - Adverb +論 ろん - argument, opinion - Noun +反発 はんぱつ - reaction, backlash - Verbal Noun +反映 はんえい - reflection - Verbal Noun +反論 はんろん - objection, counterargument - Verbal Noun +反する はんする - oppose, act contrary to - Verb +どうにか どうにか - somehow - Adverb +反則 はんそく - foul, rule violation - Verbal Noun +対話 たいわ - dialogue, conversation - Verbal Noun +対 つい - pair - Noun +対応 たいおう - correspondence, equivalence - Verbal Noun +反応 はんのう - reaction, response - Verbal Noun +問答 もんどう - questions and answers, argument - Verbal Noun +ちゃんと ちゃんと - regularly, properly - Adverb +特定 とくてい - specific, particular - Noun +特色 とくしょく - characteristic - Noun +特有 とくゆう - characteristic, special - Adjective +別に べつに - especially, particularly - Adverb +別れ わかれ - separation, parting - Noun +のどか のどか - tranquil, peaceful - Adjective +送別 そうべつ - farewell, send-off - Verbal Noun +送別会 そうべつかい - farewell party - Noun +専門家 せんもんか - specialist, expert - Noun +専門 せんもん - specialty, profession - Noun +専用 せんよう - exclusive use, private use - Noun +メロディー メロディー - melody - Noun +全般 ぜんぱん - whole, general - Noun +本格的 ほんかくてき - full-scale, authentic - Adjective +全面的 ぜんめんてき - all-out, overall - Adjective +論理的 ろんりてき - logical - Adjective +知的 ちてき - intellectual, mental - Adjective +目的地 もくてきち - destination, goal - Noun +リットル リットル - liter, litre - Noun +文化的 ぶんかてき - cultural - Adjective +男性的 だんせいてき - masculine, manly - Adjective +普段 ふだん - usual, ordinary - Adverb +並み なみ - ordinary, average - Noun +並木 なみき - row of trees, roadside trees - Noun +わざと わざと - on purpose - Adverb +平面 へいめん - level surface, plain - Noun +平気 へいき - nonchalant, calm - Adjective +平ら たいら - flat, level - Adjective +平行 へいこう - parallel, side by side - Verbal Noun +不平 ふへい - discontent, dissatisfaction - Adjectival Noun +とっくに とっくに - long ago - Adverb +地平線 ちへいせん - horizon - Noun +平野 へいや - plain, open field - Noun +平たい ひらたい - flat, level - Adjective +平方 へいほう - square - Noun +平日 へいじつ - weekday - Noun +ベスト ベスト - best - Noun +平均 へいきん - average, equilibrium - Verbal Noun +等しい ひとしい - equal, same - Adjective +平等 びょうどう - equality, impartiality - Adjectival Noun +同等 どうとう - equality - Noun +対等 たいとう - equality, parity - Adjectival Noun +不平等 ふびょうどう - unequal, unfair - Adjectival Noun +ワンピース ワンピース - dress - Noun +病室 びょうしつ - patient room, ward - Noun +病人 びょうにん - sick person, patient - Noun +内科 ないか - internal medicine - Noun +必死 ひっし - desperation - Adjectival Noun +病死 びょうし - death from sickness - Verbal Noun +ダイヤモンド ダイヤモンド - diamond - Noun +必死に ひっしに - desperately - Adverb +亡くす なくす - lose (in death) - Verb +多忙 たぼう - very busy - Adjectival Noun +疲れ つかれ - fatigue, exhaustion - Noun +立ち入り禁止 たちいりきんし - no trespassing - Noun +ナンバー ナンバー - number - Noun +日本酒 にほんしゅ - sake, rice wine - Noun +酔う よう - get drunk - Verb +保つ たもつ - preserve, sustain - Verb +保険 ほけん - insurance - Noun +保証 ほしょう - guarantee, warranty - Verbal Noun +保証人 ほしょうにん - guarantor - Noun +とうとう とうとう - at last, after all - Adverb +保存 ほぞん - preservation, conservation - Verbal Noun +存じる ぞんじる - think, know - Verb +注ぐ そそぐ - pour into, concentrate - Verb +注 ちゅう - annotation, explanatory note - Noun +同意 どうい - consent, approval - Verbal Noun +とんでもない とんでもない - unthinkable, outrageous - Adjective +無意味 むいみ - meaningless, absurd - Adjectival Noun +不注意 ふちゅうい - carelessness, inattention - Adjectival Noun +生意気 なまいき - cheeky, conceited - Adjectival Noun +確かめる たしかめる - make sure of, confirm - Verb +明確 めいかく - clear, precise - Adjectival Noun +にこやか にこやか - smiling, beaming - Adjective +不確か ふたしか - unreliable, uncertain - Adjectival Noun +認可 にんか - approval, authorization - Verbal Noun +認める みとめる - recognize, acknowledge - Verb +率 りつ - ratio, proportion - Noun +率直 そっちょく - frank, openhearted - Adjective +能率 のうりつ - efficiency - Noun +ロッカー ロッカー - locker - Noun +旅客機 りょかくき - passenger plane - Noun +不器用 ぶきよう - clumsy, unskillful - Adjectival Noun +道具 どうぐ - tool - Noun +予備 よび - reserve, spare - Noun +説く とく - explain, preach - Verb +プライド プライド - pride - Noun +不公平 ふこうへい - unfair, unjust - Adjectival Noun +遊園地 ゆうえんち - amusement park - Noun +保育園 ほいくえん - day-care center, nursery school - Noun +飛び出す とびだす - fly out, dash out - Verb +飛ばす とばす - fly, shoot - Verb +ママ ママ - mommy, mummy - Noun +飛び上がる とびあがる - fly up, jump up - Verb +飛び下りる とびおりる - jump off, jump down - Verb +飛び込む とびこむ - dive into - Verb +飛行 ひこう - flight, aviation - Verbal Noun +船長 せんちょう - captain - Noun +よける よける - move out the way - Verb +風船 ふうせん - balloon - Noun +半島 はんとう - peninsula - Noun +島 とう - island - Noun +不完全 ふかんぜん - imperfection, incompleteness - Adjectival Noun +達成 たっせい - attain, achieve - Verbal Noun +成り立つ なりたつ - consist of, be built on - Verb +バッジ バッジ - badge - Noun +未成年 みせいねん - minor, underage - Noun +敗れる やぶれる - be defeated, be beaten - Verb +野原 のはら - field, plain - Noun +原 はら - plain, field - Noun +要因 よういん - primary factor, main cause - Noun +ピン ピン - hairpin, pin - Noun +因る よる - be caused by, be due to - Verb +物資 ぶっし - commodities, goods - Noun +願い ねがい - wish, request - Noun +不正 ふせい - fraud, impropriety - Adjectival Noun +大正 たいしょう - Taisho era - Noun +まあ まあ - well - Interjection +正に まさに - just, surely - Adverb +常に つねに - always, at all times - Adverb +日常 にちじょう - daily, everyday - Noun +知識 ちしき - knowledge - Noun +認識 にんしき - recognition, acknowledgment - Verbal Noun +無意識 むいしき - unconsciously, without thinking - Adverb +むなしい むなしい - empty, vain - Adjective +非難 ひなん - criticism, blame - Verbal Noun +非常 ひじょう - emergency, calamity - Adjectival Noun +非常識 ひじょうしき - lack of common sense - Adjectival Noun +非常口 ひじょうぐち - emergency exit - Noun +調子 ちょうし - tone, condition - Noun +ついで ついで - on the way - Noun +調和 ちょうわ - harmony, agreement - Verbal Noun +体調 たいちょう - health condition - Noun +単調 たんちょう - monotonous, dull - Adjectival Noun +調味料 ちょうみりょう - seasoning, flavoring - Noun +調整 ちょうせい - regulation, adjustment - Verbal Noun +バケツ バケツ - bucket - Noun +整える ととのえる - arrange, adjust - Verb +整う ととのう - be in order, be adjusted - Verb +調節 ちょうせつ - adjustment, regulation - Verbal Noun +提出 ていしゅつ - submittal - Verbal Noun +前提 ぜんてい - assumption, premise - Noun +答案 とうあん - examination paper, answer - Noun +はっと はっと - taken aback - Adverb +投票 とうひょう - vote, ballot - Verbal Noun +目標 もくひょう - target, goal - Noun +標準 ひょうじゅん - standard, norm - Noun +連れる つれる - take along, bring along - Verb +連日 れんじつ - day after day, everyday - Noun +まずい まずい - bad, no good - Adjective +連休 れんきゅう - consecutive holidays - Noun +連れ つれ - companion - Noun +連絡 れんらく - connection, communication - Verbal Noun +手続き てつづき - procedure, formalities - Noun +連続 れんぞく - continuation, succession - Verbal Noun +もしも もしも - if, if ever - Adverb +続々 ぞくぞく - in rapid succession, one after another - Adverb +続き つづき - continuation, sequel - Noun +長続き ながつづき - lasting for a long time - Verbal Noun +相場 そうば - market price, speculation - Noun +相当 そうとう - correspondence, suitability - Verbal Noun +やかましい やかましい - noisy, clamorous - Adjective +相応しい ふさわしい - suitable, appropriate - Adjective +対談 たいだん - interview - Verbal Noun +録画 ろくが - videotaping - Verbal Noun +録音テープ ろくおんテープ - tape - Noun +登場 とうじょう - appearance on stage, appearance - Verbal Noun +登録 とうろく - registration - Verbal Noun +バット バット - bat - Noun +登山 とざん - climbing, mountaineer - Verbal Noun +登校 とうこう - attending school - Verbal Noun +山登り やまのぼり - mountain climbing - Verbal Noun +無関心 むかんしん - apathy, indifference - Adjectival Noun +無関係 むかんけい - irrelevant, unrelated - Adjectival Noun +マナー マナー - manners - Noun +不況 ふきょう - depression, slump - Noun +態度 たいど - attitude, manner - Noun +明治 めいじ - Meiji era - Noun +府 ふ - urban prefecture - Noun +府立 ふりつ - prefectural - Noun +ばらばら ばらばら - separately - Adverb +野党 やとう - opposition party - Noun +当選 とうせん - election to office - Verbal Noun +入選 にゅうせん - acceptance, selection - Verbal Noun +選択 せんたく - selection, choice - Verbal Noun +天候 てんこう - weather, climate - Noun +手首 てくび - wrist - Noun +プラットホーム プラットホーム - platform - Noun +脳 のう - brain - Noun +悩む なやむ - be troubled, suffer - Verb +悩み なやみ - troubles, worries - Noun +先頭 せんとう - forefront, head - Noun +命じる めいじる - order, give orders - Verb +まぐろ まぐろ - tuna - Noun +領土 りょうど - territory, domain - Noun +領事館 りょうじかん - consulate - Noun +領収書 りょうしゅうしょ - receipt, voucher - Noun +取り組む とりくむ - grapple, pursue - Verb +任せる まかせる - entrust to, leave it to - Verb +ろくに ろくに - hardly, barely - Adverb +担任 たんにん - supervisor - Verbal Noun +無責任 むせきにん - irresponsibility - Adjectival Noun +転勤 てんきん - transfer - Verbal Noun +勤め先 つとめさき - employment - Noun +勤め つとめ - service, duties - Noun +務める つとめる - perform a duty, play a role - Verb +つまむ つまむ - munch on - Verb +任務 にんむ - duty, mission - Noun +務め つとめ - duty, task - Noun +雇う やとう - employ, hire - Verb +募集 ぼしゅう - recruitment, collection - Verbal Noun +採る とる - gather, pick - Verb +ボーイ ボーイ - waiter - Noun +就く つく - set about a task, enter upon - Verb +退職 たいしょく - retirement, resignation - Verbal Noun +退学 たいがく - withdrawal from school - Verbal Noun +早退 そうたい - early departure - Verbal Noun +理屈 りくつ - reason, logic - Noun +ホット ホット - hot - Noun +退屈 たいくつ - boring, tedious - Verbal Noun +用件 ようけん - matter, things to be done - Noun +参る まいる - go, come - Verb +惨め みじめ - miserable, pitiable - Adjective +追加 ついか - addition - Verbal Noun +まし まし - more, better - Adjective +比率 ひりつ - ratio, percentage - Noun +対比 たいひ - contrast, comparison - Verbal Noun +見比べる みくらべる - look from one to another, compare - Verb +比較的 ひかくてき - comparatively, relatively - Adverb +比較 ひかく - comparison - Verbal Noun +判決 はんけつ - judicial decision, judgment - Noun +ぱっと ぱっと - suddenly, quickly - Adverb +判子 はんこ - seal, stamp - Noun +評判 ひょうばん - fame, reputation - Noun +批評 ひひょう - criticism, comment - Verbal Noun +反感 はんかん - ill feeling, antipathy - Noun +予想 よそう - prospect, expectation - Verbal Noun +つなぐ つなぐ - connect, join - Verb +理想 りそう - ideal - Noun +想像 そうぞう - imagination - Verbal Noun +象 ぞう - elephant - Noun +抽象的 ちゅうしょうてき - abstract - Adjective +保障 ほしょう - guarantee, security - Verbal Noun +ひょっとしたら ひょっとしたら - perhaps - Adverb +負傷 ふしょう - hurt, injury - Verbal Noun +変換 へんかん - change, conversion - Verbal Noun +取り替える とりかえる - change, replace - Verb +立て替える たてかえる - pay for another, pay in advance - Verb +天災 てんさい - natural disaster - Noun +有害 ゆうがい - harmful, hazardous - Adjectival Noun +ひとりでに ひとりでに - automatically, by oneself - Adverb +無害 むがい - harmless - Adjectival Noun +被害 ひがい - damage, harm - Noun +破る やぶる - defeat - Verb +破壊 はかい - breaking, destruction - Verbal Noun +助かる たすかる - be helped, be rescued - Verb +ひねる ひねる - twist, turn - Verb +派手 はで - showy, flashy - Adjective +派出所 はしゅつじょ - branch office, police box - Noun +派遣 はけん - dispatch, sending - Verbal Noun +犯人 はんにん - criminal, offender - Noun +犯罪 はんざい - offense, crime - Noun +ひび ひび - crack - Noun +罪 つみ - crime, sin - Noun +盗難 とうなん - robbery, burglary - Noun +捕まる つかまる - be caught, be arrested - Verb +捕まえる つかまえる - arrest, capture - Verb +逃げ出す にげだす - make a break for, run off - Verb +逃がす にがす - let go - Verb +やっつける やっつける - beat, let someone have it - Verb +逃げ道 にげみち - escape route - Noun +戦う たたかう - wage war, fight - Verb +挑戦 ちょうせん - challenge - Verbal Noun +敗戦 はいせん - lost battle, defeat - Verbal Noun +戦い たたかい - war, match - Noun +レントゲン レントゲン - X-rays - Noun +大戦 たいせん - world war - Noun +混ぜる まぜる - blend, mix by stirring - Verb +混ざる まざる - be mixed, be stirred - Verb +混じる まじる - be blended, get mixed - Verb +乱れる みだれる - be disordered, be disturbed - Verb +パンツ パンツ - pants, trousers - Noun +乱す みだす - put into disorder, disrupt - Verb +統合 とうごう - integration, combination - Verbal Noun +統一 とういつ - unity, coordination - Verbal Noun +統計 とうけい - statistics - Verbal Noun +総会 そうかい - general meeting - Noun +むける むける - come off, peel - Verb +総合 そうごう - synthesis, integration - Verbal Noun +総理 そうり - president, prime minister - Noun +総数 そうすう - total - Noun +捜査 そうさ - criminal investigation, search - Verbal Noun +湖 みずうみ - lake - Noun +深める ふかめる - deepen, intensify - Verb +ぶつぶつ ぶつぶつ - grumble - Adverb +深まる ふかまる - deepen, become deeper - Verb +注意深い ちゅういぶかい - careful, discreet - Adjective +段落 だんらく - end of paragraph - Noun +見落とす みおとす - miss, fail to notice - Verb +落第 らくだい - failing an exam - Verbal Noun +ぶるぶる ぶるぶる - shiver - Adverb +波 なみ - wave, fluctuations - Noun +流れ ながれ - flow, stream - Noun +流通 りゅうつう - circulation, distribution - Verbal Noun +流す ながす - let flow, set adrift - Verb +中流 ちゅうりゅう - mid-stream, middle reaches - Noun +ボリューム ボリューム - volume - Noun +二流 にりゅう - second-rate - Noun +流行 はやり - fashion, trend - Noun +流行 りゅうこう - fashion, trend - Verbal Noun +洗面 せんめん - washing one's face - Noun +手洗い てあらい - toilet, washstand - Noun +洗面器 せんめんき - washbowl, sink - Noun +ちり ちり - dust - Noun +沈没 ちんぼつ - sinking - Verbal Noun +冷え込む ひえこむ - get colder - Verb +冷やかす ひやかす - tease, jeer - Verb +冷凍 れいとう - freezing, cold storage - Verbal Noun +内臓 ないぞう - internal organs - Noun +はげる はげる - come off, peel off - Verb +適用 てきよう - application - Verbal Noun +適切 てきせつ - appropriate, adequate - Adjective +適応 てきおう - adaptation, adjustment - Verbal Noun +適する てきする - suit, be suitable - Verb +適当 てきとう - suitable, appropriate - Adjectival Noun +パパ パパ - dad, father - Noun +適度 てきど - moderate, proper - Adjectival Noun +染める そめる - dye, color - Verb +廃止 はいし - abolishment, abandonment - Verbal Noun +風景 ふうけい - scenery, landscape - Noun +不景気 ふけいき - business depression, slump - Adjectival Noun +響く ひびく - reverberate, vibrate - Verb +つかむ つかむ - grip, grab - Verb +日光 にっこう - sunshine, sunlight - Noun +光 ひかり - light, flash - Noun +測定 そくてい - measure, gauge - Verbal Noun +測る はかる - measure, gauge - Verb +陽気 ようき - cheerful, bright - Adjectival Noun +もったいない もったいない - wasteful, a shame - Adjective +プロ野球 プロやきゅう - professional baseball - Noun +電球 でんきゅう - light bulb - Noun +振り返る ふりかえる - turn one's head, turn round - Verb +振り向く ふりむく - turn around, look back - Verb +振り ふり - swing, shake - Noun +ふざける ふざける - mess around, fool around - Verb +秘書 ひしょ - secretary - Noun +密か ひそか - secret, private - Adjective +貴い とうとい - precious, valuable - Adjective +追跡 ついせき - pursuit, chase - Verbal Noun +寄せる よせる - draw near, draw up, gather - Verb +だるい だるい - be dull, feel dull, weary - Adjective +寄る よる - stop by, stop off - Verb +近寄る ちかよる - go near, approach - Verb +寄り道 よりみち - dropping by, going out of the way - Verbal Noun +寄り集まる よりあつまる - gather, assemble - Verb +歴史的 れきしてき - historical - Adjective +宝石 ほうせき - gem, jewel - Noun +ちぎる ちぎる - tear, tear off - Verb +建て前 たてまえ - a front, polite face - Noun +単位 たんい - unit, credit - Noun +地位 ちい - position, status - Noun +分離 ぶんり - separation, split - Verbal Noun +離れる はなれる - separate, leave - Verb +ねぎ ねぎ - Welsh onion, green onion - Noun +離す はなす - separate, detach - Verb +停電 ていでん - power cut, power failure - Verbal Noun +停止 ていし - stop, suspension - Verbal Noun +範囲 はんい - range, scope - Noun +隣り合う となりあう - adjoin, be next door to each other - Verb +びしょびしょ びしょびしょ - soaked - Adjectival Noun +横切る よこぎる - cross, go across - Verb +横顔 よこがお - profile, face seen from side - Noun +中断 ちゅうだん - interruption, discontinuance - Verbal Noun +断水 だんすい - water stoppage - Verbal Noun +油断 ゆだん - inattention, carelessness - Verbal Noun +断定 だんてい - decision, conclusion - Verbal Noun +バーゲン バーゲン - bargain sale - Noun +継ぐ つぐ - succeed, inherit - Verb +中継 ちゅうけい - relay, broadcasting - Verbal Noun +幅広い はばひろい - wide, broad - Adjective +幅 はば - width, breadth - Noun +大陸 たいりく - continent - Noun +メーター メーター - meter, taximeter - Noun +着陸 ちゃくりく - landing - Verbal Noun +離陸 りりく - takeoff - Verbal Noun +内陸 ないりく - inland, interior - Noun +陸上 りくじょう - land, shore - Noun +陸 りく - land, shore - Noun +もしかすると もしかすると - possibly, perhaps - Adverb +南極 なんきょく - South Pole - Noun +北極 ほっきょく - North Pole - Noun +先端 せんたん - edge, vanguard - Noun +端 はし - end, edge - Noun +訪問 ほうもん - visit - Verbal Noun +女房 にょうぼう - wife - Noun +ちぎれる ちぎれる - be torn off, come off - Verb +内緒 ないしょ - secrecy, privacy - Noun +百貨店 ひゃっかてん - department store - Noun +輸送 ゆそう - transport, ship - Verbal Noun +復活 ふっかつ - revival, rebirth - Verbal Noun +操作 そうさ - operation, manipulation - Verbal Noun +にっこり にっこり - smiling, grinning - Adverb +体操 たいそう - gymnastics, physical exercise - Noun +縦 たて - lengthways, vertical - Noun +操縦 そうじゅう - steering, piloting - Verbal Noun +縦書き たてがき - vertical writing - Noun +滞在 たいざい - stay - Verbal Noun +ぱいなっぷる ぱいなっぷる - pineapple - Noun +地帯 ちたい - zone, area - Noun +熱帯 ねったい - tropics - Noun +保守 ほしゅ - conservation, maintenance - Verbal Noun +見守る みまもる - watch, keep watch over - Verb +留守番 るすばん - caretaking, caretaker - Noun +ぱんだ ぱんだ - panda - Noun +戻す もどす - return, give back - Verb +取り戻す とりもどす - take back, recover - Verb +払い戻す はらいもどす - pay back, reimburse - Verb +寝かす ねかす - put to sleep - Verb +寝過ごす ねすごす - oversleep - Verb +早寝 はやね - going to bed early - Verbal Noun +びっしょり びっしょり - soaked - Adverb +寝かせる ねかせる - put to bed, lay down - Verb +寝転ぶ ねころぶ - lie down - Verb +冷静 れいせい - cool, calm - Adjectival Noun +両者 りょうしゃ - both - Noun +両立 りょうりつ - managing two things, having it both ways - Verbal Noun +ペンチ ペンチ - pliers - Noun +両手 りょうて - both hands - Noun +両面 りょうめん - both sides - Noun +側面 そくめん - side, flank - Noun +両側 りょうがわ - both sides - Noun +要項 ようこう - important points - Noun +モダン モダン - modern - Adjectival Noun +目印 めじるし - landmark, sign - Noun +細長い ほそながい - long and thin, slender - Adjective +載る のる - appear in print - Verb +積む つむ - pile up, accumulate - Verb +面積 めんせき - area, square measure - Noun +翻訳 ほんやく - translation - Verbal Noun +リクエスト リクエスト - request - Verbal Noun +通訳 つうやく - interpreting - Verbal Noun +申し訳ない もうしわけない - sorry, inexcusable - Adjective +訳 わけ - reason, cause - Noun +申し訳 もうしわけ - excuse, apology - Noun +訂正 ていせい - correction, amendment - Verbal Noun +ビーチ ビーチ - beach - Noun +討論 とうろん - debate, discussion - Verbal Noun +添える そえる - add to, attach to - Verb +添う そう - accompany, go along with - Verb +付近 ふきん - neighborhood, environs - Noun +付き合い つきあい - friendship, association - Noun +ビタミン ビタミン - vitamin - Noun +付け加える つけくわえる - add - Verb +付き合う つきあう - socialize with, see someone - Verb +名付ける なづける - name, give a name to - Verb +付録 ふろく - appendix, supplement - Noun +近付ける ちかづける - bring close - Verb +付け足す つけたす - add on, append - Verb +フライパン フライパン - frying pan - Noun +日付け ひづけ - date - Noun +付属 ふぞく - attachment, belonging - Verbal Noun +属する ぞくする - belong to, be one of - Verb +反省 はんせい - reflection, repentance - Verbal Noun +省く はぶく - omit, dispense with - Verb +まあまあ まあまあ - now now - Adverb +略す りゃくす - abbreviate, omit - Verb +略 りゃく - abbreviation - Noun +大概 たいがい - generally, probably - Adverb +含める ふくめる - include - Verb +含む ふくむ - contain, include - Verb +たこ たこ - octopus - Noun +道順 みちじゅん - route, itinerary - Noun +列車 れっしゃ - train - Noun +列島 れっとう - archipelago - Noun +列 れつ - row, line - Noun +例外 れいがい - exception - Noun +デザート デザート - dessert - Noun +比例 ひれい - proportion, ratio - Verbal Noun +用例 ようれい - example, illustration - Noun +例える たとえる - compare, liken - Verb +例題 れいだい - example, exercise - Noun +例年 れいねん - normal year, average year - Noun +例え たとえ - metaphor, simile - Noun +とっさに とっさに - at once - Adverb +余地 よち - room, space - Noun +余計 よけい - excess, needless - Adjectival Noun +余分 よぶん - excess, extra - Adjectival Noun +途中 とちゅう - on the way, half way - Noun +用途 ようと - use, service - Noun +ぬるぬる ぬるぬる - slimy - Adverb +中途 ちゅうと - halfway - Noun +取り締まり とりしまり - regulation, crackdown - Noun +取り締まる とりしまる - control, crack down - Verb +緩める ゆるめる - loosen, unloose - Verb +緩やか ゆるやか - slack, loose - Adjective +のろい のろい - slow, sluggish - Adjective +緩む ゆるむ - slacken, be loose - Verb +養う やしなう - foster, support - Verb +豊か ゆたか - abundant, ample - Adjective +富む とむ - be rich, abound in - Verb +豊富 ほうふ - abundant, plentiful - Adjectival Noun +目茶苦茶 めちゃくちゃ - in a mess, terrible - Adjectival Noun +ぴょんぴょん ぴょんぴょん - jump, hop - Adverb +労働者 ろうどうしゃ - laborer, worker - Noun +労働 ろうどう - labor, toil - Verbal Noun +疲労 ひろう - fatigue - Verbal Noun +労力 ろうりょく - labor, work - Noun +貧しい まずしい - poor, needy - Adjective +ブラシ ブラシ - brush - Noun +乏しい とぼしい - scarce, short of - Adjective +貧乏人 びんぼうにん - poor person, the poor - Noun +辛い つらい - difficult, harsh - Adjective +不幸せ ふしあわせ - unhappiness, misfortune - Adjectival Noun +福祉 ふくし - welfare - Noun +マヨネーズ マヨネーズ - mayonnaise - Noun +模様 もよう - pattern, design - Noun +模範 もはん - model, role model - Noun +農民 のうみん - peasants, farmers - Noun +農家 のうか - farmhouse - Noun +農村 のうそん - farm village, agricultural community - Noun +低気圧 ていきあつ - low pressure, atmospheric depression - Noun +だらしない だらしない - slovenly, untidy - Adjective +短縮 たんしゅく - shortening, contraction - Verbal Noun +縮める ちぢめる - contract, shorten - Verb +縮む ちぢむ - shrink, contract - Verb +縮み ちぢみ - shrinkage - Noun +縮まる ちぢまる - be shortened, be contracted - Verb +とうもろこし とうもろこし - corn, maize - Noun +伸ばす のばす - stretch, straighten - Verb +引き伸ばす ひきのばす - stretch out, enlarge - Verb +追伸 ついしん - P.S. - Noun +倍 ばい - double - Noun +超過 ちょうか - excess - Verbal Noun +ひらひら ひらひら - lightly, floating - Adverb +乗り越える のりこえる - overcome, get over - Verb +乗り越し のりこし - riding past one's stop - Verbal Noun +乗り越す のりこす - ride past - Verb +抜ける ぬける - come out, leave - Verb +抜く ぬく - pull out - Verb +ぽかぽか ぽかぽか - pleasantly warm - Adverb +昇る のぼる - rise, - Verb +膨らむ ふくらむ - expand, swell - Verb +膨れる ふくれる - expand, fill up - Verb +札 ふだ - sign, billboard - Noun +名札 なふだ - name badge, tag - Noun +礼 れい - bow, courtesy - Noun +よる よる - be caused by - Verb +反射 はんしゃ - reflection - Verbal Noun +日程 にってい - program, schedule - Noun +程 ほど - extent, limit - Noun +優勝 ゆうしょう - victory, championship - Verbal Noun +優秀 ゆうしゅう - excellent, exceptional - Adjectival Noun +だぶだぶ だぶだぶ - baggy, too big - Adjective +透明 とうめい - transparent - Adjectival Noun +半導体 はんどうたい - semiconductor - Noun +導く みちびく - guide, lead - Verb +望む のぞむ - desire, hope - Verb +望ましい のぞましい - desirable, welcome - Adjective +つるつる つるつる - smooth, slippery - Adverb +要望 ようぼう - demand, request - Verbal Noun +望み のぞみ - desire, hope - Noun +有望 ゆうぼう - promising, hopeful - Adjectival Noun +欲望 よくぼう - desire, craving - Noun +待ち望む まちのぞむ - expect, look forward to - Verb +努める つとめる - endeavor, make efforts, try hard - Verb +トースト トースト - toast - Noun +独立 どくりつ - independence, self-reliance - Verbal Noun +独特 どくとく - peculiarity, uniqueness - Adjective +独り言 ひとりごと - soliloquy, monologue - Noun +身 み - body, one's own person - Noun +中身 なかみ - content, interior - Noun +どきっと どきっと - surprised, shocked - Adverb +身近 みぢか - near oneself, close to one - Adjectival Noun +身の回り みのまわり - one's person, one's appearance - Noun +身なり みなり - dress, one's appearance - Noun +身振り みぶり - gesture, gesticulation - Noun +独占 どくせん - exclusive possession, monopoly - Verbal Noun +のろのろ のろのろ - slowly, easy - Adverb +仲良く なかよく - harmoniously, amicably - Adverb +仲良し なかよし - good friend, chum - Noun +仲直り なかなおり - reconciliation, making up - Verbal Noun +仲 なか - personal relationship - Noun +仲間 なかま - comrade, peer - Noun +仲人 なこうど - go-between, matchmaker - Noun +ぴかぴか ぴかぴか - new, shiny - Adverb +照らす てらす - illuminate, shine on - Verb +照る てる - shine, be fine - Verb +夫人 ふじん - wife, married lady - Noun +婦人 ふじん - woman, lady - Noun +夫妻 ふさい - husband and wife, Mr. and Mrs. - Noun +ぺこぺこ ぺこぺこ - bow, kowtow - Adverb +相互 そうご - mutual, reciprocal - Noun +互い たがい - each other - Noun +皆 みな - all, everybody - Noun +我々 われわれ - we - Noun +我が国 わがくに - our country, Japan - Noun +ぺらぺら ぺらぺら - floppy, flimsy - Adjective +我が家 わがや - one's home - Noun +年齢 ねんれい - age, years - Noun +恋愛 れんあい - love - Verbal Noun +初恋 はつこい - first love - Noun +誕生 たんじょう - birth - Verbal Noun +ほこり ほこり - dust - Noun +延びる のびる - extend, be postponed - Verb +延ばす のばす - extend, postpone - Verb +引き延ばす ひきのばす - extend, prolong - Verb +単純 たんじゅん - simple, uncomplicated - Adjectival Noun +夢中 むちゅう - be absorbed - Adjectival Noun +泣き顔 なきがお - tear-stained face - Noun +ポット ポット - pot, thermos - Noun +笑い わらい - laughter - Noun +喜び よろこび - joy, happiness - Noun +喜ばす よろこばす - please, gladden - Verb +恥 はじ - shame, disgrace - Noun +弁論 べんろん - discussion, oral proceedings - Verbal Noun +ミュージック ミュージック - music - Noun +保護 ほご - protection, safeguard - Verbal Noun +弁護 べんご - defense - Verbal Noun +保護者 ほごしゃ - guardian, protector - Noun +同士 どうし - fellow, to each other - Noun +弁護士 べんごし - lawyer, attorney - Noun +ロマンチック ロマンチック - romantic - Adjective +否定 ひてい - denial, negation - Verbal Noun +総裁 そうさい - president, governor - Noun +迷信 めいしん - superstition - Noun +迷子 まいご - lost child, lost person - Noun +領域 りょういき - territory, domain - Noun +謎 なぞ - puzzle, mystery - Noun +わくわく わくわく - feel excited - Adverb +著者 ちょしゃ - author, writer - Noun +著書 ちょしょ - literary work, book - Noun +偽物 にせもの - sham, imitation - Noun +ノーベル賞 ノーベルしょう - Nobel Prize - Noun +文化財 ぶんかざい - cultural assets - Noun +わさび わさび - wasabi, Japanese horseradish - Noun +預金 よきん - deposit, bank account - Verbal Noun +納得 なっとく - acceptance, persuasion - Verbal Noun +不得意 ふとくい - one's weak point - Adjectival Noun +得する とくする - profit, gain - Verb +得 とく - gain, advantage - Adjectival Noun +チキン チキン - chicken, fried chicken - Noun +損 そん - loss, damage - Verbal Noun +損害 そんがい - damage, harm - Noun +損する そんする - lose, suffer loss - Verb +燃料 ねんりょう - fuel - Noun +燃やす もやす - burn - Verb +日焼け ひやけ - suntan - Verbal Noun +とじる とじる - bind, file - Verb +焼き肉 やきにく - grilled meat, barbequed meat - Noun +夕焼け ゆうやけ - sunset glow - Noun +焼きそば やきそば - pan-fried noodles - Noun +幹 みき - tree trunk - Noun +分散 ぶんさん - dispersion - Verbal Noun +にやにや にやにや - grin to oneself - Adverb +散らばる ちらばる - be scattered - Verb +散る ちる - scatter, fall - Verb +散らかる ちらかる - lie scattered about, be in disorder - Verb +散らかす ちらかす - scatter, disarrange - Verb +田植え たうえ - rice planting - Verbal Noun +ばら ばら - rose - Noun +根 ね - root, source - Noun +大根 だいこん - daikon radish, oriental radish - Noun +まな板 まないた - chopping board - Noun +ほうれん草 ほうれんそう - spinach - Noun +話し言葉 はなしことば - spoken language - Noun +パンティー パンティー - panties - Noun +葉っぱ はっぱ - leaf - Noun +呼び出す よびだす - call, page - Verb +取り扱う とりあつかう - handle, deal in - Verb +取り扱い とりあつかい - handling, manipulation - Noun +同級生 どうきゅうせい - classmate - Noun +中級 ちゅうきゅう - middle-class, intermediate - Noun +ふわふわ ふわふわ - soft - Adjective +腹 はら - belly - Noun +腹一杯 はらいっぱい - full stomach - Adverb +肺 はい - lung, lungs - Noun +溶ける とける - be dissolved, be melted - Verb +溶かす とかす - dissolve, melt - Verb +まずい まずい - problematic, troublesome - Adjective +容易 ようい - easy, simple - Adjectival Noun +容器 ようき - receptacle, container - Noun +滑らか なめらか - smooth, glassy - Adjective +分析 ぶんせき - analysis - Verbal Noun +保健 ほけん - health, health care - Noun +もむ もむ - rub, massage - Verb +診る みる - examine - Verb +治療 ちりょう - medical treatment - Verbal Noun +毒 どく - poison, harm - Noun +中毒 ちゅうどく - poisoning - Verbal Noun +有毒 ゆうどく - poisonous, noxious - Adjectival Noun +ばい菌 ばいきん - bacterium, germ - Noun +センター センター - center - Noun +不潔 ふけつ - dirty, filthy - Adjectival Noun +編集 へんしゅう - editing, compilation - Verbal Noun +追放 ついほう - banishment, deportation - Verbal Noun +放射能 ほうしゃのう - radioactivity - Noun +放す はなす - release, free - Verb +ぞんざい ぞんざい - rough, rude - Adjective +放る ほうる - fling, hurl - Verb +無視 むし - ignoring, disregarding - Verbal Noun +服装 ふくそう - clothes, garments - Noun +振り仮名 ふりがな - reading aid in kana characters - Noun +銅 どう - copper - Noun +たんす たんす - chest of drawers, wardrobe - Noun +悲劇 ひげき - tragedy, tragic drama - Noun +団体 だんたい - group, corporation - Noun +団地 だんち - housing estate, housing complex - Noun +美術 びじゅつ - art, fine arts - Noun +博士 はくし - Ph.D. - Noun +博士 はかせ - expert, doctor - Noun +チェンジ チェンジ - change, exchange - Verbal Noun +展開 てんかい - unfolding, development - Verbal Noun +発展 はってん - expansion, prosperity - Verbal Noun +催す もよおす - feel, experience - Verb +催し もよおし - event, function - Noun +典型的 てんけいてき - typical, representative - Adjective +つかまる つかまる - grip, grab - Verb +典型 てんけい - type, model - Noun +百科事典 ひゃっかじてん - encyclopedia - Noun +特殊 とくしゅ - special, unique - Adjective +微妙 びみょう - subtle, delicate - Adjectival Noun +免税 めんぜい - tax exemption - Verbal Noun +つながり つながり - connection, relation - Noun +免許 めんきょ - license, permit - Noun +動詞 どうし - verb - Noun +名詞 めいし - noun - Noun +副詞 ふくし - adverb - Noun +代名詞 だいめいし - pronoun - Noun +つながる つながる - connect, join - Verb +伝統 でんとう - tradition, convention - Noun +伝わる つたわる - be transmitted, be handed down - Verb +伝説 でんせつ - legend, folk tale - Noun +手伝い てつだい - help, assistant - Noun +伝言 でんごん - verbal message - Verbal Noun +伝染 でんせん - contagion, infection - Verbal Noun +つばめ つばめ - swallow - Noun +焼き鳥 やきとり - yakitori, grilled chicken - Noun +鳴らす ならす - ring, sound - Verb +悲鳴 ひめい - shriek, scream - Noun +笑い声 わらいごえ - laughter - Noun +泣き声 なきごえ - tearful voice, crying - Noun +つぶやく つぶやく - mutter, murmur - Verb +話し声 はなしごえ - voice, whisper - Noun +駐車 ちゅうしゃ - parking - Verbal Noun +騒音 そうおん - noise - Noun +騒動 そうどう - disturbance, confusion - Noun +騒々しい そうぞうしい - noisy, rowdy - Adjective +つぶる つぶる - close - Verb +名刺 めいし - business card, calling card - Noun +到着 とうちゃく - arrival - Verbal Noun +到達 とうたつ - arrival, attainment - Verbal Noun +倒産 とうさん - insolvency - Verbal Noun +面倒 めんどう - troublesome, difficult - Adjectival Noun +斜め ななめ - diagonal, slant - Adjectival Noun +つぼみ つぼみ - bud - Noun +柔らかい やわらかい - soft, gentle - Adjective +張る はる - strain, be stretched - Verb +張り切る はりきる - go all out, make efforts - Verb +欲張り よくばり - greed, greedy - Adjectival Noun +突然 とつぜん - abruptly, suddenly - Adverb +つまずく つまずく - stumble, trip - Verb +突っ込む つっこむ - thrust in, dash into - Verb +突く つく - thrust, poke - Verb +追突 ついとつ - collision - Verbal Noun +触れる ふれる - touch, come in contact with - Verb +避難 ひなん - refuge, shelter - Verbal Noun +ツル ツル - crane, stork - Noun +墜落 ついらく - fall, crash - Verbal Noun +兵士 へいし - soldier - Noun +兵器 へいき - arms, weapon - Noun +兵隊 へいたい - soldier, troops - Noun +武器 ぶき - weapon, arms - Noun +武士 ぶし - samurai, warrior - Noun +でこぼこ でこぼこ - unevenness, bumpiness - Verbal Noun +弾 たま - bullet, shot - Noun +弾む はずむ - spring back, bounce - Verb +日の丸 ひのまる - Rising Sun Flag, Japanese flag - Noun +真ん丸 まんまる - perfect circle - Adjectival Noun +爆発 ばくはつ - explosion, eruption - Verbal Noun +てのひら てのひら - palm - Noun +爆弾 ばくだん - bomb - Noun +暴落 ぼうらく - slump, crash - Verbal Noun +暴力 ぼうりょく - violence, force - Noun +乱暴 らんぼう - violence - Verbal Noun +絶えず たえず - constantly, always - Adverb +とがる とがる - be sharp - Verb +滅びる ほろびる - go to ruin, fall - Verb +防ぐ ふせぐ - prevent, defend - Verb +防衛 ぼうえい - defense, protection - Verbal Noun +防止 ぼうし - prevention, determent - Verbal Noun +予防 よぼう - prevention, protection - Verbal Noun +とんかつ とんかつ - pork cutlet - Noun +防火 ぼうか - fire prevention, fireproof - Noun +妨害 ぼうがい - hindrance, obstruction - Verbal Noun +不機嫌 ふきげん - bad mood, displeasure - Adjectival Noun +徹夜 てつや - staying up all night - Noun +底 そこ - bottom, depths - Noun +徹底的 てっていてき - thorough, exhaustive - Adjective +どんなに どんなに - how much - Adverb +到底 とうてい - after all, in the long run - Adverb +抵抗 ていこう - resistance, opposition - Verbal Noun +敵 てき - enemy, foe - Noun +態勢 たいせい - state, preparedness - Noun +体系 たいけい - system, organization - Noun +なめる なめる - lick, lap - Verb +理系 りけい - science - Noun +文系 ぶんけい - liberal arts, humanities - Noun +綿 めん - cotton - Noun +繁栄 はんえい - prosperity, thriving - Verbal Noun +日韓 にっかん - Japan and Korea - Noun +にらむ にらむ - glare, stare - Verb +耐える たえる - withstand, endure - Verb +矢印 やじるし - arrow - Noun +爪切り つめきり - nail clipper - Noun +枠 わく - frame, limits - Noun +棒 ぼう - rod, stick - Noun +人柄 ひとがら - character, personality - Noun +ねずみ ねずみ - rat, mouse - Noun +詰める つめる - stuff, fill - Verb +詰まる つまる - be stuffed, be stopped up - Verb +譲る ゆずる - transfer, concede - Verb +誠に まことに - truly, very - Adverb +盛り上げる もりあげる - build up excitement - Verb +のぞく のぞく - look, peep - Verb +盛り上がる もりあがる - become lively, get fired up - Verb +盛る もる - heap up, fill - Verb +針 はり - needle, needle-shaped object - Noun +釣り つり - angling - Noun +釣り合い つりあい - balance, proportion - Noun +のんき のんき - carefree, easy-going - Adjectival Noun +釣り合う つりあう - balance, match - Verb +鈍い にぶい - dull, sluggish - Adjective +鈍感 どんかん - thick-headedness - Adjectival Noun +谷 たに - valley, ravine - Noun +余裕 よゆう - room, leeway - Noun +入浴 にゅうよく - bathing - Verbal Noun +はえ はえ - fly - Noun +沿う そう - lie along, follow along - Verb +浜 はま - beach, seashore - Noun +浜辺 はまべ - beach, seashore - Noun +湾 わん - bay, gulf - Noun +潜る もぐる - dive into - Verb +ばかばかしい ばかばかしい - stupid, absurd - Adjective +冷淡 れいたん - cool, indifferent - Adjectival Noun +泥 どろ - mud, dirt - Noun +濁る にごる - get cloudy - Verb +湯飲み ゆのみ - teacup - Noun +湯気 ゆげ - steam, vapor - Noun +はかり はかり - scales - Noun +漏れる もれる - leak, be disclosed - Verb +漏らす もらす - give away, let leak - Verb +漏る もる - leak, be leaky - Verb +濡らす ぬらす - wet, moisten - Verb +溝 みぞ - ditch, groove - Noun +はしご はしご - ladder - Noun +吐く はく - holler, spew - Verb +嘆く なげく - sigh, grieve - Verb +虫歯 むしば - decayed tooth, cavity - Noun +虫 むし - insect, worm - Noun +忠実 ちゅうじつ - faithfulness, devotion - Adjectival Noun +忠告 ちゅうこく - advice, admonishment - Verbal Noun +はだし はだし - barefoot, bare feet - Noun +恵まれる めぐまれる - be blessed, be privileged - Verb +道徳 どうとく - morality, morals - Noun +直径 ちょっけい - diameter - Noun +半径 はんけい - radius - Noun +丼 どんぶり - bowl - Noun +バツ バツ - cross, x-mark - Noun +豆 まめ - bean, peas - Noun +粒 つぶ - grain, drop - Noun +麦 むぎ - wheat - Noun +田畑 たはた - fields and rice paddies - Noun +灯油 とうゆ - kerosene, lamp oil - Noun +はねる はねる - run over, hit - Verb +電灯 でんとう - lamp, electric light - Noun +炎 ほのお - flame, blaze - Noun +皮肉 ひにく - cynicism, irony - Adjectival Noun +皮膚 ひふ - skin - Noun +臭い におい - smell, odor - Noun +生臭い なまぐさい - smelling of fish - Adjective +はれる はれる - swell, swell up - Verb +臭う におう - stink (unpleasant) - Verb +面倒臭い めんどうくさい - troublesome, tiresome - Adjective +匂う におう - smell (pleasant) - Verb +同居 どうきょ - living together - Verbal Noun +掘る ほる - dig, unearth - Verb +ひく ひく - run over - Verb +塀 へい - fence, wall - Noun +大層 たいそう - very, highly - Adverb +履歴 りれき - history, personal history - Noun +履歴書 りれきしょ - resume, bio - Noun +履物 はきもの - footwear - Noun +ヒント ヒント - hint, clue - Noun +戸棚 とだな - closet, cupboard - Noun +扉 とびら - door - Noun +羽根 はね - feather - Noun +翌日 よくじつ - the following day - Noun +翌朝 よくあさ - the following morning - Noun +翌年 よくねん - the following year - Noun +ファックス ファックス - facsimile, fax - Noun +群れ むれ - crowd, herd - Noun +殴る なぐる - hit, strike - Verb +要旨 ようし - gist, overview - Noun +肌 はだ - skin, surface - Noun +肌着 はだぎ - underwear - Noun +ふもと ふもと - foot of the mountain - Noun +肌色 はだいろ - flesh color - Noun +腸 ちょう - intestines, entrails - Noun +大胆 だいたん - boldness, daring - Adjectival Noun +幕 まく - curtain - Noun +夕暮れ ゆうぐれ - evening, twilight - Noun +フルーツ フルーツ - fruit - Noun +墓 はか - grave, gravestone - Noun +墓地 ぼち - graveyard, cemetery - Noun +墓参り はかまいり - visit to a grave - Verbal Noun +芽 め - bud, sprout - Noun +葬式 そうしき - funeral ceremony - Noun +へそ へそ - the navel, the bellybutton - Noun +礼儀 れいぎ - good manners, courtesy - Noun +憎む にくむ - hate, detest - Verb +憎しみ にくしみ - hatred, enmity - Noun +憎らしい にくらしい - hateful, horrible - Adjective +憎い にくい - hateful, abominable - Adjective +仏 ほとけ - buddha, Buddhist image - Noun +べたべた べたべた - stick together - Adjective +仏教 ぶっきょう - Buddhism - Noun +坊さん ぼうさん - Buddhist priest - Noun +竹 たけ - bamboo - Noun +筆者 ひっしゃ - writer - Noun +筆記試験 ひっきしけん - written examination - Noun +ほうき ほうき - broom - Noun +筆記用具 ひっきようぐ - writing materials, pens and pencils - Noun +筆 ふで - writing brush, penmanship - Noun +笛 ふえ - flute, whistle - Noun +名簿 めいぼ - registry, name list - Noun +分裂 ぶんれつ - division, split - Verbal Noun +ポスター ポスター - poster - Noun +布 ぬの - cloth - Noun +包丁 ほうちょう - kitchen knife, carving knife - Noun +包帯 ほうたい - bandage, dressing - Verbal Noun +包み つつみ - package, parcel - Noun +包み紙 つつみがみ - wrapping paper - Noun +抱く だく - hug, embrace - Verb +ほどく ほどく - undo, unfasten - Verb +文句 もんく - complaint - Noun +中旬 ちゅうじゅん - middle ten days of a month - Noun +平凡 へいぼん - common, ordinary - Adjectival Noun +通帳 つうちょう - bankbook, passbook - Noun +妊娠 にんしん - pregnancy, conception - Verbal Noun +ほほ ほほ - cheek - Noun +同姓 どうせい - same surname - Noun +嫁 よめ - bride, daughter-in-law - Noun +花嫁 はなよめ - bride - Noun +花婿 はなむこ - bridegroom - Noun +幼児 ようじ - young child, infant - Noun +ほほえむ ほほえむ - smile - Verb +眠たい ねむたい - sleepy - Adjective +眠り ねむり - sleep, slumber - Noun +眺める ながめる - look out, gaze - Verb +眺め ながめ - view, prospect - Noun +同封 どうふう - enclosure - Verbal Noun +封 ふう - seal, sealing - Noun +まく まく - sow, scatter - Verb +呼び掛ける よびかける - call to, appeal to - Verb +引っ掛かる ひっかかる - be caught, be trapped - Verb +話し掛ける はなしかける - address someone, speak to someone - Verb +通り掛かる とおりかかる - happen to pass by - Verb +引っ掛ける ひっかける - hook on - Verb +まとめ まとめ - summary - Noun +寄り掛かる よりかかる - lean against something - Verb +措置 そち - measure, step - Verbal Noun +拝見 はいけん - humbly look at or see - Verbal Noun +控える ひかえる - hold back, show moderation - Verb +控え室 ひかえしつ - waiting room - Noun +まね まね - imitation, mimicry - Verbal Noun +握り締める にぎりしめる - squeeze, grip - Verb +揃う そろう - be (all) together - Verb +揃える そろえる - align, make uniform - Verb +出迎え でむかえ - meeting, receiving - Noun +迎え むかえ - greeting, meeting - Noun +まねる まねる - imitate, mimic - Verb +遂げる とげる - accomplish, achieve - Verb +巡る めぐる - go round, circulate - Verb +待遇 たいぐう - treatment, pay - Noun +俳句 はいく - haiku - Noun +俳優 はいゆう - actor, actress - Noun +敏感 びんかん - sensitive - Adjectival Noun +まぶた まぶた - eyelid - Noun +倣う ならう - copy, follow an example - Verb +寮 りょう - dormitory, lodging house - Noun +偏見 へんけん - prejudice, biased view - Noun +何遍 なんべん - how many times - Noun +宣伝 せんでん - publicity, advertisement - Verbal Noun +まれ まれ - rarely - Adjective +展覧会 てんらんかい - exhibition - Noun +総理大臣 そうりだいじん - prime minister - Noun +大臣 だいじん - minister - Noun +臨む のぞむ - be present at - Verb +臨時 りんじ - temporary, provisional - Noun +ミスプリント ミスプリント - misprint, error - Noun +内閣 ないかく - cabinet - Noun +闘う たたかう - fight - Verb +派閥 はばつ - clique, faction - Noun +懐かしい なつかしい - longed-for, old - Adjective +噴火 ふんか - eruption, volcanic activity - Verbal Noun +噴水 ふんすい - jet, fountain - Noun +むく むく - peel, pare - Verb +不愉快 ふゆかい - unpleasant, disagreeable - Adjectival Noun +愉快 ゆかい - pleasant, delightful - Adjectival Noun +漫画 まんが - manga, comics - Noun +電卓 でんたく - pocket calculator - Noun +雄大 ゆうだい - grand, magnificent - Adjective +めくる めくる - turn over - Verb +雌 めす - female - Noun +幼稚 ようち - childish, infantile - Adjectival Noun +名称 めいしょう - name - Noun +秩序 ちつじょ - order, method - Noun +物陰 ものかげ - place behind something - Noun +めでたい めでたい - happy, fortunate - Adjective +魅力 みりょく - charm, attraction - Noun +醜い みにくい - ugly, bad-looking - Adjective +悪賢い わるがしこい - cunning, sly - Adjective +頂上 ちょうじょう - summit, climax - Noun +近頃 ちかごろ - recently, nowadays - Noun +矛盾 むじゅん - contradiction - Verbal Noun +もうかる もうかる - make a profit, be profitable - Verb +倉庫 そうこ - warehouse, storehouse - Noun +創立 そうりつ - establishment, organization - Verbal Noun +罰金 ばっきん - fine, penalty - Noun +罰する ばっする - punish - Verb +罰 ばつ - punishment, penalty - Noun +もうけ もうけ - profits, earnings - Noun +老人 ろうじん - old person, elderly - Noun +煮る にる - boil, cook - Verb +煮える にえる - boil, be boiled - Verb +蒸し暑い むしあつい - humid - Adjective +黙る だまる - become silent, shut one's mouth - Verb +もしかしたら もしかしたら - possibly, perhaps - Adverb +無駄 むだ - no good, pointless - Adjectival Noun +無駄遣い むだづかい - wasting money - Verbal Noun +沸騰 ふっとう - boiling - Verbal Noun +返却 へんきゃく - return - Verbal Noun +庁 ちょう - public office, agency - Noun +もてる もてる - be popular with the opposite sex - Verb +都庁 とちょう - Tokyo Metropolitan City Hall - Noun +府庁 ふちょう - urban prefectural office - Noun +摩擦 まさつ - friction, rubbing - Verbal Noun +先輩 せんぱい - senior, superior - Noun +冒険 ぼうけん - adventure, risk - Verbal Noun +牧場 ぼくじょう - stock farm, pasture - Noun +ゆでる ゆでる - boil - Verb +取り敢えず とりあえず - for now, first of all - Adverb +勇気 ゆうき - courage, nerve - Noun +勇敢 ゆうかん - brave, heroic - Adjectival Noun +励ます はげます - encourage, urge - Verb +露 つゆ - dew, dewdrop - Noun +よける よける - avoid, evade - Verb +零下 れいか - below zero, sub-zero - Noun +雰囲気 ふんいき - atmosphere, mood - Noun +盆地 ぼんち - valley, basin - Noun +盆 ぼん - Bon Festival - Noun +盆 ぼん - tray - Noun +よこす よこす - send, hand over - Verb +大衆 たいしゅう - the masses, the populace - Noun +舞台 ぶたい - stage, setting - Noun +見舞う みまう - visit someone - Verb +見舞い みまい - personal visit - Noun +盆踊り ぼんおどり - Bon Festival dance - Noun +跳ねる はねる - leap, hop, bound - Verb +よす よす - quit, stop - Verb +銭湯 せんとう - public bath, bathhouse - Noun +古里 ふるさと - hometown, birthplace - Noun +狙う ねらう - aim, be after - Verb +彫る ほる - engrave, carve - Verb +中央 ちゅうおう - center - Noun +レクリエーション レクリエーション - recreation, games - Noun +双子 ふたご - twins - Noun +裸 はだか - naked body, bareness - Noun +祖先 そせん - ancestor, forefather - Noun +報酬 ほうしゅう - remuneration, reward - Noun +無邪気 むじゃき - innocence, simplicity - Adjectival Noun +ろうそく ろうそく - candle - Noun +玉ねぎ たまねぎ - onion - Noun +玉 たま - bead, ball - Noun +天皇 てんのう - emperor - Noun +風呂場 ふろば - bathroom - Noun +班 はん - squad, group - Noun +召し上がる めしあがる - eat, drink - Verb +わがまま わがまま - selfishness, willfulness - Adjectival Noun +哲学 てつがく - philosophy - Noun +綱 つな - rope, line - Noun +縄 なわ - rope, cord - Noun +縫う ぬう - sew, stitch - Verb +虹 にじ - rainbow - Noun +わく わく - well up - Verb +梅雨明け つゆあけ - end of the rainy season - Verbal Noun +梅雨入り つゆいり - start of the rainy season - Verbal Noun +欄 らん - column, field - Noun +栓抜き せんぬき - bottle opener, corkscrew - Noun +峠 とうげ - mountain pass, ridge - Noun +ばからしい ばからしい - stupid, useless - Adjective +婆さん ばあさん - grandmother, old lady - Noun +漬ける つける - pickle, marinade - Verb +漬け物 つけもの - pickle, pickled vegetable - Noun +潰す つぶす - crush, smash - Verb +潰れる つぶれる - crush - Verb +なぜか なぜか - for some reason - Adverb +年賀 ねんが - New Year's card - Noun +賑わう にぎわう - bustle, enliven - Verb +蛇 へび - snake, serpent - Noun +華やか はなやか - gorgeous, colorful - Adjective +挟む はさむ - trap - Verb +塔 とう - tower, pagoda - Noun +にわかに にわかに - rapidly - Adverb +誓う ちかう - vow, swear - Verb +慰める なぐさめる - console, comfort - Verb +朗らか ほがらか - cheerful, bright - Adjective +蝶蝶 ちょうちょう - butterfly - Noun +鳩 はと - pigeon, dove - Noun +ぴたりと ぴたりと - suddenly - Adverb +雛祭 ひなまつり - Doll Festival - Noun +物凄い ものすごい - tremendous - Adjective +喉 のど - the throat - Noun +唾 つば - saliva, spittle - Noun +吠える ほえる - bark, bay - Verb +ぴょんと ぴょんと - jump - Adverb +吊るす つるす - hang - Verb +味噌 みそ - miso, soybean paste - Noun +塞がる ふさがる - close up - Verb +塞ぐ ふさぐ - close, shut - Verb +撫でる なでる - stroke, pat - Verb +卑怯 ひきょう - cowardice, meanness - Adjectival Noun +ひらりと ひらりと - lightly, delicately - Adverb +溜め息 ためいき - sigh - Noun +溜まる たまる - accumulate, store up - Verb +溜める ためる - store, collect - Verb +海苔 のり - laver - Noun +遥か はるか - far, distant - Adjective +もうじき もうじき - soon - Adverb +股 また - crotch, groin - Noun +焚く たく - start a fire - Verb +明瞭 めいりょう - clear, plain - Adjectival Noun +眉 まゆ - eyebrow - Noun +眉毛 まゆげ - eyebrows - Noun +やたらに やたらに - frequently, persistently - Adverb +割り箸 わりばし - disposable chopsticks - Noun +蛋白質 たんぱくしつ - protein - Noun +蜂 はち - bee - Noun +頂戴 ちょうだい - getting, receiving - Verbal Noun +初詣で はつもうで - first shrine visit of the new year - Verbal Noun +詫びる わびる - apologize - Verb +頬 ほお - cheek - Noun +餅 もち - rice cake - Noun +騙す だます - deceive, cheat - Verb +便箋 びんせん - letter paper, stationery - Noun diff --git a/config/mpv/scripts/jaSubs/main.lua b/config/mpv/scripts/jaSubs/main.lua new file mode 100644 index 0000000..360c7a7 --- /dev/null +++ b/config/mpv/scripts/jaSubs/main.lua @@ -0,0 +1,143 @@ +-- v. 2.7 +-- Interactive subtitles for `mpv` for language learners. +-- +-- default keybinding to start/stop: F5 +-- default keybinding to hide/show: F6 +-- if jaSubs start automatically - mpv won't show notification +-- +-- dirs in which jaSubs will start automatically; part of path/filename will also work; case insensitive; regexp +-- autostart_in = {'German', ' ger ', '%.ger%.', 'Deutsch', 'Hebrew'} +autostart_in = {'Japanese'} + +-- for Mac change python3 to python or pythonw +start_command = 'python3 "%s" "%s" "%s"' + +-- recomend to have these in tmpfs, or at least ssd. +sub_file = '/tmp/mpv_sub' +mpv_socket = '/tmp/mpv_socket' + +keybinding = 'F3' +keybinding_hide = 'F6' + +pyname = '~/.config/mpv/scripts/jaSubs/jaSubs.py' + +------------------------------------------------------ + +debug = false +-- debug = true + +if debug == true then + start_command = '' + start_command = 'terminator -e \'python3 "%s" "%s" "%s"; sleep 33\'' +end + +------------------------------------------------------ + +function s1() + if running == true then + s_rm() + return + end + + running = true + mp.msg.warn('Starting jaSubs...') + mp.register_event("end-file", s_rm) + rnbr = math.random(11111111, 99999999) + + if debug == true then + rnbr = '' + end + + mpv_socket_2 = mpv_socket .. '_' .. rnbr + sub_file_2 = sub_file .. '_' .. rnbr + + -- setting up socket to control mpv + mp.set_property("input-ipc-server", mpv_socket_2) + + -- without visible subs won't work + sbv = mp.get_property("sub-visibility") + mp.set_property("sub-visibility", "yes") + mp.set_property("sub-ass-override", "force") + + sub_color1 = mp.get_property("sub-color", "1/1/1/1") + sub_color2 = mp.get_property("sub-border-color", "0/0/0/1") + sub_color3 = mp.get_property("sub-shadow-color", "0/0/0/1") + mp.set_property("sub-color", "0/0/0/0") + mp.set_property("sub-border-color", "0/0/0/0") + mp.set_property("sub-shadow-color", "0/0/0/0") + + start_command_2 = start_command:format(pyname:gsub('~', os.getenv('HOME')), mpv_socket_2, sub_file_2) + os.execute(start_command_2 .. ' &') + + mp.observe_property("sub-text", "string", s2) +end + +function s2(name, value) + if type(value) == "string" then + file = io.open(sub_file_2, "w") + file:write(value) + file:close() + end +end + +function s_rm() + running = false + hidden = false + mp.msg.warn('Quitting jaSubs...') + + mp.set_property("sub-visibility", sbv) + mp.set_property("sub-color", sub_color1) + mp.set_property("sub-border-color", sub_color2) + --~ mp.set_property("sub-shadow-color", sub_color3) + + os.execute('pkill -f "' .. mpv_socket_2 .. '" &') + os.execute('(sleep 3 && rm "' .. mpv_socket_2 .. '") &') + os.execute('(sleep 3 && rm "' .. sub_file_2 .. '") &') +end + +function started() + if mp.get_property("sub") == 'no' then + return true + end + + hidden = false + + for kk, pp in pairs(autostart_in) do + if mp.get_property("path"):lower():find(pp:lower()) or mp.get_property("working-directory"):lower():find(pp:lower()) then + s1() + break + end + end +end + +function s1_1() + if running == true then + s_rm() + mp.command('show-text "Quitting jaSubs..."') + else + if mp.get_property("sub") == 'no' then + mp.command('show-text "Select subtitles before starting jaSubs."') + else + s1() + mp.command('show-text "Starting jaSubs..."') + end + end +end + +function hide_show() + if running == true then + if hidden == true then + os.execute('rm "' .. mpv_socket_2 .. '_hide" &') + mp.osd_message("Showing jaSubs.", .8) + hidden = false + else + os.execute('touch "' .. mpv_socket_2 .. '_hide" &') + mp.osd_message("Hiding jaSubs.", .8) + hidden = true + end + end +end + +mp.add_forced_key_binding(keybinding, "start-stop-jaSubs", s1_1) +mp.add_forced_key_binding(keybinding_hide, "hide-show-jaSubs", hide_show) +mp.register_event("file-loaded", started) diff --git a/config/mpv/scripts/jasubs/config.py b/config/mpv/scripts/jasubs/config.py deleted file mode 100644 index 66bcbf1..0000000 --- a/config/mpv/scripts/jasubs/config.py +++ /dev/null @@ -1,265 +0,0 @@ -#! /usr/bin/env python - -# v. 2.9 -# Interactive subtitles for `mpv` for language learners. - -######################################### -# all *_B variables are boolean -###### - -# make sure selected translation function supports your language and so that codes of your languages are correct -# for instance Pons doesn't support Hebrew, Google and Reverso do, but their codes are different: 'iw' and 'he' respectively -# translate from language -lang_from = 'ja' -# translate to language -lang_to = 'en' - -# dictionaries to use, one or more -# or other function's name you might write that will return ([[word, translation]..], [morphology = '', gender = '']) # available: -# jisho -# google -# tab_divided_dict - simple offline dictionary with word \t translation per line - -# Online Usage: -translation_function_names = ['jisho', 'google'] -# Offline Usage: -#translation_function_names = ['tab_divided_dict'] - -# for automatic switch to Hebrew. Skip if it isn't your language. -translation_function_names_2 = ['google'] - -# deepl/google -translation_function_name_full_sentence = 'google' - -# number of translations in popup -number_of_translations = 4 -# number of translations to save in files for each word; 0 - to save all -number_of_translations_to_save = 50 - -# gtts|pons|forvo # gtts is google-text-to-speech -listen_via = 'gtts' - -# path to the offline dictionary -tab_divided_dict_fname = '~/.config/mpv/scripts/jaSubs/jp.dict' -# strip <.*?> -tab_divided_dict_remove_tags_B = True - -pause_during_translation_B = True -# don't hide subtitle when its time is up and keep it on screen until the next line -extend_subs_duration2max_B = True -# limit extension duration in seconds; N == 0: do not limit -extend_subs_duration_limit_sec = 1 -# show jaSubs only in fullscreen -hide_when_not_fullscreen_B = False - -# interval between checking for the next subtitle; in seconds -update_time = .01 -# interval in seconds between checking if mpv is in focus using `xdotool` and/or in fullscreen; in seconds -focus_checking_time = .2 - -# firefox "https://en.wiktionary.org/wiki/${word}" -show_in_browser = 'echo "${word}" | xclip -selection clipboard' - -# for going through lines step by step -# skip pausing when subs are less then X words -auto_pause_min_words = 10 -# 0 - don't pause -# 1 - pause after subs change -# 2 - pause before subs change -# wheel click on jaSubs cycles through options -auto_pause = 0 - -######################################################### -######################################################### -### LOOKS ### -######################################################### -######################################################### - -# show subtitles at the top of the screen -subs_top_placement_B = False -# distance to the edge; in px -subs_screen_edge_padding = 70 -subs_padding_between_lines = 0 - -# when subtitle consists of only one overly long line - splitting into two -split_long_lines_B = True -# split when there are more than N words in line -split_long_lines_words_min = 8 -# split when there are more than N characters in line -split_long_lines_chars_min = 80 - -# Qt's line wrapping doesn't work well -split_long_lines_in_popup_B = True -# split when there are more than N symbols in given line -split_long_lines_in_popup_symbols_min = 80 - -# ~ http://doc.qt.io/qt-5/stylesheet-reference.html -''' -/* Examples of css: */ - -background: transparent; /* fully transparent */ -background: black; /* black background*/ -background: #ffffff; /* white background*/ -background: rgba(0, 0, 0, 20%); /* semi-opaque black 20% */ -background: rgba(0, 0, 0, 50%); /* semi-opaque black 50% */ -background: rgba(0, 0, 0, 80%); /* semi-opaque black 80% */ -background: rgba(255, 255, 255, 40%); /* semi-opaque white 40% */ -background: rgba(44, 44, 44, 90%); /* semi-opaque dark-grey 90% */ - -/* Font colors: */ -color: white; -color: #BAC4D6; -color: rgb(217, 49, 49); /* red */ -color: rgba(217, 49, 49, 70%); /* semi-opaque red 70% */ - -font-family: "Trebuchet MS"; -font-weight: bold; -font-size: 33px; - -font: bold italic large "Times New Roman" 34px; - - font-family: "FiraGO"; - font-family: "Trebuchet MS"; - font-family: "American Typewriter"; -''' - -# CSS styles for subtitles -style_subs = ''' - /* looks of subtitles */ - QFrame { - background: transparent; - color: white; - color: #FFF0CD; - - font-family: "American Typewriter"; - /* font-weight: bold; */ - font-size: 40px; - } -''' - -# CSS styles for translations(popup) -style_popup = ''' - /* main */ - QFrame { - background: rgb(21, 22, 25); - - font-family: "Trebuchet MS"; - font-weight: regular; - font-size: 32px; - } - /* original language */ - QLabel#first_line { - color: #DCDCCC; - } - - /* original language - underlining exact word */ - QLabel#first_line_emphasize_word { - color: #DCDCCC; - text-decoration: underline; - } - - /* translation */ - QLabel#second_line { - color: #8B8F88; - } - - /* colorizing morphology */ - [morphology=""] { color: #e86969; } - [morphology="m"] { color: #5EB0FF; } - [morphology="f"] { color: #E34840; } - [morphology="nt"] { color: #8BC34A; } - - /* delimiter between dictionaries */ - QFrame#delimiter { - background: #8B8F88; - font-size: 4px; /* emulating thickness */ - } -''' - -# for subtitles to be visible on background with similar color -# might look ugly with some fonts -outline_B = True -outline_color = '#000000' -# ~ N/2.5 == size in px; here it's 2px of outline + another ~ 3px of blur -outline_thickness = 5 -outline_blur = 7 -# change if outline is cropped from top/bottom of some letters depending on font -# in px; can take negative values -outline_top_padding = -2 -outline_bottom_padding = 2 - -# highlighting the word under cursor -hover_color = '#F44336' -hover_hightlight = True # may look ugly due to only int precision of QFontMetrics -hover_underline = False -hover_underline_thickness = 5 - -######################################################### -######################################################### -### reassigning mouse buttons ### -######################################################### -######################################################### - -# functions' names are self-explanatory -# ['mouse_event', 'modifier_key', 'self_explanatory_function_name'], - -# to one button multiple functions can be assigned -# by left-click this will open word in browser and save it to file. -# ['LeftButton', 'NoModifier', 'f_show_in_browser'], -# ['LeftButton', 'NoModifier', 'f_save_word_to_file'], - -# https://doc.qt.io/qt-5/qt.html#MouseButton-enum -# mouse_event: - # LeftButton - # RightButton - # MiddleButton (wheel-click) - # BackButton (Typically present on the 'thumb' side of a mouse with extra buttons. This is NOT the tilt wheel.) - # ForwardButton - - # wheel scroll up/down left/right names' are arbitrary and not from Qt - # ScrollUp - # ScrollDown - # ScrollLeft (This is the tilt wheel.) - # ScrollRight - -# Note: On macOS, the ControlModifier value corresponds to the Command keys on the keyboard. -# https://doc.qt.io/qt-5/qt.html#KeyboardModifier-enum -# modifier_key: - # NoModifier - # ControlModifier - # ShiftModifier - # AltModifier - -# self_explanatory_function_name: - # f_show_in_browser - # f_auto_pause_options - # f_listen - # f_scroll_translations_down - # f_scroll_translations_up - # f_subs_screen_edge_padding_decrease - # f_subs_screen_edge_padding_increase - # f_font_size_decrease - # f_font_size_increase - # f_auto_pause_min_words_decrease - # f_auto_pause_min_words_increase - # f_translation_full_sentence - # f_save_word_to_file - # f_deepl_translation < obsolete, changed into f_translation_full_sentence - -mouse_buttons = [ - ['LeftButton', 'NoModifier', 'f_show_in_browser'], - ['RightButton', 'NoModifier', 'f_copy_reading'], - ['MiddleButton', 'NoModifier', 'f_auto_pause_options'], - - ['ScrollDown', 'ControlModifier', 'f_font_size_decrease'], - ['ScrollUp', 'ControlModifier', 'f_font_size_increase'], - - # ['ScrollLeft', 'NoModifier', 'f_auto_pause_min_words_decrease'], - # ['ScrollRight', 'NoModifier', 'f_auto_pause_min_words_increase'], - - ['ScrollDown', 'ShiftModifier', 'f_subs_screen_edge_padding_decrease'], - ['ScrollUp', 'ShiftModifier', 'f_subs_screen_edge_padding_increase'], -] - -# obsolete vars -hover_underline_width = hover_underline_thickness diff --git a/config/mpv/scripts/jasubs/jaSubs.py b/config/mpv/scripts/jasubs/jaSubs.py deleted file mode 100644 index 809abdf..0000000 --- a/config/mpv/scripts/jasubs/jaSubs.py +++ /dev/null @@ -1,1069 +0,0 @@ -#! /usr/bin/env python - -# v. 2.10 -# Interactive subtitles for `mpv` for language learners. - -import os, subprocess, sys -import random, re, time -import requests -import threading, queue -import calendar, math, base64 -import numpy -import ast - -from urllib.parse import quote -from json import loads -from json.decoder import JSONDecodeError - -import warnings -from six.moves import urllib - -from PyQt5.QtCore import Qt, QThread, QObject, pyqtSignal, pyqtSlot, QSize, QEvent -from PyQt5.QtWidgets import QApplication, QFrame, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy, QWidget -from PyQt5.QtGui import QPalette, QPaintEvent, QPainter, QPainterPath, QFont, QFontMetrics, QColor, QPen, QBrush - -# Import Japanese tokinizer -from sudachipy import tokenizer -from sudachipy import dictionary -tokenizer_obj = dictionary.Dictionary(dict="full").create(tokenizer.Tokenizer.SplitMode.C) - -form = 0 -was_paused = 0 -tthread = 0 -app = 0 -current_text = '' - -pth = os.path.expanduser('~/.config/mpv/scripts/') -os.chdir(pth) -import config as config - -def katakana_to_hiragana(text): - return "".join(chr(ord(c) - 0x60) if "ァ" <= c <= "ン" else c for c in text) - -# returns ([[word: reading, translation]..], [morphology = '', gender = '']) -# jisho.org -def jisho(word): - DOMAIN = 'jisho.org' - VERSION = '1' - - base_url = f'https://{DOMAIN}/api/v{VERSION}' - - def get(url, params=None): - if params is None: - params = {} - - response = requests.get( - url, - params=params, - ) - - json = response.json() - if response.status_code != 200: - raise APIException(response.status_code, - response.content.decode()) - - try: - word = json['data'][0]['japanese'][0]['word'] + ': ' + json['data'][0]['japanese'][0]['reading'] - reading = json['data'][0]['japanese'][0]['reading'] - translations = json['data'][0]['senses'][0]['english_definitions'] - pairs = [[word, '']] - for definition in translations: - pairs.append(['', definition]) - - return pairs, [reading, ''] - except: - return [['No translation Found', ''], ['', '']] - - def search(keyword): - url = f'{base_url}/search/words' - params = {'keyword': keyword} if keyword else {} - return get(url, params=params) - - return search(word) - - -# offline dictionary with word \t translation -def tab_divided_dict(word): - if word in offdict: - tr = re.sub('<.*?>', '', offdict[word]) if config.tab_divided_dict_remove_tags_B else offdict[word] - tr = tr.replace('\\n', '\n').replace('\\~', '~') - return [[tr, '-']], ['', ''] - else: - return [], ['', ''] - -# Google -# https://github.com/Saravananslb/py-googletranslation -class TokenAcquirer: - """Google Translate API token generator - - translate.google.com uses a token to authorize the requests. If you are - not Google, you do have this token and will have to pay for use. - This class is the result of reverse engineering on the obfuscated and - minified code used by Google to generate such token. - - The token is based on a seed which is updated once per hour and on the - text that will be translated. - Both are combined - by some strange math - in order to generate a final - token (e.g. 464393.115905) which is used by the API to validate the - request. - - This operation will cause an additional request to get an initial - token from translate.google.com. - - Example usage: - >>> from pygoogletranslation.gauthtoken import TokenAcquirer - >>> acquirer = TokenAcquirer() - >>> text = 'test' - >>> tk = acquirer.do(text) - >>> tk - 464393.115905 - """ - - def __init__(self, tkk='0', tkk_url='https://translate.google.com/translate_a/element.js', proxies=None): - - if proxies is not None: - self.proxies = proxies - else: - self.proxies = None - - r = requests.get(tkk_url, proxies=self.proxies) - - if r.status_code == 200: - re_tkk = re.search("(?<=tkk=\\')[0-9.]{0,}", str(r.content.decode("utf-8"))) - if re_tkk: - self.tkk = re_tkk.group(0) - else: - self.tkk = '0' - else: - self.tkk = '0' - - - def _xr(self, a, b): - size_b = len(b) - c = 0 - while c < size_b - 2: - d = b[c + 2] - d = ord(d[0]) - 87 if 'a' <= d else int(d) - d = self.rshift(a, d) if '+' == b[c + 1] else a << d - a = a + d & 4294967295 if '+' == b[c] else a ^ d - - c += 3 - return a - - def acquire(self, text): - a = [] - # Convert text to ints - for i in text: - val = ord(i) - if val < 0x10000: - a += [val] - else: - # Python doesn't natively use Unicode surrogates, so account for those - a += [ - math.floor((val - 0x10000) / 0x400 + 0xD800), - math.floor((val - 0x10000) % 0x400 + 0xDC00) - ] - - b = self.tkk - d = b.split('.') - b = int(d[0]) if len(d) > 1 else 0 - - # assume e means char code array - e = [] - g = 0 - size = len(a) - while g < size: - l = a[g] - # just append if l is less than 128(ascii: DEL) - if l < 128: - e.append(l) - # append calculated value if l is less than 2048 - else: - if l < 2048: - e.append(l >> 6 | 192) - else: - # append calculated value if l matches special condition - if (l & 64512) == 55296 and g + 1 < size and \ - a[g + 1] & 64512 == 56320: - g += 1 - l = 65536 + ((l & 1023) << 10) + (a[g] & 1023) # This bracket is important - e.append(l >> 18 | 240) - e.append(l >> 12 & 63 | 128) - else: - e.append(l >> 12 | 224) - e.append(l >> 6 & 63 | 128) - e.append(l & 63 | 128) - g += 1 - a = b - for i, value in enumerate(e): - a += value - a = self._xr(a, '+-a^+6') - a = self._xr(a, '+-3^+b+-f') - a ^= int(d[1]) if len(d) > 1 else 0 - if a < 0: # pragma: nocover - a = (a & 2147483647) + 2147483648 - a %= 1000000 # int(1E6) - return '{}.{}'.format(a, a ^ b) - - def do(self, text): - tk = self.acquire(text) - return tk - - - def rshift(self, val, n): - """python port for '>>>'(right shift with padding) - """ - return (val % 0x100000000) >> n - -# translate.google.com -def google(word): - word = word.replace('\n', ' ').strip() - url = 'https://translate.google.com/translate_a/single?client=t&sl={lang_from}&tl={lang_to}&hl={lang_to}&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=1&pc=1&ssel=3&tsel=3&kc=2&q={word}'.format(lang_from = config.lang_from, lang_to = config.lang_to, word = quote(word)) - - pairs = [] - fname = 'urls/' + url.replace('/', "-") - try: - if ' ' in word: - raise Exception('skip saving') - - p = open(fname).read().split('=====/////-----') - try: - word_descr = p[1].strip() - except: - word_descr = '' - - for pi in p[0].strip().split('\n\n'): - pi = pi.split('\n') - pairs.append([pi[0], pi[1]]) - except: - acquirer = TokenAcquirer() - tk = acquirer.do(word) - - url = '{url}&tk={tk}'.format(url = url, tk = tk) - p = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36'}).text - p = loads(p) - - try: - pairs.append([p[0][0][0], p[0][0][1]]) - except: - pass - - if p[1] != None: - for translations in p[1]: - for translation in translations[2]: - try: - t1 = translation[5] + ' ' + translation[0] - except: - t1 = translation[0] - - t2 = ', '.join(translation[1]) - - if not len(t1): - t1 = '-' - if not len(t2): - t2 = '-' - - pairs.append([t1, t2]) - - word_descr = '' - - return pairs, ['', ''] - -def pause_on_popup(): - global was_paused - if mpv_pause_status(): - was_paused = 1 - mpv_pause() - -def resume_on_popup(): - global was_paused - if not was_paused: - mpv_resume() - was_paused = 0 - -def mpv_pause(): - os.system('echo \'{ "command": ["set_property", "pause", true] }\' | socat - "' + mpv_socket + '" > /dev/null') - -def mpv_resume(): - os.system('echo \'{ "command": ["set_property", "pause", false] }\' | socat - "' + mpv_socket + '" > /dev/null') - -def mpv_pause_status(): - stdoutdata = subprocess.getoutput('echo \'{ "command": ["get_property", "pause"] }\' | socat - "' + mpv_socket + '"') - - try: - return loads(stdoutdata)['data'] - except: - return mpv_pause_status() - -def mpv_fullscreen_status(): - stdoutdata = subprocess.getoutput('echo \'{ "command": ["get_property", "fullscreen"] }\' | socat - "' + mpv_socket + '"') - - try: - return loads(stdoutdata)['data'] - except: - return mpv_fullscreen_status() - -def mpv_message(message, timeout = 3000): - os.system('echo \'{ "command": ["show-text", "' + message + '", "' + str(timeout) + '"] }\' | socat - "' + mpv_socket + '" > /dev/null') - -def stripsd2(phrase): - return ''.join(e for e in phrase.strip().lower() if e == ' ' or (e.isalnum() and not e.isdigit())).strip() - -def r2l(l): - l2 = '' - - try: - l2 = re.findall('(?!%)\W+$', l)[0][::-1] - except: - pass - - l2 += re.sub('^\W+|(?!%)\W+$', '', l) - - try: - l2 += re.findall('^\W+', l)[0][::-1] - except: - pass - - return l2 - -def split_long_lines(line, chunks = 2, max_symbols_per_line = False): - if max_symbols_per_line: - chunks = 0 - while 1: - chunks += 1 - new_lines = [] - for i in range(chunks): - new_line = ' '.join(numpy.array_split(line.split(' '), chunks)[i]) - new_lines.append(new_line) - - if len(max(new_lines, key = len)) <= max_symbols_per_line: - return '\n'.join(new_lines) - else: - new_lines = [] - for i in range(chunks): - new_line = ' '.join(numpy.array_split(line.split(' '), chunks)[i]) - new_lines.append(new_line) - - return '\n'.join(new_lines) - -def dir2(name): - print('\n'.join(dir( name ))) - exit() - -class thread_subtitles(QObject): - update_subtitles = pyqtSignal(bool, bool) - update_screen_sig = pyqtSignal() - - @pyqtSlot() - def main(self): - global subs - - was_hidden = 0 - inc = 0 - auto_pause_2_ind = 0 - last_updated = time.time() - - while 1: - time.sleep(config.update_time) - # hide subs when mpv isn't in focus or in fullscreen - if inc * config.update_time > config.focus_checking_time - 0.0001: - process_output = subprocess.getoutput('xdotool getwindowfocus getwindowname') - # "Add" - anki add card dialog - while ( (process_output != 'Add') and 'mpv' not in process_output ) or (config.hide_when_not_fullscreen_B and not mpv_fullscreen_status()) or (os.path.exists(mpv_socket + '_hide')): - if not was_hidden: - self.update_subtitles.emit(True, False) - was_hidden = 1 - else: - time.sleep(config.focus_checking_time) - process_output = subprocess.getoutput('xdotool getwindowfocus getwindowname') - inc = 0 - self.update_screen_sig.emit() - inc += 1 - - if was_hidden: - was_hidden = 0 - self.update_subtitles.emit(False, False) - continue - - try: - tmp_file_subs = open(sub_file).read() - except: - continue - - if config.extend_subs_duration2max_B and not len(tmp_file_subs): - if not config.extend_subs_duration_limit_sec: - continue - if config.extend_subs_duration_limit_sec > time.time() - last_updated: - continue - - last_updated = time.time() - - while tmp_file_subs != subs: - if config.auto_pause == 2: - if not auto_pause_2_ind and len(re.sub(' +', ' ', stripsd2(subs.replace('\n', ' '))).split(' ')) > config.auto_pause_min_words - 1 and not mpv_pause_status(): - mpv_pause() - auto_pause_2_ind = 1 - - if auto_pause_2_ind and mpv_pause_status(): - break - - auto_pause_2_ind = 0 - - subs = tmp_file_subs - if config.auto_pause == 1: - if len(re.sub(' +', ' ', stripsd2(subs.replace('\n', ' '))).split(' ')) > config.auto_pause_min_words - 1: - mpv_pause() - - self.update_subtitles.emit(False, False) - -class thread_translations(QObject): - get_translations = pyqtSignal(str, int, bool) - - @pyqtSlot() - def main(self): - while 1: - to_new_word = False - - try: - word, globalX = config.queue_to_translate.get(False) - except: - time.sleep(config.update_time) - continue - - # changing cursor to hourglass during translation - QApplication.setOverrideCursor(Qt.WaitCursor) - - threads = [] - for translation_function_name in config.translation_function_names: - threads.append(threading.Thread(target = globals()[translation_function_name], args = (word,))) - for x in threads: - x.start() - while any(thread.is_alive() for thread in threads): - if config.queue_to_translate.qsize(): - to_new_word = True - break - time.sleep(config.update_time) - - QApplication.restoreOverrideCursor() - - if to_new_word: - continue - - if config.block_popup: - continue - - self.get_translations.emit(word, globalX, False) - -# drawing layer -# because can't calculate outline with precision -class drawing_layer(QLabel): - def __init__(self, line, subs, parent=None): - super().__init__(None) - self.line = line - self.setStyleSheet(config.style_subs) - self.psuedo_line = 0 - - def draw_text_n_outline(self, painter: QPainter, x, y, outline_width, outline_blur, text): - outline_color = QColor(config.outline_color) - - font = self.font() - text_path = QPainterPath() - text_path.addText(x, y, font, text) - - # draw blur - range_width = range(outline_width, outline_width + outline_blur) - # ~range_width = range(outline_width + outline_blur, outline_width, -1) - - for width in range_width: - if width == min(range_width): - alpha = 200 - else: - alpha = (max(range_width) - width) / max(range_width) * 200 - alpha = int(alpha) - - blur_color = QColor(outline_color.red(), outline_color.green(), outline_color.blue(), alpha) - blur_brush = QBrush(blur_color, Qt.SolidPattern) - blur_pen = QPen(blur_brush, width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) - - painter.setPen(blur_pen) - painter.drawPath(text_path) - - # draw outline - outline_color = QColor(outline_color.red(), outline_color.green(), outline_color.blue(), 255) - outline_brush = QBrush(outline_color, Qt.SolidPattern) - outline_pen = QPen(outline_brush, outline_width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) - - painter.setPen(outline_pen) - painter.drawPath(text_path) - - # draw text - color = self.palette().color(QPalette.Text) - painter.setPen(color) - painter.drawText(x, y, text) - - if config.outline_B: - def paintEvent(self, evt: QPaintEvent): - if not self.psuedo_line: - self.psuedo_line = 1 - return - - x = y = 0 - y += self.fontMetrics().ascent() - painter = QPainter(self) - - self.draw_text_n_outline( - painter, - x, - y + config.outline_top_padding - config.outline_bottom_padding, - config.outline_thickness, - config.outline_blur, - text = self.line - ) - - def resizeEvent(self, *args): - self.setFixedSize( - self.fontMetrics().width(self.line), - self.fontMetrics().height() + - config.outline_bottom_padding + - config.outline_top_padding - ) - - def sizeHint(self): - return QSize( - self.fontMetrics().width(self.line), - self.fontMetrics().height() - ) - -class events_class(QLabel): - mouseHover = pyqtSignal(str, int, bool) - redraw = pyqtSignal(bool, bool) - - def __init__(self, word, subs, skip = False, parent=None, reading=None): - super().__init__(word) - self.setMouseTracking(True) - self.word = word - self.subs = subs - self.skip = skip - if reading is not None: - self.reading = reading - else: - self.reading = "" - self.highlight = False - - self.setStyleSheet('background: transparent; color: transparent;') - - def highligting(self, color, underline_width): - color = QColor(color) - color = QColor(color.red(), color.green(), color.blue(), 200) - painter = QPainter(self) - - if config.hover_underline: - font_metrics = QFontMetrics(self.font()) - text_width = font_metrics.width(self.word) - text_height = font_metrics.height() - - brush = QBrush(color) - pen = QPen(brush, underline_width, Qt.SolidLine, Qt.RoundCap) - painter.setPen(pen) - if not self.skip: - painter.drawLine(0, text_height - underline_width, text_width, text_height - underline_width) - - if config.hover_hightlight: - x = y = 0 - y += self.fontMetrics().ascent() - - painter.setPen(color) - painter.drawText(x, y + config.outline_top_padding - config.outline_bottom_padding, self.word) - - if config.outline_B: - def paintEvent(self, evt: QPaintEvent): - if self.highlight: - self.highligting(config.hover_color, config.hover_underline_thickness) - - ##################################################### - - def resizeEvent(self, event): - text_height = self.fontMetrics().height() - text_width = self.fontMetrics().width(self.word) - - self.setFixedSize(text_width, text_height + config.outline_bottom_padding + config.outline_top_padding) - - def enterEvent(self, event): - if not self.skip: - self.highlight = True - self.repaint() - config.queue_to_translate.put((self.word, event.globalX())) - - @pyqtSlot() - def leaveEvent(self, event): - if not self.skip: - self.highlight = False - self.repaint() - - config.scroll = {} - self.mouseHover.emit('', 0, False) - QApplication.restoreOverrideCursor() - - def wheel_scrolling(self, event): - if event.y() > 0: - return 'ScrollUp' - if event.y(): - return 'ScrollDown' - if event.x() > 0: - return 'ScrollLeft' - if event.x(): - return 'ScrollRight' - - def wheelEvent(self, event): - for mouse_action in config.mouse_buttons: - if self.wheel_scrolling(event.angleDelta()) == mouse_action[0]: - if event.modifiers() == eval('Qt.%s' % mouse_action[1]): - exec('self.%s(event)' % mouse_action[2]) - - def mousePressEvent(self, event): - for mouse_action in config.mouse_buttons: - if 'Scroll' not in mouse_action[0]: - if event.button() == eval('Qt.%s' % mouse_action[0]): - if event.modifiers() == eval('Qt.%s' % mouse_action[1]): - exec('self.%s(event)' % mouse_action[2]) - - ##################################################### - - def f_show_in_browser(self, event): - config.avoid_resuming = True - os.system(config.show_in_browser.replace('${word}', self.word)) - - def f_copy_reading(self, event): - os.system('echo "' + self.reading + '" | xclip -selection clipboard') - - def f_auto_pause_options(self, event): - if config.auto_pause == 2: - config.auto_pause = 0 - else: - config.auto_pause += 1 - mpv_message('auto_pause: %d' % config.auto_pause) - - @pyqtSlot() - def f_subs_screen_edge_padding_decrease(self, event): - config.subs_screen_edge_padding -= 5 - mpv_message('subs_screen_edge_padding: %d' % config.subs_screen_edge_padding) - self.redraw.emit(False, True) - - @pyqtSlot() - def f_subs_screen_edge_padding_increase(self, event): - config.subs_screen_edge_padding += 5 - mpv_message('subs_screen_edge_padding: %d' % config.subs_screen_edge_padding) - self.redraw.emit(False, True) - - @pyqtSlot() - def f_font_size_decrease(self, event): - config.style_subs = re.sub('font-size: (\d+)px;', lambda size: [ 'font-size: %dpx;' % ( int(size.group(1)) - 1 ), mpv_message('font: %s' % size.group(1)) ][0], config.style_subs, flags = re.I) - self.redraw.emit(False, True) - - @pyqtSlot() - def f_font_size_increase(self, event): - config.style_subs = re.sub('font-size: (\d+)px;', lambda size: [ 'font-size: %dpx;' % ( int(size.group(1)) + 1 ), mpv_message('font: %s' % size.group(1)) ][0], config.style_subs, flags = re.I) - self.redraw.emit(False, True) - - @pyqtSlot() - def f_translation_full_sentence(self, event): - self.mouseHover.emit(self.subs , event.globalX(), True) - - def f_auto_pause_min_words_decrease(self, event): - config.auto_pause_min_words -= 1 - mpv_message('auto_pause_min_words: %d' % config.auto_pause_min_words) - - def f_auto_pause_min_words_increase(self, event): - config.auto_pause_min_words += 1 - mpv_message('auto_pause_min_words: %d' % config.auto_pause_min_words) - - -class main_class(QWidget): - class PopupThread(QThread): - def setPopup(self, popup): - self.popup = popup - def run(self): - self.popup.show() - - def __init__(self): - super().__init__() - - self.thread_subs = QThread() - self.obj = thread_subtitles() - self.obj.update_subtitles.connect(self.render_subtitles) - self.obj.update_screen_sig.connect(update_screen) - self.obj.moveToThread(self.thread_subs) - self.thread_subs.started.connect(self.obj.main) - self.thread_subs.start() - - self.thread_translations = QThread() - self.obj2 = thread_translations() - self.obj2.get_translations.connect(self.render_popup) - self.obj2.moveToThread(self.thread_translations) - self.thread_translations.started.connect(self.obj2.main) - self.thread_translations.start() - - # start the forms - self.subtitles_base() - self.subtitles_base2() - self.popup_base() - - def clearLayout(self, layout): - if layout == 'subs': - layout = self.subtitles_vbox - self.subtitles.hide() - elif layout == 'subs2': - layout = self.subtitles_vbox2 - self.subtitles2.hide() - elif layout == 'popup': - layout = self.popup_vbox - self.popup.hide() - - if layout is not None: - while layout.count(): - item = layout.takeAt(0) - widget = item.widget() - - if widget is not None: - widget.deleteLater() - else: - self.clearLayout(item.layout()) - - def subtitles_base(self): - self.subtitles = QFrame() - self.subtitles.setAttribute(Qt.WA_TranslucentBackground) - self.subtitles.setWindowFlags(Qt.X11BypassWindowManagerHint) - self.subtitles.setStyleSheet(config.style_subs) - - self.subtitles_vbox = QVBoxLayout(self.subtitles) - self.subtitles_vbox.setSpacing(config.subs_padding_between_lines) - self.subtitles_vbox.setContentsMargins(0, 0, 0, 0) - - def subtitles_base2(self): - self.subtitles2 = QFrame() - self.subtitles2.setAttribute(Qt.WA_TranslucentBackground) - self.subtitles2.setWindowFlags(Qt.X11BypassWindowManagerHint) - self.subtitles2.setStyleSheet(config.style_subs) - - self.subtitles_vbox2 = QVBoxLayout(self.subtitles2) - self.subtitles_vbox2.setSpacing(config.subs_padding_between_lines) - self.subtitles_vbox2.setContentsMargins(0, 0, 0, 0) - - if config.pause_during_translation_B: - self.subtitles2.enterEvent = lambda event : [pause_on_popup(), setattr(config, 'block_popup', False)][0] - self.subtitles2.leaveEvent = lambda event : [resume_on_popup(), setattr(config, 'block_popup', True)][0] if not config.avoid_resuming else [setattr(config, 'avoid_resuming', False), setattr(config, 'block_popup', True)][0] - - def popup_base(self): - self.popup = QFrame() - self.popup.setWindowFlags(Qt.X11BypassWindowManagerHint) - self.popup.setStyleSheet(config.style_popup) - - self.popup_inner = QFrame() - outer_box = QVBoxLayout(self.popup) - outer_box.addWidget(self.popup_inner) - - self.popup_vbox = QVBoxLayout(self.popup_inner) - self.popup_vbox.setSpacing(0) - - def render_subtitles(self, hide = False, redraw = False): - if hide or not len(subs): - try: - self.subtitles.hide() - self.subtitles2.hide() - finally: - return - - if redraw: - self.subtitles.setStyleSheet(config.style_subs) - self.subtitles2.setStyleSheet(config.style_subs) - else: - self.clearLayout('subs') - self.clearLayout('subs2') - - if hasattr(self, 'popup'): - self.popup.hide() - - # if subtitle consists of one overly long line - split into two - if config.split_long_lines_B and len(subs.split('\n')) == 1 and len(subs.split(' ')) > config.split_long_lines_words_min - 1: - subs2 = split_long_lines(subs) - elif config.split_long_lines_B and len(subs) > config.split_long_lines_chars_min - 1: - subs2 = split_long_lines(subs, config.split_long_lines_chars_min) - else: - subs2 = subs - - subs2 = re.sub(' +', ' ', subs2).strip() - - ############################## - - for line in subs2.split('\n'): - line2 = ' %s ' % line.strip() - ll = drawing_layer(line2, subs2) - - hbox = QHBoxLayout() - hbox.setContentsMargins(0, 0, 0, 0) - hbox.setSpacing(0) - hbox.addStretch() - hbox.addWidget(ll) - hbox.addStretch() - self.subtitles_vbox.addLayout(hbox) - - #################################### - - hbox = QHBoxLayout() - hbox.setContentsMargins(0, 0, 0, 0) - hbox.setSpacing(0) - hbox.addStretch() - - line2 += '\00' - - # Japanese Fix - mode = tokenizer.Tokenizer.SplitMode.C - tokens = tokenizer_obj.tokenize(line2, mode) - line2 = [m.surface() for m in tokens] - readings = [m.reading_form() for m in tokens] - - for i in range(len(line2)): - smbl = line2[i] - word = smbl - if smbl.isalpha(): - ll = events_class(word, subs2, reading=katakana_to_hiragana(readings[i])) - ll.mouseHover.connect(self.render_popup) - ll.redraw.connect(self.render_subtitles) - - hbox.addWidget(ll) - else: - ll = events_class(smbl, subs2, skip = True) - hbox.addWidget(ll) - - hbox.addStretch() - self.subtitles_vbox2.addLayout(hbox) - - self.subtitles.adjustSize() - self.subtitles2.adjustSize() - - w = self.subtitles.geometry().width() - h = self.subtitles.height = self.subtitles.geometry().height() - - x = (config.screen_width/2) - (w/2) + config.screen_start - - if config.subs_top_placement_B: - y = config.subs_screen_edge_padding - else: - y = config.screen_height - config.subs_screen_edge_padding - h - - self.subtitles.setGeometry(int(x), int(y), 0, 0) - self.subtitles.show() - - self.subtitles2.setGeometry(int(x), int(y), 0, 0) - self.subtitles2.show() - - - class TranslationThread(QThread): - translation_done = pyqtSignal(str, bool, list) - - def __init__(self, text, is_line, parent=None): - super().__init__(parent) - self.text = text - self.is_line = is_line - - def run(self): - if self.is_line: - line = globals()[config.translation_function_name_full_sentence](self.text) - if config.translation_function_name_full_sentence == 'google': - try: - line = line[0][0][0].strip() - except: - line = 'Google translation failed.' - if config.split_long_lines_B and len(line.split('\n')) == 1 and len(line.split(' ')) > config.split_long_lines_words_min - 1: - line = split_long_lines(line) - self.translation_done.emit(line, True, []) - else: - word = self.text - translations = [] - for translation_function_name in config.translation_function_names: - pairs, word_descr = globals()[translation_function_name](word) - if not pairs: - pairs = [['', '[Not found]']] - translations.append((pairs, word_descr)) - self.translation_done.emit(word, False, translations) - - def render_popup(self, text, x_cursor_pos, is_line): - global tthread - global app - global current_text - if len(current_text) and text == current_text and hasattr(self, 'popup') and self.popup.isVisible(): - return - if text == '': - if hasattr(self, 'popup'): - self.popup.hide() - return - - current_text = text - QApplication.setOverrideCursor(Qt.WaitCursor) - - def update_popup(result, is_line, data): - self.clearLayout('popup') - word = text - if is_line: - ll = QLabel(result) - ll.setObjectName("first_line") - self.popup_vbox.addWidget(ll) - else: - for translation_function_name_i, (pairs, word_descr) in enumerate(data): - for i1, pair in enumerate(pairs[:config.number_of_translations]): - if type(pair) == type(''): - continue - if config.split_long_lines_in_popup_B: - pair[0] = split_long_lines(pair[0], max_symbols_per_line = config.split_long_lines_in_popup_symbols_min) - pair[1] = split_long_lines(pair[1], max_symbols_per_line = config.split_long_lines_in_popup_symbols_min) - - if pair[0] == '-': - pair[0] = '' - if pair[1] == '-': - pair[1] = '' - - if pair[0] != '': - # to emphasize the exact form of the word - # to ignore case on input and match it on output - chnks = re.split(word, pair[0], flags = re.I) - exct_words = re.findall(word, pair[0], flags = re.I) - - hbox = QHBoxLayout() - hbox.setContentsMargins(0, 0, 0, 0) - - for i2, chnk in enumerate(chnks): - if len(chnk): - ll = QLabel(chnk) - ll.setObjectName("first_line") - hbox.addWidget(ll) - if i2 + 1 < len(chnks): - ll = QLabel(exct_words[i2]) - ll.setObjectName("first_line_emphasize_word") - hbox.addWidget(ll) - - # filling the rest of the line with empty bg - ll = QLabel() - ll.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) - hbox.addWidget(ll) - - self.popup_vbox.addLayout(hbox) - - if pair[1] != '': - ll = QLabel(pair[1]) - ll.setObjectName("second_line") - self.popup_vbox.addWidget(ll) - - # padding - ll = QLabel() - ll.setStyleSheet("font-size: 6px;") - self.popup_vbox.addWidget(ll) - - if len(word_descr[0]): - ll = QLabel(word_descr[0]) - ll.setProperty("morphology", word_descr[1]) - ll.setAlignment(Qt.AlignRight) - self.popup_vbox.addWidget(ll) - - # delimiter between dictionaries - if translation_function_name_i + 1 < len(config.translation_function_names): - ll = QLabel() - ll.setObjectName("delimiter") - self.popup_vbox.addWidget(ll) - - app.sendPostedEvents() - - self.popup_inner.adjustSize() - self.popup.adjustSize() - - w = self.popup.geometry().width() - h = self.popup.geometry().height() - - if w > config.screen_width: - w = config.screen_width - 20 - - if x_cursor_pos == -1: - x = config.screen_start + (config.screen_width/2) - (w/2) - else: - x = x_cursor_pos - w/2 - if x+w - config.screen_start > config.screen_width: - x = config.screen_start + config.screen_width - w - - if config.subs_top_placement_B: - y = self.subtitles.height + config.subs_screen_edge_padding - else: - y = config.screen_height - config.subs_screen_edge_padding - self.subtitles.height - h - 20 - - self.popup.setGeometry(int(x), int(y), int(w), int(0)) - # without this the window flickers for a split second over the subtitles - # causing it to get stuck in a loop of opening and closing the popup - app.sendPostedEvents() - self.popup.show() - QApplication.restoreOverrideCursor() - - - tthread = self.TranslationThread(text, is_line) - tthread.translation_done.connect(update_popup) - tthread.start() - -def update_screen(): - if not mpv_fullscreen_status(): - mpv_id = subprocess.getoutput('xdotool search --class mpv') - process_output = subprocess.getoutput('xdotool getwindowgeometry ' + mpv_id) - if 'invalid' in process_output: - return - pos = re.search(r"Position:\s*(\d+),(\d+)", process_output) - size = re.search(r"Geometry:\s*(\d+)x(\d+)", process_output) - x = 0 - y = 0 - if pos: - x, y = map(int, pos.groups()) - if size: - w, h = map(int, size.groups()) - - if 'x' in locals(): - config.screen_start = x - elif not config.screen_start: - config.screen_start = 0; - if 'y' in locals() and 'h' in locals(): - config.screen_height = y + h - elif not config.screen_height: - config.screen_height = app.primaryScreen().geometry().height() - if 'w' in locals(): - config.screen_width = w - elif not config.screen_width: - config.screen_width = app.primaryScreen().geometry().width() - else: - config.screen_start = app.primaryScreen().geometry().topLeft().x() - config.screen_width = app.primaryScreen().size().width() - config.screen_height = app.primaryScreen().size().height() - - form.obj.update_subtitles.emit(False, True) - -if __name__ == "__main__": - print('[py part] Starting jaSubs ...') - - try: - os.mkdir('urls') - except: - pass - - if 'tab_divided_dict' in config.translation_function_names: - offdict = { x.split('\t')[0].strip().lower() : x.split('\t')[1].strip() for x in open(os.path.expanduser(config.tab_divided_dict_fname)).readlines() if '\t' in x } - - mpv_socket = sys.argv[1] - sub_file = sys.argv[2] - # sub_file = '/tmp/mpv_sub_' - # mpv_socket = '/tmp/mpv_socket_' - - subs = '' - - app = QApplication(sys.argv) - - config.avoid_resuming = False - config.block_popup = False - config.scroll = {} - config.queue_to_translate = queue.Queue() - - form = main_class() - update_screen() - app.exec_() diff --git a/config/mpv/scripts/jasubs/jp.dict b/config/mpv/scripts/jasubs/jp.dict deleted file mode 100644 index 55e162b..0000000 --- a/config/mpv/scripts/jasubs/jp.dict +++ /dev/null @@ -1,6011 +0,0 @@ -それ それ - that, that one - Pronoun -一つ ひとつ - one (thing) - Noun -一 いち - one - Noun -二 に - two - Noun -二つ ふたつ - two (things) - Noun -三 さん - three - Noun -三つ みっつ - three (things) - Noun -四つ よっつ - four (things) - Noun -四 し - four - Noun -これ これ - this, this one - Noun -四 よん - four - Noun -五つ いつつ - five (things) - Noun -五 ご - five - Noun -六つ むっつ - six (things) - Noun -六 ろく - six - Noun -七 なな - seven - Noun -七つ ななつ - seven (things) - Noun -八 はち - eight - Noun -八つ やっつ - eight (things) - Noun -なる なる - become - Verb -九 きゅう - nine - Noun -九つ ここのつ - nine (things) - Noun -十 じゅう - ten - Noun -百 ひゃく - hundred - Noun -千 せん - thousand - Noun -万 まん - ten thousand - Noun -円 えん - circle - Noun -円 えん - yen - Noun -時 とき - time - Noun -する する - do, make - Verb -時々 ときどき - sometimes - Adverb -日 にち - day - Noun -六日 むいか - six days, 6th of the month - Noun -三日 みっか - three days, 3rd of the month - Noun -五日 いつか - five days, 5th of the month - Noun -八日 ようか - eight days, 8th of the month - Noun -二十日 はつか - 20 days, 20th of the month - Noun -二日 ふつか - two days, 2nd of the month - Noun -九日 ここのか - nine days, 9th of the month - Noun -ところ ところ - place - Noun -一日 ついたち - 1st of the month - Noun -十日 とおか - ten days, 10th of the month - Noun -七日 なのか - seven days, 7th of the month - Noun -四日 よっか - four days, 4th of the month - Noun -月 つき - moon - Noun -水 みず - water - Noun -金 かね - money - Noun -日曜日 にちようび - Sunday - Noun -土曜日 どようび - Saturday - Noun -やる やる - do - Verb -金曜日 きんようび - Friday - Noun -月曜日 げつようび - Monday - Noun -木曜日 もくようび - Thursday - Noun -曜日 ようび - day of the week - Noun -火曜日 かようび - Tuesday - Noun -水曜日 すいようび - Wednesday - Noun -週 しゅう - week - Noun -年 とし - year, age - Noun -分かる わかる - understand - Verb -そう そう - in such manner, that way - Adverb -何 なに - what, which - Noun -先 さき - ahead, first - Noun -今年 ことし - this year - Noun -今 いま - now - Adverb -今日 きょう - today - Noun -今月 こんげつ - this month - Noun -今週 こんしゅう - this week - Noun -来る くる - come - Verb -来 くる - come - Verb -来年 らいねん - next year - Noun -もう もう - already, yet - Adverb -行く いく - go - Verb -帰る かえる - return, go back - Verb -大きい おおきい - big - Adjective -小さい ちいさい - small - Adjective -少ない すくない - few, little - Adjective -少し すこし - a bit, a little while - Adverb -多い おおい - lots of - Adjective -多分 たぶん - probably, perhaps - Adverb -上げる あげる - raise, improve - Verb -よく よく - often - Adverb -上る のぼる - go up - Verb -上 うえ - up, above - Noun -下 した - under, below - Noun -右 みぎ - right - Noun -左 ひだり - left - Noun -方 ほう - direction, side - Noun -大人 おとな - adult - Noun -人 ひと - person - Noun -一人 ひとり - one, one person - Noun -どう どう - how, what - Adverb -入れる いれる - put in - Verb -入る はいる - enter - Verb -出る でる - go out, leave - Verb -出来る できる - can do, be good at - Verb -出す だす - take out - Verb -本 ほん - book, volume - Noun -休む やすむ - take a day off, take a break - Verb -体 からだ - body, health - Noun -目 め - eye - Noun -どこ どこ - where - Noun -口 くち - mouth - Noun -耳 みみ - ear, hearing - Noun -上手 じょうず - good, skilled - Adjectival Noun -手 て - hand - Noun -足 あし - leg, foot - Noun -空く すく - be empty - Verb -男 おとこ - man, male - Noun -女 おんな - woman, girl - Noun -子供 こども - child, kid - Noun -あげる あげる - give - Verb -好き すき - favorite, liked - Adjectival Noun -大好き だいすき - love - Adjective -私 わたし - I - Noun -友達 ともだち - friend, companion - Noun -家 うち - house, home - Noun -気 き - spirit, temperament - Noun -元気 げんき - healthy, energetic - Adjective -天気 てんき - weather - Noun -晴れる はれる - be sunny, clear up - Verb -こう こう - like this, this kind of - Adverb -昨日 きのう - yesterday - Noun -開ける あける - open, unlock - Verb -開く ひらく - open - Verb -閉じる とじる - close - Verb -閉める しめる - shut, close - Verb -閉まる しまる - be shut, be closed - Verb -聞く きく - hear, ask - Verb -時間 じかん - time, hour - Noun -高い たかい - high, tall - Adjective -くれる くれる - be given - Verb -安い やすい - inexpensive, cheap - Adjective -低い ひくい - low, short - Adjective -前 まえ - front, before - Noun -後 あと - after - Adverb -後ろ うしろ - back, behind - Noun -午後 ごご - afternoon, p.m. - Noun -午前 ごぜん - morning, a.m. - Noun -朝 あさ - morning - Noun -昼 ひる - daytime, midday - Noun -かなり かなり - fairly, rather - Adverb -晩 ばん - evening (usually from sunset to bedtime) - Noun -今晩 こんばん - this evening, tonight - Noun -夜 よる - night (from sunset to sunrise) - Noun -食べる たべる - eat - Verb -飲む のむ - drink - Verb -ご飯 ごはん - cooked rice, meal - Noun -買う かう - buy - Verb -見る みる - see, look at - Verb -見せる みせる - show - Verb -もっと もっと - more - Adverb -見つける みつける - find - Verb -見える みえる - be visible - Verb -見つかる みつかる - be found, be caught - Verb -言う いう - say, tell - Verb -話す はなす - speak, tell - Verb -読む よむ - read - Verb -漢字 かんじ - character, kanji - Noun -書く かく - write - Verb -覚える おぼえる - memorize, learn - Verb -そこ そこ - there - Pronoun -会う あう - meet - Verb -仕事 しごと - work, job - Noun -場合 ばあい - situation, case - Noun -車 くるま - car, automobile - Noun -電車 でんしゃ - train - Noun -駅 えき - railway station - Noun -道 みち - road, street - Noun -他 ほか - other - Noun -止める やめる - stop, give up, abolish - Verb -ここ ここ - here - Pronoun -歩く あるく - walk, go on foot - Verb -走る はしる - run - Verb -近く ちかく - near, close to - Adverb -近い ちかい - near, soon - Adjective -近く ちかく - vicinity, nearby - Noun -遠い とおい - far, distant - Adjective -長い ながい - long - Adjective -短い みじかい - short, brief - Adjective -広い ひろい - wide, big - Adjective -もらう もらう - receive - Verb -全部 ぜんぶ - all, wholly - Adverb -国 くに - country - Noun -白い しろい - white, blank - Adjective -赤い あかい - red - Adjective -部屋 へや - room - Noun -米 こめ - rice (grain) - Noun -未だ まだ - yet, more - Adverb -有る ある - exist, possess - Verb -無い ない - to not be - Adjective -とても とても - very - Adverb -作る つくる - make, create - Verb -使う つかう - use - Verb -消す けす - switch off, turn off - Verb -売る うる - sell - Verb -店 みせ - shop, store - Noun -春 はる - spring - Noun -夏 なつ - summer - Noun -秋 あき - autumn, fall - Noun -冬 ふゆ - winter - Noun -みんな みんな - all, everybody - Noun -暑い あつい - hot, warm (temperature of the air) - Adjective -熱い あつい - hot (things, touch) - Adjective -寒い さむい - cold (temperature of the air) - Adjective -暖かい あたたかい - warm - Adjective -新しい あたらしい - new - Adjective -古い ふるい - old - Adjective -良い いい - good - Adjective -悪い わるい - bad - Adjective -思う おもう - think - Verb -いつも いつも - always - Adverb -忘れる わすれる - forget, leave behind - Verb -考える かんがえる - think, consider - Verb -決める きめる - decide, agree upon - Verb -決まる きまる - be decided - Verb -知る しる - know - Verb -一番 いちばん - most - Adverb -住む すむ - live, reside - Verb -名前 なまえ - name - Noun -食べ物 たべもの - food - Noun -いつ いつ - when - Noun -飲み物 のみもの - beverage, drink - Noun -重い おもい - heavy - Adjective -軽い かるい - light, light weight - Adjective -送る おくる - send - Verb -取る とる - take, get - Verb -待つ まつ - wait, wait for - Verb -持つ もつ - have, possess - Verb -気持ち きもち - feeling, sensation - Noun -生きる いきる - live (one's life) - Verb -どちら どちら - which - Noun -先生 せんせい - teacher - Noun -大学 だいがく - university, college - Noun -学生 がくせい - student - Noun -大学生 だいがくせい - university student - Noun -学校 がっこう - school - Noun -高校生 こうこうせい - high school student - Noun -教える おしえる - teach, tell - Verb -勉強 べんきょう - study - Verbal Noun -強い つよい - strong - Adjective -どれ どれ - what, which - Noun -弱い よわい - weak - Adjective -引く ひく - draw, pull - Verb -質問 しつもん - question - Verbal Noun -難しい むずかしい - difficult - Adjective -数 かず - number - Noun -勝つ かつ - win - Verb -負ける まける - lose - Verb -本当に ほんとうに - really, truly - Adverb -要る いる - need, require - Verb -ドア ドア - door - Noun -時計 とけい - clock, watch - Noun -払う はらう - pay - Verb -切る きる - cut - Verb -変える かえる - change - Verb -乗る のる - ride, take - Verb -着る きる - wear, put on - Verb -立つ たつ - stand, rise - Verb -座る すわる - sit, sit down - Verb -次 つぎ - next - Noun -しゃべる しゃべる - chat, talk - Verb -動く うごく - move - Verb -働く はたらく - work - Verb -早い はやい - early - Adjective -速い はやい - fast - Adjective -遅い おそい - slow, late - Adjective -始める はじめる - begin, start - Verb -始まる はじまる - begin - Verb -終わる おわる - finish, end - Verb -終わり おわり - end, conclusion - Noun -テーブル テーブル - table - Noun -去年 きょねん - last year - Noun -紙 かみ - paper - Noun -楽しむ たのしむ - enjoy - Verb -楽しい たのしい - fun, enjoyable - Adjective -歌う うたう - sing - Verb -欲しい ほしい - want, desire - Adjective -色 いろ - color - Noun -茶色 ちゃいろ - light brown - Noun -直ぐ すぐ - at once, soon - Adverb -ゲーム ゲーム - game - Noun -書き直す かきなおす - rewrite - Verb -直る なおる - be repaired, return to normal - Verb -線 せん - line - Noun -曲がる まがる - turn - Verb -同じ おなじ - same, identical - Adjectival Noun -違う ちがう - differ, be wrong - Verb -図書館 としょかん - library - Noun -泊まる とまる - stay overnight - Verb -遊ぶ あそぶ - play - Verb -どうして どうして - why - Adverb -服 ふく - clothes - Noun -お父さん おとうさん - father - Noun -父 ちち - (speaker's)father - Noun -お母さん おかあさん - mother - Noun -母 はは - (speaker's)mother - Noun -親 おや - parent - Noun -姉 あね - older sister - Noun -お姉さん おねえさん - older sister - Noun -妹 いもうと - younger sister - Noun -おなか おなか - stomach - Noun -兄 あに - older brother - Noun -お兄さん おにいさん - older brother - Noun -弟 おとうと - younger brother - Noun -娘 むすめ - daughter, girl - Noun -息子 むすこ - son - Noun -若い わかい - young - Adjective -彼女 かのじょ - she, one's girlfriend - Pronoun -彼 かれ - he, one's boyfriend - Noun -結婚 けっこん - marriage - Verbal Noun -ミーティング ミーティング - meeting - Noun -自転車 じてんしゃ - bicycle - Noun -自分 じぶん - self, oneself - Noun -ご主人 ごしゅじん - (your) husband - Noun -答える こたえる - answer, reply - Verb -別 べつ - another, different - Adjectival Noun -病気 びょうき - illness - Verbal Noun -死ぬ しぬ - die - Verb -痛い いたい - painful - Adjective -酒 さけ - alcoholic drink, Japanese rice wine - Noun -つける つける - switch on - Verb -一杯 いっぱい - full - Adverb -飛ぶ とぶ - fly - Verb -飛行機 ひこうき - airplane - Noun -お願い おねがい - favor - Verbal Noun -続く つづく - continue, follow - Verb -日記 にっき - diary - Noun -首 くび - neck - Noun -頭 あたま - head - Noun -顔 かお - face - Noun -あれ あれ - that over there - Noun -感じる かんじる - feel, sense - Verb -探す さがす - search for, look for - Verb -落ちる おちる - fall, sink - Verb -お手洗い おてあらい - toilet, bathroom - Noun -冷たい つめたい - cold (things, touch) - Adjective -汚い きたない - dirty - Adjective -太い ふとい - thick, fat - Adjective -曇る くもる - become cloudy - Verb -神 かみ - god, spirit - Noun -まずい まずい - bad-tasting, bad - Adjective -建てる たてる - build, erect - Verb -置く おく - put, leave - Verb -辺 へん - area; vicinity - Noun -黄色い きいろい - yellow - Adjective -一緒に いっしょに - together, at the same time - Adverb -緑 みどり - green, foliage - Noun -易しい やさしい - easy, simple - Adjective -留学生 りゅうがくせい - student studying abroad - Noun -戻る もどる - return, turn back - Verb -そば そば - side, vicinity - Noun -起きる おきる - get up, get out of bed - Verb -起こる おこる - happen - Verb -起こす おこす - wake up - Verb -起きる おきる - occur, wake up - Verb -寝る ねる - sleep, go to sleep - Verb -細い ほそい - thin, slender, narrow - Adjective -載せる のせる - place, put on - Verb -締める しめる - tighten, fasten - Verb -甘い あまい - sweet - Adjective -こっち こっち - here - Pronoun -辛い からい - spicy, salty - Adjective -優しい やさしい - gentle, kind - Adjective -夫 おっと - husband - Noun -妻 つま - wife - Noun -誰 だれ - who, whom - Noun -愛する あいする - love, care for - Verb -笑う わらう - laugh, smile - Verb -酸っぱい すっぱい - sour - Adjective -言葉 ことば - word, language - Noun -よう よう - way, like, kind - Noun -呼ぶ よぶ - call, name - Verb -胸 むね - chest - Noun -腰 こし - hip, lower back - Noun -背 せ - height, stature - Noun -片仮名 かたかな - katakana - Noun -平仮名 ひらがな - hiragana - Noun -悲しい かなしい - sad - Adjective -美しい うつくしい - beautiful - Adjective -授業 じゅぎょう - class, lesson - Verbal Noun -あそこ あそこ - over there - Pronoun -手伝う てつだう - help, assist - Verb -狭い せまい - narrow, restricted - Adjective -触る さわる - touch, feel - Verb -嫌い きらい - dislike - Adjective -浴びる あびる - take (a shower) - Verb -渇く かわく - be thirsty - Verb -髪の毛 かみのけ - hair - Noun -肩 かた - shoulder - Noun -鼻 はな - nose - Noun -おいしい おいしい - tasty - Adjective -腕 うで - arm - Noun -掛ける かける - hang, put on - Verb -僕 ぼく - I (young male) - Noun -駄目 だめ - no good - Adjectival Noun -大丈夫 だいじょうぶ - alright, OK - Adjectival Noun -風邪 かぜ - cold (illness) - Noun -奇麗 きれい - beautiful - Adjectival Noun -嬉しい うれしい - happy, glad - Adjective -なる なる - become - Verb -ため ため - sake, purpose - Noun -より より - more, further - Adverb -七 しち - seven - Noun -九 く - nine - Noun -億 おく - hundred million - Noun -寺 てら - buddhist temple - Noun -ドル ドル - dollar - Noun -日 ひ - sun, sunlight, day - Noun -火 ひ - fire - Noun -木 き - tree, wood - Noun -金 きん - gold, sum of money, Friday - Noun -システム システム - system - Noun -十分 じゅうぶん - full, plentiful - Adjectival Noun -分 ぶん - amount, part, share - Noun -分ける わける - divide into parts, sort, share - Verb -分かれる わかれる - be divided, disperse, branch off - Verb -コンピューター コンピューター - computer - Noun -何か なにか - something - Noun -何 なん - what, which - Noun -先ず まず - first - Adverb -先月 せんげつ - last month - Noun -やる やる - give (to an inferior) - Verb -先週 せんしゅう - last week - Noun -今まで いままで - until now, so far - Adverb -来月 らいげつ - next month - Noun -来週 らいしゅう - next week - Noun -ロボット ロボット - robot - Noun -行う おこなう - do, carry out - Verb -行き いき - going - Noun -行き ゆき - going - Noun -帰り かえり - return, going home - Noun -ほとんど ほとんど - almost, hardly - Adverb -大きさ おおきさ - size, dimensions - Noun -大分 だいぶ - very, greatly - Adverb -中 なか - inside, middle - Noun -少年 しょうねん - boy - Noun -パソコン パソコン - personal computer - Noun -少しも すこしも - at all - Adverb -少々 しょうしょう - a little, a few - Adverb -多く おおく - many, much, largely - Adverb -上がる あがる - go up, rise - Verb -もう もう - another, again - Adverb -上がる あがる - get nervous, get stage fright - Verb -年上 としうえ - older, senior - Noun -上り のぼり - going up, ascent - Noun -下げる さげる - lower, turn down - Verb -プログラム プログラム - program - Noun -下がる さがる - come down, hang down, fall - Verb -下りる おりる - go down, come down - Verb -下ろす おろす - bring down, take down, pull down - Verb -下り くだり - downhill, going down - Noun -よく よく - well - Adverb -年下 としした - younger, junior - Noun -下る くだる - go down, go down or away from a central place - Verb -一方 いっぽう - one way - Noun -方 かた - person (polite form) - Noun -まま まま - as is, still (in the current state) - Noun -二人 ふたり - two persons - Noun -大人しい おとなしい - gentle, quiet, subdued - Adjective -人々 ひとびと - people - Noun -一人で ひとりで - by oneself - Adverb -テレビ テレビ - television - Noun -外人 がいじん - foreigner, alien - Noun -外 そと - outside, open air - Noun -休日 きゅうじつ - holiday, day off - Noun -休み やすみ - rest, holiday, absence - Noun -ソフト ソフト - software, programme - Noun -力 ちから - strength, power - Noun -協力 きょうりょく - cooperation, collaboration - Verbal Noun -人口 じんこう - population - Noun -出口 でぐち - exit, exit ramp - Noun -ただ ただ - free - Noun -入り口 いりぐち - entrance - Noun -右手 みぎて - right hand - Noun -左手 ひだりて - left hand - Noun -下手 へた - not good at - Adjectival Noun -これら これら - these - Noun -足りる たりる - suffice, serve, be satisfied - Verb -足す たす - add, supplement - Verb -山 やま - mountain - Noun -川 かわ - river, stream - Noun -いずれ いずれ - eventually, sometime - Adverb -空く あく - become available or vacant - Verb -空手 からて - karate, empty hand - Noun -空 そら - sky, weather - Noun -海外 かいがい - overseas, abroad - Noun -あまり あまり - (not) much - Adverb -海 うみ - sea, ocean - Noun -毎日 まいにち - every day - Noun -毎年 まいとし - every year - Noun -毎年 まいねん - every year (also まいとし) - Noun -なお なお - still, in addition - Adverb -毎週 まいしゅう - every week - Noun -毎月 まいつき - every month - Noun -石 いし - stone, small rock - Noun -田んぼ たんぼ - rice field - Noun -ほぼ ほぼ - almost, nearly - Adverb -花 はな - flower - Noun -林 はやし - woods, grove - Noun -森 もり - thick woods, forest - Noun -子 こ - child, kid - Noun -サービス サービス - service, on the house - Verbal Noun -女の子 おんなのこ - girl, daughter - Noun -男の子 おとこのこ - boy, baby boy - Noun -私たち わたしたち - we - Noun -達する たっする - attain, reach - Verb -グループ グループ - group - Noun -家 いえ - house, home - Noun -家内 かない - my wife - Noun -客 きゃく - visitor, customer - Noun -空気 くうき - air, atmosphere - Noun -ホテル ホテル - hotel - Noun -気に入る きにいる - like, be pleased with - Verb -人気 にんき - popularity, popular feeling, business conditions - Noun -雨 あめ - rain - Noun -雪 ゆき - snow, snowfall - Noun -まとめる まとめる - gather together, put in order - Verb -青い あおい - blue - Adjective -青 あお - blue, green, green light - Noun -晴れ はれ - fine weather, clear sky - Noun -明らか あきらか - clear, obvious - Adjective -やはり やはり - as expected, also, still - Adverb -明るい あかるい - bright, cheerful - Adjective -明日 あした - tomorrow - Noun -暗い くらい - dark, dreary, shadowy - Adjective -昨年 さくねん - last year - Noun -はっきり はっきり - clearly - Adverb -一昨年 おととし - the year before last - Noun -一昨日 おととい - day before yesterday - Noun -東 ひがし - east, eastern - Noun -西 にし - west, western - Noun -つまり つまり - in short, basically - Adverb -南 みなみ - south - Noun -北 きた - north - Noun -方向 ほうこう - direction, course - Noun -向かう むかう - face, confront, head toward - Verb -ビル ビル - building - Noun -向こう むこう - the other side, the other party, opponent - Noun -向く むく - turn, face, look - Verb -開く あく - open - Verb -聞こえる きこえる - hear, be heard - Verb -もちろん もちろん - of course, no doubt - Adverb -年間 ねんかん - period of one year - Noun -この間 このあいだ - the other day, recently - Noun -間 あいだ - interval - Noun -人間 にんげん - human being, people - Noun -かつて かつて - once, formerly - Adverb -高さ たかさ - height - Noun -最大 さいだい - biggest, largest - Noun -初めて はじめて - for the first time - Adverb -最初 さいしょ - first, outset - Noun -スポーツ スポーツ - sport - Noun -初め はじめ - beginning - Noun -今後 こんご - after this, in the future - Noun -後 のち - after, afterwards - Noun -最後 さいご - last, final - Noun -なぜ なぜ - why, for what reason - Adverb -明後日 あさって - day after tomorrow - Noun -牛 うし - cattle, cow - Noun -半分 はんぶん - half - Noun -半年 はんとし - half a year - Noun -そのまま そのまま - like that, unchanged - Adverb -半月 はんつき - half a month - Noun -半日 はんにち - half a day - Noun -毎朝 まいあさ - every morning - Noun -今朝 けさ - this morning - Noun -もし もし - if, in case of - Adverb -昼休み ひるやすみ - noon recess, lunch break - Noun -昼前 ひるまえ - in the morning, before noon - Noun -昼間 ひるま - daytime, day - Noun -毎晩 まいばん - every evening - Noun -つもり つもり - intention, purpose - Noun -今夜 こんや - tonight, this evening - Noun -昨夜 ゆうべ - last night, last evening - Noun -夜中 よなか - midnight, dead of night - Noun -夕方 ゆうがた - evening - Noun -やっと やっと - at last, finally - Adverb -昼食 ちゅうしょく - lunch - Noun -朝食 ちょうしょく - breakfast - Noun -夕食 ゆうしょく - supper - Noun -夕飯 ゆうはん - evening meal, supper - Noun -ニュース ニュース - news - Noun -見方 みかた - view, way of looking - Noun -花見 はなみ - flower viewing - Noun -言い方 いいかた - way of speaking, expression - Noun -話 はなし - talk, story - Noun -ずっと ずっと - all day, from start to finish - Adverb -読み よみ - reading, judgment, foresight - Noun -読み方 よみかた - way of reading, reading - Noun -語る かたる - to talk about; to tell - Verb -言語 げんご - language - Noun -ビデオ ビデオ - video - Noun -英語 えいご - English - Noun -文字 もじ - character, letter - Noun -ローマ字 ろーまじ - Roman alphabet - Noun -字 じ - character, letter - Noun -マンション マンション - apartment, apartment block, condominium - Noun -書き方 かきかた - how to write, way of writing - Noun -覚める さめる - awake, wake up - Verb -覚ます さます - awaken, wake up - Verb -大会 たいかい - mass meeting, tournament - Noun -しばらく しばらく - a while - Adverb -会話 かいわ - conversation - Verbal Noun -話し合う はなしあう - discuss, talk over - Verb -合う あう - fit - Verb -間に合う まにあう - be in time, serve the purpose - Verb -ガス ガス - gas - Noun -会社 かいしゃ - company, corporation - Noun -社会 しゃかい - society - Noun -社員 しゃいん - staff member, employee - Noun -仕方 しかた - way, method - Noun -うまい うまい - good at - Adjective -食事 しょくじ - meal, dinner - Verbal Noun -火事 かじ - fire - Noun -大事 だいじ - importance - Adjectival Noun -事故 じこ - accident, incident - Noun -サラリーマン サラリーマン - office worker, salaried worker, company employee - Noun -工事 こうじ - construction - Verbal Noun -工場 こうじょう - factory, plant - Noun -電話 でんわ - telephone, phone call - Verbal Noun -電気 でんき - electricity, electric light - Noun -バス バス - bus - Noun -車 くるま - car - Noun -駅員 えきいん - station employee - Noun -通り とおり - passage, street - Noun -通る とおる - pass, take, go through - Verb -クラス クラス - class - Noun -通う かよう - go to and from, frequent a place - Verb -交通事故 こうつうじこ - traffic accident - Noun -水道 すいどう - water supply - Noun -車道 しゃどう - road, roadway - Noun -トラック トラック - truck, lorry - Noun -道路 どうろ - road, street - Noun -土地 とち - land - Noun -地図 ちず - map, atlas - Noun -他 た - others, other things - Noun -パーティー パーティー - party - Verbal Noun -止める とめる - stop, turn off - Verb -止まる とまる - come to a stop, cease - Verb -止む やむ - stop, abate - Verb -歩道 ほどう - sidewalk, footpath - Noun -うまい うまい - delicious, tasty - Adjective -渡す わたす - carry across, hand over - Verb -渡る わたる - cross, go across - Verb -年度 ねんど - fiscal year, school year - Noun -今度 こんど - this time, next time - Noun -ガラス ガラス - glass - Noun -何度 なんど - how many times - Noun -最近 さいきん - recently - Noun -遠く とおく - great distance - Adverb -社長 しゃちょう - president (of a company) - Noun -コース コース - course, route - Noun -会長 かいちょう - president, chairperson - Noun -長さ ながさ - length - Noun -長男 ちょうなん - eldest son - Noun -長女 ちょうじょ - eldest daughter - Noun -アパート アパート - apartment, flat, apartment house - Noun -広がる ひろがる - spread out, reach - Verb -広さ ひろさ - area, extent - Noun -全体 ぜんたい - whole, total - Noun -全く まったく - entirely, truly, indeed - Adverb -レコード レコード - record - Noun -安全 あんぜん - safety, security - Adjectival Noun -一部 いちぶ - one part - Noun -部分 ぶぶん - part, section - Noun -国内 こくない - domestic, internal - Noun -どんどん どんどん - knock - Adverb -全国 ぜんこく - the whole country - Noun -外国 がいこく - foreign country - Noun -国会 こっかい - National Diet, parliament - Noun -帰国 きこく - return to one's country - Verbal Noun -カメラ カメラ - camera - Noun -外国人 がいこくじん - foreigner - Noun -外国語 がいこくご - foreign language - Noun -世界 せかい - world - Noun -白 しろ - white - Noun -テープ テープ - tape, cassette - Noun -黒い くろい - black, dark - Adjective -黒 くろ - black - Noun -赤ちゃん あかちゃん - baby - Noun -赤 あか - red, crimson - Noun -ビール ビール - beer, lager - Noun -銀行 ぎんこう - bank - Noun -銀 ぎん - silver - Noun -地下鉄 ちかてつ - subway - Noun -牛肉 ぎゅうにく - beef - Noun -ページ ページ - page - Noun -肉 にく - flesh, meat - Noun -魚 さかな - fish - Noun -分野 ぶんや - field, sphere - Noun -野菜 やさい - vegetable - Noun -グラフ グラフ - chart, graph - Noun -本屋 ほんや - bookstore, bookseller - Noun -八百屋 やおや - vegetable store, greengrocer - Noun -そば屋 そばや - soba restaurant - Noun -たばこ屋 たばこや - cigarette shop, tobacco store - Noun -ポスト ポスト - post box, letter box - Noun -茶 ちゃ - tea (plain form) - Noun -お茶 おちゃ - tea (polite) - Noun -茶わん ちゃわん - tea cup, rice bowl - Noun -味 あじ - taste, flavor - Noun -テスト テスト - test, exam - Verbal Noun -未来 みらい - future - Noun -週末 しゅうまつ - weekend - Noun -料理 りょうり - cooking, dealing with something - Verbal Noun -無理 むり - unreasonable, impossible, forced - Adjectival Noun -あちこち あちこち - all over - Noun -無くす なくす - lose, get rid of - Verb -無くなる なくなる - disappear, run short, get lost - Verb -作文 さくぶん - composition, essay - Noun -用いる もちいる - use, make use of - Verb -ゴルフ ゴルフ - golf - Noun -用事 ようじ - things to do, errand - Noun -交通費 こうつうひ - traveling expense, transportation cost - Noun -消える きえる - to go out (lights), to disappear - Verb -消しゴム けしごむ - eraser - Noun -ラジオ ラジオ - radio - Noun -売れる うれる - sell, be in demand - Verb -売り場 うりば - sales floor, department - Noun -店員 てんいん - clerk, salesperson - Noun -売店 ばいてん - booth, shop - Noun -タクシー タクシー - taxi, cab - Noun -商品 しょうひん - goods, commodities - Noun -作品 さくひん - work of art, piece - Noun -販売 はんばい - sale, selling - Verbal Noun -二階 にかい - second floor, upstairs - Noun -ゆっくり ゆっくり - slowly - Adverb -段階 だんかい - stage - Noun -階段 かいだん - steps, flight of stairs - Noun -段々 だんだん - gradually, by degrees - Adverb -値段 ねだん - price - Noun -レストラン レストラン - restaurant - Noun -価格 かかく - price, cost - Noun -合格 ごうかく - passing an examination, eligibility - Verbal Noun -夏休み なつやすみ - summer vacation - Noun -冬休み ふゆやすみ - winter vacation - Noun -カード カード - card, credit card - Noun -四季 しき - the four seasons - Noun -暑さ あつさ - heat, summer heat - Noun -熱 ねつ - heat, fever - Noun -寒さ さむさ - coldness, cold - Noun -アルバイト アルバイト - casual job, student job, part-time job - Verbal Noun -暖める あたためる - warm, warm up, heat up - Verb -暖まる あたたまる - get warm - Verb -温度 おんど - temperature - Noun -気温 きおん - temperature - Noun -コピー コピー - copy, photocopy - Verbal Noun -台 だい - stand, platform - Noun -風 かぜ - wind - Noun -台風 たいふう - typhoon - Noun -事情 じじょう - circumstances, conditions - Noun -ぶつかる ぶつかる - hit, bump into - Verb -情報 じょうほう - information - Noun -報告 ほうこく - report - Verbal Noun -新聞 しんぶん - newspaper - Noun -新年 しんねん - New Year - Noun -フィルム フィルム - film - Noun -良い よい - good, suitable, preferable - Adjective -中心 ちゅうしん - center, middle - Noun -安心 あんしん - peace of mind, relief - Verbal Noun -思い出す おもいだす - recollect, recall - Verb -デパート デパート - department store, department - Noun -思い出 おもいで - recollections, memory - Noun -考え かんがえ - thought, view, idea - Noun -解決 かいけつ - solution, settlement - Verbal Noun -知らせる しらせる - let know, inform - Verb -ベッド ベッド - bed - Noun -能力 のうりょく - ability, capacity - Noun -可能 かのう - possible, potential - Adjectival Noun -可 か - permitted, OK - Noun -郵便 ゆうびん - mail service, mail - Noun -コート コート - coat, jacket - Noun -不便 ふべん - inconvenient - Adjectival Noun -郵便屋さん ゆうびんやさん - mailman - Noun -郵便局 ゆうびんきょく - post office - Noun -交番 こうばん - police box - Noun -ノート ノート - note book, laptop - Noun -番地 ばんち - house number, address - Noun -番号 ばんごう - number, series of digits - Noun -場所 ばしょ - place, space - Noun -近所 きんじょ - neighborhood - Noun -ワイン ワイン - wine - Noun -台所 だいどころ - kitchen - Noun -住所 じゅうしょ - one's dwelling, address - Noun -便所 べんじょ - bathroom - Noun -有名 ゆうめい - famous - Adjectival Noun -おかしい おかしい - strange, funny, suspicious - Adjective -名字 みょうじ - surname - Noun -氏名 しめい - full name - Noun -各国 かっこく - each country - Noun -町 まち - town, neighborhood - Noun -トイレ トイレ - toilet - Noun -都市 とし - city - Noun -都合 つごう - circumstances - Noun -朝御飯 あさごはん - breakfast - Noun -買い物 かいもの - shopping, purchase - Verbal Noun -キャンプ キャンプ - camping, camp - Verbal Noun -荷物 にもつ - baggage, package - Noun -品物 しなもの - goods, thing - Noun -見物 けんぶつ - sightseeing - Verbal Noun -物 もの - thing, object - Noun -プラスチック プラスチック - plastic - Noun -忘れ物 わすれもの - something left behind, lost item - Noun -重さ おもさ - weight - Noun -配る くばる - distribute - Verb -配達 はいたつ - delivery - Verbal Noun -カラー カラー - color - Noun -心配 しんぱい - worry, anxiety - Verbal Noun -見送る みおくる - see (someone) off - Verb -見送り みおくり - seeing someone off - Verbal Noun -受ける うける - receive, accept - Verb -ピアノ ピアノ - piano - Noun -受け取る うけとる - receive, understand - Verb -取れる とれる - come off, be removed - Verb -書き取る かきとる - write down, take notes - Verb -届く とどく - to reach, to arrive - Verb -スキー スキー - ski, skiing - Noun -届ける とどける - deliver, give notice - Verb -持つ もつ - maintain, last long - Verb -金持ち かねもち - wealthy person - Noun -持って行く もっていく - take - Verb -なかなか なかなか - not at all (with negative verb), hardly - Adverb -持って来る もってくる - bring - Verb -打つ うつ - hit, strike - Verb -投げる なげる - throw, abandon - Verb -生まれる うまれる - be born - Verb -プール プール - pool - Noun -生む うむ - have children - Verb -女性 じょせい - woman, female - Noun -生産 せいさん - production - Verbal Noun -お土産 おみやげ - souvenir - Noun -ホーム ホーム - platform - Noun -生活 せいかつ - living; life (one's daily existence) - Verbal Noun -生徒 せいと - pupil, student - Noun -中学 ちゅうがく - junior high school - Noun -入学 にゅうがく - enter a school, matriculate - Verbal Noun -エレベーター エレベーター - elevator - Noun -中学生 ちゅうがくせい - junior high school student - Noun -小学生 しょうがくせい - elementary school student - Noun -見学 けんがく - inspection, field trip - Verbal Noun -通学 つうがく - school commute - Verbal Noun -メモ メモ - memorandum, memo pad - Noun -高校 こうこう - high school - Noun -小学校 しょうがっこう - elementary school - Noun -中学校 ちゅうがっこう - junior high school - Noun -校長 こうちょう - principal, schoolmaster - Noun -パン パン - bread - Noun -休校 きゅうこう - temporary closure of school - Verbal Noun -教会 きょうかい - church - Noun -教育 きょういく - education - Verbal Noun -育てる そだてる - bring up - Verb -びっくりする びっくりする - to be surprised - Verb -育つ そだつ - be brought up, grow - Verb -制度 せいど - system, organization - Noun -強さ つよさ - strength, power - Noun -取引 とりひき - transaction, dealings - Verbal Noun -ズボン ズボン - trousers, pants - Noun -引き出し ひきだし - drawer, withdrawal - Noun -押さえる おさえる - hold down - Verb -押し入れ おしいれ - closet - Noun -練習 れんしゅう - practice, training - Verbal Noun -おもちゃ おもちゃ - toy, plaything - Noun -習う ならう - learn, study - Verb -慣れる なれる - grow accustomed to - Verb -習慣 しゅうかん - custom, habit - None -研究 けんきゅう - research, study - Verbal Noun -グラム グラム - gram - Noun -試験 しけん - test, examination - Verbal Noun -問題 もんだい - problem, question - Noun -簡単 かんたん - simple, easy - Adjectival Noun -複雑 ふくざつ - complicated, intricate - Adjectival Noun -コーヒー コーヒー - coffee - Noun -数字 すうじ - figure, numeral - Noun -数学 すうがく - mathematics - Noun -数える かぞえる - count, calculate - Verb -今回 こんかい - this time - Noun -テント テント - tent - Noun -回る まわる - to turn, to revolve - Verb -回す まわす - turn, rotate - Verb -個人 こじん - individual - Noun -担当 たんとう - person in charge - Verbal Noun -ボート ボート - boat - Noun -当たる あたる - hit, strike - Verb -当時 とうじ - at that time - Noun -本当 ほんとう - truth, reality - Noun -当然 とうぜん - natural, as a matter of course - Adjectival Noun -ボール ボール - ball - Noun -全然 ぜんぜん - wholly, (not) at all (with negative verb) - Adverb -方法 ほうほう - method, procedure - Noun -法律 ほうりつ - law - Noun -規則 きそく - rule, regulation - Noun -オートバイ オートバイ - motorbike, motorcycle - Noun -経験 けいけん - experience - Verbal Noun -経つ たつ - pass, elapse - Verb -経済 けいざい - economy, economics - Noun -経営 けいえい - management, operation - Verbal Noun -ひどい ひどい - cruel, severe - Adjective -株 かぶ - stocks, shares - Noun -企業 きぎょう - corporation, business - Noun -作業 さぎょう - work, operation - Verbal Noun -産業 さんぎょう - industry - Noun -あなた あなた - you - Noun -工業 こうぎょう - (manufacturing) industry - Noun -商業 しょうぎょう - commerce, trade - Noun -利用 りよう - utilization, usage - Verbal Noun -便利 べんり - convenience, handiness - Adjectival Noun -スイッチ スイッチ - switch - Noun -技術 ぎじゅつ - skill, technology - Noun -手術 しゅじゅつ - surgical operation - Verbal Noun -製造 せいぞう - production, manufacture - Verbal Noun -必ず かならず - without fail, certainly - Adverb -プレゼント プレゼント - present, gift - Verbal Noun -必要 ひつよう - need, necessity - Adjectival Noun -重要 じゅうよう - important, essential - Adjectival Noun -要求 ようきゅう - demand, requirement - Verbal Noun -目覚まし時計 めざましどけい - alarm clock - Noun -いつでも いつでも - at any time; always - Adverb -計算 けいさん - calculation - Verbal Noun -引き算 ひきざん - subtraction - Verbal Noun -足し算 たしざん - addition - Verbal Noun -交差点 こうさてん - crossing, intersection - Noun -テニス テニス - tennis - Verbal Noun -割る わる - divide, crack, split - Verb -割れる われる - crack, be divided, split - Verb -割り算 わりざん - division - Verbal Noun -残る のこる - remain, be left over - Verb -こちら こちら - here, this way - Noun -残す のこす - to leave (behind); to reserve - Verb -返す かえす - return, repay - Verb -返事 へんじ - answer, reply - Verbal Noun -借りる かりる - borrow - Verb -ボタン ボタン - button - Noun -貸す かす - lend, lease - Verb -貸し出す かしだす - lend, lend out - Verb -申し込む もうしこむ - apply, make a proposal - Verb -期待 きたい - expectation, anticipation - Verbal Noun -おかしい おかしい - funny, amusing, comical - Adjective -期間 きかん - period, term - Noun -時期 じき - time, season - Noun -限る かぎる - to limit, to be limited to - Verb -急ぐ いそぐ - hurry, hasten - Verb -コート コート - court - Noun -急に きゅうに - suddenly, unexpectedly - Adverb -急 きゅう - urgent, dire, pressing - Adjectival Noun -急行 きゅうこう - express train, going in a hurry - Noun -切れる きれる - run out, expire, can cut - Verb -ドラマ ドラマ - drama, theater, soap opera - Noun -切手 きって - postage stamp - Noun -売り切れる うりきれる - be sold out, go out of stock - Verb -売り切れ うりきれ - sellout, sold out - Noun -大切 たいせつ - important, valuable - Adjectival Noun -ビザ ビザ - visa - Noun -切符 きっぷ - ticket - Noun -入場券 にゅうじょうけん - entrance ticket - Noun -家賃 やちん - rent - Noun -時代 じだい - era, antiquity - Noun -ポケット ポケット - pocket - Noun -代わる かわる - substitute, be substituted for - Verb -代える かえる - substitute, use in place of - Verb -指 ゆび - finger, toe - Noun -決定 けってい - decision, settlement - Verbal Noun -そろそろ そろそろ - soon, quietly - Adverb -一定 いってい - constant, standardized - Verbal Noun -定期券 ていきけん - commuter's pass - Noun -予定 よてい - schedule, plan - Verbal Noun -天気予報 てんきよほう - weather forecast - Noun -ぶどう ぶどう - grapes - Noun -予習 よしゅう - preparation for a lesson - Verbal Noun -予約 よやく - reservation, subscription - Verbal Noun -約束 やくそく - promise, vow - Verbal Noun -変わる かわる - change - Verb -めったに めったに - rarely - Adverb -大変 たいへん - awful, serious - Adjectival Noun -変 へん - strange, weird, funny - Adjectival Noun -変化 へんか - change - Verbal Noun -強化 きょうか - strengthening - Verbal Noun -クリスマス クリスマス - Christmas - Noun -文化 ぶんか - culture - Noun -増える ふえる - increase, accrue - Verb -増やす ふやす - increase, add - Verb -減る へる - decrease, diminish - Verb -ネクタイ ネクタイ - tie, necktie - Noun -減らす へらす - decrease, reduce - Verb -乗り物 のりもの - vehicle - Noun -降りる おりる - get off, descend - Verb -降ろす おろす - unload, set down (下ろす) - Verb -バイオリン バイオリン - violin - Noun -降る ふる - fall, come down - Verb -着く つく - arrive - Verb -着物 きもの - clothes, kimono - Noun -下着 したぎ - underwear - Noun -パスポート パスポート - passport - Noun -上着 うわぎ - coat, jacket - Noun -着せる きせる - to put clothes on (someone) - Verb -脱ぐ ぬぐ - remove clothes, take off - Verb -立場 たちば - standpoint, position - Noun -バッグ バッグ - bag - Noun -目立つ めだつ - stand out, be conspicuous - Verb -立てる たてる - stand, set up, establish - Verb -役に立つ やくにたつ - be useful, be helpful - Verb -出席 しゅっせき - attendance, presence - Verbal Noun -ゴム ゴム - elastic - Noun -席 せき - seat, one's place - Noun -欠席 けっせき - absence, nonattendance - Verbal Noun -次男 じなん - second son - Noun -次女 じじょ - second daughter - Noun -ギター ギター - guitar - Noun -運ぶ はこぶ - carry, transport - Verb -運転 うんてん - drive - Verbal Noun -運転手 うんてんしゅ - driver - Noun -転ぶ ころぶ - tumble down, fall over - Verb -セーター セーター - sweater, pullover - Noun -移る うつる - move, shift - Verb -移す うつす - move, shift, transfer - Verb -動き うごき - movement, motion - Noun -運動 うんどう - movement, exercise - Verbal Noun -やっぱり やっぱり - just as I thought, after all - Adverb -活動 かつどう - activity - Verbal Noun -動物 どうぶつ - animal - Noun -動かす うごかす - move, operate - Verb -不動産屋 ふどうさんや - real estate agent, realtor - Noun -カーテン カーテン - curtain - Noun -早く はやく - early, soon - Adverb -早口 はやくち - fast talking - Noun -速さ はやさ - speed - Noun -速達 そくたつ - special delivery, express mail - Noun -シャツ シャツ - shirt - Noun -遅れる おくれる - be late - Verb -開始 かいし - beginning - Verbal Noun -始めに はじめに - in the beginning, early in - Adverb -現在 げんざい - the present, present time - Noun -ナイフ ナイフ - knife - Noun -実現 じつげん - implementation, realization - Verbal Noun -実施 じっし - enforcement, putting into practice - Verbal Noun -事実 じじつ - fact, truth - Noun -実行 じっこう - practice, execution - Verbal Noun -バイク バイク - motorbike, motor cycle - Noun -実験 じっけん - experiment - Verbal Noun -通過 つうか - passage through (e.g. train skipping a station), passing (e.g. exam) - Verbal Noun -過ぎる すぎる - pass by, exceed - Verb -昼過ぎ ひるすぎ - early afternoon - Noun -いつか いつか - some time, some day - Adverb -過去 かこ - the past - Noun -開発 かいはつ - development - Verbal Noun -発生 はっせい - occurrence, happening - Verbal Noun -発言 はつげん - utterance, speech - Verbal Noun -オレンジ オレンジ - orange - Noun -発見 はっけん - discovery, revelation - Verbal Noun -出発 しゅっぱつ - departure - Verbal Noun -発車 はっしゃ - departure of a vehicle - Verbal Noun -発表 はっぴょう - announcement - Verbal Noun -きつい きつい - tight, difficult - Adjective -表現 ひょうげん - expression - Verbal Noun -代表 だいひょう - representative - Verbal Noun -表 おもて - surface, front side, outside - Noun -表 ひょう - table (e.g. Table 1), list - Noun -さっき さっき - some time ago, only a moment ago - Adverb -手紙 てがみ - letter - Noun -絵 え - picture, painting, drawing - Noun -雑誌 ざっし - magazine, journal - Noun -音 おと - sound, noise - Noun -テキスト テキスト - text, text file - Noun -音 おと - sound, speech sound, Chinese pronunciation of a character - Noun -音楽 おんがく - music - Noun -薬 くすり - medicine; drug; chemical - Noun -歌 うた - song - Noun -ビニール ビニール - plastic bag (vinyl) - Noun -歌手 かしゅ - singer - Noun -欲しがる ほしがる - desire, wish for, covet - Verb -計画 けいかく - plan, project - Verbal Noun -映画 えいが - movie - Noun -りんご りんご - apple - Noun -面白い おもしろい - interesting, amusing - Adjective -写る うつる - to be photographed; to be projected (e.g. in mirror) - Verb -写す うつす - copy, photograph - Verb -写真 しゃしん - photograph - Noun -アルバム アルバム - album - Noun -真っ赤 まっか - deep red - Adjectival Noun -真面目 まじめ - serious, sober, earnest - Adjectival Noun -真ん中 まんなか - center, middle - Noun -真っ白 まっしろ - pure-white - Adjectival Noun -スカート スカート - skirt - Noun -真っ暗 まっくら - pitch-dark - Adjectival Noun -真っ黒 まっくろ - deep-black, jet-black - Adjectival Noun -真っ青 まっさお - deep-blue, pale (skin) - Adjectival Noun -色々 いろいろ - various - Adjectival Noun -ペン ペン - pen - Noun -人形 にんぎょう - doll - Noun -形 かたち - shape, form - Noun -大型 おおがた - large, large scale - Noun -種類 しゅるい - kind, species - Noun -おしゃべり おしゃべり - chatter, talkative - Verbal Noun -直す なおす - repair, cure, alter - Verb -真っ直ぐ まっすぐ - dead straight, honestly - Adverb -直接 ちょくせつ - directly - Adverb -角 かど - corner, edge, angle - Noun -きっと きっと - surely, certainly - Adverb -三角 さんかく - triangle - Noun -四角 しかく - square, quadrilateral - Adjectival Noun -四角い しかくい - square, four-sided - Adjective -四つ角 よつかど - crossroad, intersection - Noun -メニュー メニュー - menu, bill of fare - Noun -曲 きょく - song, melody, tune - Noun -曲げる まげる - bend, curve - Verb -曲がり角 まがりかど - street corner - Noun -同様 どうよう - similar, same (kind) - Adjectival Noun -アイスクリーム アイスクリーム - ice cream - Noun -間違い まちがい - mistake, error - Noun -間違える まちがえる - make a mistake, confuse (transitive) - Verb -間違う まちがう - be mistaken, be incorrect - Verb -似ている にている - look like, resemble - Verb -おしゃれ おしゃれ - dressing up smartly, trendy - Verbal Noun -以上 いじょう - not less than, more than - Noun -旅行 りょこう - travel, trip - Verbal Noun -大使館 たいしかん - embassy - Noun -旅館 りょかん - Japanese inn - Noun -ジュース ジュース - juice, soft drink - Noun -映画館 えいがかん - movie theater - Noun -宿題 しゅくだい - homework - Noun -泊める とめる - lodge, give shelter - Verb -遊び あそび - play, amusement - Noun -ゼロ ゼロ - zero - Noun -洋服 ようふく - Western-style clothes - Noun -教室 きょうしつ - classroom - Noun -図書室 としょしつ - library - Noun -窓 まど - window - Noun -ピンク ピンク - pink - Noun -親しい したしい - intimate, familiar - Adjective -親切 しんせつ - kind, friendly - Adjectival Noun -不親切 ふしんせつ - unkind, inattentive - Adjectival Noun -家族 かぞく - family, household - Noun -グラス グラス - glass - Noun -万歳 ばんざい - Banzai! Hurrah! Long live...! - Verbal Noun -二十歳 はたち - 20 years old - Noun -姉さん ねえさん - older sister, girl, miss - Noun -兄さん にいさん - older brother - Noun -ダンス ダンス - dance, dancing - Verbal Noun -兄弟 きょうだい - sibling - Noun -業者 ぎょうしゃ - businessman - Noun -若者 わかもの - young person, youth - Noun -彼ら かれら - they - Noun -おじ おじ - uncle - Noun -結合 けつごう - combination, joining - Verbal Noun -結果 けっか - result, outcome - Noun -果物 くだもの - fruit - Noun -課題 かだい - task; homework; subject - Noun -サッカー サッカー - soccer, football - Noun -課 か - section, division, lesson - Noun -効果 こうか - effect, result - Noun -自動車 じどうしゃ - automobile - Noun -自然 しぜん - nature - Noun -スープ スープ - soup, broth - Noun -自然 しぜん - natural, naturally - Adjectival Noun -自習 じしゅう - self-study, self-teaching - Verbal Noun -理由 りゆう - reason, cause - Noun -自由 じゆう - freedom - Adjectival Noun -バナナ バナナ - banana - Noun -信じる しんじる - believe, trust, have faith in - Verb -信号 しんごう - signal, traffic light - Noun -頼む たのむ - ask, request, entrust - Verb -市民 しみん - citizens, the public - Noun -うるさい うるさい - noisy, annoying, pesky - Adjective -住民 じゅうみん - residents, dwellers - Noun -主人 しゅじん - master, husband - Noun -議員 ぎいん - legislator - Noun -会議 かいぎ - conference, meeting - Verbal Noun -パトカー パトカー - police car, patrol car - Noun -対する たいする - face, be in response to - Verb -対立 たいりつ - opposition, antagonism - Verbal Noun -反対 はんたい - oppose, object - Verbal Noun -答え こたえ - answer, solution - Noun -ハンバーガー ハンバーガー - hamburger - Noun -特に とくに - especially, particularly - Adverb -特急 とっきゅう - super-express - Noun -特別 とくべつ - special, extraordinary - Adjectival Noun -別々 べつべつ - separately - Adjectival Noun -エスカレーター エスカレーター - escalator - Noun -別れる わかれる - separate, part from - Verb -一般 いっぱん - general, common - Noun -目的 もくてき - purpose, objective - Noun -普通 ふつう - normal, regular - Adjectival Noun -タオル タオル - towel - Noun -並ぶ ならぶ - line up - Verb -並べる ならべる - line up, display, set up - Verb -平和 へいわ - peace, harmony - Adjectival Noun -高等学校 こうとうがっこう - senior high school - Noun -パチンコ パチンコ - pachinko (vertical pinball) - Noun -病院 びょういん - hospital - Noun -入院 にゅういん - be hospitalized - Verbal Noun -大学院 だいがくいん - graduate school - Noun -医者 いしゃ - doctor - Noun -みかん みかん - tangerine, mandarin orange - Noun -お医者さん おいしゃさん - doctor - Noun -歯医者 はいしゃ - dentist - Noun -歯 は - tooth - Noun -歯ブラシ はぶらし - toothbrush - Noun -ケーキ ケーキ - cake - Noun -科学 かがく - science - Noun -教科書 きょうかしょ - textbook - Noun -理科 りか - science - Noun -亡くなる なくなる - die - Verb -コップ コップ - cup, glass - Noun -忙しい いそがしい - busy, occupied - Adjective -疲れる つかれる - get tired, become fatigued - Verb -禁煙 きんえん - no smoking, giving up smoking - Verbal Noun -酔っ払い よっぱらい - drunkard, boozer - Noun -ナイロン ナイロン - nylon - Noun -酔っ払う よっぱらう - get drunk - Verb -危ない あぶない - dangerous, uncertain - Adjective -危険 きけん - danger, dangerous - Adjectival Noun -存在 そんざい - existence, being - Verbal Noun -スーツ スーツ - suit - Noun -注目 ちゅうもく - attention, notice - Verbal Noun -注文 ちゅうもん - order, request - Verbal Noun -意味 いみ - meaning, significance - Noun -意見 いけん - opinion - Noun -チケット チケット - ticket - Noun -注意 ちゅうい - caution; being careful - Verbal Noun -用意 ようい - preparation, getting ready - Verbal Noun -確か たしか - for sure, for certain - Adjectival Noun -確認 かくにん - confirmation - Verbal Noun -チョコレート チョコレート - chocolate - Noun -機能 きのう - function, feature - Verbal Noun -ジェット機 ジェットき - jet airplane - Noun -機械 きかい - machine - Noun -材料 ざいりょう - ingredients; material - Noun -チャンネル チャンネル - channel - Noun -具体的 ぐたいてき - concrete, specific - Adjectival Noun -基づく もとづく - be based on - Verb -基本 きほん - basis, foundation - Noun -基準 きじゅん - standard, criterion - Noun -つまらない つまらない - boring, dull - Adjective -備える そなえる - furnish, equip - Verb -準備 じゅんび - provide for, prepare for - Verbal Noun -設計 せっけい - design, plan - Verbal Noun -施設 しせつ - facilities, institution - Noun -マッチ マッチ - match, matchbox - Noun -設ける もうける - set up, establish - Verb -説明 せつめい - explanation - Verbal Noun -小説 しょうせつ - novel, story - Noun -公開 こうかい - opening (to the public) - Verbal Noun -いとこ いとこ - cousin - Noun -公園 こうえん - park, public garden - Noun -動物園 どうぶつえん - zoo - Noun -祭り まつり - festival - Noun -国際 こくさい - international - Noun -ストーブ ストーブ - paraffin heater, stove - Noun -実際 じっさい - reality; actual conditions - Adverb -飛行場 ひこうじょう - airport, airfield - Noun -航空便 こうくうびん - airmail - Noun -船便 ふなびん - -ail (ship) -Jisho -ガソリンスタンド ガソリンスタンド - gas station - Noun -船 ふね - ship, boat, vessel - Noun -空港 くうこう - airport - Noun -港 みなと - port, harbor - Noun -島 しま - island, isle - Noun -デート デート - date - Verbal Noun -完成 かんせい - completion, finish - Verbal Noun -平成 へいせい - Heisei era - Noun -成功 せいこう - success - Verbal Noun -原因 げんいん - cause, origin - Noun -ふすま ふすま - sliding door, fusuma - Noun -資金 しきん - funds, capital - Noun -投資 とうし - investment - Verbal Noun -願う ねがう - wish, ask a favor, apply for - Verb -正確 せいかく - accurate, precise - Adjectival Noun -レモン レモン - lemon - Noun -正しい ただしい - correct, righteous, lawful - Adjective -正月 しょうがつ - New Year - Noun -正直 しょうじき - honesty; integrity - Adjectival Noun -異なる ことなる - differ - Verb -チーズ チーズ - cheese - Noun -通常 つうじょう - usual, common - Noun -非常に ひじょうに - very, extremely - Adverb -調べる しらべる - investigate, check - Verb -強調 きょうちょう - emphasis, stressed point - Verbal Noun -ドライブ ドライブ - drive - Verbal Noun -季節 きせつ - season - Noun -調査 ちょうさ - investigation, inquiry - Verbal Noun -提供 ていきょう - offer, provide - Verbal Noun -提案 ていあん - proposition, proposal - Verbal Noun -ラケット ラケット - racket - Noun -案内 あんない - guide, inform - Verbal Noun -示す しめす - show, indicate - Verb -連れて行く つれていく - take (a person) along - Verb -連れて来る つれてくる - bring (a person) - Verb -スチュワーデス スチュワーデス - flight attendant - Noun -続ける つづける - continue, keep up - Verb -相手 あいて - opponent; partner - Noun -会談 かいだん - conversation, meeting - Verbal Noun -相談 そうだん - consultation, advice - Verbal Noun -テープレコーダー テープレコーダー - tape recorder, cassette recorder - Noun -記者 きしゃ - journalist, reporter - Noun -記録 きろく - record, documentation - Verbal Noun -録音 ろくおん - sound recording - Verbal Noun -登る のぼる - climb, mount, go up - Verb -ひげ ひげ - moustache, beard - Noun -関する かんする - to concern, relate to - Verb -関連 かんれん - connection, relation - Verbal Noun -関係 かんけい - relation, relationship - Verbal Noun -状況 じょうきょう - state of affairs, conditions - Noun -ぐっすり ぐっすり - sound asleep - Adverb -状態 じょうたい - state, appearance - Noun -治る なおる - be cured, get well - Verb -政治 せいじ - politics - Noun -治す なおす - cure, heal - Verb -ソース ソース - sauce, Worcestershire sauce - Noun -政府 せいふ - government, administration - Noun -党 とう - political party - Noun -対策 たいさく - measure, countermeasure - Noun -政策 せいさく - policy, political measures - Noun -タイプライター タイプライター - typewriter - Noun -選ぶ えらぶ - choose, elect - Verb -選手 せんしゅ - player (in game) - Noun -選挙 せんきょ - election - Verbal Noun -候補 こうほ - candidacy, candidate - Noun -トマト トマト - tomato - Noun -首相 しゅしょう - prime minister - Noun -首都 しゅと - capital - Noun -改革 かいかく - reform - Verbal Noun -革 かわ - leather - Noun -バター バター - butter - Noun -命令 めいれい - command, order - Verbal Noun -番組 ばんぐみ - program (e.g. TV) - Noun -組み立てる くみたてる - build, set up, construct - Verb -組織 そしき - organization, tissue (biological) - Verbal Noun -バレーボール バレーボール - volleyball - Noun -進める すすめる - advance, promote - Verb -進む すすむ - advance, move forward - Verb -進学 しんがく - entering a higher-level school, esp. going on to university - Verbal Noun -拡大 かくだい - magnification, enlargement - Verbal Noun -おかず おかず - side dish - Noun -責任 せきにん - responsibility, liability - Noun -辞める やめる - resign, retire - Verb -辞書 じしょ - dictionary - Noun -通勤 つうきん - commuting to work - Verbal Noun -カレンダー カレンダー - calendar - Noun -勤める つとめる - serve, hold a job - Verb -事務所 じむしょ - office, one's place of business - Noun -事務室 じむしつ - office - Noun -従来 じゅうらい - former, existing - Noun -ハンドバッグ ハンドバッグ - handbag - Noun -成績 せいせき - results, grades - Noun -集める あつめる - collect, gather - Verb -集まる あつまる - gather, be collected - Verb -採用 さいよう - employment - Verbal Noun -ベル ベル - bell - Noun -給料 きゅうりょう - salary, pay - Noun -卒業 そつぎょう - graduation - Verbal Noun -就職 しゅうしょく - finding employment - Verbal Noun -退院 たいいん - discharge from a hospital - Verbal Noun -インク インク - ink - Noun -契約 けいやく - contract, agreement - Verbal Noun -交渉 こうしょう - negotiation, bargaining - Verbal Noun -事件 じけん - affair, case - Noun -条件 じょうけん - condition - Noun -クーラー クーラー - air conditioning, cooler - Noun -参加 さんか - participation - Verbal Noun -増加 ぞうか - increase, gain - Verbal Noun -加える くわえる - add, include - Verb -加工 かこう - processing, manufacturing - Verbal Noun -ミルク ミルク - milk, baby milk - Noun -比べる くらべる - compare, contrast - Verb -批判 ひはん - criticism, comment - Verbal Noun -評価 ひょうか - evaluation, appraisal - Verbal Noun -対象 たいしょう - target, object (e.g. of worship) - Noun -サラダ サラダ - salad - Noun -故障 こしょう - malfunction, fault, breakdown - Verbal Noun -修理 しゅうり - repair, mending - Verbal Noun -乗り換える のりかえる - -ransfer (trains); to change (bus, train) -Jisho -乗り換え のりかえ - change, transfer (trains, buses) - Verbal Noun -おじさん おじさん - uncle - Noun -換える かえる - to exchange; to interchange - Verb -着替える きがえる - change clothes - Verb -被る かぶる - wear, put on - Verb -破る やぶる - tear, break through, breach (transitive) - Verb -ベルト ベルト - belt - Noun -破れる やぶれる - tear, rip open - Verb -壊す こわす - break, destroy, smash - Verb -壊れる こわれる - break, break down, get out of order - Verb -救急車 きゅうきゅうしゃ - ambulance - Noun -ラーメン ラーメン - ramen (Chinese noodles) - Noun -助ける たすける - help, save - Verb -立派 りっぱ - fine, excellent - Adjectival Noun -警察 けいさつ - police - Noun -管理 かんり - management, administration - Verbal Noun -ライター ライター - lighter - Noun -盗む ぬすむ - steal, rob - Verb -殺す ころす - kill - Verb -逮捕 たいほ - arrest, capture - Verbal Noun -逃げる にげる - escape, run away - Verb -ワイシャツ ワイシャツ - (business) shirt, (white) shirt - Noun -戦争 せんそう - war, battle - Verbal Noun -競争 きょうそう - competition - Verbal Noun -混む・込む こむ・こむ - be crowded, be congested - Verb -大統領 だいとうりょう - president (of a country) - Noun -シャワー シャワー - shower - Noun -捨てる すてる - discard, abandon - Verb -拾う ひろう - pick up, find - Verb -池 いけ - pond - Noun -電池 でんち - battery - Noun -うどん うどん - noodles, Japanese wheat noodles - Noun -深い ふかい - deep, profound, intimate - Adjective -深さ ふかさ - depth, profundity - Noun -浅い あさい - shallow, superficial - Adjective -落とす おとす - drop, lose - Verb -ごみ ごみ - rubbish, trash - Noun -泳ぐ およぐ - swim - Verb -水泳 すいえい - swimming - Verbal Noun -流れる ながれる - flow, pass, drift away - Verb -流行る はやる - be in fashion, be popular - Verb -スーパーマーケット スーパーマーケット - supermarket - Noun -洗う あらう - wash - Verb -洗面所 せんめんじょ - washroom, bathroom - Noun -油 あぶら - oil, animal oil - Noun -沈む しずむ - to sink, to set (sun) - Verb -ハンカチ ハンカチ - handkerchief - Noun -久しぶり ひさしぶり - after a long time - Adjectival Noun -氷 こおり - ice - Noun -冷える ひえる - cool down, feel chilly - Verb -冷やす ひやす - cool, chill - Verb -ビデオテープ ビデオテープ - videotape - Noun -冷める さめる - cool off, subside - Verb -凍る こおる - freeze, congeal - Verb -冷蔵庫 れいぞうこ - refrigerator - Noun -涼しい すずしい - cool, refreshing - Adjective -ぶらぶら ぶらぶら - wander aimlessly, hang about - Adverb -汚す よごす - make dirty, soil - Verb -汚れ よごれ - dirt, filth - Noun -汚れる よごれる - become dirty, become defiled - Verb -景色 けしき - scenery, landscape - Noun -アナウンサー アナウンサー - news reader, announcer - Noun -影響 えいきょう - influence, effect - Verbal Noun -光る ひかる - shine, emit light - Verb -太る ふとる - grow fat, fatten - Verb -太陽 たいよう - sun - Noun -スプーン スプーン - spoon - Noun -星 ほし - star; heavenly body - Noun -地球 ちきゅう - the Earth - Noun -野球 やきゅう - baseball - Noun -雲 くも - cloud - Noun -ブラウス ブラウス - blouse - Noun -曇り くもり - cloudiness, cloudy weather - Noun -地震 じしん - earthquake - Noun -震える ふるえる - tremble, quiver, shake - Verb -振る ふる - wave, shake - Verb -リボン リボン - ribbon - Noun -揺れる ゆれる - shake, sway, rock - Verb -神社 じんじゃ - Shinto shrine - Noun -秘密 ひみつ - secret, privacy - Adjectival Noun -厳しい きびしい - strict, severe, intense - Adjective -いかが いかが - how, what - Adverb -年寄り としより - old people - Noun -歴史 れきし - history - Noun -世紀 せいき - century - Noun -建設 けんせつ - construction - Verbal Noun -ステレオ ステレオ - stereo - Noun -建物 たてもの - building, structure - Noun -建つ たつ - be built, be erected - Verb -構成 こうせい - organization - Verbal Noun -構造 こうぞう - construction, structure - Noun -フォーク フォーク - fork - Noun -橋 はし - bridge - Noun -柱 はしら - pillar, mainstay - Noun -位置 いち - position, place - Verbal Noun -離婚 りこん - divorce - Verbal Noun -おば おば - aunt - Noun -停車 ていしゃ - -e.g. train) -oun Jisho -バス停 ばすてい - bus stop - Noun -周辺 しゅうへん - environs, circumference - Noun -隣 となり - neighbor; next to - Noun -きらきら きらきら - shining, sparkling - Adverb -黄色 きいろ - yellow - Noun -横 よこ - sideways, side, width across - Noun -横書き よこがき - horizontal writing - Noun -判断 はんだん - judgment, decision - Verbal Noun -どうぞ どうぞ - please - Adverb -断る ことわる - refuse, turn down - Verb -横断歩道 おうだんほどう - crosswalk - Noun -大幅 おおはば - drastic; substantial - Na-adjective -訪れる おとずれる - visit, call on - Verb -ネックレス ネックレス - necklace - Noun -訪ねる たずねる - visit, call on - Verb -冷房 れいぼう - air conditioning - Verbal Noun -暖房 だんぼう - heating - Verbal Noun -文房具 ぶんぼうぐ - stationery - Noun -パジャマ パジャマ - pajamas - Noun -諸国 しょこく - various countries - Noun -緑色 みどりいろ - green - Noun; Na-adjective; No-adjective -貿易 ぼうえき - -foreign) -oun Jisho -輸入 ゆにゅう - import - Verbal Noun -ボールペン ボールペン - ballpoint pen - Noun -輸出 ゆしゅつ - export - Verbal Noun -指輪 ゆびわ - ring - Noun -往復 おうふく - going and returning, round trip - Noun -復習 ふくしゅう - review - Verbal Noun -すいか すいか - watermelon - Noun -繰り返す くりかえす - repeat - Verb -留学 りゅうがく - studying abroad - Verbal Noun -停留所 ていりゅうじょ - (bus) stop, station - Noun -書留 かきとめ - registered mail - Noun -そちら そちら - there, that way - Noun -守る まもる - to guard; to keep (a promise) - Verb -留守 るす - not at home - Noun -住宅 じゅうたく - housing, residence - Noun -自宅 じたく - one's house, one's home - Noun -そば そば - buckwheat noodles, soba - Noun -お宅 おたく - your home, you - Noun -早起き はやおき - early rising - Verbal Noun -昼寝 ひるね - nap - Verbal Noun -静か しずか - quiet, tranquil - Adjectival Noun -どっち どっち - どちら (which way, which) - Noun -暇 ひま - free time, spare time - Noun -趣味 しゅみ - hobby, interest - Noun -両方 りょうほう - both - Noun -両替 りょうがえ - money exchange - Verbal Noun -バスケットボール バスケットボール - basketball - Noun -両親 りょうしん - parents; both parents - Noun -片道 かたみち - -way (trip) -Jisho -内側 うちがわ - inside, interior - Noun -向こう側 むこうがわ - other side - Noun -サンドイッチ サンドイッチ - sandwich - Noun -外側 そとがわ - exterior, outside - Noun -左側 ひだりがわ - left side - Noun -右側 みぎがわ - right side - Noun -裏 うら - rear, reverse side, inside - Noun -にこにこ にこにこ - smile - Adverb -裏返す うらがえす - turn over, turn inside out - Verb -週刊誌 しゅうかんし - weekly magazine - Noun -朝刊 ちょうかん - morning edition - Noun -夕刊 ゆうかん - evening edition - Noun -ウール ウール - wool - Noun -詳しい くわしい - detailed, complete - Adjective -細かい こまかい - small, fine - Adjective -細か こまか - small, detailed - Adjectival Noun -積もる つもる - accumulate, pile up - Verb -コーラ コーラ - cola, coke - Noun -訳 やく - translation, rendering - Noun -訳す やくす - translate - Verb -検討 けんとう - consideration; examination - Verbal Noun -塗る ぬる - spread on, paint - Verb -トイレットペーパー トイレットペーパー - toilet paper - Noun -付く つく - to adhere, to be connected with - Verb -付ける つける - attach, set (a price), apply - Verb -受け付ける うけつける - receive, accept - Verb -片付ける かたづける - put in order, do away with - Verb -どなた どなた - who - Noun -受付 うけつけ - reception (desk) - Noun -近付く ちかづく - approach, get acquainted - Verb -片付く かたづく - be put in order, be settled - Verb -気を付ける きをつける - take care of, pay attention to - Verb -ハイキング ハイキング - hiking - Verbal Noun -貼る はる - stick, paste - Verb -記念日 きねんび - holiday; anniversary; memorial day - Noun -残念 ざんねん - regretful, disappointing - Adjectival Noun -例えば たとえば - for example - Adverb -ハム ハム - ham - Noun -例文 れいぶん - example sentence - Noun -例 れい - example, precedent - Noun -余る あまる - to be left over; to be too many - Verb -除く のぞく - exclude; remove - Verb -ボーイフレンド ボーイフレンド - boyfriend - Noun -削る けずる - grind down (plane), trim, scale back - Verb -遅刻 ちこく - tardiness, lateness - Verbal Noun -緩い ゆるい - slack, loose - Adjective -苦しい くるしい - painful, difficult - Adjective -アイロン アイロン - iron - Noun -苦い にがい - bitter - Adjective -苦手 にがて - hard to deal with, not good at - Adjectival Noun -困る こまる - be at a loss, in a jam, in trouble - Verb -貧乏 びんぼう - poverty, destitution - Adjectival Noun -カレーライス カレーライス - curried rice - Noun -不幸 ふこう - unhappiness, misfortune, bereavement - Adjectival Noun -幸せ しあわせ - happiness, good fortune - Adjectival Noun -塩 しお - salt - Noun -塩辛い しおからい - salty - Adjective -キャッシュカード キャッシュカード - cash card - Noun -砂糖 さとう - sugar - Noun -規模 きぼ - scale, scope - Noun -農業 のうぎょう - agriculture - Noun -濃い こい - thick, concentrated, dark-colored - Adjective -イヤリング イヤリング - earrings - Noun -薄い うすい - thin, diluted, pale - Adjective -厚い あつい - thick, bulky - Adjective -厚さ あつさ - thickness - Noun -迫る せまる - to draw near; to urge - Verb -ガールフレンド ガールフレンド - girlfriend - Noun -伸びる のびる - stretch, grow - Verb -引っ越す ひっこす - to move (house) - Verb -越える こえる - go over, go across, go beyond - Verb -引っ越し ひっこし - moving - Verbal Noun -カセットテープ カセットテープ - cassette tape - Noun -追い越す おいこす - outrun, overtake - Verb -上昇 じょうしょう - ascension, rising - Verbal Noun -改札口 かいさつぐち - ticket barrier, wicket - Noun -失礼 しつれい - rudeness; excuse me - Verbal Noun -かゆい かゆい - itchy - Adjective -お礼 おれい - thanks, reward - Verbal Noun -謝る あやまる - apologize - Verb -注射 ちゅうしゃ - injection, shot - Verbal Noun -程度 ていど - degree, extent - Noun -ぐらぐら ぐらぐら - wobble - Adverb -誘う さそう - invite, entice - Verb -導入 どうにゅう - introduction; installation - Verbal Noun -努力 どりょく - endeavor, effort - Verbal Noun -怒る おこる - get angry, scold - Verb -ジャム ジャム - jam - Noun -独身 どくしん - single life, celibacy - Noun -占める しめる - occupy; hold; account for - Verb -処理 しょり - processing; dealing with - Verbal Noun -紹介 しょうかい - introduction, presentation - Verbal Noun -スリッパ スリッパ - slippers - Noun -招く まねく - invite, beckon, cause - Verb -招待 しょうたい - invitation - Verbal Noun -夫婦 ふうふ - husband and wife, married couple - Noun -奥 おく - interior; inner part - Noun -トランプ トランプ - (a pack of) cards, (playing) cards - Verbal Noun -奥さん おくさん - married lady, your wife - Noun -皆さん みなさん - everybody, ladies and gentlemen - Noun -皆様 みなさま - everyone, ladies and gentlemen - Noun -誰か だれか - someone - Noun -よろしい よろしい - all right - Adjective -国籍 こくせき - nationality, citizenship - Noun -愛 あい - love - Verbal Noun -可愛い かわいい - cute, charming, sweet - Adjective -恋人 こいびと - lover, sweetheart - Noun -ラッシュアワー ラッシュアワー - rush hour - Noun -誕生日 たんじょうび - birthday - Noun -祝日 しゅくじつ - holiday - Noun -お祝い おいわい - celebrate - Verbal Noun -夢 ゆめ - dream - Noun -カップ カップ - cup - Noun -泣く なく - cry, weep - Verb -涙 なみだ - tear - Noun -喜ぶ よろこぶ - be happy, be delighted - Verb -恥ずかしい はずかしい - shy; ashamed; embarrassed - Adjective -スケート スケート - skate, skates - Noun -弁当 べんとう - box lunch, picnic lunch - Noun -看護婦 かんごふ - female nurse - Noun -患者 かんじゃ - patient - Noun -述べる のべる - to mention; to state - Verb -たくさん たくさん - a lot, plenty - Adverb -訴える うったえる - sue - Verb -迷う まよう - to lose one's way; to hesitate; to be perplexed - Verb -迷惑 めいわく - trouble, annoyance - Verbal Noun -地域 ちいき - region, area - Noun -ピクニック ピクニック - picnic - Noun -政権 せいけん - political power - Noun -贈る おくる - to give (as a gift) - Verb -贈り物 おくりもの - present, gift - Noun -与える あたえる - give; bestow - Verb -あちら あちら - way over there - Noun -貯金 ちょきん - savings, deposit - Verbal Noun -預ける あずける - deposit, entrust - Verb -預かる あずかる - receive on deposit, take charge of - Verb -得意 とくい - one's forte, pride, customer - Adjectival Noun -どきどき どきどき - feel excited, feel nervous - Adverb -燃える もえる - burn - Verb -焼ける やける - burn, be scorched, be baked - Verb -すき焼き すきやき - sukiyaki - Noun -焼く やく - burn, bake, be envious - Verb -まあまあ まあまあ - OK, not bad, average - Adjective -乾く かわく - to get dry - Verb -乾杯 かんぱい - a toast, drinking one's glass dry - Verbal Noun -乾かす かわかす - dry - Verb -新幹線 しんかんせん - Shinkansen, bullet train - Noun -マフラー マフラー - scarf, muffler - Noun -素晴らしい すばらしい - splendid, excellent - Adjective -海岸 かいがん - beach, coast - Noun -家庭 かてい - home, family - Noun -庭 にわ - garden, yard - Noun -アクセサリー アクセサリー - accessories, jewelry - Noun -桜 さくら - cherry tree, cherry blossom - Noun -咲く さく - bloom, blossom - Verb -吹く ふく - blow, play on a wind instrument - Verb -散歩 さんぽ - walk, stroll - Verbal Noun -あくび あくび - yawn - Verbal Noun -植える うえる - plant; grow - Verb -屋根 やね - roof - Noun -黒板 こくばん - blackboard - Noun -掲示板 けいじばん - bulletin board; BBS - Noun -からから からから - thirsty, dry; loud laughter - Adjective -草 くさ - grass, weed - Noun -葉 は - leaf - Noun -絵葉書 えはがき - picture postcard - Noun -葉書 はがき - postcard - Noun -ふらふら ふらふら - unsteady (e.g.on one's feet); dizzy - Adverb -吸う すう - inhale, suck - Verb -普及 ふきゅう - spread, promulgation - Verbal Noun -胃 い - stomach - Noun -皿 さら - plate, counter for plates or helpings - Noun -こぼす こぼす - spill - Verb -血 ち - blood - Noun -内容 ないよう - contents - Noun -背景 はいけい - background, scenery, setting - Noun -骨 ほね - bone, frame, backbone (spirit) - Noun -ランチ ランチ - lunch - Noun -滑る すべる - slide, slip, flunk an examination - Verb -折れる おれる - snap, be folded, give in - Verb -折る おる - break off, fold, bend - Verb -健康 けんこう - healthy - Adjectival Noun -レシート レシート - receipt - Noun -珍しい めずらしい - rare, precious - Adjective -撮る とる - to take (a photo); to film - Verb -再び ふたたび - again, a second time - Adverb -再来年 さらいねん - the year after next - Noun -チョーク チョーク - chalk - Noun -再来月 さらいげつ - the month after next - Noun -再来週 さらいしゅう - the week after next - Noun -放送 ほうそう - broadcasting - Verbal Noun -装置 そうち - equipment, device - Noun -ティッシュ ティッシュ - tissue - Noun -仮名 かな - kana, Japanese syllabary - Noun -送り仮名 おくりがな - kana suffix - Noun -鏡 かがみ - mirror - Noun -悲しむ かなしむ - feel sad, lament - Verb -ノック ノック - knock - Verbal Noun -固い かたい - hard; stiff - Adjective -美術館 びじゅつかん - art museum - Noun -美人 びじん - beautiful woman - Noun -美容院 びよういん - beauty parlour; hairdressing salon - Noun -よろしく よろしく - properly; best regards; please take care of me - Adverb -博物館 はくぶつかん - museum - Noun -開催 かいさい - holding a meeting; open an exhibition - Verbal Noun -特徴 とくちょう - distinctive feature, characteristic - Noun -許す ゆるす - permit, forgive - Verb -がらがら がらがら - empty (also gargling, raspy) - Adjective -免許証 めんきょしょう - license - Noun -教師 きょうし - teacher - Noun -教授 きょうじゅ - professor - Noun -伝える つたえる - convey, transmit - Verb -ぎらぎら ぎらぎら - dazzling, glaring, blinding - Adverb -鳥 とり - bird; chicken - Noun -鳴る なる - to sound, to ring, to roar - Verb -鳴く なく - chirp, meow, to make sound (animal) - Verb -声 こえ - voice, sound - Noun -そっち そっち - that way, there, thou (そちら) - Noun -卵 たまご - egg - Noun -犬 いぬ - dog - Noun -馬 うま - horse - Noun -駐車場 ちゅうしゃじょう - parking lot - Noun -ピンポン ピンポン - table tennis, ping pong - Verbal Noun -騒ぐ さわぐ - make a racket, mess around, make a fuss - Verb -刺す さす - stab, prick, sting - Verb -刺身 さしみ - sashimi, sliced raw meat - Noun -激しい はげしい - violent, intense - Adjective -ぺこぺこ ぺこぺこ - hungry, starving - Adjective -驚く おどろく - be surprised, be startled - Verb -倒れる たおれる - fall over, succumb - Verb -倒す たおす - bring down, overthrow, defeat - Verb -傾向 けいこう - tendency, disposition - Noun -ぺらぺら ぺらぺら - fluently - Adjectival Noun -柔道 じゅうどう - judo - Noun -柔らかい やわらかい - soft - Adjective -柔らか やわらか - soft, tender, gentle - Adjectival Noun -主張 しゅちょう - insistence, assertion - Verbal Noun -レインコート レインコート - raincoat - Noun -引っ張る ひっぱる - pull, drag - Verb -突き当たる つきあたる - to run into; to come to the end of (a street) - Verb -突き当たり つきあたり - end of a street/hallway - Noun -壁 かべ - wall, partition - Noun -アイス アイス - popsicle, ice lolly - Noun -弾く ひく - to play (piano, guitar) - Verb -丸い まるい - round - Adjective -丸 まる - circle, wholeness - Noun -攻撃 こうげき - attack, criticism - Verbal Noun -いつごろ いつごろ - about when; how soon - Noun -絶対に ぜったいに - absolutely, unconditionally - Adverb -消防車 しょうぼうしゃ - firetruck - Noun -嫌 いや - dislike, have a dislike for - Adjectival Noun -大嫌い だいきらい - hate - Adjectival Noun -ウィスキー ウィスキー - whisky - Noun -大抵 たいてい - generally, mostly - Adverb -大勢 おおぜい - many; crowd; great number of people - Noun -姿 すがた - figure, appearance - Noun -姿勢 しせい - posture, attitude - Noun -エアメール エアメール - airmail - Noun -恐ろしい おそろしい - terrible, frightening - Adjective -怖い こわい - scary; (I'm) afraid - Adjective -糸 いと - thread, yarn - Noun -孫 まご - grandchild - Noun -シャープペンシル シャープペンシル - mechanical pencil - Noun -木綿 もめん - cotton - Noun -偉い えらい - great, admirable, eminent - Adjective -爪 つめ - nail, claw - Noun -机 つくえ - desk - Noun -セロテープ セロテープ - cellophane tape, Scotch tape, Sellotape - Noun -棚 たな - shelf - Noun -本棚 ほんだな - bookshelf - Noun -方針 ほうしん - objective; plan; policy - Noun -釣る つる - to fish; to angle - Verb -やけど やけど - burn - Verbal Noun -お釣り おつり - change (i.e. money) - Noun -鍵 かぎ - key, lock - Noun -鍋 なべ - pot - Noun -寿司 すし - sushi - Noun -アイスコーヒー アイスコーヒー - iced coffee - Noun -泥棒 どろぼう - thief, crook - Verbal Noun -湯 ゆ - hot water, hot bath, hot spring - Noun -沸く わく - to grow hot or boil (e.g. water); be excited - Verb -沸かす わかす - boil, excite (transitive) - Verb -あっち あっち - あちら (distant: that way, that, there) - Noun -洗濯機 せんたくき - washing machine - Noun -洗濯 せんたく - washing; laundry - Verbal Noun -濡れる ぬれる - get wet - Verb -喫茶店 きっさてん - coffee shop, tea house, café - Noun -あんなに あんなに - to that extent; to that degree; so - Adverb -怠ける なまける - be lazy, to neglect (e.g. one's work) - Verb -一生懸命 いっしょうけんめい - very hard; with utmost effort; for dear life - Adverb -休憩 きゅうけい - rest; break; recess - Verbal Noun -天井 てんじょう - ceiling - Noun -いたずら いたずら - mischief, prank - Verbal Noun -納豆 なっとう - natto (fermented soybeans) - Noun -化粧 けしょう - make-up; cosmetics - Verbal Noun -畑 はたけ - field (for fruits, vegetables, etc.), vegetable garden - Noun -炊く たく - cook, boil - Verb -ウェートレス ウェートレス - waitress - Noun -自炊 じすい - cooking food for oneself - Verbal Noun -灰皿 はいざら - ashtray - Noun -灰 はい - ashes - Noun -灰色 はいいろ - ash color, gray - Noun -おばさん おばさん - aunt - Noun -西暦 せいれき - Christian Era, A.D. - Noun -毛 け - hair, fur - Noun -髪 かみ - hair (on the head) - Noun -舌 した - tongue - Noun -くし くし - comb - Noun -臭い くさい - stinking; smelly - Adjective -匂い におい - smell, odor - Noun -居る いる - いる (to exist, animate objects) - Verb -履く はく - put on footwear, wear - Verb -クリーニング クリーニング - cleaning, laundry - Verbal Noun -戸 と - door, shutter - Noun -扇風機 せんぷうき - electric fan - Noun -豚 ぶた - pig - Noun -豚肉 ぶたにく - pork - Noun -ごちそう ごちそう - feast, treat - Noun -鶏 にわとり - chicken - Noun -腕時計 うでどけい - wrist watch - Noun -お菓子 おかし - sweets, snacks - Noun -お辞儀 おじぎ - bow - Verbal Noun -ごちそうする ごちそうする - treat - Verb -寝坊 ねぼう - late riser, oversleeping - Verbal Noun -旗 はた - flag - Noun -鉛筆 えんぴつ - pencil - Noun -万年筆 まんねんひつ - fountain pen - Noun -こぼれる こぼれる - spill, overflow (intransitive) - Verb -箱 はこ - box, case - Noun -本箱 ほんばこ - bookcase - Noun -手袋 てぶくろ - gloves - Noun -袋 ふくろ - bag, sack - Noun -こんなに こんなに - so; like this; in this way (The こんなに group indicates amount or extent (this many/this much)) - Adverb -財布 さいふ - purse, wallet - Noun -毛布 もうふ - blanket - Noun -布団 ふとん - futon (quilted mattress laid out on the floor) - Noun -小包 こづつみ - parcel, package - Noun -ざあざあ ざあざあ - pouring (sound of rushing water; sound of pouring rain) - Adverb -包む つつむ - wrap, pack - Verb -飾る かざる - decorate - Verb -手帳 てちょう - notebook - Noun -電話帳 でんわちょう - telephone book - Noun -ジャガイモ ジャガイモ - potato - Noun -牛乳 ぎゅうにゅう - milk - Noun -玄関 げんかん - entrance, door - Noun -眼鏡 めがね - glasses, judgment (when めがね) - Noun -眠い ねむい - sleepy - Adjective -ソファー ソファー - sofa, sofa bed - Noun -眠る ねむる - sleep - Verb -封筒 ふうとう - envelope - Noun -出掛ける でかける - go out, be about to go out - Verb -掛かる かかる - to hang, to take (a resource, e.g. money) - Verb -たばこ たばこ - tobacco, cigarette - Noun -掛け算 かけざん - multiplication - Verbal Noun -拍手 はくしゅ - applause, clapping - Verbal Noun -掃除 そうじ - cleaning; sweeping - Verbal Noun -掃く はく - sweep, brush - Verb -ちょうど ちょうど - just; right; exactly - Adverb -掃除機 そうじき - vacuum cleaner - Noun -握る にぎる - to grip; to make (e.g., hand-rolled sushi balls) - Verb -握手 あくしゅ - handshake - Verbal Noun -迎える むかえる - welcome, go out to meet, invite - Verb -ちょっと ちょっと - just a moment, just a little, easily - Adverb -お巡りさん おまわりさん - policeman - Noun -幾つ いくつ - how many?, how old? - Noun -幾ら いくら - how much?; how many? - Noun -冗談 じょうだん - joke - Noun -つく つく - to be lit (e.g. electricity comes on); to be lighted - Verb -穴 あな - hole - Noun -寂しい さびしい - lonely; solitary - Adjective -丁寧 ていねい - polite, courteous, careful - Adjectival Noun -可哀相 かわいそう - poor, pitiable, pathetic - Adjectival Noun -てんぷら てんぷら - tempura, Japanese deep-fried breaded food - Noun -怪我 けが - injury - Verbal Noun -我慢 がまん - patience, self-restraint - Verbal Noun -幼稚園 ようちえん - kindergarten - Noun -隠れる かくれる - to hide; to conceal oneself; to disappear - Verb -とんとん とんとん - tapping - Adverb -日陰 ひかげ - the shade - Noun -随分 ずいぶん - extremely, considerably - Adverb -頑張る がんばる - to persevere; to keep at it; be tenacious - Verb -頃 ころ - (approximate) time - Noun -にんじん にんじん - carrot - Noun -この頃 このごろ - now, these days, recently - Noun -消防署 しょうぼうしょ - fire station - Noun -尋ねる たずねる - inquire, search for - Verb -缶詰 かんづめ - canned goods, confining someone (e.g. so they can concentrate on work) - Noun -ぬるい ぬるい - tepid, lukewarm - Adjective -缶 かん - can, tin - Noun -腐る くさる - rot, corrode - Verb -豆腐 とうふ - tofu - Noun -床 ゆか - floor - Noun -パーセント パーセント - percent - Noun -床屋 とこや - barber, barbershop - Noun -畳 たたみ - tatami, mat - Noun -畳む たたむ - to fold (clothes, umbrella), to close (a shop) - Verb -干す ほす - to dry; to air out - Verb -ひざ ひざ - knee - Noun -帽子 ぼうし - cap, hat - Noun -是非 ぜひ - by all means, certainly - Adverb -敬語 けいご - honorific language, polite speech - Noun -尊敬 そんけい - respect, esteem, honor - Verbal Noun -ひじ ひじ - elbow - Noun -敷く しく - to spread out; to lay out - Verb -雷 かみなり - thunder, lightning - Noun -零 れい - zero, naught - Noun -仕舞う しまう - finish; put away - Verb -ひも ひも - laces, string, rope - Noun -踊る おどる - to dance (orig. a hopping dance) - Verb -踊り おどり - dance, dancing - Noun -踏む ふむ - step on, tread on - Verb -踏切 ふみきり - railroad crossing - Noun -まく まく - scatter, plant - Verb -蹴る ける - kick - Verb -食堂 しょくどう - dining hall, cafeteria, restaurant - Noun -猫 ねこ - cat, feline - Noun -文章 ぶんしょう - writing, writing style - Noun -やかん やかん - kettle - Noun -丈夫 じょうぶ - healthy; robust - Adjectival Noun -又 また - again, also, or - Adverb -お祖父さん おじいさん - grandfather - Noun -お祖母さん おばあさん - grandmother - Noun -ようこそ ようこそ - welcome - Adverb -祖父 そふ - grandfather - Noun -祖母 そぼ - grandmother - Noun -邪魔 じゃま - hindrance; obstacle (orig. demon who obstructs humans) - Adjectival Noun -風邪薬 かぜぐすり - remedy for a cold - Noun -ウェーター ウェーター - waiter - Noun -風呂屋 ふろや - bathhouse, public bath - Noun -風呂 ふろ - bath - Noun -昭和 しょうわ - Showa era - Noun -紫 むらさき - purple - Noun -そんなに そんなに - that, so (amount/extent) - Adverb -紅茶 こうちゃ - black tea - Noun -梅雨 つゆ - "rainy season (""the plum rain"")" - Noun -桃 もも - peach, peach tree - Noun -遭う あう - meet with, encounter (遭う may have an undesirable nuance compared to 会う) - Verb -枕 まくら - pillow - Noun -嘘 うそ - lie - Noun -遠慮 えんりょ - restraint; prudence; forethought - Verbal Noun -叱る しかる - to scold - Verb -傘 かさ - umbrella, parasol - Noun -お嬢さん おじょうさん - young lady, your daughter - Noun -年賀状 ねんがじょう - New Year's card - Noun -賑やか にぎやか - bustling; busy; lively - Adjectival Noun -蚊 か - mosquito - Noun -拭く ふく - wipe, dry - Verb -挨拶 あいさつ - greet, greeting - Verbal Noun -伴う ともなう - accompany, go with - Verb -巻く まく - roll up, wind, wrap - Verb -靴 くつ - shoes, boots - Noun -靴下 くつした - socks, stockings - Noun -磨く みがく - to polish; to shine; to brush (e.g. teeth) - Verb -歯磨き はみがき - toothpaste, brushing one's teeth - Noun -廊下 ろうか - corridor; hallway - Noun -瓶 びん - bottle; jar - Noun -褒める ほめる - praise, commend - Verb -元旦 がんたん - New Year's Day - Noun -袖 そで - sleeve - Noun -長袖 ながそで - clothes with long sleeves - Noun -半袖 はんそで - short-sleeves - Noun -馬鹿 ばか - fool, nonsense - Adjectival Noun -凄い すごい - wonderful, great, incredible - Adjective -剃る そる - shave - Verb -喧嘩 けんか - fight, quarrel, argument - Verbal Noun -叩く たたく - to strike; to clap - Verb -噛む かむ - bite, chew - Verb -味噌汁 みそしる - miso soup - Noun -姪 めい - niece - Noun -苺 いちご - strawberry - Noun -茄子 なす - eggplant - Noun -逢う あう - meet (like 会う; 逢う is often used for close friends, etc. and may be associated with drama or pathos) - Verb -椅子 いす - chair - Noun -痩せる やせる - lose weight, become thin - Verb -箸 はし - chopsticks - Noun -糊 のり - glue, starch - Noun -醤油 しょうゆ - soy sauce - Noun -鋏 はさみ - scissors, pincers, tongs - Noun -鞄 かばん - bag, handbag, briefcase - Noun -顎 あご - jaw, chin - Noun -飴 あめ - candy, sweets - Noun -石鹸 せっけん - soap - Noun -一時 いちじ - temporarily - Adverb -月日 がっぴ - date - Noun -金もうけ かねもうけ - making money - Verbal Noun -先に さきに - before, ahead - Adverb -先日 せんじつ - the other day, a few days ago - Noun -今日 こんにち - today, these days (written same as きょう) - Noun -今ごろ いまごろ - about this time - Noun -ケース ケース - case - Noun -今にも いまにも - at any moment; soon - Adverb -今に いまに - before long, someday - Adverb -行き来 いきき - coming and going; keeping in touch - Verbal Noun -行 ぎょう - line, row - Noun -帰す かえす - send home, see out - Verb -大いに おおいに - very, greatly - Adverb -大げさ おおげさ - exaggerate - Adjective -イメージ イメージ - image - Verbal Noun -大水 おおみず - flood - Noun -水中 すいちゅう - in the water, underwater - Noun -小 しょう - smallness, small size - Noun -少なくとも すくなくとも - at least - Adverb -少々 しょうしょう - a little, a few - Noun -上がる あがる - be completed - None -上がる あがる - eat, drink - Verb -せい せい - consequence; result; blame - Noun -上 じょう - upper, best - Noun -上 かみ - superiors, people in authority - Noun -下さる くださる - to give, to kindly do for one - Verb -下水 げすい - sewerage, drainage - Noun -上下 じょうげ - top and bottom - Verbal Noun -上下 うえした - above and below - Noun -下 げ - lowness (of degree, value, etc.); inferiority - Noun -左右 さゆう - left and right - Noun -いつも いつも - always, usually - Noun -四方 しほう - all directions, far and wide - Noun -方々 かたがた - people - Noun -大人 おとな - adult - Adjective -外出 がいしゅつ - outing; trip; going out - Verbal Noun -内 うち - inside - Noun -週休 しゅうきゅう - weekend - Noun -一体 いったい - what on earth, what the… - Adverb -きっかけ きっかけ - chance, opportunity - Noun -出力 しゅつりょく - output - Verbal Noun -火力 かりょく - heating power, heat - Noun -水力 すいりょく - waterpower, hydraulic power - Noun -口げんか くちげんか - quarrel - Verbal Noun -大手 おおて - big company - Noun -足下 あしもと - at one's feet; underfoot - Noun -火山 かざん - volcano - Noun -すっかり すっかり - all, completely - Adverb -小川 おがわ - brook, stream - Noun -空中 くうちゅう - in the air, in the sky - Noun -空ける あける - empty, clear out - Verb -空っぽ からっぽ - empty - Adjectival Noun -空き あき - vacancy, free time - Noun -空 から - emptiness, hollow - Noun -海水 かいすい - seawater - Noun -海上 かいじょう - (by, at, on) sea; maritime - Noun -シリーズ シリーズ - series - Noun -水田 すいでん - (water-filled) paddy field - Noun -森林 しんりん - forest, woods - Noun -男らしい おとこらしい - manly, masculine - Adjective -女らしい おんならしい - womanly, feminine - Adjective -少女 しょうじょ - girl - Noun -女子 じょし - woman, girl - Noun -好む このむ - like, be fond of - Verb -エイズ エイズ - AIDS - Noun -好み このみ - taste, preference - Noun -上達 じょうたつ - improvement (e.g. in skill, ability); progress - Verbal Noun -一家 いっか - a household, a family - Noun -家出 いえで - running away from home - Verbal Noun -大家 おおや - landlord - Noun -元来 がんらい - originally, essentially - Adverb -元日 がんじつ - New Year's Day - Noun -エンジン エンジン - engine - Noun -お中元 おちゅうげん - summer gift (Bon Festival gift) - Noun -天の川 あまのがわ - Milky Way - Noun -気分 きぶん - feeling, mood - Noun -元気 げんき - lively; healthy - Noun -気体 きたい - gas, vapor - Noun -気力 きりょく - willpower; energy; vitality - Noun -大雨 おおあめ - heavy rain - Noun -クラス クラス - class, lesson - Noun -小雨 こさめ - light rain; drizzle - Noun -雨天 うてん - rainy weather - Noun -大雪 おおゆき - heavy snow - Noun -青年 せいねん - youth, young man - Noun -青空 あおぞら - blue sky - Noun -明日 あす - tomorrow (other reading of あした) - Noun -明ける あける - to dawn - Verb -明かり あかり - light - Noun -スピード スピード - speed - Noun -明け方 あけがた - dawn, near daybreak - Noun -一昨年 いっさくねん - the year before last (other reading of おととし) - Noun -一昨日 いっさくじつ - the day before yesterday - Noun -昨日 さくじつ - yesterday (other reading of きのう) - Noun -向上 こうじょう - improvement - Verbal Noun -一向に いっこうに - absolutely, (not) at all (in negative sentence) - Adverb -開き あき - opening; gap - Noun -いかに いかに - how, in what way - Adverb -聞かす きかす - to inform about; to read to; to sing to - Verb -聞き手 ききて - listener, audience - Noun -客間 きゃくま - guest room, parlor - Noun -間 かん - interval, duration of time (other reading of あいだ) - Noun -空間 くうかん - space, room - Noun -円高 えんだか - high-valued yen; strong yen - Noun -最高 さいこう - highest; supreme; the most - Noun -スタート スタート - start, begin - Verbal Noun -最低 さいてい - lowest; disgusting - Noun -最小 さいしょう - the smallest, minimum - Noun -最上 さいじょう - best - Noun -最中 さいちゅう - in the middle of, during - Noun -初日 しょにち - first day, opening day - Noun -お前 おまえ - you (formerly honorific, now sometimes derog. term referring to an equal or inferior) - Noun -前後 ぜんご - before and after; order; around - Noun -後方 こうほう - behind; in the rear; in back - Noun -セット セット - set - Verbal Noun -後ろ向き うしろむき - facing backward - Noun -明々後日 しあさって - three days from today - Noun -後半 こうはん - latter half, second half - Noun -朝日 あさひ - morning sun - Noun -昨晩 さくばん - last night, last evening - Noun -昨夜 さくや - last night (other reading of ゆうべ) - Noun -食う くう - to eat, to make a living - Verb -アップ アップ - close-up - Verbal Noun -外食 がいしょく - eating out, dining out - Verbal Noun -食パン しょくぱん - (loaf of) bread - Noun -一見 いっけん - glimpse; at a glance - Adverb -言い出す いいだす - begin to speak - Verb -外来語 がいらいご - loanword, foreign word - Noun -英文 えいぶん - English, English writing - Noun -漢語 かんご - Chinese-character compounds - Noun -エネルギー エネルギー - energy - Noun -下書き したがき - draft - Verbal Noun -後書き あとがき - postscript, afterword - Noun -覚え おぼえ - recollection, memory - Noun -開会 かいかい - opening of a meeting - Verbal Noun -会 かい - meeting, association - Noun -合わせる あわせる - to match (rhythm, speed, etc.) - Verb -合わす あわす - match, add - Verb -社会人 しゃかいじん - working adult; full-fledged member of society - Noun -かえって かえって - on the contrary, rather - Adverb -会員 かいいん - member - Noun -一員 いちいん - member - Noun -仕上げ しあげ - end; finishing touches; being finished - Verbal Noun -仕上げる しあげる - finish, complete - Verb -人事 じんじ - human affairs, personnel affairs - Noun -行事 ぎょうじ - event, function - Noun -事 こと - thing, matter - Noun -コンクリート コンクリート - concrete - Noun -家事 かじ - housework, domestic duties - Noun -人工 じんこう - artificial; man-made - Noun -会場 かいじょう - venue, meeting place - Noun -出場 しゅつじょう - participation - Verbal Noun -車内 しゃない - inside a vehicle - Noun -下車 げしゃ - getting off (from train, bus, etc.) - Verbal Noun -駅前 えきまえ - in front of the station - Noun -いよいよ いよいよ - at last; more and more - Adverb -外交 がいこう - diplomacy, foreign relations - Noun -交わす かわす - to exchange (messages, greetings, arguments, etc.) - Verb -交通 こうつう - traffic, transportation - Verbal Noun -大通り おおどおり - main street - Noun -書道 しょどう - Japanese calligraphy - Noun -十字路 じゅうじろ - crossroads - Noun -空き地 あきち - unoccupied ground, vacant land - Noun -オリンピック オリンピック - the Olympics - Noun -図 ず - drawing, diagram - Noun -合図 あいず - signal, sign - Verbal Noun -行き止まり いきどまり - dead end - Noun -初歩 しょほ - first steps, basics - Noun -高度 こうど - high degree; advanced - Adjectival Noun -一度に いちどに - all at once - Adverb -遠足 えんそく - excursion, hike - Noun -駅長 えきちょう - stationmaster - Noun -ストップ ストップ - stop - Verbal Noun -全員 ぜんいん - all members, entire staff - Noun -全て すべて - all, entirely - Adverb -外部 がいぶ - the outside, external - Noun -一部分 いちぶぶん - part, portion - Noun -国家 こっか - nation, country - Noun -国々 くにぐに - nations, countries - Noun -国外 こくがい - abroad, outside the country - Noun -きちんと きちんと - properly, neatly - Adverb -出国 しゅっこく - departure from a country, emigration - Verbal Noun -国土 こくど - country, territory - Noun -国語 こくご - national language, Japanese - Noun -国交 こっこう - diplomatic relations - Noun -国道 こくどう - national highway - Noun -世間 せけん - world, the public - Noun -世話 せわ - looking after; help - Verbal Noun -クラブ クラブ - club - Noun -出世 しゅっせ - success in life, promotion - Verbal Noun -青白い あおじろい - pale, pallid - Adjective -黒字 くろじ - balance (figure) in the black, surplus - Noun -赤道 せきどう - equator - Noun -赤字 あかじ - deficit, in the red - Noun -国鉄 こくてつ - Japan National Railways - Noun -私鉄 してつ - private railway - Noun -家屋 かおく - house, building - Noun -じっと じっと - without moving - Adverb -屋上 おくじょう - rooftop - Noun -味わう あじわう - to taste, to appreciate - Verb -地味 じみ - plain, subdued - Adjectival Noun -月末 げつまつ - end of the month - Noun -末っ子 すえっこ - youngest child - Noun -末 すえ - (after) the end - Noun -飲料水 いんりょうすい - drinking water - Noun -コンサート コンサート - concert - Noun -食料 しょくりょう - food, food supplies - Noun -見解 けんかい - opinion, view - Noun -有りのまま ありのまま - the truth; as it is - Adjectival Noun -作家 さっか - writer, novelist - Noun -使用 しよう - usage - Verbal Noun -作用 さよう - action, effect - Verbal Noun -使用人 しようにん - servant - Noun -いけない いけない - wrong, must not - Adjective -私用 しよう - private business, private use - Noun -会費 かいひ - membership fee - Noun -国費 こくひ - national expenditure - Noun -食費 しょくひ - food expenses, board - Noun -私費 しひ - private expense - Noun -消費 しょうひ - consumption, spending - Verbal Noun -消火 しょうか - fire fighting; extinguishing a fire - Verbal Noun -売り上げ うりあげ - amount sold; sales - Noun -あらかじめ あらかじめ - in advance - Adverb -売り出す うりだす - put on sale - Verb -書店 しょてん - bookstore - Noun -開店 かいてん - opening of a store, setting up - Verbal Noun -小売店 こうりてん - retail store, outlet - Noun -商社 しょうしゃ - trading firm - Noun -商店 しょうてん - shop, store - Noun -商売 しょうばい - trade, business - Verbal Noun -しばしば しばしば - often, frequently - Adverb -商人 しょうにん - merchant, trader - Noun -食品 しょくひん - food, foodstuff - Noun -品 しな - article, item (other reading of ひん) - Noun -上品 じょうひん - elegance, refinement - Adjectival Noun -下品 げひん - vulgarity; meanness - Adjective -手段 しゅだん - means, way - Noun -一段と いちだんと - more; further - Adverb -ショック ショック - shock, surprise - Adjectival Noun -値 あたい - value, worth - Noun -値する あたいする - be worth, deserve - Verb -価値 かち - value, merit - Noun -高価 こうか - high-priced - Adjectival Noun -人格 じんかく - personality - Noun -格好 かっこう - shape (figure), appearance - Verbal Noun -青春 せいしゅん - youth; springtime of life - Noun -アンテナ アンテナ - antenna - Noun -春分 しゅんぶん - vernal equinox - Noun -初夏 しょか - early summer - Noun -秋分 しゅうぶん - autumnal equinox - Noun -春夏秋冬 しゅんかしゅうとう - four seasons, all year round - Noun -夏季 かき - summer, summer season - Noun -寒気 さむけ - chill - Noun -暖か あたたか - warm, warmhearted - Adjective -高温 こうおん - high temperature - Noun -あえて あえて - boldly - Adverb -温暖 おんだん - warm, mild - Adjectival Noun -北風 きたかぜ - north wind - Noun -秋風 あきかぜ - autumn breeze - Noun -情熱 じょうねつ - passion, enthusiasm - Noun -広告 こうこく - advertisement - Verbal Noun -新た あらた - new, fresh - Adjective -新聞社 しんぶんしゃ - newspaper company - Noun -カバー カバー - cover, covering - Verbal Noun -新人 しんじん - newcomer, freshman - Noun -最悪 さいあく - the worst - Adjectival Noun -悪用 あくよう - abuse, misuse - Noun -悪 あく - evil, badness - Noun -悪女 あくじょ - wicked or ugly woman - Noun -心理 しんり - mental state, psychology - Noun -心 こころ - heart, mind - Noun -ジャーナリスト ジャーナリスト - journalist - Noun -思い おもい - thoughts, feelings - Noun -思わず おもわず - unintentionally, reflexively - Adverb -思いがけない おもいがけない - unexpected - Adjective -思いやり おもいやり - thoughtfulness, kindness - Noun -決して けっして - never, by no means - Adverb -決心 けっしん - determination, resolve - Verbal Noun -決まり きまり - rule, settlement (conclusion) - Noun -知り合う しりあう - get acquainted with - Verb -スタイル スタイル - style - Noun -知れる しれる - become known, be found out - Verb -知り合い しりあい - acquaintance - Noun -知らせ しらせ - information, notice - Noun -知らず知らず しらずしらず - unawares, without knowing it - Adverb -才能 さいのう - talent, ability - Noun -小便 しょうべん - urine, pee - Verbal Noun -局 きょく - bureau, public service office - Noun -インタビュー インタビュー - interview - Verbal Noun -住まい すまい - dwelling, residence - Noun -氏 し - Mr., Mrs. - Noun -人名 じんめい - person's name - Noun -国名 こくめい - country name - Noun -各地 かくち - every place, various places - Noun -県 けん - prefecture - Noun -市内 しない - in the city - Noun -シーズン シーズン - season - Noun -市長 しちょう - mayor - Noun -市場 いちば - market, marketplace - Noun -市場 しじょう - (the) market (as a concept) (other reading of いちば) - Noun -市外 しがい - city outskirts, suburbs - Noun -市 し - city - Noun -下町 したまち - low-lying part of a city (usu. containing shops, factories, etc.) - Noun -区分 くぶん - division, section - Verbal Noun -区 く - ward - Noun -アイデア アイデア - idea - Noun -様々 さまざま - various, diverse - Adjective -出荷 しゅっか - shipping - Verbal Noun -人物 じんぶつ - character, person - Noun -見物人 けんぶつにん - spectator, sightseer - Noun -入れ物 いれもの - receptacle, container - Noun -作物 さくもつ - crop - Noun -食物 しょくもつ - food - Noun -いかにも いかにも - indeed; phrase indicating agreement - Adverb -書物 しょもつ - books - Noun -重ねる かさねる - pile up, repeat - Verb -重なる かさなる - be piled up, come one after another - Verb -重大 じゅうだい - important, serious - Adjective -重み おもみ - weight, importance - Noun -重たい おもたい - heavy - Adjective -気軽 きがる - lighthearted, easy - Adjectival Noun -いきなり いきなり - suddenly, without warning - Adverb -重量 じゅうりょう - weight - Noun -少量 しょうりょう - small quantity - Noun -小量 しょうりょう - small amount - Noun -受け入れる うけいれる - to accept; to receive; to agree - Verb -受け止める うけとめる - catch; react to - Verb -受かる うかる - to pass (examination) - Verb -受け取り うけとり - receipt - Noun -いつまでも いつまでも - forever - Adverb -聞き取り ききとり - listening comprehension - Noun -書き取り かきとり - dictation; writing kanji text from hiragana/sound - Noun -受け持つ うけもつ - to take (be in) charge of - Verb -打ち上げる うちあげる - to launch; to shoot up - Verb -打ち合わせ うちあわせ - meeting, arrangement - Verbal Noun -打ち明ける うちあける - confide in, reveal - Verb -打ち合わせる うちあわせる - to arrange (e.g. a meeting) - Verb -打ち消し うちけし - negation, denial - Noun -しっかり しっかり - mature, reliable - Adverb -市役所 しやくしょ - municipal office, city hall - Noun -区役所 くやくしょ - ward office - Noun -重役 じゅうやく - executive; company director - Noun -生じる しょうじる - happen, cause - Verb -人生 じんせい - human life, life - Noun -生まれ うまれ - birth, origin - Noun -一生 いっしょう - a lifetime - Noun -アンケート アンケート - questionnaire - Noun -生み出す うみだす - create, produce - Verb -生き方 いきかた - way of life, lifestyle - Noun -生かす いかす - take advantage of, make use of - Verb -生き物 いきもの - living creature - Noun -生け花 いけばな - flower arrangement - Noun -生年月日 せいねんがっぴ - date of birth - Noun -生理 せいり - period, menstruation - Noun -スケジュール スケジュール - schedule - Noun -生まれつき うまれつき - by birth, by nature - Adverb -生 せい - life (apparently uncommon reading of なま) - Noun -生物 せいぶつ - living creature, lifeform - Noun -生き生きと いきいきと - lively, vividly - Adverb -性能 せいのう - ability; performance - Noun -性格 せいかく - character, personality - Noun -性 せい - sex, nature (of a person) - Noun -国産 こくさん - domestically produced - Noun -ガソリン ガソリン - gasoline - Noun -産地 さんち - producing area - Noun -出産 しゅっさん - childbirth - Verbal Noun -活用 かつよう - utilization, conjugation - Verbal Noun -活字 かつじ - printed type - Noun -学会 がっかい - academic association, academic conference - Noun -学年 がくねん - school year, grade - Noun -工学 こうがく - engineering - Noun -カット かっと - cut - Verbal Noun -学長 がくちょう - college president - Noun -語学 ごがく - language study - Noun -工学部 こうがくぶ - department of engineering - Noun -学費 がくひ - school expenses, tuition - Noun -学部 がくぶ - department of a university - Noun -学力 がくりょく - scholastic performance, academic ability - Noun -休学 きゅうがく - temporary absence from school; suspension - Verbal Noun -スター スター - star - Noun -教員 きょういん - teacher, teaching staff - Noun -キリスト教 きりすときょう - Christianity - Noun -イスラム教 イスラムきょう - Islam, Muslim religion - Noun -教わる おそわる - be taught, learn - Verb -教え おしえ - lesson, teachings - Noun -制御 せいぎょ - control, command - Verbal Noun -強力 きょうりょく - powerful - Adjectival Noun -強制 きょうせい - compulsion, force - Verbal Noun -カメラマン カメラマン - photographer, cameraman - Noun -最強 さいきょう - strongest - Noun -心強い こころづよい - reassuring, heartening - Adjective -強引 ごういん - overbearing, coercive, pushy - Adjective -引用 いんよう - quotation, citation - Verbal Noun -字引 じびき - dictionary - Noun -学習 がくしゅう - study, learning - Verbal Noun -試合 しあい - match, game - Verbal Noun -アルコール アルコール - alcohol, alcoholic beverage - Noun -試みる こころみる - try, attempt - Verb -受験 じゅけん - take an examination - Verbal Noun -性質 せいしつ - nature (disposition), property (quality) - Noun -悪質 あくしつ - bad, malignant - Adjectival Noun -質 しつ - quality - Noun -学問 がくもん - learning, scholarship - Verbal Noun -有り難い ありがたい - thankful; appreciated - Adjective -せめて せめて - at least - Adverb -重点 じゅうてん - important point, emphasis - Noun -弱点 じゃくてん - weak point - Noun -少数 しょうすう - small number, minority - Noun -小数 しょうすう - fraction (part of); decimal fraction - Noun -回路 かいろ - circuit - Noun -回数 かいすう - frequency, number of times - Noun -前回 ぜんかい - previous time; last time - Noun -ストレス ストレス - stress - Noun -後回し あとまわし - deferment, postponement - Noun -個性 こせい - individuality; personality; idiosyncrasy - Noun -個々 ここ - individual; one by one; separate - Noun -勝手 かって - selfish, self-centered - Adjective -決勝 けっしょう - decision of a contest; finals (in sports) - Noun -勝ち かち - win, victory - Noun -勝負 しょうぶ - match; victory or defeat - Verbal Noun -担ぐ かつぐ - to shoulder; to carry on one's shoulder - Verb -コード コード - cord - Noun -当てる あてる - hit, guess (an answer) - Verb -当たり前 あたりまえ - of course, obvious - Adjectival Noun -見当 けんとう - estimate, aim - Noun -当たり あたり - hit, success - Noun -規制 きせい - regulation, control - Verbal Noun -経費 けいひ - expense - Noun -済む すむ - to finish - Verb -コーチ コーチ - coach - Verbal Noun -済ませる すませる - finish off, get done with - Verb -済ます すます - to finish; to settle - Verb -株式 かぶしき - stock - Noun -式 しき - ceremony; style - Noun -業界 ぎょうかい - industry, business world - Noun -営業 えいぎょう - business, sales - Verbal Noun -休業 きゅうぎょう - suspension of business, closure - Verbal Noun -ステージ ステージ - stage - Noun -事業 じぎょう - business - Noun -金利 きんり - interest, interest rate - Noun -利く きく - to do its work; to carry out its function well - Verb -収入 しゅうにゅう - income, earnings - Noun -芸術 げいじゅつ - (fine) art; the arts - Noun -製品 せいひん - manufactured goods - Noun -製作 せいさく - manufacture, production - Verbal Noun -作製 さくせい - manufacture, production - Verbal Noun -アドバイス アドバイス - advice - Verbal Noun -必ずしも かならずしも - not always, not necessarily (used with neg. verb) - Adverb -求人 きゅうじん - recruiting, offer of job - Verbal Noun -額 がく - picture frame (other reading of ひたい) - Noun -金額 きんがく - amount of money, sum - Noun -計 けい - total; plot - Noun -合計 ごうけい - sum total - Verbal Noun -家計 かけい - family finances - Noun -アルミニウム アルミニウム - aluminum - Noun -会計 かいけい - account, finance, bill - Noun -寒暖計 かんだんけい - thermometer - Noun -差 さ - difference - Noun -格差 かくさ - gap, disparity - Noun -差し出す さしだす - to present; to hold out - Verb -時差 じさ - time difference - Noun -差す さす - to hold up (an umbrella, etc.) - Verb -オーケストラ オーケストラ - orchestra, orchestral music - Noun -差し上げる さしあげる - respectfully give - Verb -学割 がくわり - student discount - Noun -時間割り じかんわり - timetable (esp. a weekly school timetable); - Noun -残業 ざんぎょう - overtime - Verbal Noun -残暑 ざんしょ - lingering summer heat - Noun -支店 してん - branch office; branch store - Noun -支持 しじ - support; holding up - Verbal Noun -支出 ししゅつ - expenditure; expenses - Verbal Noun -おじさん おじさん - Mister, middle-aged man - Noun -支配 しはい - domination; control; management - Verbal Noun -収支 しゅうし - income and expenses - Noun -支度 したく - preparation; arrangements - Verbal Noun -支える ささえる - support, maintain - Verb -支社 ししゃ - branch office - Noun -支払う しはらう - pay - Verb -支払い しはらい - payment, payout - Verbal Noun -コンクール コンクール - contest, competition - Noun -言い返す いいかえす - talk back, retort; to say over - Verb -返る かえる - to return; to come back - Verb -借り かり - borrowing, debt - Noun -借金 しゃっきん - borrowing money, debt - Verbal Noun -貸し出し かしだし - lending; loaning - Verbal Noun -貸し かし - loan, renting - Noun -申請 しんせい - application; request - Verbal Noun -アマチュア アマチュア - amateur - Noun -込める こめる - to put into (e.g. emotion, effort); to concentrate on - Verb -打ち込む うちこむ - devote oneself; hammer in - Verb -思い込む おもいこむ - assume, believe - Verb -初期 しょき - early days, initial stage - Noun -学期 がっき - school term; semester - Noun -後期 こうき - latter period - Noun -前期 ぜんき - previous term, first term - Noun -きつい きつい - severe, hard, strict (tight) - Adjective -期日 きじつ - fixed date, due date - Noun -新学期 しんがっき - new term, new semester - Noun -限り かぎり - limit, as far as possible - Noun -制限 せいげん - restriction, limit - Verbal Noun -限界 げんかい - boundary, limit - Noun -期限 きげん - time limit, term - Noun -限度 げんど - limit, bounds - Noun -大急ぎ おおいそぎ - in a great hurry - Adjectival Noun -コーナー コーナー - corner - Noun -急用 きゅうよう - urgent business - Noun -一切 いっさい - not at all, not one bit (with negative) - Adverb -区切る くぎる - divide (an area); punctuate - Verb -思い切って おもいきって - boldly, decisively - Adverb -品切れ しなぎれ - out of stock - Noun -思い切り おもいきり - with all one's heart; resignation; resolution - Adverb -切れ きれ - sharpness - Noun -ぎりぎり ぎりぎり - just in time, barely - Adverb -券 けん - ticket - Noun -回数券 かいすうけん - book of tickets - Noun -世代 せだい - generation - Noun -代わり かわり - substitution - Noun -近代 きんだい - modern times - Noun -古代 こだい - ancient times, antiquity - Noun -代わる代わる かわるがわる - by turns, alternately - Adverb -ウサギ ウサギ - rabbit, hare - Noun -指す さす - point to, aim at - Verb -小指 こゆび - little finger, little toe - Noun -安定 あんてい - stability, composure - Verbal Noun -規定 きてい - regulation, provision - Verbal Noun -定める さだめる - to establish; to determine - Verb -指定 してい - designation, appointment - Verbal Noun -悪化 あっか - worsening, aggravation - Verbal Noun -化学 かがく - chemistry - Noun -グラウンド グラウンド - sports field - Noun -消化 しょうか - digestion - Verbal Noun -更に さらに - furthermore, still more - Adverb -今更 いまさら - now (after such a long time); too late - Adverb -急増 きゅうぞう - sudden increase - Verbal Noun -減少 げんしょう - decrease, reduction - Verbal Noun -乗車券 じょうしゃけん - railway ticket, bus ticket - Noun -乗車 じょうしゃ - taking a train, bus, etc.; getting on board - Verbal Noun -さっぱり さっぱり - completely, not at all (with negative) - Adverb -乗客 じょうきゃく - passenger - Noun -雨降り あめふり - rainfall, rainy weather - Noun -税金 ぜいきん - tax - Noun -税 ぜい - tax - Noun -私立 しりつ - private (establishment) - Noun -市立 しりつ - municipal, city (establishment) - Noun -県立 けんりつ - prefectural (institution) - Noun -シャッター シャッター - shutter - Noun -国立 こくりつ - national - Noun -座席 ざせき - seat - Noun -客席 きゃくせき - guest seating (e.g. theater, stadium); passenger seat (e.g. taxi) - Noun -欠点 けってん - weak point, defect - Noun -欠ける かける - to be chipped; to be lacking - Verb -欠く かく - lack - Verb -次回 じかい - next time - Noun -運用 うんよう - making use of; operation; management - Verbal Noun -スピーカー スピーカー - speaker - Noun -運営 うんえい - operation, management - Verbal Noun -運賃 うんちん - passenger fare - Noun -運 うん - fortune; luck - Noun -運送 うんそう - shipping, transportation - Verbal Noun -回転 かいてん - revolution, rotation - Verbal Noun -転がる ころがる - roll over, tumble - Verb -転がす ころがす - roll, roll over (transitive) - Verb -セールスマン セールスマン - sales representative, salesperson - Noun -移転 いてん - moving; change of address - Verbal Noun -移動 いどう - movement, shift - Verbal Noun -行動 こうどう - action, conduct - Verbal Noun -運動会 うんどうかい - sports festival, athletic meet - Noun -運動場 うんどうじょう - sports ground; playground - Noun -運動場 うんどうじょう - playground, sports field - Noun -高速 こうそく - high speed - Noun -おしゃべり おしゃべり - chatter, idle talk - Noun -急速 きゅうそく - rapid, swift - Adjective -高速道路 こうそくどうろ - freeway, highway - Noun -早速 さっそく - immediately - Adverb -時速 じそく - speed per hour - Noun -全速力 ぜんそくりょく - full speed - Noun -遅れ おくれ - delay, being late - Noun -遅らす おくらす - delay, put off - Verb -カラオケ カラオケ - karaoke - Noun -終える おえる - end, finish - Verb -最終 さいしゅう - last, final - Noun -終点 しゅうてん - last stop (e.g. train) - Noun -始終 しじゅう - from beginning to end, at all times - Adverb -終電 しゅうでん - last train - Noun -現地 げんち - actual place; local - Noun -現代 げんだい - present age, modern times - Noun -現金 げんきん - cash; ready money - Adjectival Noun -こっそり こっそり - stealthily, secretly - Adverb -現れる あらわれる - appear, emerge - Verb -現場 げんば - actual spot, job site, crime scene - Noun -現住所 げんじゅうしょ - present address - Noun -現す あらわす - show, reveal - Verb -現れ あらわれ - embodiment, manifestation - Noun -在学 ざいがく - (enrolled) in school - Verbal Noun -現実 げんじつ - actuality, reality - Noun -ジョギング ジョギング - jogging - Verbal Noun -実は じつは - actually - None -実用 じつよう - practical use, utility - Noun -実力 じつりょく - real ability, capability - Noun -実習 じっしゅう - practice, training - Verbal Noun -実物 じつぶつ - real thing, actual object - Noun -実に じつに - truly, surely - Adverb -過ごす すごす - pass, let pass - Verb -あれこれ あれこれ - this and that, one thing or another - Noun -経過 けいか - passage; progress - Verbal Noun -過ち あやまち - fault, mistake - Noun -去る さる - go away, leave - Verb -活発 かっぱつ - lively, active - Adjectival Noun -始発 しはつ - first departure (of the day: train, bus, etc.); first train - Noun -表す あらわす - express, represent - Verb -言い表わす いいあらわす - express, say - Verb -絵本 えほん - picture book - Noun -およそ およそ - just about - Adverb -雑音 ざつおん - noise (jarring, grating) - Noun -足音 あしおと - sound of footsteps - Noun -音読み おんよみ - Chinese-derived kanji reading - Verbal Noun -五十音 ごじゅうおん - Japanese ordering of kana - Noun -気楽 きらく - easygoing, comfortable - Adjectival Noun -行楽 こうらく - excursion, outing, pleasure trip - Noun -薬指 くすりゆび - third finger, ring finger - Noun -サークル サークル - circle, club - Noun -食欲 しょくよく - appetite - Noun -映る うつる - be reflected, appear - Verb -映す うつす - reflect, project - Verb -企画 きかく - plan, project - Verbal Noun -画家 がか - artist, painter - Noun -区画 くかく - division, section - Noun -画面 がめん - screen - Noun -キリスト キリスト - Christ, Christianity - Noun -地面 じめん - ground; earth's surface - Noun -水面 すいめん - surface of the water - Noun -一面 いちめん - whole surface - Noun -真実 しんじつ - truth, reality - Noun -真理 しんり - truth - Noun -金色 きんいろ - golden color - Noun -形式 けいしき - form (as opposed to substance) - Noun -小型 こがた - small-sized - Noun -あっさり あっさり - plainly, matter-of-factly - Adverb -型 かた - type (e.g. of machine, goods, etc.), mold - Noun -一種 いっしゅ - a kind of, a sort of - Noun -各種 かくしゅ - each kind, various - Noun -一種 いっしゅ - a kind of, of sorts - Adverb -人種 じんしゅ - race - Noun -種目 しゅもく - event; item of business - Noun -人類 じんるい - mankind, humankind - Noun -せっせと せっせと - hard, diligently - Adverb -書類 しょるい - documents, papers - Noun -接近 せっきん - approach, proximity - Verbal Noun -間接 かんせつ - indirect - Noun -接する せっする - come in contact, adjoin - Verb -角度 かくど - angle - Noun -三角形 さんかくけい - triangle - Noun -曲線 きょくせん - curve, curved line - Noun -カタログ カタログ - catalogue - Noun -作曲 さっきょく - composition - Verbal Noun -共通 きょうつう - commonality - Verbal Noun -共通語 きょうつうご - common language, lingua franca - Noun -共同 きょうどう - joint, commonality - Verbal Noun -合同 ごうどう - combination, joint - Verbal Noun -一同 いちどう - everybody, all - Noun -以前 いぜん - before, ago - Noun -ジャズ ジャズ - jazz - Noun -以下 いか - below - Noun -以降 いこう - hereafter - Noun -以来 いらい - since - Noun -以後 いご - from now on, after that - Noun -下宿 げしゅく - lodging, boarding house - Verbal Noun -漢和 かんわ - Chinese and Japanese - Noun -英和 えいわ - English-Japanese - Noun -西洋 せいよう - the West, the Occident - Noun -サイン サイン - signature, autograph - Verbal Noun -海洋 かいよう - ocean, sea - Noun -西洋人 せいようじん - Westerner - Noun -制服 せいふく - uniform - Noun -室内 しつない - indoors - Noun -親子 おやこ - parent and child - Noun -親類 しんるい - relatives, kin - Noun -親しむ したしむ - get close to, get familiar with - Verb -ごまかす ごまかす - deceive, evade - Verb -親切 しんせつ - kindness - Noun -親友 しんゆう - close friend - Noun -親指 おやゆび - thumb - Noun -親しみ したしみ - intimacy, familiarity - Noun -水族館 すいぞくかん - aquarium - Noun -歳末 さいまつ - year end - Noun -姉妹 しまい - sisters - Noun -インテリ インテリ - intelligent - Noun -次第に しだいに - gradually, by degrees - Adverb -次第 しだい - as soon as - Noun -息 いき - breath - Noun -休息 きゅうそく - rest, break - Verbal Noun -消費者 しょうひしゃ - consumer - Noun -学者 がくしゃ - scholar - Noun -後者 こうしゃ - the latter - Noun -作者 さくしゃ - author, writer - Noun -いちいち いちいち - one by one, in detail - Adverb -前者 ぜんしゃ - the former - Noun -結局 けっきょく - after all; eventually; in the end - Adverb -新婚 しんこん - newlywed - Noun -婚約 こんやく - engagement, betrothal - Verbal Noun -課長 かちょう - section chief - Noun -効く きく - be effective - Verb -効力 こうりょく - effect, validity - Noun -ストライキ ストライキ - strike - Noun -効き目 ききめ - effect, efficacy - Noun -自動 じどう - automatic operation - Noun -自国 じこく - one's own country - Noun -各自 かくじ - each one, every individual - Noun -自然に しぜんに - naturally, instinctively - Adverb -経由 けいゆ - via, through - Verbal Noun -自信 じしん - self-confidence - Noun -あんまり あんまり - (not) that much, (not) so much - Adverb -信用 しんよう - trust, credit - Verbal Noun -信頼 しんらい - reliance, confidence - Verbal Noun -依頼 いらい - request, commission - Verbal Noun -人民 じんみん - the people, populace - Noun -国民 こくみん - the people, nation - Noun -主要 しゅよう - main, principal - Adjectival Noun -主に おもに - mainly, mostly - Adverb -主役 しゅやく - leading part, starring role - Noun -うるさい うるさい - noisy, bothersome - Adjective -主体 しゅたい - agent, main constituent, protagonist - Noun -主題 しゅだい - subject, theme - Noun -自主 じしゅ - independence, autonomy - Noun -主食 しゅしょく - staple food - Noun -主 おも - main, chief - Adjective -主義 しゅぎ - principle, -ism - Noun -共産主義 きょうさんしゅぎ - Communism - Noun -カーブ カーブ - curve, bend - Verbal Noun -義理 ぎり - sense of duty, justice - Noun -議会 ぎかい - assembly, council - Noun -協議 きょうぎ - conference, deliberation - Verbal Noun -議長 ぎちょう - chairman, president - Noun -議題 ぎだい - topic for discussion, agenda - Noun -議論 ぎろん - argument, discussion - Verbal Noun -結論 けつろん - conclusion - Verbal Noun -ガイド ガイド - guide - Verbal Noun -言論 げんろん - speech, discussion - Noun -世論 せろん - public opinion - Noun -違反 いはん - violation, breach - Verbal Noun -応じる おうじる - answer, comply with - Verb -応用 おうよう - application; put to practical use - Verbal Noun -一応 いちおう - tentatively; for the time being; more or less - Adverb -回答 かいとう - reply, answer - Verbal Noun -かえる かえる - frog - Noun -解答 かいとう - solution, answer - Verbal Noun -区別 くべつ - distinction, classification - Verbal Noun -差別 さべつ - discrimination - Verbal Noun -性別 せいべつ - sex, gender - Noun -一般に いっぱんに - generally, in general - Adverb -経済的 けいざいてき - economical, economic - Adjective -自主的 じしゅてき - autonomous, voluntary - Adjective -合理的 ごうりてき - rational, logical - Adjective -ずれる ずれる - off track, out of line - Verb -形式的 けいしきてき - formal - Adjective -実用的 じつようてき - practical - Adjective -女性的 じょせいてき - feminine, womanly - Adjective -水平 すいへい - horizontal, level - Adjectival Noun -水平線 すいへいせん - horizon - Noun -高等 こうとう - higher, high-grade - Adjectival Noun -上等 じょうとう - first-class, premium - Adjectival Noun -オーバー オーバー - exaggerate - Verbal Noun -急病 きゅうびょう - sudden illness - Noun -医学 いがく - medical science, medicine - Noun -科学者 かがくしゃ - scientist - Noun -科目 かもく - subject - Noun -学科 がっか - subject, department - Noun -外科 げか - surgery - Noun -歯科 しか - dentistry - Noun -エアコン エアコン - air-conditioning, air conditioner - Noun -自然科学 しぜんかがく - natural science - Noun -人文科学 じんぶんかがく - humanities - Noun -社会科学 しゃかいかがく - social sciences - Noun -死 し - death - Noun -死者 ししゃ - dead person, the deceased - Noun -死体 したい - corpse, body - Noun -生死 せいし - life and death - Noun -死亡 しぼう - death - Verbal Noun -しょっちゅう しょっちゅう - frequently, repeatedly - Adverb -痛み いたみ - pain, ache - Noun -痛む いたむ - feel pain, hurt - Verb -禁止 きんし - prohibition, forbiddance - Verbal Noun -禁じる きんじる - prohibit, forbid - Verb -煙 けむり - smoke, fumes - Noun -酒屋 さかや - liquor store - Noun -禁酒 きんしゅ - abstention from alcohol - Verbal Noun -スタンド スタンド - table lamp, desk lamp - Noun -険しい けわしい - steep; grim - Adjective -証券 しょうけん - bill, bond - Noun -証明 しょうめい - proof, evidence - Verbal Noun -生存 せいぞん - existence, survival - Verbal Noun -ご存じ ごぞんじ - know - Noun -合意 ごうい - mutual agreement - Verbal Noun -意向 いこう - intention, inclination - Noun -がっかり がっかり - feel disappointed - Adverb -意欲 いよく - volition, motivation - Noun -決意 けつい - resolution, determination - Verbal Noun -意図 いと - intention, aim - Verbal Noun -意外 いがい - unexpected, unforeseen - Adjectival Noun -意義 いぎ - meaning, significance - Noun -好意 こうい - favor, affection - Noun -意地悪 いじわる - nastiness, ill-natured person - Verbal Noun -確保 かくほ - securement; guarantee - Verbal Noun -スライド スライド - slide - Verbal Noun -確立 かくりつ - establishment - Verbal Noun -確定 かくてい - decision, confirmation - Verbal Noun -確実 かくじつ - certain, secure - Adjective -確信 かくしん - firm belief, conviction - Verbal Noun -効率 こうりつ - efficiency - Noun -確率 かくりつ - probability, rate - Noun -軽率 けいそつ - rash; thoughtless - Adjective -おっしゃる おっしゃる - say - Verb -機会 きかい - opportunity, occasion - Noun -危機 きき - crisis, emergency - Noun -機長 きちょう - airplane captain - Noun -時機 じき - opportunity, chance - Noun -楽器 がっき - musical instrument - Noun -食器 しょっき - tableware, dinner set - Noun -器用 きよう - skillful, clever - Adjectival Noun -クラシック クラシック - classical music, the classics - Adjectival Noun -受話器 じゅわき - (telephone) receiver - Noun -器 うつわ - bowl; container - Noun -消火器 しょうかき - fire extinguisher - Noun -器械 きかい - machine; instrument - Noun -取材 しゅざい - collection of data, gathering of news - Verbal Noun -材木 ざいもく - timber, wood - Noun -具合 ぐあい - condition, health - Noun -さっと さっと - quickly, suddenly - Adverb -器具 きぐ - utensil, implement - Noun -家具 かぐ - furniture - Noun -雨具 あまぐ - rain gear, rainwear - Noun -基地 きち - base, military base - Noun -水準 すいじゅん - level, standard - Noun -基準 きじゅん - standard, criterion - Noun -準急 じゅんきゅう - local express train - Noun -設立 せつりつ - establishment, foundation - Verbal Noun -キャンセル キャンセル - cancellation - Verbal Noun -設備 せつび - equipment, facilities - Verbal Noun -説 せつ - theory, opinion - Noun -解説 かいせつ - explanation, commentary - Verbal Noun -社説 しゃせつ - editorial - Noun -学説 がくせつ - theory - Noun -公式 こうしき - formal, official - Adjectival Noun -公共 こうきょう - public society, community - Noun -シーツ シーツ - sheet - Noun -公平 こうへい - impartiality, fairness - Adjectival Noun -公立 こうりつ - public - Noun -学園 がくえん - educational institution; campus - Noun -祭日 さいじつ - national holiday, festival day - Noun -国際的 こくさいてき - international - Adjective -国際化 こくさいか - internationalization - Verbal Noun -交際 こうさい - association, friendship - Verbal Noun -かかる かかる - catch; get (an illness) - Verb -際 さい - occasion, time - Noun -航空 こうくう - aviation; flying - Noun -航空機 こうくうき - aircraft, airplane - Noun -航空券 こうくうけん - airline ticket - Noun -完全 かんぜん - perfect, complete - Adjectival Noun -成長 せいちょう - growth - Verbal Noun -成立 せいりつ - establishment; coming into existence - Verbal Noun -形成 けいせい - formation - Verbal Noun -コック コック - cook, chef - Noun -結成 けっせい - formation; combination - Verbal Noun -成果 せいか - result, fruit - Noun -賛成 さんせい - approval, agreement - Verbal Noun -合成 ごうせい - composition, synthesis - Verbal Noun -成人 せいじん - adult, grownup - Verbal Noun -成年 せいねん - adult age - Noun -失う うしなう - lose, miss - Verb -えび えび - lobster, shrimp - Noun -失業 しつぎょう - unemployment, loss of job - Verbal Noun -失敗 しっぱい - failure, mistake - Verbal Noun -勝敗 しょうはい - victory or defeat - Noun -原則 げんそく - principle, general rule - Noun -原料 げんりょう - raw material - Noun -原理 げんり - principle, theory - Noun -原子力 げんしりょく - atomic energy, nuclear power - Noun -グリーン グリーン - green - Noun -高原 こうげん - plateau, highland - Noun -資料 しりょう - materials; data; document - Noun -資産 しさん - property, assets - Noun -資格 しかく - qualifications, competence - Noun -資本主義 しほんしゅぎ - capitalism - Noun -資源 しげん - resources - Noun -願書 がんしょ - application form - Noun -正式 せいしき - formal, official - Adjectival Noun -ジーパン ジーパン - jeans - Noun -正面 しょうめん - front, face - Noun -正午 しょうご - noon, noontime - Noun -正義 せいぎ - justice, righteousness - Noun -正門 せいもん - main gate, main entrance - Noun -正解 せいかい - right answer, correct solution - Verbal Noun -正方形 せいほうけい - square - Noun -正 せい - true; regular; original - Noun -ジャーナリズム ジャーナリズム - journalism - Noun -正座 せいざ - sitting upright with legs folded under one - Verbal Noun -正当 せいとう - just, legal - Adjectival Noun -異性 いせい - opposite sex - Noun -異常 いじょう - extraordinary, exceptional - Adjectival Noun -正常 せいじょう - normality, normalcy - Adjectival Noun -意識 いしき - consciousness, awareness - Verbal Noun -常識 じょうしき - common sense, common knowledge - Noun -スピーチ スピーチ - speech - Noun -調べ しらべ - investigation, inquiry - Noun -好調 こうちょう - favorable condition - Adjectival Noun -下調べ したしらべ - preliminary investigation, preparation - Verbal Noun -整備 せいび - maintenance, servicing - Verbal Noun -整理 せいり - sorting; arrangement; organization - Verbal Noun -節約 せつやく - economizing, saving - Verbal Noun -検査 けんさ - inspection, examination - Verbal Noun -ああ ああ - that kind of - Adverb -案 あん - plan, proposal - Noun -案外 あんがい - unexpectedly - Adverb -案の定 あんのじょう - just as thought; as usual - Adverb -国連 こくれん - United Nations - Noun -接続 せつぞく - connection, joining - Verbal Noun -外相 がいしょう - Minister of Foreign Affairs - Noun -真相 しんそう - the truth - Noun -相変わらず あいかわらず - as usual, as before - Adverb -アクセント アクセント - accent, stress - Noun -雑談 ざつだん - chat, idle talk - Verbal Noun -記事 きじ - article, news story - Noun -記号 きごう - symbol, sign - Noun -記入 きにゅう - entry, filling in of forms - Verbal Noun -暗記 あんき - memorization - Verbal Noun -記憶 きおく - memory, recollection - Verbal Noun -関心 かんしん - concern, interest - Noun -コマーシャル コマーシャル - commercial, advertising - Noun -税関 ぜいかん - custom house, customs - Noun -関節 かんせつ - joint (knee joint, elbow joint, etc.) - Noun -関わる かかわる - involve, concern - Verb -機関 きかん - engine; organisation - Noun -係 かかり - person in charge - Noun -現状 げんじょう - present condition - Noun -事態 じたい - situation, state of affairs - Noun -しつこい しつこい - persistent - Adjective -実態 じったい - the actual situation, the realities - Noun -行政 ぎょうせい - administration - Noun -政治家 せいじか - politician - Noun -治まる おさまる - settle down, be cured - Verb -政党 せいとう - political party - Noun -策 さく - scheme, policy - Noun -挙げる あげる - cite, give (an example) - Verb -気候 きこう - climate - Noun -しゃがむ しゃがむ - squat down - Verb -補う おぎなう - supplement (compensate for); replenish - Verb -足首 あしくび - ankle - Noun -首脳 しゅのう - leader - Noun -頭 かしら - head, chief - Noun -頭痛 ずつう - headache - Noun -顔色 かおいろ - complexion, expression - Noun -朝顔 あさがお - morning glory - Noun -コンテスト コンテスト - contest - Noun -改正 かいせい - revision, amendment - Verbal Noun -改良 かいりょう - improvement, reform - Verbal Noun -改める あらためる - reform, change - Verb -改造 かいぞう - remodeling, reorganization - Verbal Noun -改めて あらためて - once again - Adverb -改まる あらたまる - be renewed, change - Verb -革命 かくめい - revolution - Noun -キャベツ キャベツ - cabbage - Noun -生命 せいめい - life - Noun -命 いのち - life - Noun -運命 うんめい - fate - Noun -組合 くみあい - union, guild - Noun -仕組み しくみ - structure; mechanism - Noun -組 くみ - school class; group of people - Noun -組む くむ - pair up, partner with - Verb -組み合わせる くみあわせる - to join together; to combine - Verb -アイドル アイドル - idol, pop singer - Noun -組み込む くみこむ - incorporate, insert - Verb -組み合わせ くみあわせ - combination - Noun -織物 おりもの - cloth, textile - Noun -進出 しんしゅつ - advancement - Verbal Noun -進行 しんこう - advancement - Verbal Noun -進歩 しんぽ - progress, advancement - Verbal Noun -前進 ぜんしん - advancement - Verbal Noun -からかう からかう - make fun of, tease - Verb -進路 しんろ - course, route - Noun -行進 こうしん - march, parade - Verbal Noun -推進 すいしん - promotion - Verbal Noun -主任 しゅにん - person in charge - Noun -辞任 じにん - resignation - Verbal Noun -お世辞 おせじ - compliment, flattery - Noun -委員会 いいんかい - committee - Noun -すっきり すっきり - refreshed - Adverb -委員 いいん - committee member, delegate - Noun -出勤 しゅっきん - to go to work, attendance at work - Verbal Noun -勤勉 きんべん - diligence, hard work - Adjectival Noun -勤務 きんむ - duty; work - Verbal Noun -義務 ぎむ - duty, obligation - Noun -事務 じむ - office work - Noun -公務員 こうむいん - public officer, government worker - Noun -あいにく あいにく - unfortunately - Adverb -事務員 じむいん - clerk, clerical staff - Noun -従う したがう - follow, obey - Verb -従業員 じゅうぎょういん - employee, worker - Noun -雇用 こよう - employment - Verbal Noun -実績 じっせき - achievement, performance - Noun -業績 ぎょうせき - achievement, performance - Noun -応募 おうぼ - application - Verbal Noun -集中 しゅうちゅう - concentration, convergence - Verbal Noun -おばさん おばさん - middle-aged woman - Noun -集合 しゅうごう - gathering, assembly - Verbal Noun -集まり あつまり - gathering, assembly - Noun -収集 しゅうしゅう - collection, gathering - Verbal Noun -採算 さいさん - profit - Noun -採点 さいてん - marking, grading - Verbal Noun -供給 きょうきゅう - supply, provision - Verbal Noun -月給 げっきゅう - monthly salary - Noun -ジャンプ ジャンプ - jump - Verbal Noun -時給 じきゅう - hourly wage - Noun -需要 じゅよう - demand - Noun -就任 しゅうにん - inauguration, appointment - Verbal Noun -職員 しょくいん - staff, employee - Noun -職場 しょくば - place of work, office - Noun -職業 しょくぎょう - occupation - Noun -条約 じょうやく - treaty - Noun -あちらこちら あちらこちら - all over, here and there - Noun -参考 さんこう - reference, consultation - Noun -参議院 さんぎいん - House of Councilors, Upper House - Noun -お参り おまいり - visiting a shrine or temple - Verbal Noun -参考書 さんこうしょ - reference book - Noun -加わる くわわる - join in; participate - Verb -いい加減 いいかげん - irresponsible, half-baked - Adjectival Noun -追う おう - chase, pursue - Verb -追い出す おいだす - kick out; expel - Verb -いつのまにか いつのまにか - before it is noticed; unawares - Adverb -感じ かんじ - feeling, impression - Noun -感情 かんじょう - feeling, emotion - Noun -感覚 かんかく - sense, sensation - Noun -感動 かんどう - emotionally moving - Verbal Noun -実感 じっかん - true sense, realization - Verbal Noun -感心 かんしん - admiration - Verbal Noun -思想 しそう - thought, conception - Noun -おごる おごる - treat - Verb -感想 かんそう - thought, impression - Noun -空想 くうそう - fantasy, daydreams - Verbal Noun -現像 げんぞう - developing (film) - Verbal Noun -現象 げんしょう - phenomenon - Noun -気象 きしょう - weather condition - Noun -障子 しょうじ - paper sliding-door - Noun -修正 しゅうせい - correction, revision - Verbal Noun -おやつ おやつ - snack, refreshment - Noun -傷 きず - wound, scar - Noun -傷める いためる - damage, spoil - Verb -交換 こうかん - exchange, bartering - Verbal Noun -言い換える いいかえる - express in different words, paraphrase - Verb -着替え きがえ - change of clothes - Verbal Noun -交替 こうたい - alternation, shift - Verbal Noun -火災 かさい - fire, conflagration - Noun -災難 さいなん - calamity, misfortune - Noun -ごろごろ ごろごろ - rumble - Adverb -障害 しょうがい - obstacle, disorder - Noun -災害 さいがい - calamity, disaster - Noun -公害 こうがい - environmental pollution - Noun -水害 すいがい - flood damage - Noun -害 がい - harm, damage - Verbal Noun -被せる かぶせる - to cover (with something) - Verb -救う すくう - save, relieve - Verb -シューズ シューズ - shoes, sports shoes - Noun -救い すくい - rescue, relief - Noun -助手 じょしゅ - assistant, helper - Noun -救助 きゅうじょ - rescue, relief - Verbal Noun -支援 しえん - support, backing - Verbal Noun -援助 えんじょ - aid, assistance - Verbal Noun -応援 おうえん - support, cheering - Verbal Noun -小遣い こづかい - pocket money, allowance - Noun -キス キス - kiss - Verbal Noun -警告 けいこく - warning, admonition - Verbal Noun -警官 けいかん - police officer, policeman - Noun -管 かん - pipe, tube - Noun -犯す おかす - commit a crime, rape - Verb -強盗 ごうとう - robbery - Noun -自殺 じさつ - suicide - Verbal Noun -殺人 さつじん - murder, homicide - Noun -くるくる くるくる - round and round, spin - Adverb -奪う うばう - rob, take by force - Verb -戦後 せんご - postwar period - Noun -作戦 さくせん - tactic, strategy - Noun -戦場 せんじょう - battlefield - Noun -戦前 せんぜん - prewar period - Noun -戦死 せんし - death in war - Verbal Noun -争い あらそい - conflict, battle - Noun -争う あらそう - compete, fight - Verb -サボる サボる - blow off, play truant - Verb -競技 きょうぎ - match, sporting event - Verbal Noun -混雑 こんざつ - confusion, disorder - Verbal Noun -混乱 こんらん - disorder, confusion - Verbal Noun -捜す さがす - look for, search for - Verb -索引 さくいん - index - Noun -落ち着く おちつく - calm down, settle in - Verb -落ち着き おちつき - calmness, composure - Noun -ショッピング ショッピング - shopping - Verbal Noun -落とし物 おとしもの - lost property - Noun -交流 こうりゅう - interaction, contact - Verbal Noun -一流 いちりゅう - top-ranked, world-class - Noun -上流 じょうりゅう - upstream - Noun -下流 かりゅう - downstream - Noun -海流 かいりゅう - ocean current - Noun -三流 さんりゅう - third-rate - Noun -スマート スマート - smart, sophisticated - Adjective -洪水 こうずい - flood, inundation - Noun -崩れる くずれる - crumble, collapse - Verb -崩す くずす - destroy, break - Verb -水洗 すいせん - flushing, rinsing with water - Verbal Noun -洗い物 あらいもの - dishes to be washed - Noun -石油 せきゆ - petroleum, oil - Noun -油絵 あぶらえ - oil painting - Noun -浮かぶ うかぶ - float - Verb -ずらり ずらり - line up neatly - Adverb -浮かべる うかべる - set afloat - Verb -浮く うく - float - Verb -沈める しずめる - sink, submerge - Verb -将来 しょうらい - future (usually near) - Noun -永遠 えいえん - eternity - Adjectival Noun -永久 えいきゅう - eternity - Adjectival Noun -河口 かこう - river mouth, estuary - Noun -いらっしゃる いらっしゃる - come, go - Verb -冷ます さます - cool, let cool - Verb -車庫 しゃこ - garage - Noun -金庫 きんこ - vault, safe - Noun -心臓 しんぞう - heart - Adjectival Noun -軽快 けいかい - light, cheerful - Adjective -快い こころよい - pleasant, agreeable - Adjective -快晴 かいせい - good weather - Noun -ウナギ ウナギ - eel - Noun -最適 さいてき - optimum - Adjectival Noun -指摘 してき - pointing out, identification - Verbal Noun -湿度 しつど - humidity - Noun -湿っぽい しめっぽい - damp, gloomy - Adjective -湿気 しっけ - moisture, dampness - Noun -湿る しめる - get damp, get wet - Verb -汚染 おせん - pollution, contamination - Verbal Noun -景気 けいき - economic climate - Noun -ガード ガード - guard rail - Noun -影 かげ - shadow, shade - Noun -境界 きょうかい - boundary, border - Noun -環境 かんきょう - environment, surroundings - Noun -国境 こっきょう - national border - Noun -境 さかい - boundary, border - Noun -観察 かんさつ - observation, supervision - Verbal Noun -外観 がいかん - external appearance - Noun -かぼちゃ かぼちゃ - pumpkin - Noun -客観的 きゃっかんてき - objective - Adjective -主観 しゅかん - subjectivity, subject - Noun -主観的 しゅかんてき - subjective - Adjective -観客 かんきゃく - audience, spectator - Noun -観光 かんこう - sightseeing - Noun -観測 かんそく - observation - Verbal Noun -推測 すいそく - conjecture, guess - Verbal Noun -クイズ クイズ - quiz, quiz show - Noun -宇宙 うちゅう - universe, space - Noun -衛星 えいせい - satellite - Noun -衛生 えいせい - hygiene, sanitation - Noun -衛生的 えいせいてき - sanitary, hygienic - Adjective -球 きゅう - globe, ball - Noun -震度 しんど - seismic intensity - Noun -振動 しんどう - vibration - Verbal Noun -クリーム クリーム - cream - Noun -神経 しんけい - sensitivity, nerves - Noun -神様 かみさま - god, the divine - Noun -神道 しんとう - Shinto - Noun -精神 せいしん - mind, spirit - Noun -精算 せいさん - settlement of accounts, adjustment - Verbal Noun -厳重 げんじゅう - strict, secure - Adjective -貴重 きちょう - precious, valuable - Adjectival Noun -貴重品 きちょうひん - valuables - Noun -ぐるぐる ぐるぐる - round and round - Adverb -跡 あと - trace, track - Noun -足跡 あしあと - footprint - Noun -好奇心 こうきしん - curiosity - Noun -奇跡 きせき - miracle, wonder - Noun -奇数 きすう - odd number - Noun -経歴 けいれき - personal history, resume - Noun -学歴 がくれき - educational history - Noun -さぞ さぞ - I am sure; no doubt - Adverb -王 おう - king - Noun -王様 おうさま - king - Noun -建築 けんちく - construction, architecture - Verbal Noun -新築 しんちく - new building - Verbal Noun -構想 こうそう - conception, plan - Verbal Noun -構える かまえる - set up (shop) - Verb -結構 けっこう - I'm fine; no thank you - Adjective -サングラス サングラス - sunglasses - Noun -結構 けっこう - quite - Adverb -構う かまう - mind, care for - Verb -位 くらい - rank, dignity - Noun -設置 せっち - establishment - Verbal Noun -距離 きょり - distance, interval - Noun -一周 いっしゅう - once around - Verbal Noun -辺り あたり - vicinity, around - Noun -周囲 しゅうい - circumference, surroundings - Noun -きっちり きっちり - exactly - Adverb -囲む かこむ - enclose, encircle - Verb -横断 おうだん - crossing, traversing - Verbal Noun -継続 けいぞく - continuation - Verbal Noun -欧米 おうべい - Europe and America - Noun -州 しゅう - state - Noun -陸 おか - land, shore - Noun -極めて きわめて - extremely, very - Adverb -きゅうり きゅうり - cucumber - Noun -消極的 しょうきょくてき - negative, passive - Adjective -極端 きょくたん - extreme - Adjectival Noun -最先端 さいせんたん - cutting edge, forefront - Noun -一緒 いっしょ - together - Verbal Noun -外貨 がいか - foreign currency - Noun -貨物 かもつ - freight, cargo - Noun -車輪 しゃりん - wheel - Noun -すっと すっと - quickly; directly - Adverb -回復 かいふく - recovery, rehabilitation - Verbal Noun -渋い しぶい - bitter, astringent - Adjective -渋滞 じゅうたい - delay, traffic jam - Verbal Noun -一帯 いったい - area, vicinity - Noun -帯 おび - belt, sash - Noun -温帯 おんたい - temperate zone - Noun -守備 しゅび - defense, fielding - Verbal Noun -帰宅 きたく - return home - Verbal Noun -すらすら すらすら - unhesitantly; smoothly - Adverb -住宅地 じゅうたくち - residential district - Noun -宛先 あてさき - recipient, addressee - Noun -宛名 あてな - name of recipient, addressee - Noun -後戻り あともどり - turning back, retreat - Verbal Noun -起こす おこす - bring about, cause; wake up - Verb -起源 きげん - origin, beginning - Noun -起き上がる おきあがる - get up, rise - Verb -うろうろ うろうろ - wander - Adverb -寝室 しんしつ - bedroom - Noun -静まる しずまる - become quiet, calm down - Verb -休暇 きゅうか - holiday, vacation - Noun -片手 かたて - one hand - Noun -片方 かたほう - one side - Noun -片側 かたがわ - one side - Noun -裏切る うらぎる - betray - Verb -おまけ おまけ - extra; freebie - Verbal Noun -裏口 うらぐち - back door - Noun -裏返し うらがえし - inside out; upside down - Verbal Noun -裏門 うらもん - back gate - Noun -裏表 うらおもて - inside-out, both sides - Noun -項目 こうもく - (data) item; entry - Noun -印象 いんしょう - impression - Noun -印 しるし - mark, symbol - Noun -クッキー クッキー - cookie, biscuit - Noun -印刷 いんさつ - printing - Verbal Noun -週刊 しゅうかん - published weekly - Noun -月刊 げっかん - published monthly - Noun -出版 しゅっぱん - publishing, publication - Verbal Noun -出版社 しゅっぱんしゃ - publishing company - Noun -詳細 しょうさい - details, particulars - Adjectival Noun -心細い こころぼそい - helpless, lonely - Adjective -掲示 けいじ - notice, bulletin - Verbal Noun -コンセント コンセント - outlet, wall socket - Noun -積極的 せっきょくてき - positive, active - Adjective -言い訳 いいわけ - excuse; explanation - Verbal Noun -誤り あやまり - error, mistake - Noun -誤る あやまる - make a mistake - Verb -誤解 ごかい - misunderstanding - Verbal Noun -気付く きづく - notice, become aware of - Verb -くっ付く くっつく - stick, cling - Verb -ずるい ずるい - cunning, sneaky - Adjective -追い付く おいつく - overtake, catch up with - Verb -顔付き かおつき - face, expression - Noun -思い付く おもいつく - think of, hit upon - Verb -後片付け あとかたづけ - cleaning up - Verbal Noun -傷付く きずつく - get injured, be hurt - Verb -傷付ける きずつける - wound, hurt - Verb -くっ付ける くっつける - attach, paste - Verb -せっかち せっかち - impatient - Adjectival Noun -言付ける ことづける - leave a message - Verb -金属 きんぞく - metal - Noun -所属 しょぞく - belong to; member - Verbal Noun -大蔵省 おおくらしょう - Ministry of Finance - Noun -外務省 がいむしょう - Ministry of Foreign Affairs - Noun -帰省 きせい - homecoming - Verbal Noun -省略 しょうりゃく - omission, abbreviation - Verbal Noun -概念 がいねん - general idea, concept - Noun -うちわ うちわ - round paper fan - Noun -記念 きねん - commemoration, memory - Verbal Noun -信念 しんねん - belief, conviction - Noun -順調 じゅんちょう - favorable condition, smooth progress - Adjectival Noun -順 じゅん - order, sequence - Noun -順番 じゅんばん - order of things; turn (in line); - Noun -順位 じゅんい - order, rank - Noun -順々に じゅんじゅんに - by turns, in order - Adverb -うっかり うっかり - carelessly, accidentally - Adverb -順序 じゅんじょ - order - Noun -逆 ぎゃく - reverse, inverse - Adjectival Noun -逆らう さからう - disobey, go against - Verb -逆さ さかさ - reverse, inversion - Adjectival Noun -逆さま さかさま - upside-down, reverse - Adjectival Noun -行列 ぎょうれつ - queue, line - Verbal Noun -整列 せいれつ - row, (standing in a) line - Verbal Noun -くだらない くだらない - worthless, trifling - Adjective -実例 じつれい - example, instance - Noun -余り あまり - remainder, leftover - Adverb -削減 さくげん - curtailment, reduction - Verbal Noun -削除 さくじょ - deletion, elimination - Verbal Noun -既に すでに - already, previously - Adverb -既製 きせい - ready-made, ready-to-wear - Noun -深刻 しんこく - serious, grave - Adjective -刻む きざむ - cut fine - Verb -ずうずうしい ずうずうしい - cheeky, impudent - Adjective -時刻 じこく - time, hour - Noun -締め切り しめきり - deadline, time limit - Noun -締め切る しめきる - close, fix a deadline - Verb -締まる しまる - tighten, be compact - Verb -栄える さかえる - flourish, thrive - Verb -栄養 えいよう - nutrition, nourishment - Noun -教養 きょうよう - culture, education - Noun -すやすや すやすや - sleeping peacefully - Adverb -休養 きゅうよう - rest, recreation - Verbal Noun -苦しむ くるしむ - suffer, be troubled - Verb -苦情 くじょう - complaint, grievance - Noun -苦心 くしん - pains, efforts - Verbal Noun -苦しみ くるしみ - distress, suffering - Noun -苦痛 くつう - pain, agony - Noun -苦しめる くるしめる - torment, trouble - Verb -セルフサービス セルフサービス - self-service - Noun -苦労 くろう - difficulty, hardship - Verbal Noun -勤労 きんろう - labor, work - Verbal Noun -過労 かろう - overwork - Noun -困難 こんなん - difficulty, hardship - Verbal Noun -甘える あまえる - depend on, take advantage of - Verb -甘やかす あまやかす - be indulgent to, spoil - Verb -辛い からい - strict, severe, spicy - Adjective -アルファベット アルファベット - alphabet - Noun -幸い さいわい - happiness, good fortune - Adjectival Noun -幸運 こううん - good fortune, good luck - Adjectival Noun -幸福 こうふく - happiness, good fortune - Adjectival Noun -砂 すな - sand, grit - Noun -砂漠 さばく - desert - Noun -漁業 ぎょぎょう - fishing industry - Noun -薄暗い うすぐらい - gloomy, dim - Adjective -薄める うすめる - thin, dilute - Verb -いびき いびき - snoring - Noun -薄着 うすぎ - light clothing - Verbal Noun -厚着 あつぎ - heavy clothing - Verbal Noun -圧力 あつりょく - pressure - Noun -気圧 きあつ - atmospheric pressure - Noun -高気圧 こうきあつ - high pressure - Noun -縮小 しゅくしょう - reduction, curtailment - Verbal Noun -越す こす - go over, surmount - Verb -いやらしい いやらしい - disgusting, nasty - Adjective -追い抜く おいぬく - pass, overtake - Verb -札 さつ - note, paper money - Noun -改札 かいさつ - ticket gate - Verbal Noun -感謝 かんしゃ - gratitude, thanks - Verbal Noun -月謝 げっしゃ - monthly (tuition) fee - Noun -射す さす - shine on - Verb -過程 かてい - process, course - Noun -イントネーション イントネーション - intonation - Noun -課程 かてい - course, curriculum - Noun -行程 こうてい - journey; a distance - Noun -先程 さきほど - some time ago, a little while ago - Noun -優れる すぐれる - be superior to; excel - Verb -女優 じょゆう - actress - Noun -透き通る すきとおる - be transparent - Verb -指導 しどう - guide, lead - Verbal Noun -希望 きぼう - hope, wish - Verbal Noun -がたがた がたがた - rattle - Adjective -失望 しつぼう - disappointment, loss of hope - Verbal Noun -意志 いし - will, volition - Noun -志す こころざす - have an ambition for, aspire - Verb -怒り いかり - anger, rage - Noun -自身 じしん - self - Noun -出身 しゅっしん - person's origin - Noun -全身 ぜんしん - the whole body - Noun -カンニング カンニング - cheating - Verbal Noun -身長 しんちょう - stature, height - Noun -心身 しんしん - mind and body - Noun -受け身 うけみ - passiveness, passive voice - Noun -証拠 しょうこ - proof, evidence - Noun -照明 しょうめい - illumination, lighting - Verbal Noun -工夫 くふう - contrivance, scheme - Verbal Noun -主婦 しゅふ - housewife - Noun -あぐら あぐら - sit cross legged - Noun -産婦人科 さんふじんか - obstetrics and gynecology - Noun -奥様 おくさま - married woman, someone's wife - Noun -お互い おたがい - each other - Noun -交互 こうご - by turns, alternatively - Noun -高齢 こうれい - advanced age, elderly - Noun -愛情 あいじょう - love, affection - Noun -可愛らしい かわいらしい - lovely, charming - Adjective -可愛がる かわいがる - love, cherish - Verb -いやいや いやいや - reluctantly - Adverb -恋 こい - love, romance - Noun -失恋 しつれん - broken heart - Verbal Noun -恋する こいする - love, fall in love with - Verb -延長 えんちょう - extension, prolongation - Verbal Noun -延期 えんき - postponement, deferment - Verbal Noun -祝う いわう - celebrate, congratulate - Verb -祝い いわい - celebration, congratulation - Noun -ウエスト ウエスト - the waist - Noun -純粋 じゅんすい - pure, unmixed - Adjectival Noun -慎重 しんちょう - careful, discreet - Adjectival Noun -笑顔 えがお - smiling face, smile - Noun -大喜び おおよろこび - great joy, delight - Verbal Noun -看護 かんご - nursing - Verbal Noun -看病 かんびょう - nursing (a patient) - Verbal Noun -肯定 こうてい - affirmation - Verbal Noun -オルガン オルガン - organ, pipe organ - Noun -記述 きじゅつ - description - Verbal Noun -裁判 さいばん - trial, judgment - Verbal Noun -裁判所 さいばんしょ - courthouse - Noun -訴え うったえ - lawsuit, appeal - Noun -区域 くいき - zone - Noun -疑い うたがい - doubt, suspicion - Noun -疑問 ぎもん - question, doubt - Noun -からから からから - laugh loudly - Adverb -疑う うたがう - doubt, be suspicious - Verb -疑わしい うたがわしい - doubtful, questionable - Adjective -著しい いちじるしい - remarkable, conspicuous - Adjective -著す あらわす - write - Verb -権利 けんり - right, privilege - Noun -権力 けんりょく - power, authority - Noun -人権 じんけん - human rights - Noun -棄権 きけん - dropping out, renouncing rights - Verbal Noun -きっちん きっちん - kitchen - Noun -侵す おかす - invade, violate - Verb -行為 こうい - act, conduct - Noun -賞 しょう - prize, award - Noun -賞品 しょうひん - prize, trophy - Noun -観賞 かんしょう - ornamental; admiration - Verbal Noun -財政 ざいせい - public finance, financial affairs - Noun -財産 ざいさん - fortune, asset - Noun -くしゃくしゃ くしゃくしゃ - messy, crumpled - Adverb -金融 きんゆう - finance - Noun -間隔 かんかく - interval, space - Noun -終了 しゅうりょう - end, expiry - Verbal Noun -完了 かんりょう - completion - Verbal Noun -修了 しゅうりょう - completion (of a course) - Verbal Noun -承認 しょうにん - approval, recognition - Verbal Noun -承知 しょうち - consent, knowledge - Verbal Noun -けち けち - stingy, miser - Adjectival Noun -納める おさめる - pay a tax or fee - Verb -説得 せっとく - persuasion - Verbal Noun -所得 しょとく - income, earnings - Noun -得る える - obtain, gain - Verb -乾燥 かんそう - drying up, desiccation - Verbal Noun -幹部 かんぶ - executive - Noun -酸素 さんそ - oxygen - Noun -素直 すなお - honest, straightforward - Adjective -ざらざら ざらざら - rough, gritty - Noun -水素 すいそ - hydrogen - Noun -素早い すばやい - nimble, quick - Adjective -石炭 せきたん - coal - Noun -岩 いわ - rock, cliff - Noun -岸 きし - shore, bank - Noun -校庭 こうてい - schoolyard, campus - Noun -解散 かいさん - breakup, dissolution - Verbal Noun -スモッグ スモッグ - smog - Noun -植物 しょくぶつ - plant, vegetation - Noun -植民地 しょくみんち - colony, settlement - Noun -植木 うえき - garden plant, shrub - Noun -植物園 しょくぶつえん - botanical garden - Noun -根拠 こんきょ - grounds, basis - Noun -根本 こんぽん - basis, root - Noun -板 いた - board, plank - Noun -すり すり - pickpocket - Noun -看板 かんばん - signboard, sign - Noun -草花 くさばな - plants and flowers - Noun -草木 くさき - plants and trees - Noun -言葉遣い ことばづかい - wording, language - Noun -落ち葉 おちば - fallen leaves - Noun -木の葉 このは - tree leaves - Noun -書き言葉 かきことば - written language - Noun -吸収 きゅうしゅう - absorption, merger - Verbal Noun -おにぎり おにぎり - rice ball - Noun -呼吸 こきゅう - breathing, respiration - Verbal Noun -吸い込む すいこむ - inhale, suck in - Verb -及ぶ およぶ - reach to, come up to - Verb -扱う あつかう - handle, deal with - Verb -高級 こうきゅう - high rank, high class - Adjectival Noun -級 きゅう - grade, class - Noun -上級 じょうきゅう - higher grade, advanced class - Noun -かみそり かみそり - razor - Noun -初級 しょきゅう - beginner class, elementary level - Noun -血管 けっかん - blood vessel - Noun -出血 しゅっけつ - bleeding, hemorrhage - Verbal Noun -液体 えきたい - liquid, fluid - Noun -血液 けつえき - blood - Noun -液 えき - liquid, fluid - Noun -背中 せなか - back - Noun -がやがや がやがや - chatter loudly - Adverb -背広 せびろ - business suit - Noun -骨折 こっせつ - fracture, broken bone - Verbal Noun -健全 けんぜん - healthy, sound - Adjective -健康 けんこう - health - Noun -診断 しんだん - diagnosis - Verbal Noun -診察 しんさつ - medical examination - Verbal Noun -医療 いりょう - medical service, healthcare - Noun -きょろきょろ きょろきょろ - look around - Adverb -気の毒 きのどく - pitiable, regrettable - Adjectival Noun -消毒 しょうどく - disinfection, sterilization - Verbal Noun -症状 しょうじょう - symptom - Noun -清書 せいしょ - clean copy - Verbal Noun -清潔 せいけつ - clean; pure - Adjectival Noun -監督 かんとく - supervisor, film director - Verbal Noun -撮影 さつえい - photographing; filming - Verbal Noun -描く えがく - draw - Verb -くしゃみ くしゃみ - sneeze - Noun -活躍 かつやく - activity (esp. energetic) - Verbal Noun -再開 さいかい - reopening, restart - Verbal Noun -再生 さいせい - playback; resuscitation - Verbal Noun -再会 さいかい - reunion - Verbal Noun -編む あむ - knit; compile - Verb -解放 かいほう - release, setting free - Verbal Noun -開放 かいほう - opening - Verbal Noun -ぐずぐず ぐずぐず - drag one's feet, waste time - Adverb -重視 じゅうし - importance, value - Verbal Noun -視点 してん - viewpoint - Noun -近視 きんし - nearsightedness, shortsightedness - Noun -衣類 いるい - clothes, garments - Noun -衣服 いふく - clothes, dress - Noun -衣料 いりょう - clothing, garments - Noun -衣食住 いしょくじゅう - clothing and food and housing - Noun -くすぐったい くすぐったい - ticklish - Adjective -仮に かりに - supposing that, even if - Adverb -仮定 かてい - assumption, supposition - Verbal Noun -仮 かり - provisional, temporary - Noun -仮名遣い かなづかい - kana orthography, use of kana - Noun -演説 えんぜつ - speech, address - Verbal Noun -公演 こうえん - public performance - Verbal Noun -演じる えんじる - perform, play - Verb -出演 しゅつえん - appearance on stage, performance - Verbal Noun -くたびれる くたびれる - get tired, be worn out - Verb -劇 げき - drama, play - Noun -劇場 げきじょう - theater - Noun -演劇 えんげき - drama, play - Noun -喜劇 きげき - comedy - Noun -悲しみ かなしみ - grief, sadness - Noun -集団 しゅうだん - group, mass - Noun -固定 こてい - fixing, fixation - Verbal Noun -いらいら いらいら - be irritated - Adjective -固める かためる - harden, strengthen - Verb -固まる かたまる - harden, solidify - Verb -固体 こたい - solid, solid matter - Noun -固有 こゆう - peculiar to, characteristic - Adjectival Noun -主催 しゅさい - sponsorship, promotion - Verbal Noun -促す うながす - hasten, urge - Verb -催促 さいそく - demand, urging - Verbal Noun -エチケット エチケット - etiquette - Noun -古典 こてん - classics - Noun -辞典 じてん - dictionary - Noun -殊に ことに - especially, exceptionally - Adverb -象徴 しょうちょう - symbol, symbolize - Verbal Noun -微か かすか - faint, dim - Adjective -ご免 ごめん - sorry - Noun -許可 きょか - permission, approval - Verbal Noun -訓練 くんれん - training, practice - Verbal Noun -かっと かっと - lose one's temper, fly into a rage - Adverb -訓読み くんよみ - Japanese pronunciation - Verbal Noun -訓 くん - Japanese reading of kanji - Noun -助詞 じょし - particle, postposition - Noun -形容詞 けいようし - adjective - Noun -上司 じょうし - boss - Noun -司会 しかい - host; leading a meeting - Verbal Noun -購入 こうにゅう - purchase - Verbal Noun -がらがら がらがら - gargle (also empty, raspy) - Adverb -講演 こうえん - lecture - Verbal Noun -講義 こうぎ - lecture - Verbal Noun -休講 きゅうこう - cancellation of lecture - Verbal Noun -医師 いし - doctor, physician - Noun -講師 こうし - speaker, lecturer - Noun -技師 ぎし - engineer, technician - Noun -師走 しわす - December - Noun -かんかん かんかん - furious - Adverb -お手伝い おてつだい - helper, assistant - Verbal Noun -小鳥 ことり - small bird - Noun -大声 おおごえ - loud voice - Noun -歌声 うたごえ - singing voice - Noun -騒ぎ さわぎ - clamor, commotion - Noun -騒がしい さわがしい - noisy - Adjective -飼う かう - to keep (a pet or other animal) - Verb -これまで これまで - until now, until here - Noun -刺さる ささる - to stick into; to pierce - Verb -急激 きゅうげき - sudden, abrupt - Adjectival Noun -刺激 しげき - stimulus, stimulation - Verbal Noun -感激 かんげき - deep emotion, moving - Verbal Noun -興味 きょうみ - interest - Noun -興奮 こうふん - excitement, agitation - Verbal Noun -驚き おどろき - surprise, amazement - Noun -驚かす おどろかす - surprise, amaze - Verb -じめじめ じめじめ - feel damp, clammy - Adverb -至る いたる - come to, reach - Verb -至る所 いたるところ - everywhere, all over - Noun -至急 しきゅう - urgent, pressing - Noun -一致 いっち - accord, agreement - Verbal Noun -致す いたす - humbly do - Verb -傾く かたむく - decline, go down - Verb -傾ける かたむける - lean, cock (one's head) - Verb -じろじろ じろじろ - stare - Adverb -坂 さか - slope, incline - Noun -狭まる せばまる - become narrow, contract - Verb -狭める せばめる - narrow, contract - Verb -徐行 じょこう - going slowly - Verbal Noun -硬さ かたさ - hardness - Noun -柔軟 じゅうなん - pliable, soft - Adjective -緊急 きんきゅう - urgent, pressing - Adjectival Noun -あり あり - ant - Noun -緊張 きんちょう - tension, mental strain - Verbal Noun -拡張 かくちょう - expansion, extension - Verbal Noun -出張 しゅっちょう - business trip - Verbal Noun -衝突 しょうとつ - collision, conflict - Verbal Noun -煙突 えんとつ - chimney, smokestack - Noun -避ける さける - avoid, evade - Verb -軍事 ぐんじ - military affairs - Noun -軍 ぐん - army, troops - Noun -あいづち あいづち - interjections during a conversation that indicate the listener is paying attention and understanding the speaker - Noun -自衛隊 じえいたい - Self Defense Forces - Noun -軍隊 ぐんたい - army, troops - Noun -核 かく - core, atomic nucleus - Noun -結核 けっかく - tuberculosis - Noun -専攻 せんこう - major, specialization - Verbal Noun -攻める せめる - attack, take the offensive - Verb -撃つ うつ - shoot at, attack - Verb -かちかち かちかち - hard, solid - Adjective -暴れる あばれる - act violently, rage about - Verb -襲う おそう - raid, attack - Verb -絶対 ぜったい - absolutely - Adverb -気絶 きぜつ - fainting - Verbal Noun -消防 しょうぼう - fire fighting, fire prevention - Noun -嫌う きらう - dislike - Verb -嫌がる いやがる - dislike, hate - Verb -くたくた くたくた - exhausted - Adjective -機嫌 きげん - mood, health - Noun -好き嫌い すききらい - likes and dislikes, taste - Noun -抗議 こうぎ - protest - Verbal Noun -素敵 すてき - lovely, nice - Adjective -脅かす おどかす - threaten, intimidate - Verb -権威 けんい - authority, power - Noun -威張る いばる - put on airs, be arrogant - Verb -情勢 じょうせい - state of things, situation - Noun -こしょう こしょう - pepper - Noun -勢力 せいりょく - influence, power - Noun -勢い いきおい - vigor, momentum - Noun -恐れ おそれ - fear, risk - Noun -恐れる おそれる - fear - Verb -恐らく おそらく - probably - Adverb -怖がる こわがる - be afraid of, fear - Verb -巨大 きょだい - huge, gigantic - Adjectival Noun -すべすべ すべすべ - smooth - Adverb -拒否 きょひ - denial, rejection - Verbal Noun -系列 けいれつ - affiliation - Noun -系統 けいとう - system, lineage - Noun -子孫 しそん - descendant, offspring - Noun -絹 きぬ - silk - Noun -維持 いじ - maintenance, upkeep - Verbal Noun -紳士 しんし - gentleman - Noun -せっかく せっかく - with much trouble, specially - Adverb -偉大 いだい - great, mighty - Adjective -刀 かたな - sword, blade - Noun -孤独 こどく - solitary, lonely - Adjectival Noun -事柄 ことがら - matter, affair - Noun -柄 がら - pattern, design - Noun -柄 え - handle, grip - Noun -枝 えだ - branch, twig - Noun -あきれる あきれる - be stunned in disappointment or disbelief - Verb -枯れる かれる - wither, die - Verb -木枯らし こがらし - cold wintry wind - Noun -詩 し - poetry - Noun -詩人 しじん - poet - Noun -誠実 せいじつ - sincerity, honesty - Adjectival Noun -盛ん さかん - prosperous, active - Adjective -謙遜 けんそん - humility, modesty - Verbal Noun -兼ねる かねる - serve two functions, combine - Verb -あだ名 あだな - nickname - Noun -鋭い するどい - pointed, acute - Adjective -鎖 くさり - chain, tether - Noun -鑑賞 かんしょう - viewing, enjoyment (of art) - Verbal Noun -印鑑 いんかん - personal seal - Noun -鐘 かね - bell, gong - Noun -寿命 じゅみょう - life span - Noun -海水浴 かいすいよく - sea bathing - Verbal Noun -あふれる あふれる - over flow, flood - Verb -沿岸 えんがん - coast, shore - Noun -砂浜 すなはま - sandy beach - Noun -沖 おき - open sea; offshore - Noun -泉 いずみ - spring, fountain - Noun -温泉 おんせん - hot spring - Noun -澄む すむ - clear, become clear - Verb -叫び さけび - shout, cry - Noun -いか いか - squid - Noun -叫ぶ さけぶ - shout, cry out - Verb -喫煙 きつえん - smoking - Verbal Noun -懸ける かける - stake - Verb -恩 おん - debt of gratitude, kindness - Noun -市街 しがい - the streets, urban areas - Noun -粉 こな - powder, flour - Noun -小麦 こむぎ - wheat - Noun -小麦粉 こむぎこ - flour - Noun -いつのまに いつのまに - when - Adverb -大麦 おおむぎ - barley - Noun -炊事 すいじ - cooking - Verbal Noun -暦 こよみ - calendar, almanac - Noun -皮 かわ - peel, fur - Noun -毛皮 けがわ - fur - Noun -毛糸 けいと - woolen yarn, wool - Noun -尾 お - tail - Noun -インフレーション インフレーション - inflation - Noun -白髪 しらが - white hair, gray hair - Noun -耳鼻科 じびか - otorhinology, ear-nose-throat - Noun -唇 くちびる - lip, lips - Noun -解釈 かいしゃく - interpretation, explanation - Verbal Noun -居間 いま - living room - Noun -居る おる - to exist (humble) - Verb -一層 いっそう - more, even more - Adverb -ウィークエンド ウィークエンド - weekend - Noun -高層 こうそう - high altitude, high-rise - Noun -覆う おおう - cover, hide - Verb -戸籍 こせき - family register - Noun -ガラス戸 がらすど - glass door - Noun -新鮮 しんせん - fresh - Adjective -鮮やか あざやか - vivid - Adjective -群集 ぐんしゅう - crowd - Verbal Noun -郡 ぐん - county - Noun -うがい うがい - gargling - Verbal Noun -君 きみ - you - Noun -脂 あぶら - fat, grease - Noun -脂肪 しぼう - fat, grease - Noun -胃腸 いちょう - stomach and intestines - Noun -肝心 かんじん - vital, essential - Adjectival Noun -山脈 さんみゃく - mountain range - Noun -暮らす くらす - live, earn one's livelihood - Verb -うきうき うきうき - feel excited - Adverb -暮らし くらし - living, livelihood - Noun -暮れ くれ - dusk, the end (of a season or a year) - Noun -暮れる くれる - grow dark - Verb -お歳暮 おせいぼ - year-end gift - Noun -芝生 しばふ - lawn, turf - Noun -茎 くき - stem - Noun -推薦 すいせん - recommendation, nomination - Verbal Noun -うつむく うつむく - look downward - Verb -荒れる あれる - be wild; to fall into ruin - Verb -荒い あらい - wild, reckless - Adjective -荒い あらい - harsh, rough - Adjective -荒す あらす - damage, ransack, lay waste - Verb -慌ただしい あわただしい - busy; hurried - Adjective -慌てる あわてる - be disconcerted; hurry - Verb -儀式 ぎしき - ceremony, ritual - Noun -うなずく うなずく - nod - Verb -行儀 ぎょうぎ - manners, behavior - Noun -犠牲 ぎせい - sacrifice - Noun -赤ん坊 あかんぼう - baby - Noun -お坊さん おぼうさん - monk, priest - Noun -国旗 こっき - national flag - Noun -筋肉 きんにく - muscle, sinews - Noun -筋道 すじみち - logic; reason - Noun -筋 すじ - muscle - Noun -おだてる おだてる - flatter - Verb -裂ける さける - split, tear - Verb -座布団 ざぶとん - cushion - Noun -自己 じこ - oneself, self - Noun -抱える かかえる - hold in one's arms - Verb -抱く いだく - embrace, hug - Verb -句 く - phrase, clause - Noun -慣用句 かんようく - idiom, common phrase - Noun -かかと かかと - heel - Noun -下旬 げじゅん - end of the month (last third of a month) - Noun -上旬 じょうじゅん - first 10 days of month - Noun -飽きる あきる - to get tired of; to have had enough - Verb -飾り かざり - ornament, decoration - Noun -餌 えさ - bait, feed - Noun -旧 きゅう - old, former - Noun -育児 いくじ - childcare, child-raising - Noun -がさがさ がさがさ - rustle - Adverb -小児科 しょうにか - pediatrics - Noun -姓名 せいめい - full name - Noun -姓 せい - surname, family name - Noun -幼い おさない - young, childish - Adjective -眼科 がんか - ophthalmology - Noun -近眼 きんがん - nearsightedness, shortsightedness - Noun -居眠り いねむり - doze, nap - Verbal Noun -一瞬 いっしゅん - instant, moment - Noun -かじる かじる - nibble, bite - Verb -瞬間 しゅんかん - instant, moment - Noun -睡眠 すいみん - sleep, slumber - Verbal Noun -垂直 すいちょく - vertical, perpendicular - Adjectival Noun -心掛ける こころがける - keep in mind, try - Verb -腰掛ける こしかける - sit down - Verb -追い掛ける おいかける - chase, run after - Verb -腰掛け こしかけ - stool, seat - Noun -がぶがぶ がぶがぶ - (the sound of) guzzling - Adverb -お目に掛かる おめにかかる - meet, have the honor of seeing - Verb -拝む おがむ - bow in veneration, worship - Verb -括弧 かっこ - parentheses, brackets - Verbal Noun -指揮 しき - command, direction - Verbal Noun -輝く かがやく - shine brilliantly, glitter - Verb -抑える おさえる - suppress, bring under control - Verb -信仰 しんこう - faith, religious belief - Verbal Noun -からす からす - crow, raven - Noun -偶然 ぐうぜん - chance, accident - Adjectival Noun -偶数 ぐうすう - even number - Noun -隅 すみ - nook, corner - Noun -城 しろ - castle, fort - Noun -栽培 さいばい - cultivation - Verbal Noun -警戒 けいかい - vigilance, precaution - Verbal Noun -幾ら いくら - no matter how much - Adverb -伺う うかがう - politely ask - Verb -がん がん - cancer - Noun -後悔 こうかい - regret - Verbal Noun -悔しい くやしい - vexing, frustrating - Adjective -俺 おれ - I, me - Noun -相撲 すもう - sumo wrestling - Noun -偏る かたよる - be one-sided; be partial to - Verb -一遍に いっぺんに - all at once - Adverb -宗教 しゅうきょう - religion - Noun -ぎっしり ぎっしり - tightly - Adverb -審議 しんぎ - deliberation, consideration - Verbal Noun -憲法 けんぽう - constitution, constitutional law - Noun -衰える おとろえる - weaken, decline - Verb -惜しむ おしむ - regret - Verb -惜しい おしい - regrettable; almost but not quite - Adjective -恨み うらみ - resentment; hatred - Noun -恨む うらむ - hold a grudge, feel resentment - Verb -ぎゅうぎゅう ぎゅうぎゅう - packed, crammed - Adverb -覚悟 かくご - readiness, resolution - Noun -怪しい あやしい - suspicious, dubious - Adjective -怪しむ あやしむ - suspect - Verb -自慢 じまん - showing off; pride - Verbal Noun -食卓 しょくたく - dining table - Noun -歓迎 かんげい - welcome - Verbal Noun -勧める すすめる - suggest, recommend - Verb -ぎょうざ ぎょうざ - Chinese dumpling - Noun -焦点 しょうてん - focus, focal point - Noun -焦る あせる - feel pressured, feel hurried - Verb -焦げる こげる - scorch, burn - Verb -英雄 えいゆう - hero - Noun -雄 おす - male - Noun -獲得 かくとく - acquisition - Verbal Noun -収穫 しゅうかく - harvest, harvesting - Verbal Noun -稲 いね - rice plant - Noun -きれ きれ - a cut of cloth - Noun -稼ぐ かせぐ - earn, make money - Verb -原稿用紙 げんこうようし - Japanese writing paper (lined with a square grid, one square per character) - Noun -穏やか おだやか - calm, mild - Adjective -隠す かくす - hide, conceal - Verb -お陰 おかげ - help, thanks to - Noun -陰 かげ - shade, behind the scenes - Noun -塊 かたまり - lump, clod - Noun -くすぐる くすぐる - tickle - Verb -卑しい いやしい - lowly; crude; greedy - Adjective -砕く くだく - crush, smash - Verb -砕ける くだける - be crushed, break down - Verb -基礎 きそ - basis, foundation - Noun -貝 かい - shellfish, shell - Noun -賢い かしこい - wise, smart - Adjective -頻りに しきりに - frequently, repeatedly - Adverb -げらげら げらげら - guffaw; out loud - Adverb -頑固 がんこ - stubborn, obstinate - Adjectival Noun -頂く いただく - receive, eat - Verb -一斉に いっせいに - all together, all at once - Adverb -洗剤 せんざい - detergent, cleanser - Noun -真剣 しんけん - serious, sincere - Adjective -刑務所 けいむしょ - prison - Noun -刑事 けいじ - detective - Noun -強烈 きょうれつ - strong; intense - Adjective -ゴールデンウィーク ゴールデンウィーク - golden week - Noun -獣 けもの - beast, brute, animal - Noun -駆ける かける - gallop, run quickly - Verb -駆け足 かけあし - gallop, run - Verbal Noun -丘 おか - hill, slope - Noun -官庁 かんちょう - government office - Noun -県庁 けんちょう - prefectural office - Noun -擦る こする - rub, strike - Verb -こたつ こたつ - kotatsu, heated table with a coverlet - Noun -汗 あせ - sweat - Noun -軸 じく - axis - Noun -後輩 こうはい - one's junior - Noun -香り かおり - aroma; smell - Noun -香水 こうすい - perfume - Noun -合唱 がっしょう - chorus - Verbal Noun -結晶 けっしょう - crystal; crystallization - Verbal Noun -ことわざ ことわざ - proverb, common saying - Noun -敬う うやまう - respect, honor - Verb -座敷 ざしき - tatami room, Japanese-style room - Noun -敷金 しききん - (security) deposit; caution money - Noun -劣る おとる - be inferior to, be worse than - Verb -勘定 かんじょう - check, tab - Verbal Noun -勘 かん - sense, intuition - Noun -勘違い かんちがい - misunderstanding - Verbal Noun -霧 きり - fog, mist - Noun -これから これから - from now on, after this - Noun -霜 しも - frost - Noun -公衆 こうしゅう - the public - Noun -衆議院 しゅうぎいん - House of Representatives, Lower House - Noun -観衆 かんしゅう - audience - Noun -群衆 ぐんしゅう - the masses, multitude - Noun -暑中見舞い しょちゅうみまい - summer greeting - Noun -お仕舞い おしまい - the end - Noun -さす さす - pour - Verb -金銭 きんせん - money, cash - Noun -児童 じどう - child, juvenile - Noun -埋める うめる - bury, fill up (other reading of うずめる) - Verb -埋める うずめる - bury, fill in - Verb -墨 すみ - black ink - Noun -講堂 こうどう - lecture hall, auditorium - Noun -奨学金 しょうがくきん - scholarship - Noun -JR じぇいあーる - JR, Japan Railways - Noun -狂う くるう - become insane, get out of order - Verb -猿 さる - monkey, ape - Noun -地獄 じごく - hell, inferno - Noun -章 しょう - chapter; medal - Noun -頑丈 がんじょう - solid, strong - Adjectival Noun -親戚 しんせき - a relative - Noun -祈る いのる - pray, wish for - Verb -しびれる しびれる - become numb, get pins and needles - Verb -祈り いのり - prayer - Noun -襟 えり - collar, lapel - Noun -先祖 せんぞ - forefather, ancestor - Noun -粗筋 あらすじ - outline, plot - Noun -酢 す - vinegar - Noun -郊外 こうがい - suburbs, outskirts - Noun -近郊 きんこう - suburbs, outskirts - Noun -邪魔 じゃま - hindrance, obstruction - Verbal Noun -じゃぶじゃぶ じゃぶじゃぶ - vigorously; splashing water sound - Adverb -お年玉 おとしだま - New Year's gift - Noun -改善 かいぜん - improvement - Verbal Noun -親善 しんぜん - friendship - Noun -網 あみ - net, netting - Noun -縛る しばる - bind, tie - Verb -絞る しぼる - wring out, squeeze - Verb -紺 こん - dark blue, navy blue - Noun -じゃんじゃん じゃんじゃん - many times, repeatedly - Adverb -紅葉 こうよう - autumn leaves, crimson foliage - Verbal Noun -口紅 くちべに - lipstick, rouge - Noun -梅 うめ - plum - Noun -梅干 うめぼし - pickled plum - Noun -巣 す - nest, den - Noun -囲碁 いご - "game of ""go""" - Noun -嘘つき うそつき - liar - Noun -しわ しわ - wrinkle - Noun -考慮 こうりょ - consideration, deliberation - Verbal Noun -癖 くせ - habit, mannerism - Noun -下痢 げり - diarrhea - Verbal Noun -崖 がけ - cliff - Noun -嵐 あらし - storm - Noun -海峡 かいきょう - straits, channel - Noun -噂 うわさ - gossip, rumor - Verbal Noun -田舎 いなか - country, countryside - Noun -ずるがしこい ずるがしこい - sly, cunning - Adjective -校舎 こうしゃ - school building - Noun -お嬢さん おじょうさん - young lady, someone's daughter - Noun -娯楽 ごらく - amusement, pastime - Noun -生涯 しょうがい - one's lifetime - Noun -汽車 きしゃ - train - Noun -賭ける かける - bet, stake - Verb -蛍光灯 けいこうとう - fluorescent lamp - Noun -せいぜい せいぜい - at most - Adverb -車掌 しゃしょう - train conductor - Noun -芋 いも - potato, yam - Noun -菊 きく - chrysanthemum - Noun -軽蔑 けいべつ - contempt, disdain - Verbal Noun -揚げる あげる - deep-fry - Verb -諦める あきらめる - abandon, give up - Verb -演奏 えんそう - musical performance - Verbal Noun -ぜいたく ぜいたく - luxury, extravagance - Verbal Noun -窮屈 きゅうくつ - tight, cramped - Adjective -貨幣 かへい - money, currency - Noun -真珠 しんじゅ - pearl - Noun -故郷 こきょう - hometown, birthplace - Noun -花瓶 かびん - flower vase - Noun -一旦 いったん - once, for a while - Adverb -乞食 こじき - beggar - Noun -亀 かめ - turtle, tortoise - Noun -がくんと がくんと - sharply - Adverb -羨ましい うらやましい - envious, envy - Adjective -漕ぐ こぐ - row - Verb -稽古 けいこ - practice, learning - Verbal Noun -歌舞伎 かぶき - kabuki - Noun -囁く ささやく - whisper - Verb -咳 せき - cough - Noun -噛み付く かみつく - bite at - Verb -きらりと きらりと - sparkle - Adverb -屑 くず - waste, scraps - Noun -紙屑 かみくず - wastepaper - Noun -掻く かく - scratch - Verb -掻き回す かきまわす - stir up, agitate - Verb -憧れ あこがれ - yearning, longing - Noun -憧れる あこがれる - yearn after, adore - Verb -溺れる おぼれる - drown, be drowned - Verb -ごくんと ごくんと - in one gulp - Adverb -御無沙汰 ごぶさた - be out of touch - Verbal Noun -汲む くむ - collect, scoop up - Verb -苛め いじめ - bullying - Noun -苛める いじめる - bully; tease - Verb -曖昧 あいまい - ambiguous, vague - Adjective -大晦日 おおみそか - new year's eve - Noun -臆病 おくびょう - cowardice, timidity - Adjectival Noun -車椅子 くるまいす - wheelchair - Noun -柿 かき - persimmon, persimmon tree - Noun -お詫び おわび - apologize - Verbal Noun -釘 くぎ - nail, spike - Noun -錆びる さびる - rust, get rusty - Verb -爽やか さわやか - refreshing, clear - Adjective -雀 すずめ - sparrow - Noun -甥 おい - nephew - Noun -嗅ぐ かぐ - smell, sniff - Verb -炒める いためる - cook; stir-fry - Verb -一まず ひとまず - first of all - Adverb -万一 まんいち - if by any chance - Adverb -日ごろ ひごろ - routinely, daily - Adverb -日ソ にっそ - Japanese-Soviet - Noun -日 にち - Japan - Noun -データ データ - data - Noun -日時 にちじ - date and time - Noun -日日 ひにち - date, number of days - Noun -日々 ひび - daily, every day - Noun -三日月 みかづき - new moon, crescent moon - Noun -月日 つきひ - time, days (other reading of がっぴ) - Noun -ただ ただ - simply, merely - Adverb -土 つち - soil, ground - Noun -年月 としつき - time, years - Noun -年月日 ねんがっぴ - date - Noun -年月 ねんげつ - years, time (other reading of としつき) - Noun -年々 ねんねん - year by year, annually - Adverb -もっとも もっとも - quite right - Adjective -何か なにか - something, some - Adverb -何とか なんとか - somehow or other, something - Adverb -何より なにより - above all, before everything else - Noun -何と なんと - what, how - Adverb -何となく なんとなく - in some way, somehow - Adverb -何だか なんだか - somehow, somewhat - Adverb -メーカー メーカー - maker, manufacturer - Noun -何で なんで - why, what for - Adverb -何十 なんじゅう - several tens - Noun -何て なんて - what, how - Adverb -何しろ なにしろ - anyhow, as you know - Adverb -何千 なんぜん - several thousand, thousands - Noun -レベル レベル - level - Noun -何百 なんびゃく - several hundred, hundreds - Noun -やって来る やってくる - come, turn up - Verb -来日 らいにち - coming to Japan - Verbal Noun -日帰り ひがえり - a day trip - Verbal Noun -大して たいして - very, greatly - Adverb -むしろ むしろ - rather; instead - Adverb -大金 たいきん - large sum of money - Noun -大 だい - bigness, large size - Noun -日中 にっちゅう - during the day; Sino-Japanese - Noun -日中 にっちゅう - Sino-Japanese; during the day - Noun -中年 ちゅうねん - middle age - Noun -中 ちゅう - middle, medium size - Noun -ますます ますます - increasingly - Adverb -年中 ねんじゅう - all year - Adverb -大小 だいしょう - sizes; large and small - Noun -多少 たしょう - a little, somewhat - Adverb -ぶら下がる ぶらさがる - hang down, dangle - Verb -ぶら下げる ぶらさげる - hang, suspend - Verb -モデル モデル - model - Noun -下 もと - under (esp. influence or guidance) - Noun -やり方 やりかた - way of doing - Noun -方々 ほうぼう - everywhere, here and there (other reading of かたがた) - Noun -行方 ゆくえ - one's whereabouts - Noun -一人一人 ひとりひとり - each and every person - Noun -もたらす もたらす - bring about, lead to - Verb -日の入り ひのいり - sunset - Noun -出入り でいり - coming and going - Verbal Noun -出来上がる できあがる - be completed, be finished - Verb -人出 ひとで - turnout, crowd - Noun -日の出 ひので - sunrise - Noun -それぞれ それぞれ - each, respective - Adverb -出来上がり できあがり - completion, finish - Noun -出来るだけ できるだけ - as much as possible - Adverb -外す はずす - remove; leave - Verb -外れる はずれる - come off - Verb -外れ はずれ - "failure; extremity (was ""blank"")" - Noun -その内 そのうち - before long, sooner or later - Adverb -トップ トップ - top - Noun -本来 ほんらい - originally, essentially - Adverb -本人 ほんにん - the person himself, the said person - Noun -本年 ほんねん - this year - Noun -本日 ほんじつ - today - Noun -休める やすめる - to rest - Verb -ブーム ブーム - boom - Noun -一休み ひとやすみ - rest - Verbal Noun -大体 だいたい - outline, generally - Adverb -入力 にゅうりょく - input, power input - Verbal Noun -体力 たいりょく - physical strength - Noun -目上 めうえ - one's superiors, one's elders - Noun -漸く ようやく - at last; gradually (steadily) - Adverb -目方 めかた - weight - Noun -目下 めした - one's inferiors - Noun -目下 もっか - now, at present (other reading of めした) - Noun -出入り口 でいりぐち - doorway, gateway - Noun -一口 ひとくち - mouthful, bite - Noun -人手 ひとで - hand, manpower - Noun -チーム チーム - team - Noun -手入れ ていれ - care, repairs - Verbal Noun -手本 てほん - model, example - Noun -手足 てあし - hands and feet, limbs - Noun -田 た - rice field, rice paddy - Noun -花火 はなび - fireworks, firecrackers - Noun -タイプ タイプ - type - Noun -男女 だんじょ - men and women, both sexes - Noun -男子 だんし - boy, young man - Noun -私 わたくし - I, myself - Noun -友人 ゆうじん - friend - Noun -友 とも - friend, companion - Noun -ビジネス ビジネス - business - Noun -元 もと - origin, source - Noun -手元 てもと - at hand - Noun -元々 もともと - originally, by nature - Adverb -天 てん - sky, Heaven - Noun -本気 ほんき - seriousness, earnestness - Adjectival Noun -明日 みょうにち - tomorrow - Noun -ネットワーク ネットワーク - network - Noun -東西 とうざい - east and west - Noun -南西 なんせい - southwest - Noun -南東 なんとう - southeast - Noun -南北 なんぼく - north and south - Noun -北西 ほくせい - northwest - Noun -やや やや - little, somewhat - Adverb -北東 ほくとう - northeast - Noun -向ける むける - turn toward, point at - Verb -向き むき - direction, turn - Noun -向かい むかい - opposite side - Noun -入門 にゅうもん - initiation - Noun -デモ デモ - demonstration - Noun -門 もん - gate, entrance - Noun -開ける ひらける - to become opened up; develop (other reading of あける) - Verb -中間 ちゅうかん - middle, between - Noun -手間 てま - time, labour/trouble - Noun -間 ま - interval, duration of time, chamber - Noun -ワープロ ワープロ - word processor - Noun -高まる たかまる - rise, increase - Verb -高める たかめる - raise, enhance - Verb -安っぽい やすっぽい - cheap, tacky - Adjective -低下 ていか - falling, lowering - Verbal Noun -低 てい - low - Noun -最も もっとも - the most - Adverb -メンバー メンバー - member - Noun -月初め つきはじめ - at the beginning of the month - Noun -前年 ぜんねん - the year before - Noun -前方 ぜんぽう - front - Noun -手前 てまえ - in front - Noun -前向き まえむき - facing forward, positively - Adjectival Noun -ハードウェア ハードウェア - hardware - Noun -人前 ひとまえ - in front of other people - Noun -前もって まえもって - in advance - Adverb -出前 でまえ - home delivery of food - Noun -前半 ぜんはん - first half - Noun -半ば なかば - middle, halfway - Noun -マスコミ マスコミ - mass communication - Noun -半年 はんとし - half a year - Noun -明朝 みょうちょう - tomorrow morning - Noun -晩年 ばんねん - late in life - Noun -夜間 やかん - night, nighttime - Noun -夜空 よぞら - night sky - Noun -夜明け よあけ - dawn, daybreak - Noun -やがて やがて - soon, before long - Adverb -月夜 つきよ - moonlit night - Noun -夜 よ - night, evening - Noun -七夕 たなばた - Tanabata Festival, Star Festival - Noun -夕日 ゆうひ - setting sun - Noun -飲み水 のみみず - drinking water - Noun -わずか わずか - few, little - Adjectival Noun -飯 めし - cooked rice, meal - Noun -見上げる みあげる - look up - Verb -見下ろす みおろす - look down, overlook - Verb -見出し みだし - headline, heading - Noun -見本 みほん - sample, model - Noun -パターン パターン - pattern - Noun -見つめる みつめる - stare - Verb -見晴らし みはらし - view, outlook - Noun -月見 つきみ - moon viewing - Noun -よそ見 よそみ - look around - Verbal Noun -見かけ みかけ - looks, appearance - Noun -方言 ほうげん - dialect - Noun -ついに ついに - at last, finally - Adverb -一言 ひとこと - single word; a few words - Noun -文明 ぶんめい - civilization, culture - Noun -本文 ほんぶん - text, this text - Noun -文 ぶん - writings, sentence - Noun -読書 どくしょ - reading a book - Verbal Noun -まるで まるで - just like, completely - Adverb -読み書き よみかき - reading and writing - Noun -目覚ましい めざましい - striking, marvelous - Adjective -見覚え みおぼえ - recognition, remembrance - Noun -目覚まし めざまし - waking up - Noun -閉会 へいかい - closure (of a ceremony, event, meeting, etc.) - Verbal Noun -どんどん どんどん - steadily - Adverb -出会う であう - meet - Verb -話し合い はなしあい - talk, discussion - Noun -見合い みあい - meeting with a view to marriage - Verbal Noun -間に合わせる まにあわせる - make do - Verb -本社 ほんしゃ - head office - Noun -それほど それほど - so much, that much - Adverb -入社 にゅうしゃ - entering a company - Verbal Noun -満足 まんぞく - satisfaction, contentment - Verbal Noun -満たす みたす - fill, satisfy - Verb -満ちる みちる - be filled, expire - Verb -満員 まんいん - full to capacity - Noun -満月 まんげつ - full moon - Noun -もはや もはや - already, no longer (with negative verb) - Adverb -出来事 できごと - occurrence, incident - Noun -見事 みごと - splendid, admirable - Adjectival Noun -大工 だいく - carpenter - Noun -場 ば - opportunity, occasion; place - Noun -入場 にゅうじょう - entrance, admission - Verbal Noun -デザイン デザイン - design - Verbal Noun -電力 でんりょく - electric power, electricity - Noun -電子 でんし - electron, electronic - Noun -交じる まじる - be mingled, be mixed - Verb -交わる まじわる - associate with, socialize; cross - Verb -交ぜる まぜる - include; mix - Verb -ファン ファン - fan, lover - Noun -交ざる まざる - mix, socialize with - Verb -交わる まじわる - cross; mingle with - Verb -見通し みとおし - perspective, prospect - Noun -通じる つうじる - pass, communicate with - Verb -通す とおす - let pass, run through - Verb -通行 つうこう - passage, traffic - Noun -なさる なさる - do (honorific) - Verb -人通り ひとどおり - pedestrian traffic - Noun -一通り ひととおり - briefly, once over - Adverb -通路 つうろ - passage, alley - Noun -地上 ちじょう - above ground - Noun -地 ち - ground, place - Noun -まとまる まとまる - be collected - Verb -地下道 ちかどう - underground passage; subterranean tunnel - Noun -地下 ちか - underground - Noun -地方 ちほう - district, region - Noun -図る はかる - strive for, attempt - Verb -図書 としょ - books - Noun -ルール ルール - rule - Noun -他方 たほう - other side - Noun -他人 たにん - another person, stranger - Noun -中止 ちゅうし - suspension, stopping - Verbal Noun -通行止め つうこうどめ - road closed - Noun -見渡す みわたす - look out over - Verb -二度と にどと - never again - Adverb -ヘリコプター ヘリコプター - helicopter - Noun -度々 たびたび - often - Adverb -この度 このたび - on this occasion - Noun -毎度 まいど - every time, always - Noun -間近 まぢか - nearby, close at hand - Adjectival Noun -近道 ちかみち - shortcut - Noun -ともかく ともかく - "anyhow, at any rate (was ""at least"")" - Adverb -長年 ながねん - many years, long time - Noun -年長 ねんちょう - seniority - Adjectival Noun -長らく ながらく - for a long time - Adverb -長話 ながばなし - long conversation, talk for a long time - Verbal Noun -短大 たんだい - junior college - Noun -つい つい - inadvertently, accidentally - Adverb -短気 たんき - short temper - Adjectival Noun -広げる ひろげる - spread, unfold - Verb -広場 ひろば - plaza, open space - Noun -広まる ひろまる - to spread; to be propagated - Verb -広める ひろめる - spread, extend - Verb -トンネル トンネル - tunnel - Noun -全力 ぜんりょく - all one's might, full capacity - Noun -部門 ぶもん - division, department - Noun -本部 ほんぶ - head office, headquarters - Noun -部長 ぶちょう - section chief, department head - Noun -内部 ないぶ - interior, inner parts - Noun -部下 ぶか - subordinate - Noun -バランス バランス - balance - Noun -大部分 だいぶぶん - most, greater part - Noun -大国 たいこく - world power, large country - Noun -入国 にゅうこく - entry into a country, immigration - Verbal Noun -本国 ほんごく - one's native country - Noun -天国 てんごく - paradise - Noun -どうしても どうしても - by any means, really - Adverb -世の中 よのなか - the world, society - Noun -中世 ちゅうせい - Middle Ages - Noun -世 よ - world; society; generation - Noun -明白 めいはく - obvious; clear - Adjectival Noun -鉄道 てつどう - railway - Noun -どうか どうか - please; somehow or other - Adverb -鉄 てつ - iron - Noun -肉体 にくたい - body, flesh - Noun -白菜 はくさい - nappa cabbage - Noun -日米 にちべい - Japan and U.S. - Noun -味方 みかた - friend, ally - Noun -年末 ねんまつ - end of year - Noun -プロ プロ - pro, professional - Noun -末 まつ - the end of (other reading of すえ) - Noun -料金 りょうきん - charge, fee - Noun -地理 ちり - geography - Noun -理解 りかい - understanding, comprehension - Verbal Noun -解く とく - solve; unravel - Verb -チャンス チャンス - chance - Noun -分解 ぶんかい - taking apart - Verbal Noun -解ける とける - to be solved; to come untied - Verb -有力 ゆうりょく - powerful, influential - Adjectival Noun -有する ゆうする - have, possess - Verb -有料 ゆうりょう - fee-charging, toll - Noun -どうも どうも - for some reason, somehow; thanks - Adverb -無理 むり - impossibility - Noun -無料 むりょう - no charge, free - Noun -無事 ぶじ - safely, peacefully - Adverb -無口 むくち - not speaking much, reticence - Adjectival Noun -間も無く まもなく - soon, in a short time - Adverb -無言 むごん - silence, muteness - Noun -ハード ハード - hard - Adjective -無茶 むちゃ - reckless, excessive - Adjectival Noun -無理やり むりやり - by force, against one's will - Adverb -作り上げる つくりあげる - make up, build up - Verb -作り話 つくりばなし - fable, fiction - Noun -大使 たいし - ambassador - Noun -マイナス マイナス - minus, below zero - Verbal Noun -使い道 つかいみち - use, application - Noun -使い つかい - errand - Noun -用 よう - task; things to do - Noun -無用 むよう - useless, unnecessary - Adjectival Noun -費用 ひよう - expenses - Noun -とにかく とにかく - in any case, anyway - Adverb -費やす ついやす - expend, waste - Verb -安売り やすうり - sale - Verbal Noun -売買 ばいばい - buying and selling, trade - Verbal Noun -閉店 へいてん - shop closing - Verbal Noun -本店 ほんてん - head office - Noun -パイプ パイプ - pipe - Noun -部品 ぶひん - parts, accessories - Noun -日用品 にちようひん - groceries, daily necessities - Noun -段 だん - step, grade - Noun -値上がり ねあがり - price rise - Verbal Noun -値上げ ねあげ - price hike - Verbal Noun -値下がり ねさがり - fall in price - Verbal Noun -たちまち たちまち - in a moment, instantly - Adverb -値下げ ねさげ - price reduction - Verbal Noun -地価 ちか - price of land - Noun -体格 たいかく - physique, build - Noun -冬季 とうき - winter season - Noun -熱する ねっする - to heat - Verb -プラス プラス - plus, advantage - Verbal Noun -低温 ていおん - low temperature - Noun -体温 たいおん - body temperature - Noun -友情 ゆうじょう - friendship - Noun -人情 にんじょう - human feelings, humanity - Noun -情けない なさけない - pitiful, shameful - Adjective -リード リード - the lead, take a lead - Verbal Noun -報道 ほうどう - news, report - Verbal Noun -電報 でんぽう - telegram - Noun -中古 ちゅうこ - secondhand goods - Noun -古本 ふるほん - secondhand book - Noun -昔 むかし - old times, the old days - Noun -悪口 わるくち - slander, abuse - Noun -たとえ たとえ - even if, granting that - Adverb -熱心 ねっしん - enthusiasm, zeal - Adjectival Noun -良心 りょうしん - conscience - Noun -内心 ないしん - innermost thoughts, one's real intention - Noun -用心 ようじん - care, caution - Verbal Noun -忘年会 ぼうねんかい - year-end party - Noun -なるべく なるべく - as...as possible, if possible - Adverb -度忘れ どわすれ - memory lapse, forgetting for a moment something one knows well - Verbal Noun -知事 ちじ - governor - Noun -未知 みち - unknown - Noun -通知 つうち - notification - Verbal Noun -無知 むち - ignorance - Adjectival Noun -テーマ テーマ - the theme, the subject - Noun -知人 ちじん - acquaintance, friend - Noun -天才 てんさい - genius - Noun -本能 ほんのう - instinct - Noun -有能 ゆうのう - able, competent - Adjectival Noun -知能 ちのう - intelligence, mental capacity - Noun -無能 むのう - inefficiency, incompetence - Adjectival Noun -ムード ムード - mood - Noun -能 のう - noh play; ability - Noun -能 のう - ability, capability - Noun -不安 ふあん - uneasiness, anxiety - Adjectival Noun -不満 ふまん - dissatisfaction, discontent - Adjectival Noun -不足 ふそく - insufficiency, lack - Verbal Noun -退く どく - move out of the way - Verb -不可能 ふかのう - impossible - Adjectival Noun -不十分 ふじゅうぶん - insufficiency, lack - Adjectival Noun -不明 ふめい - unknown - Adjectival Noun -不良 ふりょう - bad, defective - Adjectival Noun -不合格 ふごうかく - (examination) failure - Noun -マーケット マーケット - market - Noun -不通 ふつう - interruption of service - Noun -便り たより - news, correspondence - Noun -大便 だいべん - stool, feces - Verbal Noun -番 ばん - one's turn, watch - Noun -長所 ちょうしょ - strong point, merit - Noun -ファッション ファッション - fashion - Noun -短所 たんしょ - shortcoming, defect - Noun -所々 ところどころ - here and there, at places - Noun -名 な - name, reputation - Noun -名人 めいじん - master, expert - Noun -地名 ちめい - place name - Noun -名所 めいしょ - famous place, sights - Noun -ブレーキ ブレーキ - brake - Noun -町外れ まちはずれ - outskirts of a town - Noun -町中 まちなか - the downtown area, the central area of a town - Noun -村 むら - village, hamlet - Noun -都内 とない - metropolitan area (of Tokyo) -Jisho -都心 としん - heart of a city - Noun -ミス ミス - mistake - Verbal Noun -都 と - metropolitan (of Tokyo); less common reading of みやこ - Noun -都会 とかい - city, town - Noun -都 みやこ - capital, city - Noun -様子 ようす - appearance; situation - Noun -物価 ぶっか - prices (in general) - Noun -ヨット ヨット - sailboat, yacht - Noun -物体 ぶったい - object, physical body - Noun -本物 ほんもの - real thing, genuine article - Noun -物理 ぶつり - physics, natural law - Noun -物事 ものごと - things, everything - Noun -名物 めいぶつ - famous product; special product - Noun -物知り ものしり - knowledgeable person, know-it-all - Noun -なかなか なかなか - rather, pretty - Adverb -物覚え ものおぼえ - memory - Noun -体重 たいじゅう - body weight - Noun -手軽 てがる - easy, simple - Adjective -多量 たりょう - large quantity, great deal - Noun -量る はかる - measure, weigh - Verb -ロック ロック - rock (music) - Noun -量 りょう - quantity, volume - Noun -大量 たいりょう - large quantity, great volume - Noun -年配 ねんぱい - age, elderly age - Noun -送金 そうきん - money transfer, remittance - Verbal Noun -郵送 ゆうそう - mailing - Verbal Noun -わざわざ わざわざ - go to a lot of trouble; doing something especially rather than incidentally - Adverb -取り上げる とりあげる - take up, confiscate - Verb -取り入れる とりいれる - take in, adopt - Verb -取り決め とりきめ - decision, agreement - Noun -取れる とれる - be harvested; come off - Verb -取り消す とりけす - cancel, nullify - Verb -取消し とりけし - cancellation, annulment - Verbal Noun -パイロット パイロット - pilot - Noun -取り出す とりだす - take out, pull out - Verb -届け とどけ - report, delivery - Noun -待ち合わせ まちあわせ - appointment; waiting - Verbal Noun -待ち遠しい まちどおしい - anxiously awaited - Adjective -待ち合わせる まちあわせる - wait for, meet by appointment - Verb -どうやら どうやら - seems, looks like - Adverb -持ち物 もちもの - one's property, one's baggage - Noun -長持ち ながもち - endurance, lasting long - Verbal Noun -値打ち ねうち - value, worth - Noun -投書 とうしょ - letter to the editor - Verbal Noun -役所 やくしょ - public office - Noun -ふと ふと - suddenly, unexpectedly - Adverb -役人 やくにん - government official - Noun -役目 やくめ - duty, role - Noun -役 やく - role, part - Noun -生える はえる - grow, spring up - Verb -長生き ながいき - long life, longevity - Verbal Noun -ベテラン ベテラン - veteran - Noun -生やす はやす - grow, cultivate (a beard) - Verb -生 なま - raw, fresh (other reading of せい) - Adjectival Noun -無生物 むせいぶつ - inanimate object - Noun -男性 だんせい - male, man - Noun -理性 りせい - reason, reasoning power - Noun -ボーナス ボーナス - bonus - Noun -土産 みやげ - souvenir - Noun -徒歩 とほ - walking, going on foot - Noun -学ぶ まなぶ - learn, study - Verb -文学 ぶんがく - literature - Noun -体育 たいいく - physical education - Noun -そっくり そっくり - identical, look alike - Adjective -体制 たいせい - system, structure - Noun -強まる つよまる - become strong, gain strength - Verb -強める つよめる - strengthen, emphasize - Verb -力強い ちからづよい - powerful, vigorous - Adjective -強気 つよき - strong; confident - Adjectival Noun -レンズ レンズ - lens - Noun -弱まる よわまる - weaken, abate - Verb -弱める よわめる - weaken, lower - Verb -弱る よわる - weaken, be debilitated - Verb -弱み よわみ - weakness, shortcoming - Noun -弱気 よわき - timid, weak-spirited - Adjectival Noun -引き受ける ひきうける - undertake - Verb -ペース ペース - pace - Noun -引き上げる ひきあげる - pull up, salvage - Verb -引き出す ひきだす - take out; draw out - Verb -引き取る ひきとる - take over, take custody - Verb -値引き ねびき - discount - Verbal Noun -長引く ながびく - be prolonged, drag on - Verb -マラソン マラソン - marathon - Noun -引きずる ひきずる - drag along, pull - Verb -引き分け ひきわけ - draw, drawn game - Noun -引き止める ひきとめる - detain, keep - Verb -見習う みならう - learn, follow someone's example - Verb -慣れ なれ - getting used to, habituation - Noun -よほど よほど - very, by far - Adverb -慣らす ならす - accustom - Verb -入試 にゅうし - entrance examination - Noun -試す ためす - try, test - Verb -試し ためし - trial, test - Noun -体験 たいけん - (personal) experience - Verbal Noun -物質 ぶっしつ - matter, substance - Noun -ラグビー ラグビー - rugby - Noun -品質 ひんしつ - quality - Noun -本質 ほんしつ - essence, reality - Noun -問う とう - ask, question - Verb -問い合わせる といあわせる - inquire, contact - Verb -問い とい - question, inquiry - Noun -ラッシュ ラッシュ - rush, rush hour - Noun -問屋 とんや - wholesale store, wholesaler - Noun -話題 わだい - topic of conversation - Noun -題名 だいめい - title - Noun -題 だい - title, topic - Noun -単語 たんご - word - Noun -ロープ ロープ - rope - Noun -単に たんに - merely, simply - Adverb -地点 ちてん - site, spot, point - Noun -満点 まんてん - full marks, perfect score - Noun -点 てん - spot, point, issue - Noun -多数 たすう - large number, multitude - Noun -ダム ダム - dam - Noun -複数 ふくすう - plural - Noun -無数 むすう - countless, innumerable - Adjectival Noun -日数 にっすう - number of days - Noun -点数 てんすう - points, score - Noun -単数 たんすう - singular - Noun -手数 てすう - trouble, bother - Noun -ダウン ダウン - down, malfunction - Verbal Noun -人数 にんずう - number of people - Noun -回り まわり - vicinity, whereabouts - Noun -回り道 まわりみち - roundabout way, detour - Noun -枚数 まいすう - number of flat things - Noun -負け まけ - defeat, loss - Noun -トレーニング トレーニング - training, workout - Verbal Noun -負担 ふたん - burden, charge - Verbal Noun -分担 ぶんたん - assigning tasks, sharing burden - Verbal Noun -当初 とうしょ - original, initial - Noun -当局 とうきょく - the authorities concerned - Noun -当日 とうじつ - that day - Noun -そっと そっと - softly, gently - Adverb -手当て てあて - allowance, medical care - Verbal Noun -当分 とうぶん - for some time, for the present - Adverb -当人 とうにん - the person in question - Noun -当番 とうばん - being on duty, person on duty - Noun -日当たり ひあたり - exposure to the sun - Noun -天然 てんねん - nature - Noun -マーク マーク - logo - Verbal Noun -文法 ぶんぽう - grammar - Noun -法学部 ほうがくぶ - law department - Noun -法 ほう - law, rule - Noun -法則 ほうそく - law, rule - Noun -不規則 ふきそく - irregular - Adjectival Noun -たった たった - only, merely - Adverb -経る へる - pass, pass through - Verb -有利 ゆうり - advantageous, profitable - Adjectival Noun -不利 ふり - disadvantage - Adjectival Noun -利口 りこう - clever, bright - Adjectival Noun -利子 りし - interest - Noun -たまたま たまたま - by chance, accidentally - Adverb -左利き ひだりきき - left-handedness, left-hander - Noun -利益 りえき - profit, benefit - Noun -有益 ゆうえき - beneficial, profitable - Adjectival Noun -買収 ばいしゅう - buying up, bribing - Verbal Noun -年収 ねんしゅう - annual income - Noun -木造 もくぞう - wooden - Noun -テンポ テンポ - tempo, pace - Noun -必然 ひつぜん - inevitable, necessary - Noun -要する ようする - require, need - Verb -不要 ふよう - unnecessary, waste - Adjectival Noun -要するに ようするに - in a word, in short - Adverb -不必要 ふひつよう - unnecessary, superfluous - Adjectival Noun -プラン プラン - plan - Noun -要点 ようてん - main point, gist - Noun -求める もとめる - seek, wish for - Verb -要請 ようせい - request, demand - Verbal Noun -額 ひたい - forehead, brow - Noun -計る はかる - compute, measure - Verb -ほっと ほっと - feel relieved - Adverb -体温計 たいおんけい - thermometer - Noun -日差し ひざし - rays of the sun, sunlight - Noun -物差し ものさし - ruler - Noun -役割 やくわり - role, part - Noun -割合 わりあい - rate, proportion - Adverb -なるほど なるほど - I see, really - Adverb -割り当て わりあて - assignment, allotment - Noun -割り当てる わりあてる - assign, allot - Verb -割り引く わりびく - give a discount, make a reduction - Verb -割に わりに - comparatively, rather - Adverb -割り わり - rate - Noun -割り引き わりびき - discount, reduction - Verbal Noun -バイト バイト - part-time job - Verbal Noun -割合に わりあいに - relatively, rather - Adverb -残り のこり - remainder, leftover - Noun -残らず のこらず - entirely, without exception - Adverb -払い はらい - payment, account - Noun -引き返す ひきかえす - turn back, retrace one's steps - Verb -ぶつける ぶつける - bump - Verb -取り返す とりかえす - take back, regain - Verb -申し出る もうしでる - offer, propose - Verb -申し上げる もうしあげる - speak humbly, do - Verb -申す もうす - speak humbly, state humbly - Verb -持ち込む もちこむ - bring in, carry on - Verb -タイヤ タイヤ - tire - Noun -見込み みこみ - hope, prospect - Noun -申し込み もうしこみ - application, proposal - Noun -払い込む はらいこむ - pay in, pay up - Verb -飲み込む のみこむ - swallow, grasp - Verb -割り込む わりこむ - cut in - Verb -引っ込む ひっこむ - draw back, pull in - Verb -マイク マイク - mic, microphone - Noun -人込み ひとごみ - crowd - Noun -長期 ちょうき - long period - Noun -短期 たんき - short-term - Noun -短期大学 たんきだいがく - junior college - Noun -有限 ゆうげん - limited, finite - Adjectival Noun -ゆとり ゆとり - room, leeway - Noun -無限 むげん - infinite, endless - Adjectival Noun -無制限 むせいげん - unlimited, free - Adjectival Noun -値切る ねぎる - bargain, haggle - Verb -前売り券 まえうりけん - advance ticket - Noun -年代 ねんだい - age, date - Noun -ぼんやり ぼんやり - vaguely, absent-mindedly - Adjective -代金 だいきん - charge, fee - Noun -目指す めざす - aim for, have an eye on - Verb -指差す ゆびさす - point to - Verb -人差し指 ひとさしゆび - index finger - Noun -中指 なかゆび - middle finger - Noun -定年 ていねん - mandatory retirement age - Noun -たまらない たまらない - can't stand, can't put up with - Adjective -不安定 ふあんてい - instability - Adjectival Noun -定員 ていいん - fixed staff number, capacity - Noun -定期 ていき - fixed term, regular - Noun -定価 ていか - fixed price - Noun -未定 みてい - undecided, pending - Noun -モーター モーター - motor, engine - Noun -定食 ていしょく - day's special, set menu - Noun -定休日 ていきゅうび - regular holiday - Noun -予算 よさん - budget - Noun -予報 よほう - forecast, prediction - Verbal Noun -予言 よげん - prediction, forecast - Verbal Noun -まして まして - much more - Adverb -束 たば - bundle, counter for bundles - Noun -花束 はなたば - bunch of flowers - Noun -変更 へんこう - alteration, change - Verbal Noun -夜更かし よふかし - sitting up late at night - Verbal Noun -増す ます - increase, augment - Verb -ピストル ピストル - pistol - Noun -増大 ぞうだい - increase, enlargement - Verbal Noun -増減 ぞうげん - increase and decrease, rise and fall - Verbal Noun -乗り出す のりだす - lean forward, embark on - Verb -乗り込む のりこむ - board, march into - Verb -乗り降り のりおり - getting on and off - Verbal Noun -着ける つける - pull up, park (a vehicle) - Verb -たっぷり たっぷり - fully, amply - Adverb -水着 みずぎ - bathing suit - Noun -役立つ やくだつ - be of use, serve a purpose - Verb -立ち上がる たちあがる - stand up, take action - Verb -中立 ちゅうりつ - neutrality - Verbal Noun -都立 とりつ - metropolitan, Tokyo metropolitan - Noun -つくづく つくづく - truly, deeply - Adverb -立て込む たてこむ - full of, crowded with - Verb -夕立 ゆうだち - sudden evening shower - Noun -立ち止まる たちどまる - stop, halt - Verb -着席 ちゃくせき - taking a seat - Verbal Noun -次々に つぎつぎに - one after another, in succession - Adverb -どうせ どうせ - anyway - Adverb -次ぐ つぐ - rank next to, come next - Verb -取り次ぐ とりつぐ - relay a message, transfer a call - Verb -目次 もくじ - table of contents - Noun -不運 ふうん - misfortune, bad luck - Adjectival Noun -動向 どうこう - trend, tendency - Noun -動作 どうさ - movements, actions - Noun -リズム リズム - rhythm - Noun -動力 どうりょく - power - Noun -働き はたらき - work, function - Noun -早朝 そうちょう - early morning - Noun -早める はやめる - move forward (in time), expedite - Verb -早まる はやまる - make a hasty decision, jump the gun - Verb -ハンドル ハンドル - steering wheel - Noun -速度 そくど - speed, velocity - Noun -速達便 そくたつびん - special delivery, express mail - Noun -乗り遅れる のりおくれる - miss - Verb -始め はじめ - beginning, origin - Noun -始まり はじまり - beginning - Noun -プリント プリント - print - Verbal Noun -年始 ねんし - beginning of the year - Noun -不在 ふざい - absence - Noun -実る みのる - bear fruit, ripen - Verb -実 み - fruit, nut - Noun -通り過ぎる とおりすぎる - go past, pass - Verb -発売 はつばい - sale, selling - Verbal Noun -まぶしい まぶしい - dazzling, glaring - Adjective -発つ たつ - start, leave - Verb -発行 はっこう - publication, issue - Verbal Noun -発達 はったつ - development, growth - Verbal Noun -発明 はつめい - invention - Verbal Noun -発電 はつでん - generation of electricity - Verbal Noun -よそ よそ - somewhere else - Noun -発電所 はつでんしょ - power plant, generating station - Noun -発熱 はつねつ - generation of heat, get a fever - Verbal Noun -表情 ひょうじょう - expression, look - Noun -用紙 ようし - blank form, stationery - Noun -表紙 ひょうし - cover, binding - Noun -つぐ つぐ - pour, pour into - Verb -白紙 はくし - blank sheet, clean slate - Noun -音 ね - sound, note - Noun -発音 はつおん - pronunciation - Verbal Noun -物音 ものおと - noise, sound - Noun -楽しみ たのしみ - pleasure, something looked forward to - Noun -ディスコ ディスコ - disco - Noun -楽 らく - comfort, relief - Adjectival Noun -薬品 やくひん - medicine, drug - Noun -薬局 やっきょく - drugstore, pharmacy - Noun -目薬 めぐすり - eye drops - Noun -欲 よく - desire, greed - Noun -欲求 よっきゅう - want, desire - Verbal Noun -ぴったり ぴったり - exactly right, perfect - Adjectival Noun -表面 ひょうめん - surface, appearance - Noun -場面 ばめん - scene, situation - Noun -面する めんする - face - Verb -方面 ほうめん - direction - Noun -半面 はんめん - profile, one side - Noun -まさか まさか - never in a million years - Adverb -面 めん - surface, aspect - Noun -真っ先 まっさき - first thing, forefront - Noun -真夏 まなつ - midsummer - Noun -真夜中 まよなか - midnight, middle of the night - Noun -真っ最中 まっさいちゅう - midst - Noun -どっと どっと - burst (out laughing) - Adverb -真心 まごころ - sincerity, true heart - Noun -無色 むしょく - colorless, neutral - Noun -ばら色 ばらいろ - rose color - Noun -水色 みずいろ - sky blue, turquoise - Noun -長方形 ちょうほうけい - rectangle - Noun -地形 ちけい - geographical features, topography - Noun -もうける もうける - make a profit - Verb -種 たね - seed - Noun -分類 ぶんるい - classification - Verbal Noun -直前 ちょくぜん - just before, immediately prior - Noun -直ちに ただちに - at once, immediately - Adverb -見直す みなおす - reconsider, change one's opinion for the better - Verb -ゆったり ゆったり - comfortable - Adverb -直後 ちょくご - immediately after - Noun -立ち直る たちなおる - recover, regain one's footing - Verb -やり直し やりなおし - doing over, redoing - Noun -やり直す やりなおす - do over again - Verb -直通 ちょくつう - direct link - Verbal Noun -ちっとも ちっとも - nothing at all - Adverb -面接 めんせつ - interview - Verbal Noun -無線 むせん - radio, wireless - Noun -線路 せんろ - line, track - Noun -直線 ちょくせん - straight line - Noun -電線 でんせん - electric wire - Noun -脱線 だっせん - derailment - Verbal Noun -ドレス ドレス - dress - Noun -白線 はくせん - white line, warning line - Noun -方角 ほうがく - direction - Noun -直角 ちょっかく - right angle - Noun -町角 まちかど - street corner - Noun -真四角 ましかく - square - Adjectival Noun -パンク パンク - puncture - Verbal Noun -共に ともに - together, both - Adverb -同時 どうじ - simultaneous - Noun -同一 どういつ - sameness, identity - Adjectival Noun -同情 どうじょう - sympathy, compassion - Verbal Noun -同性 どうせい - of the same sex - Noun -のんびり のんびり - take it easy - Adverb -違いない ちがいない - no mistaking it, for certain - Adjective -人違い ひとちがい - mistaken identity - Verbal Noun -見違える みちがえる - mistake, fail to recognize - Verb -違い ちがい - difference, mistake - Noun -似る にる - resemble, be alike - Verb -はめる はめる - put on, wear - Verb -似合う にあう - suit, match well - Verb -似せる にせる - imitate, forge - Verb -旅 たび - journey, travel - Verbal Noun -旅客 りょかく - traveler, passenger - Noun -旅費 りょひ - traveling expenses - Noun -和らげる やわらげる - soften, relieve - Verb -ふた ふた - lid, cover - Noun -和語 わご - native Japanese word - Noun -和風 わふう - Japanese style - Noun -和食 わしょく - Japanese-style food - Noun -和やか なごやか - peaceful, mild - Adjective -和らぐ やわらぐ - soften, calm down - Verb -レポート レポート - report, paper - Verbal Noun -和式 わしき - Japanese style - Noun -和英 わえい - Japanese-English - Noun -東洋 とうよう - Orient - Noun -洋風 ようふう - Western style - Noun -洋画 ようが - foreign film - Noun -マネー マネー - money, finance - Noun -洋式 ようしき - Western style - Noun -洋食 ようしょく - Western cooking, European dish - Noun -洋間 ようま - Western-style room - Noun -和服 わふく - Japanese clothes, kimono - Noun -待合室 まちあいしつ - waiting room - Noun -和室 わしつ - Japanese style room - Noun -もろい もろい - weak, brittle - Adjective -洋室 ようしつ - Western-style room - Noun -窓口 まどぐち - window - Noun -父母 ふぼ - father and mother, parents - Noun -母親 ははおや - mother - Noun -父親 ちちおや - father - Noun -ユーモア ユーモア - humor - Noun -父兄 ふけい - parents, legal guardians - Noun -第一 だいいち - number one, the best - Noun -利息 りそく - interest - Noun -若々しい わかわかしい - youthful, young-looking - Adjective -読者 どくしゃ - reader, subscriber - Noun -バック バック - back - Verbal Noun -歩行者 ほこうしゃ - pedestrian - Noun -文学者 ぶんがくしゃ - literary person, literati - Noun -歩行者天国 ほこうしゃてんごく - vehicle-free promenade - Noun -者 もの - person, fellow - Noun -結ぶ むすぶ - tie, join - Verb -結び むすび - end, close - Noun -そびえる そびえる - tower - Verb -未婚 みこん - unmarried - Noun -果たす はたす - accomplish, realize - Verb -果たして はたして - as was expected, really - Adverb -日課 にっか - daily routine - Noun -有効 ゆうこう - effective, valid - Adjectival Noun -タレント タレント - celebrity, talent - Noun -無効 むこう - invalidity, ineffectiveness - Adjectival Noun -自ら みずから - oneself - Adverb -不自然 ふしぜん - unnatural, artificial - Adjectival Noun -不自由 ふじゆう - inconvenience, discomfort - Verbal Noun -通信 つうしん - correspondence, communication - Verbal Noun -たまに たまに - occasionally, by chance - Adverb -頼る たよる - rely on, depend on - Verb -頼み たのみ - request, favor - Noun -頼もしい たのもしい - reliable, dependable - Adjective -民間 みんかん - citizens, civilians - Noun -民族 みんぞく - race, people - Noun -ペンキ ペンキ - paint - Noun -持ち主 もちぬし - owner, proprietor - Noun -民主 みんしゅ - democracy - Noun -家主 やぬし - landlord - Noun -定義 ていぎ - definition - Verbal Noun -不思議 ふしぎ - mystery, wonder - Adjectival Noun -理論 りろん - theory - Noun -ベンチ ベンチ - bench - Noun -論理 ろんり - logic - Noun -論文 ろんぶん - thesis, paper - Noun -論じる ろんじる - argue, discuss - Verb -無論 むろん - of course, no doubt - Adverb -世論 よろん - public opinion - Noun -めいめい めいめい - each, individual - Adverb -論 ろん - argument, opinion - Noun -反発 はんぱつ - reaction, backlash - Verbal Noun -反映 はんえい - reflection - Verbal Noun -反論 はんろん - objection, counterargument - Verbal Noun -反する はんする - oppose, act contrary to - Verb -どうにか どうにか - somehow - Adverb -反則 はんそく - foul, rule violation - Verbal Noun -対話 たいわ - dialogue, conversation - Verbal Noun -対 つい - pair - Noun -対応 たいおう - correspondence, equivalence - Verbal Noun -反応 はんのう - reaction, response - Verbal Noun -問答 もんどう - questions and answers, argument - Verbal Noun -ちゃんと ちゃんと - regularly, properly - Adverb -特定 とくてい - specific, particular - Noun -特色 とくしょく - characteristic - Noun -特有 とくゆう - characteristic, special - Adjective -別に べつに - especially, particularly - Adverb -別れ わかれ - separation, parting - Noun -のどか のどか - tranquil, peaceful - Adjective -送別 そうべつ - farewell, send-off - Verbal Noun -送別会 そうべつかい - farewell party - Noun -専門家 せんもんか - specialist, expert - Noun -専門 せんもん - specialty, profession - Noun -専用 せんよう - exclusive use, private use - Noun -メロディー メロディー - melody - Noun -全般 ぜんぱん - whole, general - Noun -本格的 ほんかくてき - full-scale, authentic - Adjective -全面的 ぜんめんてき - all-out, overall - Adjective -論理的 ろんりてき - logical - Adjective -知的 ちてき - intellectual, mental - Adjective -目的地 もくてきち - destination, goal - Noun -リットル リットル - liter, litre - Noun -文化的 ぶんかてき - cultural - Adjective -男性的 だんせいてき - masculine, manly - Adjective -普段 ふだん - usual, ordinary - Adverb -並み なみ - ordinary, average - Noun -並木 なみき - row of trees, roadside trees - Noun -わざと わざと - on purpose - Adverb -平面 へいめん - level surface, plain - Noun -平気 へいき - nonchalant, calm - Adjective -平ら たいら - flat, level - Adjective -平行 へいこう - parallel, side by side - Verbal Noun -不平 ふへい - discontent, dissatisfaction - Adjectival Noun -とっくに とっくに - long ago - Adverb -地平線 ちへいせん - horizon - Noun -平野 へいや - plain, open field - Noun -平たい ひらたい - flat, level - Adjective -平方 へいほう - square - Noun -平日 へいじつ - weekday - Noun -ベスト ベスト - best - Noun -平均 へいきん - average, equilibrium - Verbal Noun -等しい ひとしい - equal, same - Adjective -平等 びょうどう - equality, impartiality - Adjectival Noun -同等 どうとう - equality - Noun -対等 たいとう - equality, parity - Adjectival Noun -不平等 ふびょうどう - unequal, unfair - Adjectival Noun -ワンピース ワンピース - dress - Noun -病室 びょうしつ - patient room, ward - Noun -病人 びょうにん - sick person, patient - Noun -内科 ないか - internal medicine - Noun -必死 ひっし - desperation - Adjectival Noun -病死 びょうし - death from sickness - Verbal Noun -ダイヤモンド ダイヤモンド - diamond - Noun -必死に ひっしに - desperately - Adverb -亡くす なくす - lose (in death) - Verb -多忙 たぼう - very busy - Adjectival Noun -疲れ つかれ - fatigue, exhaustion - Noun -立ち入り禁止 たちいりきんし - no trespassing - Noun -ナンバー ナンバー - number - Noun -日本酒 にほんしゅ - sake, rice wine - Noun -酔う よう - get drunk - Verb -保つ たもつ - preserve, sustain - Verb -保険 ほけん - insurance - Noun -保証 ほしょう - guarantee, warranty - Verbal Noun -保証人 ほしょうにん - guarantor - Noun -とうとう とうとう - at last, after all - Adverb -保存 ほぞん - preservation, conservation - Verbal Noun -存じる ぞんじる - think, know - Verb -注ぐ そそぐ - pour into, concentrate - Verb -注 ちゅう - annotation, explanatory note - Noun -同意 どうい - consent, approval - Verbal Noun -とんでもない とんでもない - unthinkable, outrageous - Adjective -無意味 むいみ - meaningless, absurd - Adjectival Noun -不注意 ふちゅうい - carelessness, inattention - Adjectival Noun -生意気 なまいき - cheeky, conceited - Adjectival Noun -確かめる たしかめる - make sure of, confirm - Verb -明確 めいかく - clear, precise - Adjectival Noun -にこやか にこやか - smiling, beaming - Adjective -不確か ふたしか - unreliable, uncertain - Adjectival Noun -認可 にんか - approval, authorization - Verbal Noun -認める みとめる - recognize, acknowledge - Verb -率 りつ - ratio, proportion - Noun -率直 そっちょく - frank, openhearted - Adjective -能率 のうりつ - efficiency - Noun -ロッカー ロッカー - locker - Noun -旅客機 りょかくき - passenger plane - Noun -不器用 ぶきよう - clumsy, unskillful - Adjectival Noun -道具 どうぐ - tool - Noun -予備 よび - reserve, spare - Noun -説く とく - explain, preach - Verb -プライド プライド - pride - Noun -不公平 ふこうへい - unfair, unjust - Adjectival Noun -遊園地 ゆうえんち - amusement park - Noun -保育園 ほいくえん - day-care center, nursery school - Noun -飛び出す とびだす - fly out, dash out - Verb -飛ばす とばす - fly, shoot - Verb -ママ ママ - mommy, mummy - Noun -飛び上がる とびあがる - fly up, jump up - Verb -飛び下りる とびおりる - jump off, jump down - Verb -飛び込む とびこむ - dive into - Verb -飛行 ひこう - flight, aviation - Verbal Noun -船長 せんちょう - captain - Noun -よける よける - move out the way - Verb -風船 ふうせん - balloon - Noun -半島 はんとう - peninsula - Noun -島 とう - island - Noun -不完全 ふかんぜん - imperfection, incompleteness - Adjectival Noun -達成 たっせい - attain, achieve - Verbal Noun -成り立つ なりたつ - consist of, be built on - Verb -バッジ バッジ - badge - Noun -未成年 みせいねん - minor, underage - Noun -敗れる やぶれる - be defeated, be beaten - Verb -野原 のはら - field, plain - Noun -原 はら - plain, field - Noun -要因 よういん - primary factor, main cause - Noun -ピン ピン - hairpin, pin - Noun -因る よる - be caused by, be due to - Verb -物資 ぶっし - commodities, goods - Noun -願い ねがい - wish, request - Noun -不正 ふせい - fraud, impropriety - Adjectival Noun -大正 たいしょう - Taisho era - Noun -まあ まあ - well - Interjection -正に まさに - just, surely - Adverb -常に つねに - always, at all times - Adverb -日常 にちじょう - daily, everyday - Noun -知識 ちしき - knowledge - Noun -認識 にんしき - recognition, acknowledgment - Verbal Noun -無意識 むいしき - unconsciously, without thinking - Adverb -むなしい むなしい - empty, vain - Adjective -非難 ひなん - criticism, blame - Verbal Noun -非常 ひじょう - emergency, calamity - Adjectival Noun -非常識 ひじょうしき - lack of common sense - Adjectival Noun -非常口 ひじょうぐち - emergency exit - Noun -調子 ちょうし - tone, condition - Noun -ついで ついで - on the way - Noun -調和 ちょうわ - harmony, agreement - Verbal Noun -体調 たいちょう - health condition - Noun -単調 たんちょう - monotonous, dull - Adjectival Noun -調味料 ちょうみりょう - seasoning, flavoring - Noun -調整 ちょうせい - regulation, adjustment - Verbal Noun -バケツ バケツ - bucket - Noun -整える ととのえる - arrange, adjust - Verb -整う ととのう - be in order, be adjusted - Verb -調節 ちょうせつ - adjustment, regulation - Verbal Noun -提出 ていしゅつ - submittal - Verbal Noun -前提 ぜんてい - assumption, premise - Noun -答案 とうあん - examination paper, answer - Noun -はっと はっと - taken aback - Adverb -投票 とうひょう - vote, ballot - Verbal Noun -目標 もくひょう - target, goal - Noun -標準 ひょうじゅん - standard, norm - Noun -連れる つれる - take along, bring along - Verb -連日 れんじつ - day after day, everyday - Noun -まずい まずい - bad, no good - Adjective -連休 れんきゅう - consecutive holidays - Noun -連れ つれ - companion - Noun -連絡 れんらく - connection, communication - Verbal Noun -手続き てつづき - procedure, formalities - Noun -連続 れんぞく - continuation, succession - Verbal Noun -もしも もしも - if, if ever - Adverb -続々 ぞくぞく - in rapid succession, one after another - Adverb -続き つづき - continuation, sequel - Noun -長続き ながつづき - lasting for a long time - Verbal Noun -相場 そうば - market price, speculation - Noun -相当 そうとう - correspondence, suitability - Verbal Noun -やかましい やかましい - noisy, clamorous - Adjective -相応しい ふさわしい - suitable, appropriate - Adjective -対談 たいだん - interview - Verbal Noun -録画 ろくが - videotaping - Verbal Noun -録音テープ ろくおんテープ - tape - Noun -登場 とうじょう - appearance on stage, appearance - Verbal Noun -登録 とうろく - registration - Verbal Noun -バット バット - bat - Noun -登山 とざん - climbing, mountaineer - Verbal Noun -登校 とうこう - attending school - Verbal Noun -山登り やまのぼり - mountain climbing - Verbal Noun -無関心 むかんしん - apathy, indifference - Adjectival Noun -無関係 むかんけい - irrelevant, unrelated - Adjectival Noun -マナー マナー - manners - Noun -不況 ふきょう - depression, slump - Noun -態度 たいど - attitude, manner - Noun -明治 めいじ - Meiji era - Noun -府 ふ - urban prefecture - Noun -府立 ふりつ - prefectural - Noun -ばらばら ばらばら - separately - Adverb -野党 やとう - opposition party - Noun -当選 とうせん - election to office - Verbal Noun -入選 にゅうせん - acceptance, selection - Verbal Noun -選択 せんたく - selection, choice - Verbal Noun -天候 てんこう - weather, climate - Noun -手首 てくび - wrist - Noun -プラットホーム プラットホーム - platform - Noun -脳 のう - brain - Noun -悩む なやむ - be troubled, suffer - Verb -悩み なやみ - troubles, worries - Noun -先頭 せんとう - forefront, head - Noun -命じる めいじる - order, give orders - Verb -まぐろ まぐろ - tuna - Noun -領土 りょうど - territory, domain - Noun -領事館 りょうじかん - consulate - Noun -領収書 りょうしゅうしょ - receipt, voucher - Noun -取り組む とりくむ - grapple, pursue - Verb -任せる まかせる - entrust to, leave it to - Verb -ろくに ろくに - hardly, barely - Adverb -担任 たんにん - supervisor - Verbal Noun -無責任 むせきにん - irresponsibility - Adjectival Noun -転勤 てんきん - transfer - Verbal Noun -勤め先 つとめさき - employment - Noun -勤め つとめ - service, duties - Noun -務める つとめる - perform a duty, play a role - Verb -つまむ つまむ - munch on - Verb -任務 にんむ - duty, mission - Noun -務め つとめ - duty, task - Noun -雇う やとう - employ, hire - Verb -募集 ぼしゅう - recruitment, collection - Verbal Noun -採る とる - gather, pick - Verb -ボーイ ボーイ - waiter - Noun -就く つく - set about a task, enter upon - Verb -退職 たいしょく - retirement, resignation - Verbal Noun -退学 たいがく - withdrawal from school - Verbal Noun -早退 そうたい - early departure - Verbal Noun -理屈 りくつ - reason, logic - Noun -ホット ホット - hot - Noun -退屈 たいくつ - boring, tedious - Verbal Noun -用件 ようけん - matter, things to be done - Noun -参る まいる - go, come - Verb -惨め みじめ - miserable, pitiable - Adjective -追加 ついか - addition - Verbal Noun -まし まし - more, better - Adjective -比率 ひりつ - ratio, percentage - Noun -対比 たいひ - contrast, comparison - Verbal Noun -見比べる みくらべる - look from one to another, compare - Verb -比較的 ひかくてき - comparatively, relatively - Adverb -比較 ひかく - comparison - Verbal Noun -判決 はんけつ - judicial decision, judgment - Noun -ぱっと ぱっと - suddenly, quickly - Adverb -判子 はんこ - seal, stamp - Noun -評判 ひょうばん - fame, reputation - Noun -批評 ひひょう - criticism, comment - Verbal Noun -反感 はんかん - ill feeling, antipathy - Noun -予想 よそう - prospect, expectation - Verbal Noun -つなぐ つなぐ - connect, join - Verb -理想 りそう - ideal - Noun -想像 そうぞう - imagination - Verbal Noun -象 ぞう - elephant - Noun -抽象的 ちゅうしょうてき - abstract - Adjective -保障 ほしょう - guarantee, security - Verbal Noun -ひょっとしたら ひょっとしたら - perhaps - Adverb -負傷 ふしょう - hurt, injury - Verbal Noun -変換 へんかん - change, conversion - Verbal Noun -取り替える とりかえる - change, replace - Verb -立て替える たてかえる - pay for another, pay in advance - Verb -天災 てんさい - natural disaster - Noun -有害 ゆうがい - harmful, hazardous - Adjectival Noun -ひとりでに ひとりでに - automatically, by oneself - Adverb -無害 むがい - harmless - Adjectival Noun -被害 ひがい - damage, harm - Noun -破る やぶる - defeat - Verb -破壊 はかい - breaking, destruction - Verbal Noun -助かる たすかる - be helped, be rescued - Verb -ひねる ひねる - twist, turn - Verb -派手 はで - showy, flashy - Adjective -派出所 はしゅつじょ - branch office, police box - Noun -派遣 はけん - dispatch, sending - Verbal Noun -犯人 はんにん - criminal, offender - Noun -犯罪 はんざい - offense, crime - Noun -ひび ひび - crack - Noun -罪 つみ - crime, sin - Noun -盗難 とうなん - robbery, burglary - Noun -捕まる つかまる - be caught, be arrested - Verb -捕まえる つかまえる - arrest, capture - Verb -逃げ出す にげだす - make a break for, run off - Verb -逃がす にがす - let go - Verb -やっつける やっつける - beat, let someone have it - Verb -逃げ道 にげみち - escape route - Noun -戦う たたかう - wage war, fight - Verb -挑戦 ちょうせん - challenge - Verbal Noun -敗戦 はいせん - lost battle, defeat - Verbal Noun -戦い たたかい - war, match - Noun -レントゲン レントゲン - X-rays - Noun -大戦 たいせん - world war - Noun -混ぜる まぜる - blend, mix by stirring - Verb -混ざる まざる - be mixed, be stirred - Verb -混じる まじる - be blended, get mixed - Verb -乱れる みだれる - be disordered, be disturbed - Verb -パンツ パンツ - pants, trousers - Noun -乱す みだす - put into disorder, disrupt - Verb -統合 とうごう - integration, combination - Verbal Noun -統一 とういつ - unity, coordination - Verbal Noun -統計 とうけい - statistics - Verbal Noun -総会 そうかい - general meeting - Noun -むける むける - come off, peel - Verb -総合 そうごう - synthesis, integration - Verbal Noun -総理 そうり - president, prime minister - Noun -総数 そうすう - total - Noun -捜査 そうさ - criminal investigation, search - Verbal Noun -湖 みずうみ - lake - Noun -深める ふかめる - deepen, intensify - Verb -ぶつぶつ ぶつぶつ - grumble - Adverb -深まる ふかまる - deepen, become deeper - Verb -注意深い ちゅういぶかい - careful, discreet - Adjective -段落 だんらく - end of paragraph - Noun -見落とす みおとす - miss, fail to notice - Verb -落第 らくだい - failing an exam - Verbal Noun -ぶるぶる ぶるぶる - shiver - Adverb -波 なみ - wave, fluctuations - Noun -流れ ながれ - flow, stream - Noun -流通 りゅうつう - circulation, distribution - Verbal Noun -流す ながす - let flow, set adrift - Verb -中流 ちゅうりゅう - mid-stream, middle reaches - Noun -ボリューム ボリューム - volume - Noun -二流 にりゅう - second-rate - Noun -流行 はやり - fashion, trend - Noun -流行 りゅうこう - fashion, trend - Verbal Noun -洗面 せんめん - washing one's face - Noun -手洗い てあらい - toilet, washstand - Noun -洗面器 せんめんき - washbowl, sink - Noun -ちり ちり - dust - Noun -沈没 ちんぼつ - sinking - Verbal Noun -冷え込む ひえこむ - get colder - Verb -冷やかす ひやかす - tease, jeer - Verb -冷凍 れいとう - freezing, cold storage - Verbal Noun -内臓 ないぞう - internal organs - Noun -はげる はげる - come off, peel off - Verb -適用 てきよう - application - Verbal Noun -適切 てきせつ - appropriate, adequate - Adjective -適応 てきおう - adaptation, adjustment - Verbal Noun -適する てきする - suit, be suitable - Verb -適当 てきとう - suitable, appropriate - Adjectival Noun -パパ パパ - dad, father - Noun -適度 てきど - moderate, proper - Adjectival Noun -染める そめる - dye, color - Verb -廃止 はいし - abolishment, abandonment - Verbal Noun -風景 ふうけい - scenery, landscape - Noun -不景気 ふけいき - business depression, slump - Adjectival Noun -響く ひびく - reverberate, vibrate - Verb -つかむ つかむ - grip, grab - Verb -日光 にっこう - sunshine, sunlight - Noun -光 ひかり - light, flash - Noun -測定 そくてい - measure, gauge - Verbal Noun -測る はかる - measure, gauge - Verb -陽気 ようき - cheerful, bright - Adjectival Noun -もったいない もったいない - wasteful, a shame - Adjective -プロ野球 プロやきゅう - professional baseball - Noun -電球 でんきゅう - light bulb - Noun -振り返る ふりかえる - turn one's head, turn round - Verb -振り向く ふりむく - turn around, look back - Verb -振り ふり - swing, shake - Noun -ふざける ふざける - mess around, fool around - Verb -秘書 ひしょ - secretary - Noun -密か ひそか - secret, private - Adjective -貴い とうとい - precious, valuable - Adjective -追跡 ついせき - pursuit, chase - Verbal Noun -寄せる よせる - draw near, draw up, gather - Verb -だるい だるい - be dull, feel dull, weary - Adjective -寄る よる - stop by, stop off - Verb -近寄る ちかよる - go near, approach - Verb -寄り道 よりみち - dropping by, going out of the way - Verbal Noun -寄り集まる よりあつまる - gather, assemble - Verb -歴史的 れきしてき - historical - Adjective -宝石 ほうせき - gem, jewel - Noun -ちぎる ちぎる - tear, tear off - Verb -建て前 たてまえ - a front, polite face - Noun -単位 たんい - unit, credit - Noun -地位 ちい - position, status - Noun -分離 ぶんり - separation, split - Verbal Noun -離れる はなれる - separate, leave - Verb -ねぎ ねぎ - Welsh onion, green onion - Noun -離す はなす - separate, detach - Verb -停電 ていでん - power cut, power failure - Verbal Noun -停止 ていし - stop, suspension - Verbal Noun -範囲 はんい - range, scope - Noun -隣り合う となりあう - adjoin, be next door to each other - Verb -びしょびしょ びしょびしょ - soaked - Adjectival Noun -横切る よこぎる - cross, go across - Verb -横顔 よこがお - profile, face seen from side - Noun -中断 ちゅうだん - interruption, discontinuance - Verbal Noun -断水 だんすい - water stoppage - Verbal Noun -油断 ゆだん - inattention, carelessness - Verbal Noun -断定 だんてい - decision, conclusion - Verbal Noun -バーゲン バーゲン - bargain sale - Noun -継ぐ つぐ - succeed, inherit - Verb -中継 ちゅうけい - relay, broadcasting - Verbal Noun -幅広い はばひろい - wide, broad - Adjective -幅 はば - width, breadth - Noun -大陸 たいりく - continent - Noun -メーター メーター - meter, taximeter - Noun -着陸 ちゃくりく - landing - Verbal Noun -離陸 りりく - takeoff - Verbal Noun -内陸 ないりく - inland, interior - Noun -陸上 りくじょう - land, shore - Noun -陸 りく - land, shore - Noun -もしかすると もしかすると - possibly, perhaps - Adverb -南極 なんきょく - South Pole - Noun -北極 ほっきょく - North Pole - Noun -先端 せんたん - edge, vanguard - Noun -端 はし - end, edge - Noun -訪問 ほうもん - visit - Verbal Noun -女房 にょうぼう - wife - Noun -ちぎれる ちぎれる - be torn off, come off - Verb -内緒 ないしょ - secrecy, privacy - Noun -百貨店 ひゃっかてん - department store - Noun -輸送 ゆそう - transport, ship - Verbal Noun -復活 ふっかつ - revival, rebirth - Verbal Noun -操作 そうさ - operation, manipulation - Verbal Noun -にっこり にっこり - smiling, grinning - Adverb -体操 たいそう - gymnastics, physical exercise - Noun -縦 たて - lengthways, vertical - Noun -操縦 そうじゅう - steering, piloting - Verbal Noun -縦書き たてがき - vertical writing - Noun -滞在 たいざい - stay - Verbal Noun -ぱいなっぷる ぱいなっぷる - pineapple - Noun -地帯 ちたい - zone, area - Noun -熱帯 ねったい - tropics - Noun -保守 ほしゅ - conservation, maintenance - Verbal Noun -見守る みまもる - watch, keep watch over - Verb -留守番 るすばん - caretaking, caretaker - Noun -ぱんだ ぱんだ - panda - Noun -戻す もどす - return, give back - Verb -取り戻す とりもどす - take back, recover - Verb -払い戻す はらいもどす - pay back, reimburse - Verb -寝かす ねかす - put to sleep - Verb -寝過ごす ねすごす - oversleep - Verb -早寝 はやね - going to bed early - Verbal Noun -びっしょり びっしょり - soaked - Adverb -寝かせる ねかせる - put to bed, lay down - Verb -寝転ぶ ねころぶ - lie down - Verb -冷静 れいせい - cool, calm - Adjectival Noun -両者 りょうしゃ - both - Noun -両立 りょうりつ - managing two things, having it both ways - Verbal Noun -ペンチ ペンチ - pliers - Noun -両手 りょうて - both hands - Noun -両面 りょうめん - both sides - Noun -側面 そくめん - side, flank - Noun -両側 りょうがわ - both sides - Noun -要項 ようこう - important points - Noun -モダン モダン - modern - Adjectival Noun -目印 めじるし - landmark, sign - Noun -細長い ほそながい - long and thin, slender - Adjective -載る のる - appear in print - Verb -積む つむ - pile up, accumulate - Verb -面積 めんせき - area, square measure - Noun -翻訳 ほんやく - translation - Verbal Noun -リクエスト リクエスト - request - Verbal Noun -通訳 つうやく - interpreting - Verbal Noun -申し訳ない もうしわけない - sorry, inexcusable - Adjective -訳 わけ - reason, cause - Noun -申し訳 もうしわけ - excuse, apology - Noun -訂正 ていせい - correction, amendment - Verbal Noun -ビーチ ビーチ - beach - Noun -討論 とうろん - debate, discussion - Verbal Noun -添える そえる - add to, attach to - Verb -添う そう - accompany, go along with - Verb -付近 ふきん - neighborhood, environs - Noun -付き合い つきあい - friendship, association - Noun -ビタミン ビタミン - vitamin - Noun -付け加える つけくわえる - add - Verb -付き合う つきあう - socialize with, see someone - Verb -名付ける なづける - name, give a name to - Verb -付録 ふろく - appendix, supplement - Noun -近付ける ちかづける - bring close - Verb -付け足す つけたす - add on, append - Verb -フライパン フライパン - frying pan - Noun -日付け ひづけ - date - Noun -付属 ふぞく - attachment, belonging - Verbal Noun -属する ぞくする - belong to, be one of - Verb -反省 はんせい - reflection, repentance - Verbal Noun -省く はぶく - omit, dispense with - Verb -まあまあ まあまあ - now now - Adverb -略す りゃくす - abbreviate, omit - Verb -略 りゃく - abbreviation - Noun -大概 たいがい - generally, probably - Adverb -含める ふくめる - include - Verb -含む ふくむ - contain, include - Verb -たこ たこ - octopus - Noun -道順 みちじゅん - route, itinerary - Noun -列車 れっしゃ - train - Noun -列島 れっとう - archipelago - Noun -列 れつ - row, line - Noun -例外 れいがい - exception - Noun -デザート デザート - dessert - Noun -比例 ひれい - proportion, ratio - Verbal Noun -用例 ようれい - example, illustration - Noun -例える たとえる - compare, liken - Verb -例題 れいだい - example, exercise - Noun -例年 れいねん - normal year, average year - Noun -例え たとえ - metaphor, simile - Noun -とっさに とっさに - at once - Adverb -余地 よち - room, space - Noun -余計 よけい - excess, needless - Adjectival Noun -余分 よぶん - excess, extra - Adjectival Noun -途中 とちゅう - on the way, half way - Noun -用途 ようと - use, service - Noun -ぬるぬる ぬるぬる - slimy - Adverb -中途 ちゅうと - halfway - Noun -取り締まり とりしまり - regulation, crackdown - Noun -取り締まる とりしまる - control, crack down - Verb -緩める ゆるめる - loosen, unloose - Verb -緩やか ゆるやか - slack, loose - Adjective -のろい のろい - slow, sluggish - Adjective -緩む ゆるむ - slacken, be loose - Verb -養う やしなう - foster, support - Verb -豊か ゆたか - abundant, ample - Adjective -富む とむ - be rich, abound in - Verb -豊富 ほうふ - abundant, plentiful - Adjectival Noun -目茶苦茶 めちゃくちゃ - in a mess, terrible - Adjectival Noun -ぴょんぴょん ぴょんぴょん - jump, hop - Adverb -労働者 ろうどうしゃ - laborer, worker - Noun -労働 ろうどう - labor, toil - Verbal Noun -疲労 ひろう - fatigue - Verbal Noun -労力 ろうりょく - labor, work - Noun -貧しい まずしい - poor, needy - Adjective -ブラシ ブラシ - brush - Noun -乏しい とぼしい - scarce, short of - Adjective -貧乏人 びんぼうにん - poor person, the poor - Noun -辛い つらい - difficult, harsh - Adjective -不幸せ ふしあわせ - unhappiness, misfortune - Adjectival Noun -福祉 ふくし - welfare - Noun -マヨネーズ マヨネーズ - mayonnaise - Noun -模様 もよう - pattern, design - Noun -模範 もはん - model, role model - Noun -農民 のうみん - peasants, farmers - Noun -農家 のうか - farmhouse - Noun -農村 のうそん - farm village, agricultural community - Noun -低気圧 ていきあつ - low pressure, atmospheric depression - Noun -だらしない だらしない - slovenly, untidy - Adjective -短縮 たんしゅく - shortening, contraction - Verbal Noun -縮める ちぢめる - contract, shorten - Verb -縮む ちぢむ - shrink, contract - Verb -縮み ちぢみ - shrinkage - Noun -縮まる ちぢまる - be shortened, be contracted - Verb -とうもろこし とうもろこし - corn, maize - Noun -伸ばす のばす - stretch, straighten - Verb -引き伸ばす ひきのばす - stretch out, enlarge - Verb -追伸 ついしん - P.S. - Noun -倍 ばい - double - Noun -超過 ちょうか - excess - Verbal Noun -ひらひら ひらひら - lightly, floating - Adverb -乗り越える のりこえる - overcome, get over - Verb -乗り越し のりこし - riding past one's stop - Verbal Noun -乗り越す のりこす - ride past - Verb -抜ける ぬける - come out, leave - Verb -抜く ぬく - pull out - Verb -ぽかぽか ぽかぽか - pleasantly warm - Adverb -昇る のぼる - rise, - Verb -膨らむ ふくらむ - expand, swell - Verb -膨れる ふくれる - expand, fill up - Verb -札 ふだ - sign, billboard - Noun -名札 なふだ - name badge, tag - Noun -礼 れい - bow, courtesy - Noun -よる よる - be caused by - Verb -反射 はんしゃ - reflection - Verbal Noun -日程 にってい - program, schedule - Noun -程 ほど - extent, limit - Noun -優勝 ゆうしょう - victory, championship - Verbal Noun -優秀 ゆうしゅう - excellent, exceptional - Adjectival Noun -だぶだぶ だぶだぶ - baggy, too big - Adjective -透明 とうめい - transparent - Adjectival Noun -半導体 はんどうたい - semiconductor - Noun -導く みちびく - guide, lead - Verb -望む のぞむ - desire, hope - Verb -望ましい のぞましい - desirable, welcome - Adjective -つるつる つるつる - smooth, slippery - Adverb -要望 ようぼう - demand, request - Verbal Noun -望み のぞみ - desire, hope - Noun -有望 ゆうぼう - promising, hopeful - Adjectival Noun -欲望 よくぼう - desire, craving - Noun -待ち望む まちのぞむ - expect, look forward to - Verb -努める つとめる - endeavor, make efforts, try hard - Verb -トースト トースト - toast - Noun -独立 どくりつ - independence, self-reliance - Verbal Noun -独特 どくとく - peculiarity, uniqueness - Adjective -独り言 ひとりごと - soliloquy, monologue - Noun -身 み - body, one's own person - Noun -中身 なかみ - content, interior - Noun -どきっと どきっと - surprised, shocked - Adverb -身近 みぢか - near oneself, close to one - Adjectival Noun -身の回り みのまわり - one's person, one's appearance - Noun -身なり みなり - dress, one's appearance - Noun -身振り みぶり - gesture, gesticulation - Noun -独占 どくせん - exclusive possession, monopoly - Verbal Noun -のろのろ のろのろ - slowly, easy - Adverb -仲良く なかよく - harmoniously, amicably - Adverb -仲良し なかよし - good friend, chum - Noun -仲直り なかなおり - reconciliation, making up - Verbal Noun -仲 なか - personal relationship - Noun -仲間 なかま - comrade, peer - Noun -仲人 なこうど - go-between, matchmaker - Noun -ぴかぴか ぴかぴか - new, shiny - Adverb -照らす てらす - illuminate, shine on - Verb -照る てる - shine, be fine - Verb -夫人 ふじん - wife, married lady - Noun -婦人 ふじん - woman, lady - Noun -夫妻 ふさい - husband and wife, Mr. and Mrs. - Noun -ぺこぺこ ぺこぺこ - bow, kowtow - Adverb -相互 そうご - mutual, reciprocal - Noun -互い たがい - each other - Noun -皆 みな - all, everybody - Noun -我々 われわれ - we - Noun -我が国 わがくに - our country, Japan - Noun -ぺらぺら ぺらぺら - floppy, flimsy - Adjective -我が家 わがや - one's home - Noun -年齢 ねんれい - age, years - Noun -恋愛 れんあい - love - Verbal Noun -初恋 はつこい - first love - Noun -誕生 たんじょう - birth - Verbal Noun -ほこり ほこり - dust - Noun -延びる のびる - extend, be postponed - Verb -延ばす のばす - extend, postpone - Verb -引き延ばす ひきのばす - extend, prolong - Verb -単純 たんじゅん - simple, uncomplicated - Adjectival Noun -夢中 むちゅう - be absorbed - Adjectival Noun -泣き顔 なきがお - tear-stained face - Noun -ポット ポット - pot, thermos - Noun -笑い わらい - laughter - Noun -喜び よろこび - joy, happiness - Noun -喜ばす よろこばす - please, gladden - Verb -恥 はじ - shame, disgrace - Noun -弁論 べんろん - discussion, oral proceedings - Verbal Noun -ミュージック ミュージック - music - Noun -保護 ほご - protection, safeguard - Verbal Noun -弁護 べんご - defense - Verbal Noun -保護者 ほごしゃ - guardian, protector - Noun -同士 どうし - fellow, to each other - Noun -弁護士 べんごし - lawyer, attorney - Noun -ロマンチック ロマンチック - romantic - Adjective -否定 ひてい - denial, negation - Verbal Noun -総裁 そうさい - president, governor - Noun -迷信 めいしん - superstition - Noun -迷子 まいご - lost child, lost person - Noun -領域 りょういき - territory, domain - Noun -謎 なぞ - puzzle, mystery - Noun -わくわく わくわく - feel excited - Adverb -著者 ちょしゃ - author, writer - Noun -著書 ちょしょ - literary work, book - Noun -偽物 にせもの - sham, imitation - Noun -ノーベル賞 ノーベルしょう - Nobel Prize - Noun -文化財 ぶんかざい - cultural assets - Noun -わさび わさび - wasabi, Japanese horseradish - Noun -預金 よきん - deposit, bank account - Verbal Noun -納得 なっとく - acceptance, persuasion - Verbal Noun -不得意 ふとくい - one's weak point - Adjectival Noun -得する とくする - profit, gain - Verb -得 とく - gain, advantage - Adjectival Noun -チキン チキン - chicken, fried chicken - Noun -損 そん - loss, damage - Verbal Noun -損害 そんがい - damage, harm - Noun -損する そんする - lose, suffer loss - Verb -燃料 ねんりょう - fuel - Noun -燃やす もやす - burn - Verb -日焼け ひやけ - suntan - Verbal Noun -とじる とじる - bind, file - Verb -焼き肉 やきにく - grilled meat, barbequed meat - Noun -夕焼け ゆうやけ - sunset glow - Noun -焼きそば やきそば - pan-fried noodles - Noun -幹 みき - tree trunk - Noun -分散 ぶんさん - dispersion - Verbal Noun -にやにや にやにや - grin to oneself - Adverb -散らばる ちらばる - be scattered - Verb -散る ちる - scatter, fall - Verb -散らかる ちらかる - lie scattered about, be in disorder - Verb -散らかす ちらかす - scatter, disarrange - Verb -田植え たうえ - rice planting - Verbal Noun -ばら ばら - rose - Noun -根 ね - root, source - Noun -大根 だいこん - daikon radish, oriental radish - Noun -まな板 まないた - chopping board - Noun -ほうれん草 ほうれんそう - spinach - Noun -話し言葉 はなしことば - spoken language - Noun -パンティー パンティー - panties - Noun -葉っぱ はっぱ - leaf - Noun -呼び出す よびだす - call, page - Verb -取り扱う とりあつかう - handle, deal in - Verb -取り扱い とりあつかい - handling, manipulation - Noun -同級生 どうきゅうせい - classmate - Noun -中級 ちゅうきゅう - middle-class, intermediate - Noun -ふわふわ ふわふわ - soft - Adjective -腹 はら - belly - Noun -腹一杯 はらいっぱい - full stomach - Adverb -肺 はい - lung, lungs - Noun -溶ける とける - be dissolved, be melted - Verb -溶かす とかす - dissolve, melt - Verb -まずい まずい - problematic, troublesome - Adjective -容易 ようい - easy, simple - Adjectival Noun -容器 ようき - receptacle, container - Noun -滑らか なめらか - smooth, glassy - Adjective -分析 ぶんせき - analysis - Verbal Noun -保健 ほけん - health, health care - Noun -もむ もむ - rub, massage - Verb -診る みる - examine - Verb -治療 ちりょう - medical treatment - Verbal Noun -毒 どく - poison, harm - Noun -中毒 ちゅうどく - poisoning - Verbal Noun -有毒 ゆうどく - poisonous, noxious - Adjectival Noun -ばい菌 ばいきん - bacterium, germ - Noun -センター センター - center - Noun -不潔 ふけつ - dirty, filthy - Adjectival Noun -編集 へんしゅう - editing, compilation - Verbal Noun -追放 ついほう - banishment, deportation - Verbal Noun -放射能 ほうしゃのう - radioactivity - Noun -放す はなす - release, free - Verb -ぞんざい ぞんざい - rough, rude - Adjective -放る ほうる - fling, hurl - Verb -無視 むし - ignoring, disregarding - Verbal Noun -服装 ふくそう - clothes, garments - Noun -振り仮名 ふりがな - reading aid in kana characters - Noun -銅 どう - copper - Noun -たんす たんす - chest of drawers, wardrobe - Noun -悲劇 ひげき - tragedy, tragic drama - Noun -団体 だんたい - group, corporation - Noun -団地 だんち - housing estate, housing complex - Noun -美術 びじゅつ - art, fine arts - Noun -博士 はくし - Ph.D. - Noun -博士 はかせ - expert, doctor - Noun -チェンジ チェンジ - change, exchange - Verbal Noun -展開 てんかい - unfolding, development - Verbal Noun -発展 はってん - expansion, prosperity - Verbal Noun -催す もよおす - feel, experience - Verb -催し もよおし - event, function - Noun -典型的 てんけいてき - typical, representative - Adjective -つかまる つかまる - grip, grab - Verb -典型 てんけい - type, model - Noun -百科事典 ひゃっかじてん - encyclopedia - Noun -特殊 とくしゅ - special, unique - Adjective -微妙 びみょう - subtle, delicate - Adjectival Noun -免税 めんぜい - tax exemption - Verbal Noun -つながり つながり - connection, relation - Noun -免許 めんきょ - license, permit - Noun -動詞 どうし - verb - Noun -名詞 めいし - noun - Noun -副詞 ふくし - adverb - Noun -代名詞 だいめいし - pronoun - Noun -つながる つながる - connect, join - Verb -伝統 でんとう - tradition, convention - Noun -伝わる つたわる - be transmitted, be handed down - Verb -伝説 でんせつ - legend, folk tale - Noun -手伝い てつだい - help, assistant - Noun -伝言 でんごん - verbal message - Verbal Noun -伝染 でんせん - contagion, infection - Verbal Noun -つばめ つばめ - swallow - Noun -焼き鳥 やきとり - yakitori, grilled chicken - Noun -鳴らす ならす - ring, sound - Verb -悲鳴 ひめい - shriek, scream - Noun -笑い声 わらいごえ - laughter - Noun -泣き声 なきごえ - tearful voice, crying - Noun -つぶやく つぶやく - mutter, murmur - Verb -話し声 はなしごえ - voice, whisper - Noun -駐車 ちゅうしゃ - parking - Verbal Noun -騒音 そうおん - noise - Noun -騒動 そうどう - disturbance, confusion - Noun -騒々しい そうぞうしい - noisy, rowdy - Adjective -つぶる つぶる - close - Verb -名刺 めいし - business card, calling card - Noun -到着 とうちゃく - arrival - Verbal Noun -到達 とうたつ - arrival, attainment - Verbal Noun -倒産 とうさん - insolvency - Verbal Noun -面倒 めんどう - troublesome, difficult - Adjectival Noun -斜め ななめ - diagonal, slant - Adjectival Noun -つぼみ つぼみ - bud - Noun -柔らかい やわらかい - soft, gentle - Adjective -張る はる - strain, be stretched - Verb -張り切る はりきる - go all out, make efforts - Verb -欲張り よくばり - greed, greedy - Adjectival Noun -突然 とつぜん - abruptly, suddenly - Adverb -つまずく つまずく - stumble, trip - Verb -突っ込む つっこむ - thrust in, dash into - Verb -突く つく - thrust, poke - Verb -追突 ついとつ - collision - Verbal Noun -触れる ふれる - touch, come in contact with - Verb -避難 ひなん - refuge, shelter - Verbal Noun -ツル ツル - crane, stork - Noun -墜落 ついらく - fall, crash - Verbal Noun -兵士 へいし - soldier - Noun -兵器 へいき - arms, weapon - Noun -兵隊 へいたい - soldier, troops - Noun -武器 ぶき - weapon, arms - Noun -武士 ぶし - samurai, warrior - Noun -でこぼこ でこぼこ - unevenness, bumpiness - Verbal Noun -弾 たま - bullet, shot - Noun -弾む はずむ - spring back, bounce - Verb -日の丸 ひのまる - Rising Sun Flag, Japanese flag - Noun -真ん丸 まんまる - perfect circle - Adjectival Noun -爆発 ばくはつ - explosion, eruption - Verbal Noun -てのひら てのひら - palm - Noun -爆弾 ばくだん - bomb - Noun -暴落 ぼうらく - slump, crash - Verbal Noun -暴力 ぼうりょく - violence, force - Noun -乱暴 らんぼう - violence - Verbal Noun -絶えず たえず - constantly, always - Adverb -とがる とがる - be sharp - Verb -滅びる ほろびる - go to ruin, fall - Verb -防ぐ ふせぐ - prevent, defend - Verb -防衛 ぼうえい - defense, protection - Verbal Noun -防止 ぼうし - prevention, determent - Verbal Noun -予防 よぼう - prevention, protection - Verbal Noun -とんかつ とんかつ - pork cutlet - Noun -防火 ぼうか - fire prevention, fireproof - Noun -妨害 ぼうがい - hindrance, obstruction - Verbal Noun -不機嫌 ふきげん - bad mood, displeasure - Adjectival Noun -徹夜 てつや - staying up all night - Noun -底 そこ - bottom, depths - Noun -徹底的 てっていてき - thorough, exhaustive - Adjective -どんなに どんなに - how much - Adverb -到底 とうてい - after all, in the long run - Adverb -抵抗 ていこう - resistance, opposition - Verbal Noun -敵 てき - enemy, foe - Noun -態勢 たいせい - state, preparedness - Noun -体系 たいけい - system, organization - Noun -なめる なめる - lick, lap - Verb -理系 りけい - science - Noun -文系 ぶんけい - liberal arts, humanities - Noun -綿 めん - cotton - Noun -繁栄 はんえい - prosperity, thriving - Verbal Noun -日韓 にっかん - Japan and Korea - Noun -にらむ にらむ - glare, stare - Verb -耐える たえる - withstand, endure - Verb -矢印 やじるし - arrow - Noun -爪切り つめきり - nail clipper - Noun -枠 わく - frame, limits - Noun -棒 ぼう - rod, stick - Noun -人柄 ひとがら - character, personality - Noun -ねずみ ねずみ - rat, mouse - Noun -詰める つめる - stuff, fill - Verb -詰まる つまる - be stuffed, be stopped up - Verb -譲る ゆずる - transfer, concede - Verb -誠に まことに - truly, very - Adverb -盛り上げる もりあげる - build up excitement - Verb -のぞく のぞく - look, peep - Verb -盛り上がる もりあがる - become lively, get fired up - Verb -盛る もる - heap up, fill - Verb -針 はり - needle, needle-shaped object - Noun -釣り つり - angling - Noun -釣り合い つりあい - balance, proportion - Noun -のんき のんき - carefree, easy-going - Adjectival Noun -釣り合う つりあう - balance, match - Verb -鈍い にぶい - dull, sluggish - Adjective -鈍感 どんかん - thick-headedness - Adjectival Noun -谷 たに - valley, ravine - Noun -余裕 よゆう - room, leeway - Noun -入浴 にゅうよく - bathing - Verbal Noun -はえ はえ - fly - Noun -沿う そう - lie along, follow along - Verb -浜 はま - beach, seashore - Noun -浜辺 はまべ - beach, seashore - Noun -湾 わん - bay, gulf - Noun -潜る もぐる - dive into - Verb -ばかばかしい ばかばかしい - stupid, absurd - Adjective -冷淡 れいたん - cool, indifferent - Adjectival Noun -泥 どろ - mud, dirt - Noun -濁る にごる - get cloudy - Verb -湯飲み ゆのみ - teacup - Noun -湯気 ゆげ - steam, vapor - Noun -はかり はかり - scales - Noun -漏れる もれる - leak, be disclosed - Verb -漏らす もらす - give away, let leak - Verb -漏る もる - leak, be leaky - Verb -濡らす ぬらす - wet, moisten - Verb -溝 みぞ - ditch, groove - Noun -はしご はしご - ladder - Noun -吐く はく - holler, spew - Verb -嘆く なげく - sigh, grieve - Verb -虫歯 むしば - decayed tooth, cavity - Noun -虫 むし - insect, worm - Noun -忠実 ちゅうじつ - faithfulness, devotion - Adjectival Noun -忠告 ちゅうこく - advice, admonishment - Verbal Noun -はだし はだし - barefoot, bare feet - Noun -恵まれる めぐまれる - be blessed, be privileged - Verb -道徳 どうとく - morality, morals - Noun -直径 ちょっけい - diameter - Noun -半径 はんけい - radius - Noun -丼 どんぶり - bowl - Noun -バツ バツ - cross, x-mark - Noun -豆 まめ - bean, peas - Noun -粒 つぶ - grain, drop - Noun -麦 むぎ - wheat - Noun -田畑 たはた - fields and rice paddies - Noun -灯油 とうゆ - kerosene, lamp oil - Noun -はねる はねる - run over, hit - Verb -電灯 でんとう - lamp, electric light - Noun -炎 ほのお - flame, blaze - Noun -皮肉 ひにく - cynicism, irony - Adjectival Noun -皮膚 ひふ - skin - Noun -臭い におい - smell, odor - Noun -生臭い なまぐさい - smelling of fish - Adjective -はれる はれる - swell, swell up - Verb -臭う におう - stink (unpleasant) - Verb -面倒臭い めんどうくさい - troublesome, tiresome - Adjective -匂う におう - smell (pleasant) - Verb -同居 どうきょ - living together - Verbal Noun -掘る ほる - dig, unearth - Verb -ひく ひく - run over - Verb -塀 へい - fence, wall - Noun -大層 たいそう - very, highly - Adverb -履歴 りれき - history, personal history - Noun -履歴書 りれきしょ - resume, bio - Noun -履物 はきもの - footwear - Noun -ヒント ヒント - hint, clue - Noun -戸棚 とだな - closet, cupboard - Noun -扉 とびら - door - Noun -羽根 はね - feather - Noun -翌日 よくじつ - the following day - Noun -翌朝 よくあさ - the following morning - Noun -翌年 よくねん - the following year - Noun -ファックス ファックス - facsimile, fax - Noun -群れ むれ - crowd, herd - Noun -殴る なぐる - hit, strike - Verb -要旨 ようし - gist, overview - Noun -肌 はだ - skin, surface - Noun -肌着 はだぎ - underwear - Noun -ふもと ふもと - foot of the mountain - Noun -肌色 はだいろ - flesh color - Noun -腸 ちょう - intestines, entrails - Noun -大胆 だいたん - boldness, daring - Adjectival Noun -幕 まく - curtain - Noun -夕暮れ ゆうぐれ - evening, twilight - Noun -フルーツ フルーツ - fruit - Noun -墓 はか - grave, gravestone - Noun -墓地 ぼち - graveyard, cemetery - Noun -墓参り はかまいり - visit to a grave - Verbal Noun -芽 め - bud, sprout - Noun -葬式 そうしき - funeral ceremony - Noun -へそ へそ - the navel, the bellybutton - Noun -礼儀 れいぎ - good manners, courtesy - Noun -憎む にくむ - hate, detest - Verb -憎しみ にくしみ - hatred, enmity - Noun -憎らしい にくらしい - hateful, horrible - Adjective -憎い にくい - hateful, abominable - Adjective -仏 ほとけ - buddha, Buddhist image - Noun -べたべた べたべた - stick together - Adjective -仏教 ぶっきょう - Buddhism - Noun -坊さん ぼうさん - Buddhist priest - Noun -竹 たけ - bamboo - Noun -筆者 ひっしゃ - writer - Noun -筆記試験 ひっきしけん - written examination - Noun -ほうき ほうき - broom - Noun -筆記用具 ひっきようぐ - writing materials, pens and pencils - Noun -筆 ふで - writing brush, penmanship - Noun -笛 ふえ - flute, whistle - Noun -名簿 めいぼ - registry, name list - Noun -分裂 ぶんれつ - division, split - Verbal Noun -ポスター ポスター - poster - Noun -布 ぬの - cloth - Noun -包丁 ほうちょう - kitchen knife, carving knife - Noun -包帯 ほうたい - bandage, dressing - Verbal Noun -包み つつみ - package, parcel - Noun -包み紙 つつみがみ - wrapping paper - Noun -抱く だく - hug, embrace - Verb -ほどく ほどく - undo, unfasten - Verb -文句 もんく - complaint - Noun -中旬 ちゅうじゅん - middle ten days of a month - Noun -平凡 へいぼん - common, ordinary - Adjectival Noun -通帳 つうちょう - bankbook, passbook - Noun -妊娠 にんしん - pregnancy, conception - Verbal Noun -ほほ ほほ - cheek - Noun -同姓 どうせい - same surname - Noun -嫁 よめ - bride, daughter-in-law - Noun -花嫁 はなよめ - bride - Noun -花婿 はなむこ - bridegroom - Noun -幼児 ようじ - young child, infant - Noun -ほほえむ ほほえむ - smile - Verb -眠たい ねむたい - sleepy - Adjective -眠り ねむり - sleep, slumber - Noun -眺める ながめる - look out, gaze - Verb -眺め ながめ - view, prospect - Noun -同封 どうふう - enclosure - Verbal Noun -封 ふう - seal, sealing - Noun -まく まく - sow, scatter - Verb -呼び掛ける よびかける - call to, appeal to - Verb -引っ掛かる ひっかかる - be caught, be trapped - Verb -話し掛ける はなしかける - address someone, speak to someone - Verb -通り掛かる とおりかかる - happen to pass by - Verb -引っ掛ける ひっかける - hook on - Verb -まとめ まとめ - summary - Noun -寄り掛かる よりかかる - lean against something - Verb -措置 そち - measure, step - Verbal Noun -拝見 はいけん - humbly look at or see - Verbal Noun -控える ひかえる - hold back, show moderation - Verb -控え室 ひかえしつ - waiting room - Noun -まね まね - imitation, mimicry - Verbal Noun -握り締める にぎりしめる - squeeze, grip - Verb -揃う そろう - be (all) together - Verb -揃える そろえる - align, make uniform - Verb -出迎え でむかえ - meeting, receiving - Noun -迎え むかえ - greeting, meeting - Noun -まねる まねる - imitate, mimic - Verb -遂げる とげる - accomplish, achieve - Verb -巡る めぐる - go round, circulate - Verb -待遇 たいぐう - treatment, pay - Noun -俳句 はいく - haiku - Noun -俳優 はいゆう - actor, actress - Noun -敏感 びんかん - sensitive - Adjectival Noun -まぶた まぶた - eyelid - Noun -倣う ならう - copy, follow an example - Verb -寮 りょう - dormitory, lodging house - Noun -偏見 へんけん - prejudice, biased view - Noun -何遍 なんべん - how many times - Noun -宣伝 せんでん - publicity, advertisement - Verbal Noun -まれ まれ - rarely - Adjective -展覧会 てんらんかい - exhibition - Noun -総理大臣 そうりだいじん - prime minister - Noun -大臣 だいじん - minister - Noun -臨む のぞむ - be present at - Verb -臨時 りんじ - temporary, provisional - Noun -ミスプリント ミスプリント - misprint, error - Noun -内閣 ないかく - cabinet - Noun -闘う たたかう - fight - Verb -派閥 はばつ - clique, faction - Noun -懐かしい なつかしい - longed-for, old - Adjective -噴火 ふんか - eruption, volcanic activity - Verbal Noun -噴水 ふんすい - jet, fountain - Noun -むく むく - peel, pare - Verb -不愉快 ふゆかい - unpleasant, disagreeable - Adjectival Noun -愉快 ゆかい - pleasant, delightful - Adjectival Noun -漫画 まんが - manga, comics - Noun -電卓 でんたく - pocket calculator - Noun -雄大 ゆうだい - grand, magnificent - Adjective -めくる めくる - turn over - Verb -雌 めす - female - Noun -幼稚 ようち - childish, infantile - Adjectival Noun -名称 めいしょう - name - Noun -秩序 ちつじょ - order, method - Noun -物陰 ものかげ - place behind something - Noun -めでたい めでたい - happy, fortunate - Adjective -魅力 みりょく - charm, attraction - Noun -醜い みにくい - ugly, bad-looking - Adjective -悪賢い わるがしこい - cunning, sly - Adjective -頂上 ちょうじょう - summit, climax - Noun -近頃 ちかごろ - recently, nowadays - Noun -矛盾 むじゅん - contradiction - Verbal Noun -もうかる もうかる - make a profit, be profitable - Verb -倉庫 そうこ - warehouse, storehouse - Noun -創立 そうりつ - establishment, organization - Verbal Noun -罰金 ばっきん - fine, penalty - Noun -罰する ばっする - punish - Verb -罰 ばつ - punishment, penalty - Noun -もうけ もうけ - profits, earnings - Noun -老人 ろうじん - old person, elderly - Noun -煮る にる - boil, cook - Verb -煮える にえる - boil, be boiled - Verb -蒸し暑い むしあつい - humid - Adjective -黙る だまる - become silent, shut one's mouth - Verb -もしかしたら もしかしたら - possibly, perhaps - Adverb -無駄 むだ - no good, pointless - Adjectival Noun -無駄遣い むだづかい - wasting money - Verbal Noun -沸騰 ふっとう - boiling - Verbal Noun -返却 へんきゃく - return - Verbal Noun -庁 ちょう - public office, agency - Noun -もてる もてる - be popular with the opposite sex - Verb -都庁 とちょう - Tokyo Metropolitan City Hall - Noun -府庁 ふちょう - urban prefectural office - Noun -摩擦 まさつ - friction, rubbing - Verbal Noun -先輩 せんぱい - senior, superior - Noun -冒険 ぼうけん - adventure, risk - Verbal Noun -牧場 ぼくじょう - stock farm, pasture - Noun -ゆでる ゆでる - boil - Verb -取り敢えず とりあえず - for now, first of all - Adverb -勇気 ゆうき - courage, nerve - Noun -勇敢 ゆうかん - brave, heroic - Adjectival Noun -励ます はげます - encourage, urge - Verb -露 つゆ - dew, dewdrop - Noun -よける よける - avoid, evade - Verb -零下 れいか - below zero, sub-zero - Noun -雰囲気 ふんいき - atmosphere, mood - Noun -盆地 ぼんち - valley, basin - Noun -盆 ぼん - Bon Festival - Noun -盆 ぼん - tray - Noun -よこす よこす - send, hand over - Verb -大衆 たいしゅう - the masses, the populace - Noun -舞台 ぶたい - stage, setting - Noun -見舞う みまう - visit someone - Verb -見舞い みまい - personal visit - Noun -盆踊り ぼんおどり - Bon Festival dance - Noun -跳ねる はねる - leap, hop, bound - Verb -よす よす - quit, stop - Verb -銭湯 せんとう - public bath, bathhouse - Noun -古里 ふるさと - hometown, birthplace - Noun -狙う ねらう - aim, be after - Verb -彫る ほる - engrave, carve - Verb -中央 ちゅうおう - center - Noun -レクリエーション レクリエーション - recreation, games - Noun -双子 ふたご - twins - Noun -裸 はだか - naked body, bareness - Noun -祖先 そせん - ancestor, forefather - Noun -報酬 ほうしゅう - remuneration, reward - Noun -無邪気 むじゃき - innocence, simplicity - Adjectival Noun -ろうそく ろうそく - candle - Noun -玉ねぎ たまねぎ - onion - Noun -玉 たま - bead, ball - Noun -天皇 てんのう - emperor - Noun -風呂場 ふろば - bathroom - Noun -班 はん - squad, group - Noun -召し上がる めしあがる - eat, drink - Verb -わがまま わがまま - selfishness, willfulness - Adjectival Noun -哲学 てつがく - philosophy - Noun -綱 つな - rope, line - Noun -縄 なわ - rope, cord - Noun -縫う ぬう - sew, stitch - Verb -虹 にじ - rainbow - Noun -わく わく - well up - Verb -梅雨明け つゆあけ - end of the rainy season - Verbal Noun -梅雨入り つゆいり - start of the rainy season - Verbal Noun -欄 らん - column, field - Noun -栓抜き せんぬき - bottle opener, corkscrew - Noun -峠 とうげ - mountain pass, ridge - Noun -ばからしい ばからしい - stupid, useless - Adjective -婆さん ばあさん - grandmother, old lady - Noun -漬ける つける - pickle, marinade - Verb -漬け物 つけもの - pickle, pickled vegetable - Noun -潰す つぶす - crush, smash - Verb -潰れる つぶれる - crush - Verb -なぜか なぜか - for some reason - Adverb -年賀 ねんが - New Year's card - Noun -賑わう にぎわう - bustle, enliven - Verb -蛇 へび - snake, serpent - Noun -華やか はなやか - gorgeous, colorful - Adjective -挟む はさむ - trap - Verb -塔 とう - tower, pagoda - Noun -にわかに にわかに - rapidly - Adverb -誓う ちかう - vow, swear - Verb -慰める なぐさめる - console, comfort - Verb -朗らか ほがらか - cheerful, bright - Adjective -蝶蝶 ちょうちょう - butterfly - Noun -鳩 はと - pigeon, dove - Noun -ぴたりと ぴたりと - suddenly - Adverb -雛祭 ひなまつり - Doll Festival - Noun -物凄い ものすごい - tremendous - Adjective -喉 のど - the throat - Noun -唾 つば - saliva, spittle - Noun -吠える ほえる - bark, bay - Verb -ぴょんと ぴょんと - jump - Adverb -吊るす つるす - hang - Verb -味噌 みそ - miso, soybean paste - Noun -塞がる ふさがる - close up - Verb -塞ぐ ふさぐ - close, shut - Verb -撫でる なでる - stroke, pat - Verb -卑怯 ひきょう - cowardice, meanness - Adjectival Noun -ひらりと ひらりと - lightly, delicately - Adverb -溜め息 ためいき - sigh - Noun -溜まる たまる - accumulate, store up - Verb -溜める ためる - store, collect - Verb -海苔 のり - laver - Noun -遥か はるか - far, distant - Adjective -もうじき もうじき - soon - Adverb -股 また - crotch, groin - Noun -焚く たく - start a fire - Verb -明瞭 めいりょう - clear, plain - Adjectival Noun -眉 まゆ - eyebrow - Noun -眉毛 まゆげ - eyebrows - Noun -やたらに やたらに - frequently, persistently - Adverb -割り箸 わりばし - disposable chopsticks - Noun -蛋白質 たんぱくしつ - protein - Noun -蜂 はち - bee - Noun -頂戴 ちょうだい - getting, receiving - Verbal Noun -初詣で はつもうで - first shrine visit of the new year - Verbal Noun -詫びる わびる - apologize - Verb -頬 ほお - cheek - Noun -餅 もち - rice cake - Noun -騙す だます - deceive, cheat - Verb -便箋 びんせん - letter paper, stationery - Noun diff --git a/config/mpv/scripts/jasubs/main.lua b/config/mpv/scripts/jasubs/main.lua deleted file mode 100644 index 360c7a7..0000000 --- a/config/mpv/scripts/jasubs/main.lua +++ /dev/null @@ -1,143 +0,0 @@ --- v. 2.7 --- Interactive subtitles for `mpv` for language learners. --- --- default keybinding to start/stop: F5 --- default keybinding to hide/show: F6 --- if jaSubs start automatically - mpv won't show notification --- --- dirs in which jaSubs will start automatically; part of path/filename will also work; case insensitive; regexp --- autostart_in = {'German', ' ger ', '%.ger%.', 'Deutsch', 'Hebrew'} -autostart_in = {'Japanese'} - --- for Mac change python3 to python or pythonw -start_command = 'python3 "%s" "%s" "%s"' - --- recomend to have these in tmpfs, or at least ssd. -sub_file = '/tmp/mpv_sub' -mpv_socket = '/tmp/mpv_socket' - -keybinding = 'F3' -keybinding_hide = 'F6' - -pyname = '~/.config/mpv/scripts/jaSubs/jaSubs.py' - ------------------------------------------------------- - -debug = false --- debug = true - -if debug == true then - start_command = '' - start_command = 'terminator -e \'python3 "%s" "%s" "%s"; sleep 33\'' -end - ------------------------------------------------------- - -function s1() - if running == true then - s_rm() - return - end - - running = true - mp.msg.warn('Starting jaSubs...') - mp.register_event("end-file", s_rm) - rnbr = math.random(11111111, 99999999) - - if debug == true then - rnbr = '' - end - - mpv_socket_2 = mpv_socket .. '_' .. rnbr - sub_file_2 = sub_file .. '_' .. rnbr - - -- setting up socket to control mpv - mp.set_property("input-ipc-server", mpv_socket_2) - - -- without visible subs won't work - sbv = mp.get_property("sub-visibility") - mp.set_property("sub-visibility", "yes") - mp.set_property("sub-ass-override", "force") - - sub_color1 = mp.get_property("sub-color", "1/1/1/1") - sub_color2 = mp.get_property("sub-border-color", "0/0/0/1") - sub_color3 = mp.get_property("sub-shadow-color", "0/0/0/1") - mp.set_property("sub-color", "0/0/0/0") - mp.set_property("sub-border-color", "0/0/0/0") - mp.set_property("sub-shadow-color", "0/0/0/0") - - start_command_2 = start_command:format(pyname:gsub('~', os.getenv('HOME')), mpv_socket_2, sub_file_2) - os.execute(start_command_2 .. ' &') - - mp.observe_property("sub-text", "string", s2) -end - -function s2(name, value) - if type(value) == "string" then - file = io.open(sub_file_2, "w") - file:write(value) - file:close() - end -end - -function s_rm() - running = false - hidden = false - mp.msg.warn('Quitting jaSubs...') - - mp.set_property("sub-visibility", sbv) - mp.set_property("sub-color", sub_color1) - mp.set_property("sub-border-color", sub_color2) - --~ mp.set_property("sub-shadow-color", sub_color3) - - os.execute('pkill -f "' .. mpv_socket_2 .. '" &') - os.execute('(sleep 3 && rm "' .. mpv_socket_2 .. '") &') - os.execute('(sleep 3 && rm "' .. sub_file_2 .. '") &') -end - -function started() - if mp.get_property("sub") == 'no' then - return true - end - - hidden = false - - for kk, pp in pairs(autostart_in) do - if mp.get_property("path"):lower():find(pp:lower()) or mp.get_property("working-directory"):lower():find(pp:lower()) then - s1() - break - end - end -end - -function s1_1() - if running == true then - s_rm() - mp.command('show-text "Quitting jaSubs..."') - else - if mp.get_property("sub") == 'no' then - mp.command('show-text "Select subtitles before starting jaSubs."') - else - s1() - mp.command('show-text "Starting jaSubs..."') - end - end -end - -function hide_show() - if running == true then - if hidden == true then - os.execute('rm "' .. mpv_socket_2 .. '_hide" &') - mp.osd_message("Showing jaSubs.", .8) - hidden = false - else - os.execute('touch "' .. mpv_socket_2 .. '_hide" &') - mp.osd_message("Hiding jaSubs.", .8) - hidden = true - end - end -end - -mp.add_forced_key_binding(keybinding, "start-stop-jaSubs", s1_1) -mp.add_forced_key_binding(keybinding_hide, "hide-show-jaSubs", hide_show) -mp.register_event("file-loaded", started) diff --git a/config/mpv/scripts/subs2srs/.gitignore b/config/mpv/scripts/subs2srs/.gitignore new file mode 100644 index 0000000..850b67c --- /dev/null +++ b/config/mpv/scripts/subs2srs/.gitignore @@ -0,0 +1,5 @@ +.idea +.vscode +/.github/RELEASE/*.zip +/.github/RELEASE/*.html +*TODO* diff --git a/config/mpv/scripts/subs2srs/LICENSE b/config/mpv/scripts/subs2srs/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/config/mpv/scripts/subs2srs/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/config/mpv/scripts/subs2srs/Makefile b/config/mpv/scripts/subs2srs/Makefile new file mode 100644 index 0000000..fc346ce --- /dev/null +++ b/config/mpv/scripts/subs2srs/Makefile @@ -0,0 +1,36 @@ +PROJECT := mpvacious +PREFIX ?= /etc/mpv/ +BRANCH ?= remotes/origin/master +VERSION := $(shell git describe --tags $(BRANCH)) +RELEASE_DIR := .github/RELEASE +ZIP := $(RELEASE_DIR)/$(PROJECT)_$(VERSION).zip +DOCS := $(RELEASE_DIR)/README_$(VERSION).html +MD2HTML = md2html --github --full-html + +.PHONY: all clean docs install uninstall + +all: $(ZIP) +docs: $(DOCS) + +$(ZIP): + git archive \ + --prefix=$(PROJECT)_$(VERSION)/ \ + --format=zip \ + -o $@ \ + $(BRANCH) \ + +$(DOCS): + git show "$(BRANCH):README.md" | $(MD2HTML) -o $@ + +install: + find . -type f -iname '*.lua' | while read -r file; do \ + install -Dm644 "$$file" "$(PREFIX)/scripts/$(PROJECT)/$$file"; \ + done + install -Dm644 $(RELEASE_DIR)/subs2srs.conf "$(PREFIX)/script-opts/subs2srs.conf" + +uninstall: + rm -rf -- "$(PREFIX)/scripts/$(PROJECT)" + rm -- "$(PREFIX)/script-opts/subs2srs.conf" + +clean: + rm -- $(ZIP) $(DOCS) diff --git a/config/mpv/scripts/subs2srs/README.md b/config/mpv/scripts/subs2srs/README.md new file mode 100644 index 0000000..deefe3c --- /dev/null +++ b/config/mpv/scripts/subs2srs/README.md @@ -0,0 +1,478 @@ +

+ +

+ +# mpvacious + +[![AUR](https://img.shields.io/badge/AUR-install-blue.svg)](https://aur.archlinux.org/packages/mpv-mpvacious/) +[![Chat](https://img.shields.io/badge/chat-join-green.svg)](https://tatsumoto-ren.github.io/blog/join-our-community.html) +![GitHub](https://img.shields.io/github/license/Ajatt-Tools/mpvacious) +[![Donate](https://img.shields.io/badge/support-developer-orange)](https://tatsumoto.neocities.org/blog/donating-to-tatsumoto.html) + +mpvacious is your semi-automatic subs2srs for mpv. +It supports multiple workflows and allows you to quickly create Anki cards +while watching your favorite TV show. +**[Video demonstration](https://redirect.invidious.io/watch?v=vU85ramvyo4)**. + +## Requirements + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GNU/LinuxWindows 10+macOSComments
mpvmpvmpvv0.32.0 or newer.
AnkiAnki
AnkiConnectInstall from AnkiWeb.
curlcurlInstalled by default on all platforms except Windows 7.
xclip or wl-copypbcopyTo copy subtitle text to clipboard.
+ +Install all dependencies at once (on [Arch-based](https://www.parabola.nu/) +[distros](https://www.gnu.org/distros/free-distros.en.html)): + +``` +$ sudo pacman -Syu mpv anki curl xclip --needed +``` + +## Prerequisites + +* A guide on how to set up Anki can be found [on our site](https://tatsumoto.neocities.org/blog/setting-up-anki.html). +* If you're on a [Windows](https://www.fsf.org/windows) or a [Windows-like](https://reactos.org/) machine, + a mpv build by `shinchiro` is recommended. +* **macOS** users are advised to use [homebrew](https://brew.sh/) or manually add `mpv` to `PATH`. +* Note that it is not recommended to use FlatPak or similar containers. + If you still want to, [read this](howto/flatpak.md). +* Make sure that your build of mpv supports encoding of audio and images. + This shell command can be used to test it. + + ``` + $ mpv 'test_video.mkv' --loop-file=no --frames=1 -o='test_image.jpg' + ``` + + If the command fails, find a compatible build on the [mpv website](https://mpv.io/installation/) + or instead install FFmpeg and [enable FFmpeg support](#configuration) in `mpvacious`'s config file. +* Most problems with adding audio or images to Anki cards can be fixed + by installing FFmpeg and enabling it settings. + +## Installation + +There are multiple ways you can install `mpvacious`. +I recommend installing with `git` so that you can easily update on demand. + +`mpvacious` is a user-script for mpv, +so it has to be installed in the directory `mpv` reads its user-scripts from. + +| OS | Location | +|-----------|--------------------------------------------------| +| GNU/Linux | `~/.config/mpv/scripts/` | +| Windows | `C:/Users/Username/AppData/Roaming/mpv/scripts/` | + +Windows is not recommended, +but we acknowledge that some people haven't switched to GNU/Linux yet. + +### Using git + +Clone the repo to the `scripts` directory. + +``` +mkdir -p ~/.config/mpv/scripts/ +git clone 'https://github.com/Ajatt-Tools/mpvacious.git' ~/.config/mpv/scripts/subs2srs +``` + +To update, run the following command. + +``` +cd ~/.config/mpv/scripts/subs2srs && git pull +``` + +### From the AUR + +`mpvacious` can be installed with the [mpv-mpvacious](https://aur.archlinux.org/packages/mpv-mpvacious/) package. + +### Manually + +This way is not recommended because it's easy to make a mistake during the process +and end up with a broken install. + +Download +[the repository](https://github.com/Ajatt-Tools/mpvacious/archive/refs/heads/master.zip) +or +[the latest release](https://github.com/Ajatt-Tools/mpvacious/releases) +and extract the folder containing +[subs2srs.lua](https://raw.githubusercontent.com/Ajatt-Tools/mpvacious/master/subs2srs.lua) +to your [mpv scripts](https://github.com/mpv-player/mpv/wiki/User-Scripts) directory. + +
+ +Expected directory tree + +``` +~/.config/mpv/scripts +|-- other script 1 +|-- other script 2 +|-- subs2srs +| |-- main.lua +| |-- subs2srs.lua +| `-- other files +`-- other script 3 +``` + +
+ +
+ +A note for mpv v0.32 and older + +Older versions of `mpv` don't know how to handle user-scripts in subdirectories. +You need to tell mpv where to look for `mpvacious`. + +Open or create `~/.config/mpv/scripts/modules.lua` and add these lines: +``` +local mpv_scripts_dir_path = os.getenv("HOME") .. "/.config/mpv/scripts/" +package.path = package.path .. ';' .. os.getenv("HOME") .. '/.config/mpv/scripts/subs2srs/?.lua' +function load(relative_path) dofile(mpv_scripts_dir_path .. relative_path) end +load("subs2srs/subs2srs.lua") +``` + +
+ +**Note:** in [Celluloid](https://www.archlinux.org/packages/community/x86_64/celluloid/) +user scripts are installed in `/.config/celluloid/scripts/`. +When following the instructions above, replace `.config/mpv` with `.config/celluloid` +and optionally `subs2srs` with the name of the folder mpvacious is cloned into. + +## Configuration + +The config file should be created by the user, if needed. + +| OS | Config location | +|--------------------|-------------------------------------------------------------------| +| GNU/Linux | `~/.config/mpv/script-opts/subs2srs.conf` | +| Windows | `C:/Users/Username/AppData/Roaming/mpv/script-opts/subs2srs.conf` | +| Windows (portable) | `mpv.exeフォルダ/portable_config/script-opts/subs2srs.conf` | + +If a parameter is not specified +in the config file, the default value will be used. +mpv doesn't tolerate spaces before and after `=`. + +

+ Example configuration file +

+ +If the first field is empty, it will be set contain the string `[empty]`. +Otherwise, Anki won't allow mpvacious to add new notes. +This won't happen if the sentence field is first in the note type settings. + +**Tip**: Try [our official note type](https://ankiweb.net/shared/info/1557722832) +if you don't want to configure note fields yourself. +Alternatively, we have a collection of user-created note types, which you can browse +[here](https://github.com/Ajatt-Tools/AnkiNoteTypes). + +If you are having problems playing media files on older mobile devices, +set `audio_format` to `mp3` and/or `snapshot_format` to `jpg`. +Otherwise, I recommend sticking with `opus` for audio, +and `avif` or `webp` for images, +as they greatly reduce the size of the generated files. + +If you still use AnkiMobile (the [proprietary](https://www.gnu.org/proprietary/) Anki app), +set `opus_container` to `m4a` or `webm`. I'll allow iOS to play Opus files, while still maintaining +compatibility with non-Apple devices. For really old iOS devices, set `opus_container` to +[`caf`](https://en.wikipedia.org/wiki/Core_Audio_Format). CAF plays only on Anki Desktop, +AnkiWeb in Safari and AnkiMobile, and is really not recommended. (Please note that +[Lockdown Mode](https://support.apple.com/en-us/105120) completely disables Opus and AVIF support, +though you may try to add an exception for AnkiMobile.) + +If no matter what mpvacious fails to create audio clips and/or snapshots, +change `use_ffmpeg` to `yes`. +By using ffmpeg instead of the encoder built in mpv you can work around most encoder issues. +You need to have ffmpeg installed for this to work. + +### Key bindings + +The user may change some global key bindings, though this step is not necessary. +See [Usage](#usage) for the explanation of what they do. + +| OS | Config location | +|-----------|----------------------------------------------------| +| GNU/Linux | `~/.config/mpv/input.conf` | +| Windows | `C:/Users/Username/AppData/Roaming/mpv/input.conf` | + +Default bindings: + +``` +a script-binding mpvacious-menu-open + +Ctrl+g script-binding mpvacious-animated-snapshot-toggle + +Ctrl+n script-binding mpvacious-export-note + +Ctrl+m script-binding mpvacious-update-last-note +Ctrl+M script-binding mpvacious-overwrite-last-note + +g script-binding mpvacious-quick-card-menu-open +Alt+g script-binding mpvacious-quick-card-sel-menu-open + +Ctrl+c script-binding mpvacious-copy-primary-sub-to-clipboard +Ctrl+C script-binding mpvacious-copy-secondary-sub-to-clipboard +Ctrl+t script-binding mpvacious-autocopy-toggle + +H script-binding mpvacious-sub-seek-back +L script-binding mpvacious-sub-seek-forward + +Alt+h script-binding mpvacious-sub-seek-back-pause +Alt+l script-binding mpvacious-sub-seek-forward-pause + +Ctrl+h script-binding mpvacious-sub-rewind +Ctrl+H script-binding mpvacious-sub-replay +Ctrl+L script-binding mpvacious-sub-play-up-to-next + +Ctrl+v script-binding mpvacious-secondary-sid-toggle +Ctrl+k script-binding mpvacious-secondary-sid-prev +Ctrl+j script-binding mpvacious-secondary-sid-next +``` + +**Note:** A capital letter means that you need to press Shift in order to activate the corresponding binding. +For example, Ctrl+M actually means Ctrl+Shift+m. +mpv accepts both variants in `input.conf`. + +## Usage + +* [Create a card](howto/create_card.md) +* [Quick card creation](howto/create_quick_card.md) +* [Open the "Add" dialog](howto/add_dialog.md) +* [Usage with Rikaitan](howto/yomichan.md) +* [Usage with GoldenDict](howto/goldendict.md) + +### Global bindings + +**Menu:** + +* a - Open `advanced menu`. + +**Enable\Disable animation:** + +* Ctrl+g - If animation is enabled, animated snapshots will be generated instead of static images. + Animated snapshot are like GIFs (just in a different format) + and will capture the video from the start to the end times selected. + +**Make a card:** + +* Ctrl+n - Export a card with the currently visible subtitle line on the front. +Use this when your subs are well-timed, +and the target sentence doesn't span multiple subs. + +**Quick card creation:** + +* g - Quick card creation menu. +* Alt+g - Quick card creation, card selection menu. + +**Update the last card:** + +* Ctrl+m - Append to the media fields of the newly added Anki card. +* Ctrl+Shift+m - Overwrite media fields of the newly added Anki card. + +**Clipboard:** + +* Ctrl+c - Copy current subtitle string to the system clipboard. +* Ctrl+t - Toggle automatic copying of subtitles to the clipboard. + +**Seeking:** + +* Shift+h and Shift+l - Seek to the previous or the next subtitle. +* Alt+h and Alt+l - Seek to the previous, or the next subtitle, and pause. +* Ctrl+h - Seek to the start of the currently visible subtitle. Use it if you missed something. +* Ctrl+Shift+h - Replay current subtitle line, and pause. +* Ctrl+Shift+l - Play until the end of the next subtitle, and pause. Useful for beginners who need + to look up words in each and every dialogue line. + +**Secondary subtitles:** + +* Ctrl+v - Toggle visibility. +* Ctrl+k - Switch to the previous subtitle if it's not already selected. +* Ctrl+j - Switch to the next subtitle if it's not already selected. + +### Menu options + +Advanced menu has the following options: + +* f - Increment number of cards to update. Only affects note updating, including quick card creation. The number of cards to update is reset to 1 upon updating a note. +* shift+f - Decrement number of cards to update. + +* c - Interactive subtitle selection. + The range of the currently displayed subtitle line is selected. The selection then grows both ways based on the following displayed lines. + It does nothing if there are no subs on screen. + +* shift+s - Set the start time to the current sub. The selection then grows forward based on the following displayed lines. + The default selection spans across the range of the currently displayed subtitle line. +* shift+e - Set the end time to the current sub. The selection then grows backward based on the following displayed lines. + The default selection spans across the range of the currently displayed subtitle line. + +Then seek with Shift+h and Shift+l to the previous/next line that you want to add. +Press n to make the card. + +* r - Forget all previously saved timings and associated dialogs. + +* z and Shift+z - Adjust subtitle delay. + +If above fails, you have to manually set timings. +* s - Set the start time. The selection then grows forward based on the following displayed lines. +The default selection spans across the selected start point and the end of the subtitle line. +* e - Set the end time. The selection then grows backward based on the following displayed lines. +The default selection spans across the selected end point and the start of the subtitle line. + +Then, as earlier, press n to make the card. + +**Tip**: change playback speed by pressing [ and ] +to precisely mark start and end of the phrase. + +### My subtitles are not in sync + +If subs are badly timed, first, you could try to re-time them. +Read [Retiming subtitles](https://tatsumoto.neocities.org/blog/retiming-subtitles). +Or shift timings using key bindings provided by mpv (usually z and Shift+z). + +### Example sentence card + +With the addon you can make cards like this in just a few seconds. + +![card-example](https://user-images.githubusercontent.com/69171671/92900057-e102d480-f40e-11ea-8cfc-b00848ca66ff.png) + +### Audio cards + +It is possible to make a card with just audio, and a picture +when subtitles for the show you are watching aren't available, for example. +mpv by default allows you to do a `1` second exact seek by pressing Shift+LEFT and Shift+RIGHT. +Open the mpvacious menu by pressing a, seek to the position you need, and set the timings. +Then press g to invoke the `Add Cards` dialog. +Here's a [video demonstration](https://redirect.invidious.io/watch?v=BXhyckdHPGE). + +If the show is hard-subbed, you can use +[transformers-ocr](https://tatsumoto.neocities.org/blog/mining-from-manga.html) +to recognize and add text to the card. + +### Secondary subtitles + +If you want to add a translation to your cards, and you have the subtitles in that language, +you can add them as secondary subtitles if you run `mpv` with `--secondary-sid=` parameter, +`sid` being the track identifier for the subtitle. + +You also need to specify `secondary_field` in the [config file](#Configuration) +if it is different from the default. + +If you want to load secondary subtitles **automatically**, don't modify the run parameters +and instead set the desired languages in the config file (`secondary_sub_lang` option). + +Secondary subtitles will be visible when hovering over the top part of the `mpv` window. + +https://user-images.githubusercontent.com/69171671/188492261-909ba3e8-b82c-493f-88cf-0ec953dfcfe1.mp4 + +By pressing Ctrl+v you can control secondary sid visibility without using the mouse. + +### Other tools + +If you don't like the default Rikaitan Search tool, try: + +* Clipboard Inserter browser add-on +([chrome](https://chrome.google.com/webstore/detail/clipboard-inserter/deahejllghicakhplliloeheabddjajm)) +([firefox](https://addons.mozilla.org/ja/firefox/addon/clipboard-inserter/)) +* A html page ([1](https://pastebin.com/zDY6s3NK)) ([2](https://pastebin.com/hZ4sawL4)) +to paste the contents of your clipboard to + +You can use any html page as long as it has \\ in it. + +### Additional mpv key bindings + +I recommend adding these lines to your [input.conf](#key-bindings) for smoother experience. +``` +# vim-like seeking +l seek 5 +h seek -5 +j seek -60 +k seek 60 + +# Cycle between subtitle files +K cycle sub +J cycle sub down + +# Add/subtract 50 ms delay from subs +Z add sub-delay +0.05 +z add sub-delay -0.05 + +# Adjust timing to previous/next subtitle +X sub-step 1 +x sub-step -1 +``` + +## Profiles + +Mpvacious supports config profiles. +To make use of them, create a new config file called `subs2srs_profiles.conf` +in the same folder as your [subs2srs.conf](#Configuration). +Inside the file, define available profile names (without `.conf`) and the name of the active profile: + +``` +profiles=subs2srs,english,german +active=subs2srs +``` + +In the example above, I have three profiles. +The first one is the default, +the second one is for learning English, +the third one is for learning German. + +Then in the same folder create config files for each of the defined profiles. +For example, below is the contents of my `english.conf` file: + +``` +deck_name=English sentence mining +model_name=General +sentence_field=Question +audio_field=Audio +image_field=Extra +``` + +You don't have to redefine all settings in the new profile. +Specify only the ones you want to be different from the default. + +To cycle profiles, open the advanced menu by pressing a and then press p. +At any time you can see what profile is active in the menu's status bar. + +## Hacking + +If you want to modify this script +or make an entirely new one from scratch, +these links may help. + +* https://mpv.io/manual/master/#lua-scripting +* https://github.com/mpv-player/mpv/blob/master/player/lua/defaults.lua +* https://github.com/SenneH/mpv2anki +* https://github.com/kelciour/mpv-scripts/blob/master/subs2srs.lua +* https://pastebin.com/M2gBksHT +* https://pastebin.com/NBudhMUk +* https://pastebin.com/W5YV1A9q +* https://github.com/ayuryshev/subs2srs +* https://github.com/erjiang/subs2srs diff --git a/config/mpv/scripts/subs2srs/ankiconnect.lua b/config/mpv/scripts/subs2srs/ankiconnect.lua new file mode 100644 index 0000000..f9c87d8 --- /dev/null +++ b/config/mpv/scripts/subs2srs/ankiconnect.lua @@ -0,0 +1,241 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +AnkiConnect requests +]] + +local utils = require('mp.utils') +local msg = require('mp.msg') +local h = require('helpers') +local self = {} + +self.execute = function(request, completion_fn) + -- utils.format_json returns a string + -- On error, request_json will contain "null", not nil. + local request_json, error = utils.format_json(request) + + if error ~= nil or request_json == "null" then + return completion_fn and completion_fn() + else + return self.platform.curl_request(self.config.ankiconnect_url, request_json, completion_fn) + end +end + +self.parse_result = function(curl_output) + -- there are two values that we actually care about: result and error + -- but we need to crawl inside to get them. + + if curl_output == nil then + return nil, "Failed to format json or no args passed" + end + + if curl_output.status ~= 0 then + return nil, "Ankiconnect isn't running" + end + + local stdout_json = utils.parse_json(curl_output.stdout) + + if stdout_json == nil then + return nil, "Fatal error from Ankiconnect" + end + + if stdout_json.error ~= nil then + return nil, tostring(stdout_json.error) + end + + return stdout_json.result, nil +end + +self.get_media_dir_path = function() + -- Ask AnkiConnect where to store media files. + -- If AnkiConnect isn't running, returns nil. + + local ret = self.execute({ + action = "getMediaDirPath", + version = 6, + }) + local dir_path, error = self.parse_result(ret) + if not error then + return dir_path + else + msg.error(string.format("Couldn't retrieve path to collection.media folder: %s", error)) + return nil + end +end + +self.create_deck = function(deck_name) + local args = { + action = "changeDeck", + version = 6, + params = { + cards = {}, + deck = deck_name + } + } + local result_notify = function(_, result, _) + local _, error = self.parse_result(result) + if not error then + msg.info(string.format("Deck %s: check completed.", deck_name)) + else + msg.warn(string.format("Deck %s: check failed. Reason: %s.", deck_name, error)) + end + end + self.execute(args, result_notify) +end + +self.add_note = function(note_fields, tag, gui) + local action = gui and 'guiAddCards' or 'addNote' + local args = { + action = action, + version = 6, + params = { + note = { + deckName = self.config.deck_name, + modelName = self.config.model_name, + fields = note_fields, + options = { + allowDuplicate = self.config.allow_duplicates, + duplicateScope = "deck", + }, + tags = h.is_empty(tag) and {} or { tag, }, + } + } + } + local result_notify = function(_, result, _) + local note_id, error = self.parse_result(result) + if not error then + h.notify(string.format("Note added. ID = %s.", note_id)) + else + h.notify(string.format("Error: %s.", error), "error", 2) + end + end + self.execute(args, result_notify) +end + +self.get_last_note_ids = function(n_cards) + local ret = self.execute { + action = "findNotes", + version = 6, + params = { + query = "added:1" -- find all notes added today + } + } + + local note_ids, _ = self.parse_result(ret) + + if not h.is_empty(note_ids) then + return h.get_last_n_added_notes(note_ids, n_cards) + else + return {} + end +end + +self.get_note_fields = function(note_id) + local ret = self.execute { + action = "notesInfo", + version = 6, + params = { + notes = { note_id } + } + } + + local result, error = self.parse_result(ret) + + if error == nil then + result = result[1].fields + for key, value in pairs(result) do + result[key] = value.value + end + return result + else + return nil + end +end + +self.get_first_field = function(model_name) + local ret = self.execute { + action = "findModelsByName", + version = 6, + params = { + modelNames = { model_name } + } + } + + local result, error = self.parse_result(ret) + + if error == nil then + for _, field in pairs(result[1].flds) do + if field.ord == 0 then + return field.name + end + end + else + msg.error(string.format("Couldn't retrieve the first field's name of note type %s: %s", model_name, error)) + return nil + end +end + +self.gui_browse = function(query) + if not self.config.disable_gui_browse then + self.execute { + action = 'guiBrowse', + version = 6, + params = { + query = query + } + } + end +end + +self.add_tag = function(note_id, tag) + if not h.is_empty(tag) then + self.execute { + action = 'addTags', + version = 6, + params = { + notes = { note_id }, + tags = tag + } + } + end +end + +self.append_media = function(note_id, fields, create_media_fn, tag) + -- AnkiConnect will fail to update the note if it's selected in the Anki Browser. + -- https://github.com/FooSoft/anki-connect/issues/82 + -- Switch focus from the current note to avoid it. + self.gui_browse("nid:1") -- impossible nid + + local args = { + action = "updateNoteFields", + version = 6, + params = { + note = { + id = note_id, + fields = fields, + } + } + } + + local on_finish = function(_, result, _) + local _, error = self.parse_result(result) + if not error then + create_media_fn() + self.add_tag(note_id, tag) + self.gui_browse(string.format("nid:%s", note_id)) -- select the updated note in the card browser + h.notify(string.format("Note #%s updated.", note_id)) + else + h.notify(string.format("Error: %s.", error), "error", 2) + end + end + + self.execute(args, on_finish) +end + +self.init = function(config, platform) + self.config = config + self.platform = platform +end + +return self diff --git a/config/mpv/scripts/subs2srs/cfg_mgr.lua b/config/mpv/scripts/subs2srs/cfg_mgr.lua new file mode 100644 index 0000000..076c0d9 --- /dev/null +++ b/config/mpv/scripts/subs2srs/cfg_mgr.lua @@ -0,0 +1,240 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Config management, validation, loading. +]] + +local mp = require('mp') +local mpopt = require('mp.options') +local msg = require('mp.msg') +local h = require('helpers') +local utils = require('mp.utils') + +local min_side_px = 42 +local max_side_px = 640 +local default_height_px = 200 + +-- This constant should be used in place of width and/or height in the config file. +-- It tells the encoder to preserve aspect ratio when downscaling snapshots. +-- The user almost always wants to set either width or height to this value. +-- Note: If set to -1, encoding will fail with the "height/width not divisible by 2" error. +local preserve_aspect_ratio = -2 + +local self = { + config = nil, + profiles = nil, + initial_config = {} +} + +local default_profile_filename = 'subs2srs' +local profiles_filename = 'subs2srs_profiles' + +local function set_file_extension_for_opus() + -- Default to OGG, then change if an extension is supported. + -- https://en.wikipedia.org/wiki/Core_Audio_Format + self.config.audio_extension = '.ogg' + for _, extension in ipairs({ 'opus', 'm4a', 'webm', 'caf' }) do + if extension == self.config.opus_container then + self.config.audio_extension = '.' .. self.config.opus_container + break + end + end +end + +local function set_audio_format() + if self.config.audio_format == 'opus' then + -- https://opus-codec.org/ + self.config.audio_codec = 'libopus' + set_file_extension_for_opus() + else + self.config.audio_codec = 'libmp3lame' + self.config.audio_extension = '.mp3' + end +end + +local function set_video_format() + if self.config.snapshot_format == 'avif' then + self.config.snapshot_extension = '.avif' + self.config.snapshot_codec = 'libaom-av1' + elseif self.config.snapshot_format == 'webp' then + self.config.snapshot_extension = '.webp' + self.config.snapshot_codec = 'libwebp' + else + self.config.snapshot_extension = '.jpg' + self.config.snapshot_codec = 'mjpeg' + end + + -- Animated webp images can only have .webp extension. + -- The user has no choice on this. Same logic for avif. + if self.config.animated_snapshot_format == 'avif' then + self.config.animated_snapshot_extension = '.avif' + self.config.animated_snapshot_codec = 'libaom-av1' + else + self.config.animated_snapshot_extension = '.webp' + self.config.animated_snapshot_codec = 'libwebp' + end +end + +local function ensure_in_range(dimension) + self.config[dimension] = self.config[dimension] < min_side_px and preserve_aspect_ratio or self.config[dimension] + self.config[dimension] = self.config[dimension] > max_side_px and max_side_px or self.config[dimension] +end + +local function conditionally_set_defaults(width, height, quality) + if self.config[width] < 1 and self.config[height] < 1 then + self.config[width] = preserve_aspect_ratio + self.config[height] = default_height_px + end + if self.config[quality] < 0 or self.config[quality] > 100 then + self.config[quality] = 15 + end +end + +local function check_image_settings() + ensure_in_range('snapshot_width') + ensure_in_range('snapshot_height') + conditionally_set_defaults('snapshot_width', 'snapshot_height', 'snapshot_quality') +end + +local function ensure_correct_fps() + if self.config.animated_snapshot_fps == nil or self.config.animated_snapshot_fps <= 0 or self.config.animated_snapshot_fps > 30 then + self.config.animated_snapshot_fps = 10 + end +end + +local function check_animated_snapshot_settings() + ensure_in_range('animated_snapshot_width') + ensure_in_range('animated_snapshot_height') + conditionally_set_defaults('animated_snapshot_width', 'animated_snapshot_height', 'animated_snapshot_quality') + ensure_correct_fps() +end + +local function validate_config() + set_audio_format() + set_video_format() + check_image_settings() + check_animated_snapshot_settings() +end + +local function remember_initial_config() + if h.is_empty(self.initial_config) then + for key, value in pairs(self.config) do + self.initial_config[key] = value + end + else + msg.fatal("Ignoring. Initial config has been read already.") + end +end + +local function restore_initial_config() + for key, value in pairs(self.initial_config) do + self.config[key] = value + end +end + +local function read_profile_list() + mpopt.read_options(self.profiles, profiles_filename) + msg.info("Read profile list. Defined profiles: " .. self.profiles.profiles) +end + +local function read_profile(profile_name) + mpopt.read_options(self.config, profile_name) + msg.info("Read config file: " .. profile_name) +end + +local function read_default_config() + read_profile(default_profile_filename) +end + +local function reload_from_disk() + --- Loads default config file (subs2srs.conf), then overwrites it with current profile. + if not h.is_empty(self.config) and not h.is_empty(self.profiles) then + restore_initial_config() + read_default_config() + if self.profiles.active ~= default_profile_filename then + read_profile(self.profiles.active) + end + validate_config() + else + msg.fatal("Attempt to load config when init hasn't been done.") + end +end + +local function next_profile() + local first, next, new + for profile in string.gmatch(self.profiles.profiles, '[^,]+') do + if not first then + first = profile + end + if profile == self.profiles.active then + next = true + elseif next then + next = false + new = profile + end + end + if next == true or not new then + new = first + end + self.profiles.active = new + reload_from_disk() +end + +local function create_config_file() + local name = default_profile_filename + -- ~/.config/mpv/scripts/ and the mpvacious dir + local parent, child = utils.split_path(mp.get_script_directory()) + -- ~/.config/mpv/ and "scripts" + parent, child = utils.split_path(parent:gsub("/$", "")) + -- ~/.config/mpv/script-opts/subs2srs.conf + local config_filepath = utils.join_path(utils.join_path(parent, "script-opts"), string.format('%s.conf', name)) + local example_config_filepath = utils.join_path(mp.get_script_directory(), ".github/RELEASE/subs2srs.conf") + + local file_info = utils.file_info(config_filepath) + if file_info and file_info.is_file then + print("config already exists") + return + end + + local handle = io.open(example_config_filepath, 'r') + if handle == nil then + return + end + + local content = handle:read("*a") + handle:close() + + handle = io.open(config_filepath, 'w') + if handle == nil then + h.notify(string.format("Couldn't open %s.", config_filepath), "error", 4) + return + end + + handle:write(string.format("# Written by %s on %s.\n", name, os.date())) + handle:write(content) + handle:close() + h.notify("Settings saved.", "info", 2) +end + +local function init(config_table, profiles_table) + create_config_file() + self.config, self.profiles = config_table, profiles_table + -- 'subs2srs' is the main profile, it is always loaded. 'active profile' overrides it afterwards. + -- initial state is saved to another table to maintain consistency when cycling through incomplete profiles. + read_profile_list() + read_default_config() + remember_initial_config() + if self.profiles.active ~= default_profile_filename then + read_profile(self.profiles.active) + end + validate_config() +end + +return { + reload_from_disk = reload_from_disk, + init = init, + next_profile = next_profile, + default_height_px = default_height_px, + preserve_aspect_ratio = preserve_aspect_ratio, +} diff --git a/config/mpv/scripts/subs2srs/encoder/codec_support.lua b/config/mpv/scripts/subs2srs/encoder/codec_support.lua new file mode 100644 index 0000000..26cd91a --- /dev/null +++ b/config/mpv/scripts/subs2srs/encoder/codec_support.lua @@ -0,0 +1,40 @@ +--[[ +Copyright: Ajatt-Tools and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Check what codecs are supported by mpv. +If a desired codec is not supported, set the "use_ffmpeg" config option to "yes". +]] + +local mp = require('mp') +local h = require('helpers') + +local ovc_help = h.subprocess { 'mpv', '--ovc=help' } +local oac_help = h.subprocess { 'mpv', '--oac=help' } + +local function is_audio_supported(codec) + return oac_help.status == 0 and oac_help.stdout:find('--oac=' .. codec, 1, true) ~= nil +end + +local function is_image_supported(codec) + return ovc_help.status == 0 and ovc_help.stdout:find('--ovc=' .. codec, 1, true) ~= nil +end + +local inspection_result = { + snapshot = { + ['libaom-av1'] = is_image_supported('libaom-av1'), + libwebp = is_image_supported('libwebp'), + mjpeg = is_image_supported('mjpeg'), + }, + audio = { + libmp3lame = is_audio_supported('libmp3lame'), + libopus = is_audio_supported('libopus'), + }, +} +for type, codecs in pairs(inspection_result) do + for codec, supported in pairs(codecs) do + mp.msg.info(string.format("mpv supports %s codec %s: %s", type, codec, tostring(supported))) + end +end + +return inspection_result diff --git a/config/mpv/scripts/subs2srs/encoder/encoder.lua b/config/mpv/scripts/subs2srs/encoder/encoder.lua new file mode 100644 index 0000000..b05c3db --- /dev/null +++ b/config/mpv/scripts/subs2srs/encoder/encoder.lua @@ -0,0 +1,729 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Encoder creates audio clips and snapshots, both animated and static. +]] + +local mp = require('mp') +local utils = require('mp.utils') +local h = require('helpers') +local filename_factory = require('utils.filename_factory') +local msg = require('mp.msg') + +--Contains the state of the module +local self = { + snapshot = {}, + audio = {}, + config = nil, + store_fn = nil, + platform = nil, + encoder = nil, + output_dir_path = nil, +} + +------------------------------------------------------------ +-- utility functions + +local function pad_timings(padding, start_time, end_time) + local video_duration = mp.get_property_number('duration') + start_time = start_time - padding + end_time = end_time + padding + + if start_time < 0 then + start_time = 0 + end + + if end_time > video_duration then + end_time = video_duration + end + + return start_time, end_time +end + +local function alt_path_dirs() + return { + '/opt/homebrew/bin', + '/usr/local/bin', + utils.join_path(os.getenv("HOME") or "~", '.local/bin'), + } +end + +local function find_exec(name) + local path, info + for _, alt_dir in pairs(alt_path_dirs()) do + path = utils.join_path(alt_dir, name) + info = utils.file_info(path) + if info and info.is_file then + return path + end + end + return name +end + +local function toms(timestamp) + --- Trim timestamp down to milliseconds. + return string.format("%.3f", timestamp) +end + +local function fit_quality_percentage_to_range(quality, worst_val, best_val) + local scaled = worst_val + (best_val - worst_val) * quality / 100 + -- Round to the nearest integer that's better in quality. + if worst_val > best_val then + return math.floor(scaled) + end + return math.ceil(scaled) +end + +local function quality_to_crf_avif(quality_value) + -- Quality is from 0 to 100. For avif images CRF is from 0 to 63 and reversed. + local worst_avif_crf = 63 + local best_avif_crf = 0 + return fit_quality_percentage_to_range(quality_value, worst_avif_crf, best_avif_crf) +end + +local function quality_to_jpeg_qscale(quality_value) + local worst_jpeg_quality = 31 + local best_jpeg_quality = 2 + return fit_quality_percentage_to_range(quality_value, worst_jpeg_quality, best_jpeg_quality) +end + +------------------------------------------------------------ +-- ffmpeg encoder + +local ffmpeg = {} + +ffmpeg.exec = find_exec("ffmpeg") + +ffmpeg.prepend = function(...) + return { + ffmpeg.exec, "-hide_banner", "-nostdin", "-y", "-loglevel", "quiet", "-sn", + ..., + } +end + +local function make_scale_filter(algorithm, width, height) + -- algorithm is either "sinc" or "lanczos" + -- Static image scaling uses "sinc", which is the best downscaling algorithm: https://stackoverflow.com/a/6171860 + -- Animated images use Lanczos, which is faster. + return string.format( + "scale='min(%d,iw)':'min(%d,ih)':flags=%s+accurate_rnd", + width, height, algorithm + ) +end + +local function static_scale_filter() + return make_scale_filter('sinc', self.config.snapshot_width, self.config.snapshot_height) +end + +local function animated_scale_filter() + return make_scale_filter( + 'lanczos', + self.config.animated_snapshot_width, + self.config.animated_snapshot_height + ) +end + +ffmpeg.make_static_snapshot_args = function(source_path, output_path, timestamp) + local encoder_args + if self.config.snapshot_format == 'avif' then + encoder_args = { + '-c:v', 'libaom-av1', + -- cpu-used < 6 can take a lot of time to encode. + '-cpu-used', '6', + -- Avif quality can be controlled with crf. + '-crf', tostring(quality_to_crf_avif(self.config.snapshot_quality)), + '-still-picture', '1', + } + elseif self.config.snapshot_format == 'webp' then + encoder_args = { + '-c:v', 'libwebp', + '-compression_level', '6', + '-quality', tostring(self.config.snapshot_quality), + } + else + encoder_args = { + '-c:v', 'mjpeg', + '-q:v', tostring(quality_to_jpeg_qscale(self.config.snapshot_quality)), + } + end + + local args = ffmpeg.prepend( + '-an', + '-ss', toms(timestamp), + '-i', source_path, + '-map_metadata', '-1', + '-vf', static_scale_filter(), + '-frames:v', '1', + h.unpack(encoder_args) + ) + table.insert(args, output_path) + return args +end + +ffmpeg.make_animated_snapshot_args = function(source_path, output_path, start_timestamp, end_timestamp) + local encoder_args + if self.config.animated_snapshot_format == 'avif' then + encoder_args = { + '-c:v', 'libaom-av1', + -- cpu-used < 6 can take a lot of time to encode. + '-cpu-used', '6', + -- Avif quality can be controlled with crf. + '-crf', tostring(quality_to_crf_avif(self.config.animated_snapshot_quality)), + } + else + -- Documentation: https://www.ffmpeg.org/ffmpeg-all.html#libwebp + encoder_args = { + '-c:v', 'libwebp', + '-compression_level', '6', + '-quality', tostring(self.config.animated_snapshot_quality), + } + end + + local args = ffmpeg.prepend( + '-an', + '-ss', toms(start_timestamp), + '-to', toms(end_timestamp), + '-i', source_path, + '-map_metadata', '-1', + '-loop', '0', + '-vf', string.format( + 'fps=%d,%s', + self.config.animated_snapshot_fps, + animated_scale_filter() + ), + h.unpack(encoder_args) + ) + table.insert(args, output_path) + return args +end + +local function make_loudnorm_targets() + return string.format( + 'loudnorm=I=%s:LRA=%s:TP=%s:dual_mono=true', + self.config.loudnorm_target, + self.config.loudnorm_range, + self.config.loudnorm_peak + ) +end + +local function parse_loudnorm(loudnorm_targets, json_extractor, loudnorm_consumer) + local function warn() + msg.warn('Failed to measure loudnorm stats, falling back on dynamic loudnorm.') + end + + return function(success, result) + local json + if success and result.status == 0 then + json = json_extractor(result.stdout, result.stderr) + end + + if json == nil then + warn() + loudnorm_consumer(loudnorm_targets) + return + end + + local loudnorm_args = { loudnorm_targets } + local function add_arg(name, val) + -- loudnorm sometimes fails to gather stats for extremely short inputs. + -- Simply omit the stat to fall back on dynamic loudnorm. + if val ~= '-inf' and val ~= 'inf' then + table.insert(loudnorm_args, string.format('%s=%s', name, val)) + else + warn() + end + end + + local stats = utils.parse_json(json) + add_arg('measured_I', stats.input_i) + add_arg('measured_LRA', stats.input_lra) + add_arg('measured_TP', stats.input_tp) + add_arg('measured_thresh', stats.input_thresh) + add_arg('offset', stats.target_offset) + + loudnorm_consumer(table.concat(loudnorm_args, ':')) + end +end + +local function add_filter(filters, filter) + if #filters == 0 then + filters = filter + else + filters = string.format('%s,%s', filters, filter) + end +end + +local function separate_filters(filters, new_args, args) + -- Would've strongly preferred + -- if args[i] == '-af' or args[i] == '-filter:a' then + -- i = i + 1 + -- add_filter(args[i]) + -- but https://lua.org/manual/5.4/manual.html#3.3.5 says that + -- "You should not change the value of the control variable during the loop." + local expect_filter = false + for i = 1, #args do + if args[i] == '-af' or args[i] == '-filter:a' then + expect_filter = true + else + if expect_filter then + add_filter(filters, args[i]) + else + table.insert(new_args, args[i]) + end + expect_filter = false + end + end +end + +ffmpeg.append_user_audio_args = function(args) + local new_args = {} + local filters = '' + + separate_filters(filters, new_args, args) + if self.config.tie_volumes then + add_filter(filters, string.format("volume=%.1f", mp.get_property_native('volume') / 100.0)) + end + + local user_args = {} + for arg in string.gmatch(self.config.ffmpeg_audio_args, "%S+") do + table.insert(user_args, arg) + end + separate_filters(filters, new_args, user_args) + + if #filters > 0 then + table.insert(new_args, '-af') + table.insert(new_args, filters) + end + return new_args +end + +ffmpeg.make_audio_args = function( + source_path, output_path, start_timestamp, end_timestamp, args_consumer +) + local audio_track = h.get_active_track('audio') + local audio_track_id = audio_track['ff-index'] + + if audio_track and audio_track.external == true then + source_path = audio_track['external-filename'] + audio_track_id = 'a' + end + + local function make_ffargs(...) + return ffmpeg.append_user_audio_args( + ffmpeg.prepend( + '-vn', + '-ss', toms(start_timestamp), + '-to', toms(end_timestamp), + '-i', source_path, + '-map_metadata', '-1', + '-map_chapters', '-1', + '-map', string.format("0:%s", tostring(audio_track_id)), + '-ac', '1', + ... + ) + ) + end + + local function make_encoding_args(loudnorm_args) + local encoder_args + if self.config.audio_format == 'opus' then + encoder_args = { + '-c:a', 'libopus', + '-application', 'voip', + '-apply_phase_inv', '0', -- Improves mono audio. + } + if self.config.opus_container == 'm4a' then + table.insert(encoder_args, '-f') + table.insert(encoder_args, 'mp4') + end + else + -- https://wiki.hydrogenaud.io/index.php?title=LAME#Recommended_encoder_settings: + -- "For very low bitrates, up to 100kbps, ABR is most often the best solution." + encoder_args = { + '-c:a', 'libmp3lame', + '-compression_level', '0', + '-abr', '1', + } + end + + encoder_args = { '-b:a', tostring(self.config.audio_bitrate), h.unpack(encoder_args) } + if loudnorm_args then + table.insert(encoder_args, '-af') + table.insert(encoder_args, loudnorm_args) + end + local args = make_ffargs(h.unpack(encoder_args)) + table.insert(args, output_path) + args_consumer(args) + end + + if not self.config.loudnorm then + make_encoding_args(nil) + return + end + + local loudnorm_targets = make_loudnorm_targets() + local args = make_ffargs( + '-loglevel', 'info', + '-af', loudnorm_targets .. ':print_format=json' + ) + table.insert(args, '-f') + table.insert(args, 'null') + table.insert(args, '-') + h.subprocess( + args, + parse_loudnorm( + loudnorm_targets, + function(stdout, stderr) + local start, stop, json = string.find(stderr, '%[Parsed_loudnorm_0.-({.-})') + return json + end, + make_encoding_args + ) + ) +end + +------------------------------------------------------------ +-- mpv encoder + +local mpv = { } + +mpv.exec = find_exec("mpv") + +mpv.prepend_common_args = function(source_path, ...) + return { + mpv.exec, + source_path, + '--no-config', + '--loop-file=no', + '--keep-open=no', + '--no-sub', + '--no-ocopy-metadata', + ..., + } +end + +mpv.make_static_snapshot_args = function(source_path, output_path, timestamp) + local encoder_args + if self.config.snapshot_format == 'avif' then + encoder_args = { + '--ovc=libaom-av1', + -- cpu-used < 6 can take a lot of time to encode. + '--ovcopts-add=cpu-used=6', + string.format('--ovcopts-add=crf=%d', quality_to_crf_avif(self.config.snapshot_quality)), + '--ovcopts-add=still-picture=1', + } + elseif self.config.snapshot_format == 'webp' then + encoder_args = { + '--ovc=libwebp', + '--ovcopts-add=compression_level=6', + string.format('--ovcopts-add=quality=%d', self.config.snapshot_quality), + } + else + encoder_args = { + '--ovc=mjpeg', + '--vf-add=scale=out_range=jpeg', + string.format( + '--ovcopts=global_quality=%d*QP2LAMBDA,flags=+qscale', + quality_to_jpeg_qscale(self.config.snapshot_quality) + ), + } + end + + return mpv.prepend_common_args( + source_path, + '--audio=no', + '--frames=1', + '--start=' .. toms(timestamp), + string.format('--vf-add=lavfi=[%s]', static_scale_filter()), + '-o=' .. output_path, + h.unpack(encoder_args) + ) +end + +mpv.make_animated_snapshot_args = function(source_path, output_path, start_timestamp, end_timestamp) + local encoder_args + if self.config.animated_snapshot_format == 'avif' then + encoder_args = { + '--ovc=libaom-av1', + -- cpu-used < 6 can take a lot of time to encode. + '--ovcopts-add=cpu-used=6', + string.format('--ovcopts-add=crf=%d', quality_to_crf_avif(self.config.animated_snapshot_quality)), + } + else + encoder_args = { + '--ovc=libwebp', + '--ovcopts-add=compression_level=6', + string.format('--ovcopts-add=quality=%d', self.config.animated_snapshot_quality), + } + end + + return mpv.prepend_common_args( + source_path, + '--audio=no', + '--start=' .. toms(start_timestamp), + '--end=' .. toms(end_timestamp), + '--ofopts-add=loop=0', + string.format('--vf-add=fps=%d', self.config.animated_snapshot_fps), + string.format('--vf-add=lavfi=[%s]', animated_scale_filter()), + '-o=' .. output_path, + h.unpack(encoder_args) + ) +end + +mpv.make_audio_args = function(source_path, output_path, + start_timestamp, end_timestamp, args_consumer) + local audio_track = h.get_active_track('audio') + local audio_track_id = mp.get_property("aid") + + if audio_track and audio_track.external == true then + source_path = audio_track['external-filename'] + audio_track_id = 'auto' + end + + local function make_mpvargs(...) + local args = mpv.prepend_common_args( + source_path, + '--video=no', + '--aid=' .. audio_track_id, + '--audio-channels=mono', + '--start=' .. toms(start_timestamp), + '--end=' .. toms(end_timestamp), + string.format( + '--volume=%d', + self.config.tie_volumes and mp.get_property('volume') or 100 + ), + ... + ) + for arg in string.gmatch(self.config.mpv_audio_args, "%S+") do + table.insert(args, arg) + end + return args + end + + local function make_encoding_args(loudnorm_args) + local encoder_args + if self.config.audio_format == 'opus' then + encoder_args = { + '--oac=libopus', + '--oacopts-add=application=voip', + '--oacopts-add=apply_phase_inv=0', -- Improves mono audio. + } + if self.config.opus_container == 'm4a' then + table.insert(encoder_args, '--of=mp4') + end + else + -- https://wiki.hydrogenaud.io/index.php?title=LAME#Recommended_encoder_settings: + -- "For very low bitrates, up to 100kbps, ABR is most often the best solution." + encoder_args = { + '--oac=libmp3lame', + '--oacopts-add=compression_level=0', + '--oacopts-add=abr=1', + } + end + + local args = make_mpvargs( + '--oacopts-add=b=' .. self.config.audio_bitrate, + '-o=' .. output_path, + h.unpack(encoder_args) + ) + if loudnorm_args then + table.insert(args, '--af-append=' .. loudnorm_args) + end + args_consumer(args) + end + + if not self.config.loudnorm then + make_encoding_args(nil) + return + end + + local loudnorm_targets = make_loudnorm_targets() + h.subprocess( + make_mpvargs( + '-v', + '--af-append=' .. loudnorm_targets .. ':print_format=json', + '--ao=null', + '--of=null' + ), + parse_loudnorm( + loudnorm_targets, + function(stdout, stderr) + local start, stop, json = string.find(stdout, '%[ffmpeg%] ({.-})') + if json then + json = string.gsub(json, '%[ffmpeg%]', '') + end + return json + end, + make_encoding_args + ) + ) +end + +------------------------------------------------------------ +-- main interface + +local create_animated_snapshot = function(start_timestamp, end_timestamp, source_path, output_path, on_finish_fn) + -- Creates the animated snapshot and then calls on_finish_fn + local args = self.encoder.make_animated_snapshot_args(source_path, output_path, start_timestamp, end_timestamp) + h.subprocess(args, on_finish_fn) +end + +local create_static_snapshot = function(timestamp, source_path, output_path, on_finish_fn) + -- Creates a static snapshot, in other words an image, and then calls on_finish_fn + if not self.config.screenshot then + local args = self.encoder.make_static_snapshot_args(source_path, output_path, timestamp) + h.subprocess(args, on_finish_fn) + else + local args = { 'screenshot-to-file', output_path, 'video', } + mp.command_native_async(args, on_finish_fn) + end + +end + +local report_creation_result = function(file_path) + return function(success, result) + -- result is nil on success for screenshot-to-file. + if success and (result == nil or result.status == 0) and h.file_exists(file_path) then + msg.info(string.format("Created file: %s", file_path)) + return true + else + msg.error(string.format("Couldn't create file: %s", file_path)) + return false + end + end +end + +local create_snapshot = function(start_timestamp, end_timestamp, current_timestamp, filename) + if h.is_empty(self.output_dir_path) then + return msg.error("Output directory wasn't provided. Image file will not be created.") + end + + -- Calls the proper function depending on whether or not the snapshot should be animated + if not h.is_empty(self.config.image_field) then + local source_path = mp.get_property("path") + local output_path = utils.join_path(self.output_dir_path, filename) + + local on_finish = report_creation_result(output_path) + if self.config.animated_snapshot_enabled then + create_animated_snapshot(start_timestamp, end_timestamp, source_path, output_path, on_finish) + else + create_static_snapshot(current_timestamp, source_path, output_path, on_finish) + end + else + print("Snapshot will not be created.") + end +end + +local background_play = function(file_path, on_finish) + return h.subprocess( + { mpv.exec, '--audio-display=no', '--force-window=no', '--keep-open=no', '--really-quiet', file_path }, + on_finish + ) +end + +local create_audio = function(start_timestamp, end_timestamp, filename, padding) + if h.is_empty(self.output_dir_path) then + return msg.error("Output directory wasn't provided. Audio file will not be created.") + end + + if not h.is_empty(self.config.audio_field) then + local source_path = mp.get_property("path") + local output_path = utils.join_path(self.output_dir_path, filename) + + if padding > 0 then + start_timestamp, end_timestamp = pad_timings(padding, start_timestamp, end_timestamp) + end + + local function start_encoding(args) + local on_finish = function(success, result) + local conversion_check = report_creation_result(output_path) + if conversion_check(success, result) and self.config.preview_audio then + background_play(output_path, function() + print("Played file: " .. output_path) + end) + end + end + + h.subprocess(args, on_finish) + end + + self.encoder.make_audio_args( + source_path, output_path, start_timestamp, end_timestamp, start_encoding + ) + else + print("Audio will not be created.") + end +end + +local make_snapshot_filename = function(start_time, end_time, timestamp) + -- Generate a filename for the snapshot, taking care of its extension and whether it's animated or static + if self.config.animated_snapshot_enabled then + return filename_factory.make_filename(start_time, end_time, self.config.animated_snapshot_extension) + else + return filename_factory.make_filename(timestamp, self.config.snapshot_extension) + end +end + +local make_audio_filename = function(start_time, end_time) + -- Generates a filename for the audio + return filename_factory.make_filename(start_time, end_time, self.config.audio_extension) +end + +local toggle_animation = function() + -- Toggles on and off animated snapshot generation at runtime. It is called whenever ctrl+g is pressed + self.config.animated_snapshot_enabled = not self.config.animated_snapshot_enabled + h.notify("Animation " .. (self.config.animated_snapshot_enabled and "enabled" or "disabled"), "info", 2) +end + +local init = function(config) + -- Sets the module to its preconfigured status + self.config = config + self.encoder = config.use_ffmpeg and ffmpeg or mpv +end + +local set_output_dir = function(dir_path) + -- Set directory where media files should be saved. + -- This function is called every time a card is created or updated. + self.output_dir_path = dir_path +end + +local create_job = function(type, sub, audio_padding) + local filename, run_async, current_timestamp + if type == 'snapshot' and h.has_video_track() then + current_timestamp = mp.get_property_number("time-pos", 0) + filename = make_snapshot_filename(sub['start'], sub['end'], current_timestamp) + run_async = function() + create_snapshot(sub['start'], sub['end'], current_timestamp, filename) + end + elseif type == 'audioclip' and h.has_audio_track() then + filename = make_audio_filename(sub['start'], sub['end']) + run_async = function() + create_audio(sub['start'], sub['end'], filename, audio_padding) + end + else + run_async = function() + print(type .. " will not be created.") + end + end + return { + filename = filename, + run_async = run_async, + } +end + +return { + init = init, + set_output_dir = set_output_dir, + snapshot = { + create_job = function(sub) + return create_job('snapshot', sub) + end, + toggle_animation = toggle_animation, + }, + audio = { + create_job = function(sub, padding) + return create_job('audioclip', sub, padding) + end, + }, +} diff --git a/config/mpv/scripts/subs2srs/find_anki_col.sh b/config/mpv/scripts/subs2srs/find_anki_col.sh new file mode 100755 index 0000000..a98199b --- /dev/null +++ b/config/mpv/scripts/subs2srs/find_anki_col.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +# Find full path to an opened Anki collection. + +readlink -f -- /proc/$(pgrep '^anki$')/fd/* | grep 'collection.anki2$' diff --git a/config/mpv/scripts/subs2srs/helpers.lua b/config/mpv/scripts/subs2srs/helpers.lua new file mode 100644 index 0000000..e8f911e --- /dev/null +++ b/config/mpv/scripts/subs2srs/helpers.lua @@ -0,0 +1,280 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Various helper functions. +]] + +local mp = require('mp') +local msg = require('mp.msg') +local utils = require('mp.utils') +local this = {} + +this.unpack = unpack and unpack or table.unpack + +this.remove_all_spaces = function(str) + return str:gsub('%s*', '') +end + +this.table_get = function(table, key, default) + if table[key] == nil then + return default or 'nil' + else + return table[key] + end +end + +this.max_num = function(table) + local max = table[1] + for _, value in ipairs(table) do + if value > max then + max = value + end + end + return max +end + +this.get_last_n_added_notes = function(note_ids, n) + table.sort(note_ids) + return { this.unpack(note_ids, math.max(#note_ids - n + 1, 1), #note_ids) } +end + +this.contains = function(table, element) + for _, value in pairs(table) do + if value == element then + return true + end + end + return false +end + +this.minutes_ago = function(m) + return (os.time() - 60 * m) * 1000 +end + +this.is_wayland = function() + return os.getenv('WAYLAND_DISPLAY') ~= nil +end + +this.is_win = function() + return mp.get_property('options/vo-mmcss-profile') ~= nil +end + +this.is_mac = function() + return mp.get_property('options/macos-force-dedicated-gpu') ~= nil +end + +local function map(tab, func) + local t = {} + for k, v in pairs(tab) do + t[k] = func(v) + end + return t +end + +local function args_as_str(args) + return table.concat(map(args, function(str) return string.format("'%s'", str) end), " ") +end + +this.subprocess = function(args, completion_fn, override_settings) + -- if `completion_fn` is passed, the command is ran asynchronously, + -- and upon completion, `completion_fn` is called to process the results. + msg.info("Executing: " .. args_as_str(args)) + local command_native = type(completion_fn) == 'function' and mp.command_native_async or mp.command_native + local command_table = { + name = "subprocess", + playback_only = false, + capture_stdout = true, + capture_stderr = true, + args = args + } + if not this.is_empty(override_settings) then + for k,v in pairs(override_settings) do + command_table[k] = v + end + end + return command_native(command_table, completion_fn) +end + +this.subprocess_detached = function(args, completion_fn) + local overwrite_settings = { + detach=true, + capture_stdout = false, + capture_stderr = false, + } + return this.subprocess(args, completion_fn, overwrite_settings) +end + +this.is_empty = function(var) + return var == nil or var == '' or (type(var) == 'table' and next(var) == nil) +end + +this.contains_non_latin_letters = function(str) + return str:match("[^%c%p%s%w—]") +end + +this.capitalize_first_letter = function(string) + return string:gsub("^%l", string.upper) +end + +this.remove_leading_trailing_spaces = function(str) + return str:gsub('^%s*(.-)%s*$', '%1') +end + +this.remove_leading_trailing_dashes = function(str) + return str:gsub('^[%-_]*(.-)[%-_]*$', '%1') +end + +this.remove_text_in_parentheses = function(str) + -- Remove text like (泣き声) or (ドアの開く音) + -- No deletion is performed if there's no text after the parentheses. + -- Note: the modifier `-´ matches zero or more occurrences. + -- However, instead of matching the longest sequence, it matches the shortest one. + return str:gsub('(%b())(.)', '%2'):gsub('((.-))(.)', '%2') +end + +this.remove_newlines = function(str) + return str:gsub('[\n\r]+', ' ') +end + +this.trim = function(str) + str = this.remove_leading_trailing_spaces(str) + str = this.remove_text_in_parentheses(str) + str = this.remove_newlines(str) + return str +end + +this.escape_special_characters = (function() + local entities = { + ['&'] = '&', + ['"'] = '"', + ["'"] = ''', + ['<'] = '<', + ['>'] = '>', + } + return function(s) + return s:gsub('[&"\'<>]', entities) + end +end)() + +this.remove_extension = function(filename) + return filename:gsub('%.%w+$', '') +end + +this.remove_special_characters = function(str) + return str:gsub('[%c%p%s]', ''):gsub(' ', '') +end + +this.remove_text_in_brackets = function(str) + return str:gsub('%b[]', ''):gsub('【.-】', '') +end + +this.remove_filename_text_in_parentheses = function(str) + return str:gsub('%b()', ''):gsub('(.-)', '') +end + +this.remove_common_resolutions = function(str) + -- Also removes empty leftover parentheses and brackets. + return str:gsub("2160p", ""):gsub("1080p", ""):gsub("720p", ""):gsub("576p", ""):gsub("480p", ""):gsub("%(%)", ""):gsub("%[%]", "") +end + +this.human_readable_time = function(seconds) + if type(seconds) ~= 'number' or seconds < 0 then + return 'empty' + end + + local parts = { + h = math.floor(seconds / 3600), + m = math.floor(seconds / 60) % 60, + s = math.floor(seconds % 60), + ms = math.floor((seconds * 1000) % 1000), + } + + local ret = string.format("%02dm%02ds%03dms", parts.m, parts.s, parts.ms) + + if parts.h > 0 then + ret = string.format('%dh%s', parts.h, ret) + end + + return ret +end + +this.get_episode_number = function(filename) + -- Reverses the filename to start the search from the end as the media title might contain similar numbers. + local filename_reversed = filename:reverse() + + local ep_num_patterns = { + "[%s_](%d?%d?%d)[pP]?[eE]", -- Starting with E or EP (case-insensitive). "Example Series S01E01 [94Z295D1]" + "^(%d?%d?%d)[pP]?[eE]", -- Starting with E or EP (case-insensitive) at the end of filename. "Example Series S01E01" + "%)(%d?%d?%d)%(", -- Surrounded by parentheses. "Example Series (12)" + "%](%d?%d?%d)%[", -- Surrounded by brackets. "Example Series [01]" + "%s(%d?%d?%d)%s", -- Surrounded by whitespace. "Example Series 124 [1080p 10-bit]" + "_(%d?%d?%d)_", -- Surrounded by underscores. "Example_Series_04_1080p" + "^(%d?%d?%d)[%s_]", -- Ending to the episode number. "Example Series 124" + "(%d?%d?%d)%-edosipE", -- Prepended by "Episode-". "Example Episode-165" + } + + local s, e, episode_num + for _, pattern in pairs(ep_num_patterns) do + s, e, episode_num = string.find(filename_reversed, pattern) + if not this.is_empty(episode_num) then + return #filename - e, #filename - s, episode_num:reverse() + end + end +end + +this.notify = function(message, level, duration) + level = level or 'info' + duration = duration or 1 + msg[level](message) + mp.osd_message(message, duration) +end + +this.get_active_track = function(track_type) + -- track_type == audio|sub + for _, track in pairs(mp.get_property_native('track-list')) do + if track.type == track_type and track.selected == true then + return track + end + end + return nil +end + +this.has_video_track = function() + return mp.get_property_native('vid') ~= false +end + +this.has_audio_track = function() + return mp.get_property_native('aid') ~= false +end + +this.str_contains = function(s, pattern) + return not this.is_empty(s) and string.find(string.lower(s), string.lower(pattern)) ~= nil +end + +this.filter = function(arr, func) + local filtered = {} + for _, elem in ipairs(arr) do + if func(elem) == true then + table.insert(filtered, elem) + end + end + return filtered +end + +this.file_exists = function(filepath) + if not this.is_empty(filepath) then + local info = utils.file_info(filepath) + if info and info.is_file and info.size > 0 then + return true + end + end + return false +end + +this.get_loaded_tracks = function(track_type) + --- Return all sub tracks, audio tracks, etc. + return this.filter(mp.get_property_native('track-list'), function(track) return track.type == track_type end) +end + +return this diff --git a/config/mpv/scripts/subs2srs/howto/add_dialog.md b/config/mpv/scripts/subs2srs/howto/add_dialog.md new file mode 100644 index 0000000..22093c6 --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/add_dialog.md @@ -0,0 +1,9 @@ +# Open the "Add" dialog + +1) Open a video in `mpv`. +1) Press a to open advanced menu. +1) Optionally, press c and select the desired subtitle lines with the interactive selection. +1) Press g to open the Add dialog in Anki. +1) Add dictionary definitions using software like GoldenDict, Qolibri, etc. + +After the card is created, you can find it by typing `added:1` in the Anki Browser. diff --git a/config/mpv/scripts/subs2srs/howto/create_card.md b/config/mpv/scripts/subs2srs/howto/create_card.md new file mode 100644 index 0000000..e92f77d --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/create_card.md @@ -0,0 +1,14 @@ +# Make a simple sentence card + +To make a card from the currently visible subtitle line, press Ctrl+n. + +To make a card from two or more subtitle lines: + +1) Press a to open advanced menu. +2) Press c to start interactive selection. +3) Seek to the previous/next subtitle with Shift+h and Shift+l. +4) Press n to create a new card. + +After the card is created, you can find it by typing `added:1` in the Anki Browser. +The card doesn't contain dictionary definitions. +You need to add them yourself afterward, using software like GoldenDict, Qolibri, etc. diff --git a/config/mpv/scripts/subs2srs/howto/create_quick_card.md b/config/mpv/scripts/subs2srs/howto/create_quick_card.md new file mode 100644 index 0000000..619794a --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/create_quick_card.md @@ -0,0 +1,31 @@ +# Quick Card Creation + +The goal of the quick card creation menu is to streamline a specific flow for media with **well-timed subtitles**: + +1) Add a new note to Anki via + [Rikaitan](https://tatsumoto.neocities.org/blog/setting-up-yomichan.html) + or any other tool that works with AnkiConnect. +2) Update the note via mpvacious. + +To update the most recently added card from the currently visible subtitle line, press gg. + +To make a card from two or more subtitle lines: + +1) Press g to open the quick card creation menu. +2) Press any number [2-9]. This number corresponds to the number of lines to create the card from. + +Note: g1 is also valid. +However, gg is an additional bind to further streamline the most common scenario. + +For example, +g2 creates a card using 2 subtitle lines. + +Like the advanced menu, you can also update multiple cards: + +1) Press Alt+g to select the number of cards for quick card creation. +2) Press any number [2-9]. This number corresponds to the number of cards to update. +3) Press any number [1-9] again. This is the number of lines. + +Note: upon completing the note update, the selected number of cards resets back to the default of one. + +For example, (Alt+g)22 would update the last 2 notes using 2 subtitle lines. diff --git a/config/mpv/scripts/subs2srs/howto/flatpak.md b/config/mpv/scripts/subs2srs/howto/flatpak.md new file mode 100644 index 0000000..46a5787 --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/flatpak.md @@ -0,0 +1,27 @@ +# Flatpak notes + +We think it's best to never use Flatpak. +Specifically, try not to use Flatpak to install `mpv` and `anki`. +Install packages from the official repositories of your distro or from the AUR. + +Read the following notes if you still decide to use Flatpak. + +Make these changes in Flatseal: + +* Enable "Filesystem > All system files" + so it could see `wl-copy`. + Unfortunately, there's no option to provide only a specific system file. +* Add `~/.var/app/net.ankiweb.Anki` to "Filesystem > Other Files" + so mpvacious could add encoded snapshots and audio to Anki. +* Add `PATH=/home/USERNAME/.local/bin:/home/USERNAME/bin:/app/bin:/usr/bin:/run/host/usr/bin` to "Environment > Variables". + There's no option to add a path to `PATH` in Flatseal, + so I opened container, + saved it's PATH and added `/run/host/usr/bin` + so mpvacuous could access `wl-copy`. +* Enable "Shared > Network". + It's enabled by default, but anyway. + +The mpv config root is `~/.var/app/io.mpv.Mpv/config/mpv` + +* `~/.var/app/io.mpv.Mpv/config/mpv/scripts` +* `~/.var/app/io.mpv.Mpv/config/mpv/script-opts` diff --git a/config/mpv/scripts/subs2srs/howto/goldendict.md b/config/mpv/scripts/subs2srs/howto/goldendict.md new file mode 100644 index 0000000..7f355c6 --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/goldendict.md @@ -0,0 +1,45 @@ +# Modifying cards added with GoldenDict + +You can add a card first using GoldenDict, +and then append an audio clip and a picture to it. + +**Note:** the only version of GoldenDict that can create Anki cards with configurable fields is +[xiaoyifang's goldendict](https://github.com/xiaoyifang/goldendict-ng). +Read [Setting up GoldenDict](https://tatsumoto-ren.github.io/blog/setting-up-goldendict.html) and +[How to connect with Anki](https://github.com/xiaoyifang/goldendict-ng/blob/staged/website/docs/topic_anki.md) +if you are new to GoldenDict. + +To send subtitles from `mpv` directly to GoldenDict, +append the following line to `subs2srs.conf`: + +``` +autoclip_method=goldendict +``` + +**Note:** If `goldendict` is not in the PATH, +you have to [add it to the PATH](https://wiki.archlinux.org/title/Environment_variables#Per_user). + +1) Press a to open `advanced menu`. +2) Press t to toggle the `autoclip` option. + +Now as subtitles appear on the screen, +they will be immediately sent to GoldenDict instead of the system clipboard. + +1) Open GoldenDict. +2) Play a video in `mpv`. +3) When you find an unknown word, + select the definition text, + right-click and select "send word to anki" to make a card, + or press Ctrl+Shift+N. +4) Go back to mpv and add an image and an audio clip + to the card you've just made by pressing m while the `advanced menu` is open. + Pressing Shift+m will overwrite any existing data in media fields. + +https://github.com/Ajatt-Tools/mpvacious/assets/69171671/0fc02d24-d320-4d2c-b7a9-cb478e9f0067 + +Don't forget to set the right timings and join lines together +if the sentence is split between multiple subs. +To do it, enter interactive selection by pressing c +and seek to the next or previous subtitle. + +To pair Mecab and GoldenDict, install [gd-tools](https://github.com/Ajatt-Tools/gd-tools). diff --git a/config/mpv/scripts/subs2srs/howto/yomichan.md b/config/mpv/scripts/subs2srs/howto/yomichan.md new file mode 100644 index 0000000..9ea16d6 --- /dev/null +++ b/config/mpv/scripts/subs2srs/howto/yomichan.md @@ -0,0 +1,24 @@ +# Modifying cards added with Rikaitan + +You can add a card first using +[Rikaitan](https://tatsumoto.neocities.org/blog/setting-up-yomichan.html), +and then append an audio clip and a picture to it. + +1) Press a to open `advanced menu`. +1) Press t to toggle the `autoclip` option. + +Now as subtitles appear on the screen, they will be immediately copied to the clipboard. +You can use it in combination with clipboard monitor. + +1) Open [Rikaitan Search](https://tatsumoto.neocities.org/blog/what-is-yomichan-search) + by pressing Alt+Insert in your web browser. +1) Play a video in `mpv`. +1) When you find an unknown word, click the + button to make a card for it. +4) Go back to mpv and add an image and an audio clip + to the card you've just made by pressing m while the `advanced menu` is open. + Pressing Shift+m will overwrite any existing data in media fields. + +Don't forget to set the right timings and join lines together +if the sentence is split between multiple subs. +To do it, enter interactive selection by pressing c +and seek to the next or previous subtitle. diff --git a/config/mpv/scripts/subs2srs/main.lua b/config/mpv/scripts/subs2srs/main.lua new file mode 100644 index 0000000..6817586 --- /dev/null +++ b/config/mpv/scripts/subs2srs/main.lua @@ -0,0 +1 @@ +require('subs2srs') diff --git a/config/mpv/scripts/subs2srs/menu.lua b/config/mpv/scripts/subs2srs/menu.lua new file mode 100644 index 0000000..4d34937 --- /dev/null +++ b/config/mpv/scripts/subs2srs/menu.lua @@ -0,0 +1,77 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Menu for mpvacious +]] + +local mp = require('mp') +local msg = require('mp.msg') +local h = require('helpers') + +local Menu = { + active = false, + keybindings = {}, + overlay = mp.create_osd_overlay and mp.create_osd_overlay('ass-events'), +} + +function Menu:new(o) + o = o or {} + setmetatable(o, self) + self.__index = self + return o +end + +function Menu:with_update(params) + return function() + local status, error = pcall(h.unpack(params)) + if not status then + msg['error'](error) + end + self:update() + end +end + +function Menu:make_osd() + return nil +end + +function Menu:update() + if self.active == false then return end + self.overlay.data = self:make_osd():get_text() + self.overlay:update() +end + +function Menu:open() + if self.overlay == nil then + h.notify("OSD overlay is not supported in " .. mp.get_property("mpv-version"), "error", 5) + return + end + + if self.active == true then + self:close() + return + end + + for _, val in pairs(self.keybindings) do + mp.add_forced_key_binding(val.key, val.key, val.fn) + end + + self.active = true + self:update() +end + +function Menu:close() + if self.active == false then + return + end + + for _, val in pairs(self.keybindings) do + mp.remove_key_binding(val.key) + end + + self.overlay:remove() + self.active = false +end + +return Menu diff --git a/config/mpv/scripts/subs2srs/osd_styler.lua b/config/mpv/scripts/subs2srs/osd_styler.lua new file mode 100644 index 0000000..3a865dc --- /dev/null +++ b/config/mpv/scripts/subs2srs/osd_styler.lua @@ -0,0 +1,97 @@ +--[[ +A helper class for styling OSD messages +http://docs.aegisub.org/3.2/ASS_Tags/ + +Copyright (C) 2021 Ren Tatsumoto + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +]] + +local OSD = {} +OSD.__index = OSD + +function OSD:new() + return setmetatable({ messages = {} }, self) +end + +function OSD:append(s) + table.insert(self.messages, tostring(s)) + return self +end + +function OSD:newline() + return self:append([[\N]]) +end + +function OSD:tab() + return self:append([[\h\h\h\h]]) +end + +function OSD:size(size) + return self:append('{\\fs'):append(size):append('}') +end + +function OSD:font(name) + return self:append('{\\fn'):append(name):append('}') +end + +function OSD:align(number) + return self:append('{\\an'):append(number):append('}') +end + +function OSD:get_text() + return table.concat(self.messages) +end + +function OSD:color(code) + return self:append('{\\1c&H') + :append(code:sub(5, 6)) + :append(code:sub(3, 4)) + :append(code:sub(1, 2)) + :append('&}') +end + +function OSD:text(text) + return self:append(text) +end + +function OSD:new_layer() + return self:append('\n') +end + +function OSD:bold(s) + return self:append('{\\b1}'):append(s):append('{\\b0}') +end + +function OSD:italics(s) + return self:append('{\\i1}'):append(s):append('{\\i0}') +end + +function OSD:submenu(text) + return self:color('ffe1d0'):bold(text):color('ffffff') +end + +function OSD:item(text) + return self:color('fef6dd'):bold(text):color('ffffff') +end + +function OSD:selected(text) + return self:color('48a868'):bold(text):color('ffffff') +end + +function OSD:red(text) + return self:color('ff0000'):bold(text):color('ffffff') +end + +return OSD diff --git a/config/mpv/scripts/subs2srs/platform/init.lua b/config/mpv/scripts/subs2srs/platform/init.lua new file mode 100644 index 0000000..825d8d4 --- /dev/null +++ b/config/mpv/scripts/subs2srs/platform/init.lua @@ -0,0 +1,14 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Platform-specific functions. +]] + +local h = require('helpers') + +if h.is_win() then + return require('platform.win') +else + return require('platform.nix') +end diff --git a/config/mpv/scripts/subs2srs/platform/nix.lua b/config/mpv/scripts/subs2srs/platform/nix.lua new file mode 100644 index 0000000..cbf6c85 --- /dev/null +++ b/config/mpv/scripts/subs2srs/platform/nix.lua @@ -0,0 +1,49 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Platform-specific functions for *nix systems. +]] + +local h = require('helpers') +local self = { healthy = true, clip_util = "", clip_cmd = "", } + +if h.is_mac() then + self.clip_util = "pbcopy" + self.clip_cmd = "LANG=en_US.UTF-8 " .. self.clip_util +elseif h.is_wayland() then + local function is_wl_copy_installed() + local handle = h.subprocess { 'wl-copy', '--version' } + return handle.status == 0 and handle.stdout:match("wl%-clipboard") ~= nil + end + + self.clip_util = "wl-copy" + self.clip_cmd = self.clip_util + self.healthy = is_wl_copy_installed() +else + local function is_xclip_installed() + local handle = h.subprocess { 'xclip', '-version' } + return handle.status == 0 and handle.stderr:match("xclip version") ~= nil + end + + self.clip_util = "xclip" + self.clip_cmd = self.clip_util .. " -i -selection clipboard" + self.healthy = is_xclip_installed() +end + +self.tmp_dir = function() + return os.getenv("TMPDIR") or '/tmp' +end + +self.copy_to_clipboard = function(text) + local handle = io.popen(self.clip_cmd, 'w') + handle:write(text) + handle:close() +end + +self.curl_request = function(url, request_json, completion_fn) + local args = { 'curl', '-s', url, '-X', 'POST', '-d', request_json } + return h.subprocess(args, completion_fn) +end + +return self diff --git a/config/mpv/scripts/subs2srs/platform/win.lua b/config/mpv/scripts/subs2srs/platform/win.lua new file mode 100644 index 0000000..e40dd7a --- /dev/null +++ b/config/mpv/scripts/subs2srs/platform/win.lua @@ -0,0 +1,72 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Platform-specific functions for Windows. +]] + +local mp = require('mp') +local h = require('helpers') +local utils = require('mp.utils') +local base64 = require('utils.base64') +local self = { windows = true, healthy = true, clip_util = "cmd", } +local tmp_files = {} + +mp.register_event('shutdown', function() + for _, file in ipairs(tmp_files) do + os.remove(file) + end +end) + +self.tmp_dir = function() + return os.getenv('TEMP') +end + +self.copy_to_clipboard = function(text) + local args = { + "powershell", "-NoLogo", "-NoProfile", "-WindowStyle", "Hidden", "-Command", + string.format( + "Set-Clipboard ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('%s')))", + base64.enc(text) + ) + } + return h.subprocess_detached( + args, + function() + end + ) +end + +self.gen_random_tmp_file_path = function() + return utils.join_path(self.tmp_dir(), string.format('curl_tmp_%d.txt', math.random(10 ^ 9))) +end + +self.gen_unique_tmp_file_path = function() + local curl_tmpfile_path = self.gen_random_tmp_file_path() + while h.file_exists(curl_tmpfile_path) do + curl_tmpfile_path = self.gen_random_tmp_file_path() + end + return curl_tmpfile_path +end + +self.curl_request = function(url, request_json, completion_fn) + local curl_tmpfile_path = self.gen_unique_tmp_file_path() + local handle = io.open(curl_tmpfile_path, "w") + handle:write(request_json) + handle:close() + table.insert(tmp_files, curl_tmpfile_path) + local args = { + 'curl', + '-s', + url, + '-H', + 'Content-Type: application/json; charset=UTF-8', + '-X', + 'POST', + '--data-binary', + table.concat { '@', curl_tmpfile_path } + } + return h.subprocess(args, completion_fn) +end + +return self diff --git a/config/mpv/scripts/subs2srs/subs2srs.lua b/config/mpv/scripts/subs2srs/subs2srs.lua new file mode 100644 index 0000000..34c79a9 --- /dev/null +++ b/config/mpv/scripts/subs2srs/subs2srs.lua @@ -0,0 +1,746 @@ +--[[ +Copyright (C) 2020-2022 Ren Tatsumoto and contributors + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Requirements: +* mpv >= 0.32.0 +* AnkiConnect +* curl +* xclip (when running X11) +* wl-copy (when running Wayland) + +Usage: +1. Change `config` according to your needs +* Config path: ~/.config/mpv/script-opts/subs2srs.conf +* Config file isn't created automatically. + +2. Open a video + +3. Use key bindings to manipulate the script +* Open mpvacious menu - `a` +* Create a note from the current subtitle line - `Ctrl + n` + +For complete usage guide, see +]] + +local mp = require('mp') +local OSD = require('osd_styler') +local cfg_mgr = require('cfg_mgr') +local encoder = require('encoder.encoder') +local h = require('helpers') +local Menu = require('menu') +local ankiconnect = require('ankiconnect') +local switch = require('utils.switch') +local play_control = require('utils.play_control') +local secondary_sid = require('subtitles.secondary_sid') +local platform = require('platform.init') +local forvo = require('utils.forvo') +local subs_observer = require('subtitles.observer') +local codec_support = require('encoder.codec_support') + +local menu, quick_menu, quick_menu_card +local quick_creation_opts = { + _n_lines = nil, + _n_cards = 1, + set_cards = function(self, n) + self._n_cards = math.max(0, n) + end, + set_lines = function(self, n) + self._n_lines = math.max(0, n) + end, + get_cards = function(self) + return self._n_cards + end, + get_lines = function(self) + return self._n_lines + end, + increment_cards = function(self) + self:set_cards(self._n_cards + 1) + end, + decrement_cards = function(self) + self:set_cards(self._n_cards - 1) + end, + clear_options = function(self) + self._n_lines = nil + self._n_cards = 1 + end +} +------------------------------------------------------------ +-- default config + +local config = { + -- The user should not modify anything below. + + -- Common + nuke_spaces = false, -- remove all spaces from the primary subtitles on exported anki cards and when copying text to clipboard. + clipboard_trim_enabled = true, -- remove unnecessary characters from strings before copying to the clipboard + use_ffmpeg = false, -- if set to true, use ffmpeg to create audio clips and snapshots. by default use mpv. + reload_config_before_card_creation = true, -- for convenience, read config file from disk before a card is made. + + -- Clipboard and external communication + autoclip = false, -- enable copying subs to the clipboard when mpv starts + autoclip_method = "clipboard", -- one of the methods + autoclip_custom_args = "", -- command to run when autoclip is triggered and autoclip_method and set to "custom_command". + + -- Secondary subtitle + secondary_sub_auto_load = true, -- Automatically load secondary subtitle track when a video file is opened. + secondary_sub_lang = 'eng,en,rus,ru,jp,jpn,ja', -- Language of secondary subs that should be automatically loaded. + secondary_sub_area = 0.15, -- Hover area. Fraction of the window from the top. + secondary_sub_visibility = 'auto', -- One of: 'auto', 'never', 'always'. Controls secondary_sid visibility. Ctrl+V to cycle. + + -- Snapshots + snapshot_format = "avif", -- avif, webp or jpg + snapshot_quality = 15, -- from 0=lowest to 100=highest + snapshot_width = cfg_mgr.preserve_aspect_ratio, -- a positive integer or -2 for auto + snapshot_height = cfg_mgr.default_height_px, -- same + screenshot = false, -- create a screenshot instead of a snapshot; see example config. + + -- Animations + animated_snapshot_enabled = false, -- if enabled captures the selected segment of the video, instead of just a frame + animated_snapshot_format = "avif", -- avif or webp + animated_snapshot_fps = 10, -- positive integer between 0 and 30 (30 included) + animated_snapshot_width = cfg_mgr.preserve_aspect_ratio, -- positive integer or -2 to scale it maintaining ratio (height must not be -2 in that case) + animated_snapshot_height = cfg_mgr.default_height_px, -- positive integer or -2 to scale it maintaining ratio (width must not be -2 in that case) + animated_snapshot_quality = 5, -- positive integer between 0 and 100 (100 included) + + -- Audio clips + audio_format = "opus", -- opus or mp3 + opus_container = "ogg", -- ogg, opus, m4a, webm or caf + audio_bitrate = "18k", -- from 16k to 32k + audio_padding = 0.12, -- Set a pad to the dialog timings. 0.5 = audio is padded by .5 seconds. 0 = disable. + tie_volumes = false, -- if set to true, the volume of the outputted audio file depends on the volume of the player at the time of export + preview_audio = false, -- play created audio clips in background. + + -- Menu + menu_font_name = "Noto Sans CJK JP", + menu_font_size = 25, + show_selected_text = true, + + -- Make sure to remove loudnorm from ffmpeg_audio_args and mpv_audio_args before enabling. + loudnorm = false, + loudnorm_target = -16, + loudnorm_range = 11, + loudnorm_peak = -1.5, + + -- Custom encoding args + -- Defaults are for backward compatibility, in case someone + -- updates mpvacious without updating their config. + -- Better to remove loudnorm from custom args and enable two-pass loudnorm. + -- Enabling loudnorm both through the separate switch and through custom args + -- can lead to unpredictable results. + ffmpeg_audio_args = '-af loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true', + mpv_audio_args = '--af-append=loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true', + + -- Anki + create_deck = false, -- automatically create a deck for new cards + allow_duplicates = false, -- allow making notes with the same sentence field + deck_name = "Learning", -- name of the deck for new cards + model_name = "Japanese sentences", -- Tools -> Manage note types + sentence_field = "SentKanji", + secondary_field = "SentEng", + audio_field = "SentAudio", + audio_template = '[sound:%s]', + image_field = "Image", + image_template = 'snapshot', + append_media = true, -- True to append video media after existing data, false to insert media before + disable_gui_browse = false, -- Lets you disable anki browser manipulation by mpvacious. + ankiconnect_url = '127.0.0.1:8765', + + -- Note tagging + -- The tag(s) added to new notes. Spaces separate multiple tags. + -- Change to "" to disable tagging completely. + -- The following substitutions are supported: + -- %n - the name of the video + -- %t - timestamp + -- %d - episode number (if none found, returns nothing) + -- %e - SUBS2SRS_TAGS environment variable + note_tag = "subs2srs %n", + tag_nuke_brackets = true, -- delete all text inside brackets before substituting filename into tag + tag_nuke_parentheses = false, -- delete all text inside parentheses before substituting filename into tag + tag_del_episode_num = true, -- delete the episode number if found + tag_del_after_episode_num = true, -- delete everything after the found episode number (does nothing if tag_del_episode_num is disabled) + tag_filename_lowercase = false, -- convert filename to lowercase for tagging. + + -- Misc info + miscinfo_enable = true, + miscinfo_field = "Notes", -- misc notes and source information field + miscinfo_format = "%n EP%d (%t)", -- format string to use for the miscinfo_field, accepts note_tag-style format strings + + -- Forvo support + use_forvo = "yes", -- 'yes', 'no', 'always' + vocab_field = "VocabKanji", -- target word field + vocab_audio_field = "VocabAudio", -- target word audio +} + +-- Defines config profiles +-- Each name references a file in ~/.config/mpv/script-opts/*.conf +-- Profiles themselves are defined in ~/.config/mpv/script-opts/subs2srs_profiles.conf +local profiles = { + profiles = "subs2srs,subs2srs_english", + active = "subs2srs", +} + +------------------------------------------------------------ +-- utility functions +local function _(params) + return function() + return pcall(h.unpack(params)) + end +end + +local function escape_for_osd(str) + str = h.trim(str) + str = str:gsub('[%[%]{}]', '') + return str +end + +local function ensure_deck() + if config.create_deck == true then + ankiconnect.create_deck(config.deck_name) + end +end + +local function load_next_profile() + cfg_mgr.next_profile() + ensure_deck() + h.notify("Loaded profile " .. profiles.active) +end + +local function tag_format(filename) + filename = h.remove_extension(filename) + filename = h.remove_common_resolutions(filename) + + local s, e, episode_num = h.get_episode_number(filename) + + if config.tag_del_episode_num == true and not h.is_empty(s) then + if config.tag_del_after_episode_num == true then + -- Removing everything (e.g. episode name) after the episode number including itself. + filename = filename:sub(1, s) + else + -- Removing the first found instance of the episode number. + filename = filename:sub(1, s) .. filename:sub(e + 1, -1) + end + end + + if config.tag_nuke_brackets == true then + filename = h.remove_text_in_brackets(filename) + end + if config.tag_nuke_parentheses == true then + filename = h.remove_filename_text_in_parentheses(filename) + end + + if config.tag_filename_lowercase == true then + filename = filename:lower() + end + + filename = h.remove_leading_trailing_spaces(filename) + filename = filename:gsub(" ", "_") + filename = filename:gsub("_%-_", "_") -- Replaces garbage _-_ substrings with a underscore + filename = h.remove_leading_trailing_dashes(filename) + return filename, episode_num or '' +end + +local substitute_fmt = (function() + local function substitute_filename(tag, filename) + return tag:gsub("%%n", filename) + end + + local function substitute_episode_number(tag, episode) + return tag:gsub("%%d", episode) + end + + local function substitute_time_pos(tag) + local time_pos = h.human_readable_time(mp.get_property_number('time-pos')) + return tag:gsub("%%t", time_pos) + end + + local function substitute_envvar(tag) + local env_tags = os.getenv('SUBS2SRS_TAGS') or '' + return tag:gsub("%%e", env_tags) + end + + return function(tag) + if not h.is_empty(tag) then + local filename, episode = tag_format(mp.get_property("filename")) + tag = substitute_filename(tag, filename) + tag = substitute_episode_number(tag, episode) + tag = substitute_time_pos(tag) + tag = substitute_envvar(tag) + tag = h.remove_leading_trailing_spaces(tag) + end + return tag + end +end)() + +local function prepare_for_exporting(sub_text) + if not h.is_empty(sub_text) then + sub_text = h.trim(sub_text) + sub_text = h.escape_special_characters(sub_text) + end + return sub_text +end + +local function construct_note_fields(sub_text, secondary_text, snapshot_filename, audio_filename) + local ret = { + [config.sentence_field] = subs_observer.maybe_remove_all_spaces(prepare_for_exporting(sub_text)), + } + if not h.is_empty(config.secondary_field) then + ret[config.secondary_field] = prepare_for_exporting(secondary_text) + end + if not h.is_empty(config.image_field) and not h.is_empty(snapshot_filename) then + ret[config.image_field] = string.format(config.image_template, snapshot_filename) + end + if not h.is_empty(config.audio_field) and not h.is_empty(audio_filename) then + ret[config.audio_field] = string.format(config.audio_template, audio_filename) + end + if config.miscinfo_enable == true then + ret[config.miscinfo_field] = substitute_fmt(config.miscinfo_format) + end + return ret +end + +local function join_media_fields(new_data, stored_data) + for _, field in pairs { config.audio_field, config.image_field, config.miscinfo_field } do + if not h.is_empty(field) then + new_data[field] = h.table_get(stored_data, field, "") .. h.table_get(new_data, field, "") + end + end + return new_data +end + +local function update_sentence(new_data, stored_data) + -- adds support for TSCs + -- https://tatsumoto-ren.github.io/blog/discussing-various-card-templates.html#targeted-sentence-cards-or-mpvacious-cards + -- if the target word was marked by yomichan, this function makes sure that the highlighting doesn't get erased. + + if h.is_empty(stored_data[config.sentence_field]) then + -- sentence field is empty. can't continue. + return new_data + elseif h.is_empty(new_data[config.sentence_field]) then + -- *new* sentence field is empty, but old one contains data. don't delete the existing sentence. + new_data[config.sentence_field] = stored_data[config.sentence_field] + return new_data + end + + local _, opentag, target, closetag, _ = stored_data[config.sentence_field]:match('^(.-)(<[^>]+>)(.-)(]+>)(.-)$') + if target then + local prefix, _, suffix = new_data[config.sentence_field]:match(table.concat { '^(.-)(', target, ')(.-)$' }) + if prefix and suffix then + new_data[config.sentence_field] = table.concat { prefix, opentag, target, closetag, suffix } + end + end + return new_data +end + +local function audio_padding() + local video_duration = mp.get_property_number('duration') + if config.audio_padding == 0.0 or not video_duration then + return 0.0 + end + if subs_observer.user_altered() then + return 0.0 + end + return config.audio_padding +end + +------------------------------------------------------------ +-- front for adding and updating notes + +local function maybe_reload_config() + if config.reload_config_before_card_creation then + cfg_mgr.reload_from_disk() + end +end + +local function get_anki_media_dir_path() + return ankiconnect.get_media_dir_path() +end + +local function export_to_anki(gui) + maybe_reload_config() + local sub = subs_observer.collect_from_current() + + if not sub:is_valid() then + return h.notify("Nothing to export.", "warn", 1) + end + + if not gui and h.is_empty(sub['text']) then + sub['text'] = string.format("mpvacious wasn't able to grab subtitles (%s)", os.time()) + end + + encoder.set_output_dir(get_anki_media_dir_path()) + local snapshot = encoder.snapshot.create_job(sub) + local audio = encoder.audio.create_job(sub, audio_padding()) + + snapshot.run_async() + audio.run_async() + + local first_field = ankiconnect.get_first_field(config.model_name) + local note_fields = construct_note_fields(sub['text'], sub['secondary'], snapshot.filename, audio.filename) + + if not h.is_empty(first_field) and h.is_empty(note_fields[first_field]) then + note_fields[first_field] = "[empty]" + end + + ankiconnect.add_note(note_fields, substitute_fmt(config.note_tag), gui) + subs_observer.clear() +end + +local function update_last_note(overwrite) + maybe_reload_config() + local sub + local n_lines = quick_creation_opts:get_lines() + local n_cards = quick_creation_opts:get_cards() + if n_lines then + sub = subs_observer.collect_from_all_dialogues(n_lines) + else + sub = subs_observer.collect_from_current() + end + -- this now returns a table + local last_note_ids = ankiconnect.get_last_note_ids(n_cards) + n_cards = #last_note_ids + + if not sub:is_valid() then + return h.notify("Nothing to export. Have you set the timings?", "warn", 2) + end + + if h.is_empty(sub['text']) then + -- In this case, don't modify whatever existing text there is and just + -- modify the other fields we can. The user might be trying to add + -- audio to a card which they've manually transcribed (either the video + -- has no subtitles or it has image subtitles). + sub['text'] = nil + end + + --first element is the earliest + + if h.is_empty(last_note_ids) or last_note_ids[1] < h.minutes_ago(10) then + return h.notify("Couldn't find the target note.", "warn", 2) + end + + local anki_media_dir = get_anki_media_dir_path() + encoder.set_output_dir(anki_media_dir) + local snapshot = encoder.snapshot.create_job(sub) + local audio = encoder.audio.create_job(sub, audio_padding()) + + local create_media = function() + snapshot.run_async() + audio.run_async() + end + for i = 1, n_cards do + local new_data = construct_note_fields(sub['text'], sub['secondary'], snapshot.filename, audio.filename) + local stored_data = ankiconnect.get_note_fields(last_note_ids[i]) + if stored_data then + forvo.set_output_dir(anki_media_dir) + new_data = forvo.append(new_data, stored_data) + new_data = update_sentence(new_data, stored_data) + if not overwrite then + if config.append_media then + new_data = join_media_fields(new_data, stored_data) + else + new_data = join_media_fields(stored_data, new_data) + end + end + end + + -- If the text is still empty, put some dummy text to let the user know why + -- there's no text in the sentence field. + if h.is_empty(new_data[config.sentence_field]) then + new_data[config.sentence_field] = string.format("mpvacious wasn't able to grab subtitles (%s)", os.time()) + end + + ankiconnect.append_media(last_note_ids[i], new_data, create_media, substitute_fmt(config.note_tag)) + end + subs_observer.clear() + quick_creation_opts:clear_options() +end + +------------------------------------------------------------ +-- main menu + +menu = Menu:new { + hints_state = switch.new { 'basic', 'menu', 'global', 'hidden', }, +} + +menu.keybindings = { + { key = 'S', fn = menu:with_update { subs_observer.set_manual_timing_to_sub, 'start' } }, + { key = 'E', fn = menu:with_update { subs_observer.set_manual_timing_to_sub, 'end' } }, + { key = 's', fn = menu:with_update { subs_observer.set_manual_timing, 'start' } }, + { key = 'e', fn = menu:with_update { subs_observer.set_manual_timing, 'end' } }, + { key = 'c', fn = menu:with_update { subs_observer.set_to_current_sub } }, + { key = 'r', fn = menu:with_update { subs_observer.clear_and_notify } }, + { key = 'g', fn = menu:with_update { export_to_anki, true } }, + { key = 'n', fn = menu:with_update { export_to_anki, false } }, + { key = 'm', fn = menu:with_update { update_last_note, false } }, + { key = 'M', fn = menu:with_update { update_last_note, true } }, + { key = 'f', fn = menu:with_update { function() + quick_creation_opts:increment_cards() + end } }, + { key = 'F', fn = menu:with_update { function() + quick_creation_opts:decrement_cards() + end } }, + { key = 't', fn = menu:with_update { subs_observer.toggle_autocopy } }, + { key = 'T', fn = menu:with_update { subs_observer.next_autoclip_method } }, + { key = 'i', fn = menu:with_update { menu.hints_state.bump } }, + { key = 'p', fn = menu:with_update { load_next_profile } }, + { key = 'ESC', fn = function() + menu:close() + end }, + { key = 'q', fn = function() + menu:close() + end }, +} + +function menu:print_header(osd) + if self.hints_state.get() == 'hidden' then + return + end + osd:submenu('mpvacious options'):newline() + osd:item('Timings: '):text(h.human_readable_time(subs_observer.get_timing('start'))) + osd:item(' to '):text(h.human_readable_time(subs_observer.get_timing('end'))):newline() + osd:item('Clipboard autocopy: '):text(subs_observer.autocopy_status_str()):newline() + osd:item('Active profile: '):text(profiles.active):newline() + osd:item('Deck: '):text(config.deck_name):newline() + osd:item('# cards: '):text(quick_creation_opts:get_cards()):newline() +end + +function menu:print_bindings(osd) + if self.hints_state.get() == 'global' then + osd:submenu('Global bindings'):newline() + osd:tab():item('ctrl+c: '):text('Copy current subtitle to clipboard'):newline() + osd:tab():item('ctrl+h: '):text('Seek to the start of the line'):newline() + osd:tab():item('ctrl+g: '):text('Toggle animated snapshots'):newline() + osd:tab():item('ctrl+shift+h: '):text('Replay current subtitle'):newline() + osd:tab():item('shift+h/l: '):text('Seek to the previous/next subtitle'):newline() + osd:tab():item('alt+h/l: '):text('Seek to the previous/next subtitle and pause'):newline() + osd:italics("Press "):item('i'):italics(" to hide mpvacious options."):newline() + elseif self.hints_state.get() == 'menu' then + osd:submenu('Menu bindings'):newline() + osd:tab():item('c: '):text('Set timings to the current sub'):newline() + osd:tab():item('s: '):text('Set start time to current position'):newline() + osd:tab():item('e: '):text('Set end time to current position'):newline() + osd:tab():item('shift+s: '):text('Set start time to current subtitle'):newline() + osd:tab():item('shift+e: '):text('Set end time to current subtitle'):newline() + osd:tab():item('f: '):text('Increment # cards to update '):italics('(+shift to decrement)'):newline() + osd:tab():item('r: '):text('Reset timings'):newline() + osd:tab():item('n: '):text('Export note'):newline() + osd:tab():item('g: '):text('GUI export'):newline() + osd:tab():item('m: '):text('Update the last added note '):italics('(+shift to overwrite)'):newline() + osd:tab():item('t: '):text('Toggle clipboard autocopy'):newline() + osd:tab():item('T: '):text('Switch to the next clipboard method'):newline() + osd:tab():item('p: '):text('Switch to next profile'):newline() + osd:tab():item('ESC: '):text('Close'):newline() + osd:italics("Press "):item('i'):italics(" to show global bindings."):newline() + elseif self.hints_state.get() == 'hidden' then + -- Menu bindings are active but hidden + else + osd:italics("Press "):item('i'):italics(" to show menu bindings."):newline() + end +end + +function menu:warn_formats(osd) + if config.use_ffmpeg then + return + end + for type, codecs in pairs(codec_support) do + for codec, supported in pairs(codecs) do + if not supported and config[type .. '_codec'] == codec then + osd:red('warning: '):newline() + osd:tab():text(string.format("your version of mpv does not support %s.", codec)):newline() + osd:tab():text(string.format("mpvacious won't be able to create %s files.", type)):newline() + end + end + end +end + +function menu:warn_clipboard(osd) + if subs_observer.autocopy_current_method() == "clipboard" and platform.healthy == false then + osd:red('warning: '):text(string.format("%s is not installed.", platform.clip_util)):newline() + end +end + +function menu:print_legend(osd) + osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) + self:print_header(osd) + self:print_bindings(osd) + self:warn_formats(osd) + self:warn_clipboard(osd) +end + +function menu:print_selection(osd) + if subs_observer.is_appending() and config.show_selected_text then + osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(6) + osd:submenu("Primary text"):newline() + for _, s in ipairs(subs_observer.recorded_subs()) do + osd:text(escape_for_osd(s['text'])):newline() + end + if not h.is_empty(config.secondary_field) then + -- If the user wants to add secondary subs to Anki, + -- it's okay to print them on the screen. + osd:submenu("Secondary text"):newline() + for _, s in ipairs(subs_observer.recorded_secondary_subs()) do + osd:text(escape_for_osd(s['text'])):newline() + end + end + end +end + +function menu:make_osd() + local osd = OSD:new() + self:print_legend(osd) + self:print_selection(osd) + return osd +end + +------------------------------------------------------------ +--quick_menu line selection +local choose_cards = function(i) + quick_creation_opts:set_cards(i) + quick_menu_card:close() + quick_menu:open() +end +local choose_lines = function(i) + quick_creation_opts:set_lines(i) + update_last_note(true) + quick_menu:close() +end + +quick_menu = Menu:new() +quick_menu.keybindings = {} +for i = 1, 9 do + table.insert(quick_menu.keybindings, { key = tostring(i), fn = function() + choose_lines(i) + end }) +end +table.insert(quick_menu.keybindings, { key = 'g', fn = function() + choose_lines(1) +end }) +table.insert(quick_menu.keybindings, { key = 'ESC', fn = function() + quick_menu:close() +end }) +table.insert(quick_menu.keybindings, { key = 'q', fn = function() + quick_menu:close() +end }) +function quick_menu:print_header(osd) + osd:submenu('quick card creation: line selection'):newline() + osd:item('# lines: '):text('Enter 1-9'):newline() +end +function quick_menu:print_legend(osd) + osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) + self:print_header(osd) + menu:warn_formats(osd) +end +function quick_menu:make_osd() + local osd = OSD:new() + self:print_legend(osd) + return osd +end + +-- quick_menu card selection +quick_menu_card = Menu:new() +quick_menu_card.keybindings = {} +for i = 1, 9 do + table.insert(quick_menu_card.keybindings, { key = tostring(i), fn = function() + choose_cards(i) + end }) +end +table.insert(quick_menu_card.keybindings, { key = 'ESC', fn = function() + quick_menu_card:close() +end }) +table.insert(quick_menu_card.keybindings, { key = 'q', fn = function() + quick_menu_card:close() +end }) +function quick_menu_card:print_header(osd) + osd:submenu('quick card creation: card selection'):newline() + osd:item('# cards: '):text('Enter 1-9'):newline() +end +function quick_menu_card:print_legend(osd) + osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) + self:print_header(osd) + menu:warn_formats(osd) +end +function quick_menu_card:make_osd() + local osd = OSD:new() + self:print_legend(osd) + return osd +end + +------------------------------------------------------------ +-- main + +local main = (function() + local main_executed = false + return function() + if main_executed then + subs_observer.clear_all_dialogs() + return + else + main_executed = true + end + + cfg_mgr.init(config, profiles) + ankiconnect.init(config, platform) + forvo.init(config, platform) + encoder.init(config) + secondary_sid.init(config) + ensure_deck() + subs_observer.init(menu, config) + + -- Key bindings + mp.add_forced_key_binding("Ctrl+c", "mpvacious-copy-sub-to-clipboard", subs_observer.copy_current_primary_to_clipboard) + mp.add_key_binding("Ctrl+C", "mpvacious-copy-secondary-sub-to-clipboard", subs_observer.copy_current_secondary_to_clipboard) + mp.add_key_binding("Ctrl+t", "mpvacious-autocopy-toggle", subs_observer.toggle_autocopy) + mp.add_key_binding("Ctrl+g", "mpvacious-animated-snapshot-toggle", encoder.snapshot.toggle_animation) + + -- Secondary subtitles + mp.add_key_binding("Ctrl+v", "mpvacious-secondary-sid-toggle", secondary_sid.change_visibility) + mp.add_key_binding("Ctrl+k", "mpvacious-secondary-sid-prev", secondary_sid.select_previous) + mp.add_key_binding("Ctrl+j", "mpvacious-secondary-sid-next", secondary_sid.select_next) + + -- Open advanced menu + mp.add_key_binding("a", "mpvacious-menu-open", function() + menu:open() + end) + + -- Add note + mp.add_forced_key_binding("Ctrl+n", "mpvacious-export-note", menu:with_update { export_to_anki, false }) + + -- Note updating + mp.add_key_binding("Ctrl+m", "mpvacious-update-last-note", menu:with_update { update_last_note, false }) + mp.add_key_binding("Ctrl+M", "mpvacious-overwrite-last-note", menu:with_update { update_last_note, true }) + + mp.add_key_binding("g", "mpvacious-quick-card-menu-open", function() + quick_menu:open() + end) + mp.add_key_binding("Alt+g", "mpvacious-quick-card-sel-menu-open", function() + quick_menu_card:open() + end) + + -- Vim-like seeking between subtitle lines + mp.add_key_binding("H", "mpvacious-sub-seek-back", _ { play_control.sub_seek, 'backward' }) + mp.add_key_binding("L", "mpvacious-sub-seek-forward", _ { play_control.sub_seek, 'forward' }) + + mp.add_key_binding("Alt+h", "mpvacious-sub-seek-back-pause", _ { play_control.sub_seek, 'backward', true }) + mp.add_key_binding("Alt+l", "mpvacious-sub-seek-forward-pause", _ { play_control.sub_seek, 'forward', true }) + + mp.add_key_binding("Ctrl+h", "mpvacious-sub-rewind", _ { play_control.sub_rewind }) + mp.add_key_binding("Ctrl+H", "mpvacious-sub-replay", _ { play_control.play_till_sub_end }) + mp.add_key_binding("Ctrl+L", "mpvacious-sub-play-up-to-next", _ { play_control.play_till_next_sub_end }) + + mp.msg.warn("Press 'a' to open the mpvacious menu.") + end +end)() + +mp.register_event("file-loaded", main) diff --git a/config/mpv/scripts/subs2srs/subtitles/observer.lua b/config/mpv/scripts/subs2srs/subtitles/observer.lua new file mode 100644 index 0000000..d9284c5 --- /dev/null +++ b/config/mpv/scripts/subs2srs/subtitles/observer.lua @@ -0,0 +1,344 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Observer waits for subtitles to appear on the screen and adds them to a list. +]] + +local h = require('helpers') +local timings = require('utils.timings') +local sub_list = require('subtitles.sub_list') +local Subtitle = require('subtitles.subtitle') +local mp = require('mp') +local platform = require('platform.init') +local switch = require('utils.switch') + +local self = {} + +local dialogs = sub_list.new() +local secondary_dialogs = sub_list.new() +local all_dialogs = sub_list.new() +local all_secondary_dialogs = sub_list.new() +local user_timings = timings.new() + +local append_dialogue = false +local autoclip_enabled = false +local autoclip_method = {} + + +------------------------------------------------------------ +-- private + +local function copy_primary_sub() + if autoclip_enabled then + autoclip_method.call() + end +end + +local function append_primary_sub() + local current_sub = Subtitle:now() + all_dialogs.insert(current_sub) + if append_dialogue and dialogs.insert(current_sub) then + self.menu:update() + end +end + +local function append_secondary_sub() + local current_secondary = Subtitle:now('secondary') + all_secondary_dialogs.insert(current_secondary) + if append_dialogue and secondary_dialogs.insert(Subtitle:now('secondary')) then + self.menu:update() + end +end + +local function start_appending() + append_dialogue = true + append_primary_sub() + append_secondary_sub() +end + +local function handle_primary_sub() + append_primary_sub() + copy_primary_sub() +end + +local function handle_secondary_sub() + append_secondary_sub() +end + +local function on_external_finish(success, result, error) + if success ~= true or error ~= nil then + h.notify("Command failed: " .. table.concat(result)) + end +end + +local function external_command_args(cur_lines) + local args = {} + for arg in string.gmatch(self.config.autoclip_custom_args, "%S+") do + if arg == '%MPV_PRIMARY%' then + arg = cur_lines.primary + elseif arg == '%MPV_SECONDARY%' then + arg = cur_lines.secondary + end + table.insert(args, arg) + end + return args +end + +local function call_external_command(cur_lines) + if not h.is_empty(self.config.autoclip_custom_args) then + h.subprocess(external_command_args(cur_lines), on_external_finish) + end +end + +local function current_subtitle_lines() + local primary = dialogs.get_text() + + if h.is_empty(primary) then + primary = mp.get_property("sub-text") + end + + if h.is_empty(primary) then + return nil + end + + local secondary = secondary_dialogs.get_text() + + if h.is_empty(secondary) then + secondary = mp.get_property("secondary-sub-text") or "" + end + + return { primary = self.clipboard_prepare(primary), secondary = secondary } +end + +local function ensure_goldendict_running() + --- Ensure that goldendict is running and is disowned by mpv. + --- Avoid goldendict getting killed when mpv exits. + if autoclip_enabled and self.autocopy_current_method() == "goldendict" then + os.execute("setsid -f goldendict") + end +end + +------------------------------------------------------------ +-- autoclip methods + +autoclip_method = (function() + local methods = { 'clipboard', 'goldendict', 'custom_command', } + local current_method = switch.new(methods) + + local function call() + local cur_lines = current_subtitle_lines() + if h.is_empty(cur_lines) then + return + end + + if current_method.get() == 'clipboard' then + self.copy_to_clipboard("autocopy action", cur_lines.primary) + elseif current_method.get() == 'goldendict' then + h.subprocess_detached({ 'goldendict', cur_lines.primary }, on_external_finish) + elseif current_method.get() == 'custom_command' then + call_external_command(cur_lines) + end + end + + return { + call = call, + get = current_method.get, + bump = current_method.bump, + set = current_method.set, + } +end)() + +local function copy_subtitle(subtitle_id) + self.copy_to_clipboard("copy-on-demand", mp.get_property(subtitle_id)) +end + +------------------------------------------------------------ +-- public + +self.copy_to_clipboard = function(_, text) + if platform.healthy == false then + h.notify(platform.clip_util .. " is not installed.", "error", 5) + end + if not h.is_empty(text) then + platform.copy_to_clipboard(self.clipboard_prepare(text)) + end +end + +self.clipboard_prepare = function(text) + text = self.config.clipboard_trim_enabled and h.trim(text) or h.remove_newlines(text) + text = self.maybe_remove_all_spaces(text) + return text +end + +self.maybe_remove_all_spaces = function(str) + if self.config.nuke_spaces == true and h.contains_non_latin_letters(str) then + return h.remove_all_spaces(str) + else + return str + end +end + +self.copy_current_primary_to_clipboard = function() + copy_subtitle("sub-text") +end + +self.copy_current_secondary_to_clipboard = function() + copy_subtitle("secondary-sub-text") +end + +self.user_altered = function() + --- Return true if the user manually set at least start or end. + return user_timings.is_set('start') or user_timings.is_set('end') +end + +self.get_timing = function(position) + if user_timings.is_set(position) then + return user_timings.get(position) + elseif not dialogs.is_empty() then + return dialogs.get_time(position) + end + return -1 +end + +self.collect_from_all_dialogues = function(n_lines) + local current_sub = Subtitle:now() + local current_secondary_sub = Subtitle:now('secondary') + all_dialogs.insert(current_sub) + all_secondary_dialogs.insert(current_secondary_sub) + if current_sub == nil then + return Subtitle:new() -- return a default empty new Subtitle to let consumer handle + end + local text, end_sub = all_dialogs.get_n_text(current_sub, n_lines) + local secondary_text, _ + if current_secondary_sub == nil then + secondary_text = '' + else + secondary_text, _ = all_secondary_dialogs.get_n_text(current_secondary_sub, n_lines) -- we'll use main sub's timing + end + return Subtitle:new { + ['text'] = text, + ['secondary'] = secondary_text, + ['start'] = current_sub['start'], + ['end'] = end_sub['end'], + } +end + +self.collect_from_current = function() + --- Return all recorded subtitle lines as one subtitle object. + --- The caller has to call subs_observer.clear() afterwards. + if dialogs.is_empty() then + dialogs.insert(Subtitle:now()) + end + if secondary_dialogs.is_empty() then + secondary_dialogs.insert(Subtitle:now('secondary')) + end + return Subtitle:new { + ['text'] = dialogs.get_text(), + ['secondary'] = secondary_dialogs.get_text(), + ['start'] = self.get_timing('start'), + ['end'] = self.get_timing('end'), + } +end + +self.set_manual_timing = function(position) + user_timings.set(position, mp.get_property_number('time-pos') - mp.get_property("audio-delay")) + h.notify(h.capitalize_first_letter(position) .. " time has been set.") + start_appending() +end + +self.set_manual_timing_to_sub = function(position) + local sub = Subtitle:now() + if sub then + user_timings.set(position, sub[position] - mp.get_property("audio-delay")) + h.notify(h.capitalize_first_letter(position) .. " time has been set.") + start_appending() + else + h.notify("There's no visible subtitle.", "info", 2) + end +end + +self.set_to_current_sub = function() + self.clear() + if Subtitle:now() then + start_appending() + h.notify("Timings have been set to the current sub.", "info", 2) + else + h.notify("There's no visible subtitle.", "info", 2) + end +end + +self.clear = function() + append_dialogue = false + dialogs = sub_list.new() + secondary_dialogs = sub_list.new() + user_timings = timings.new() +end + +self.clear_all_dialogs = function() + all_dialogs = sub_list.new() + all_secondary_dialogs = sub_list.new() +end + +self.clear_and_notify = function() + --- Clear then notify the user. + --- Called by the OSD menu when the user presses a button to drop recorded subtitles. + self.clear() + h.notify("Timings have been reset.", "info", 2) +end + +self.is_appending = function() + return append_dialogue +end + +self.recorded_subs = function() + return dialogs.get_subs_list() +end + +self.recorded_secondary_subs = function() + return secondary_dialogs.get_subs_list() +end + +self.autocopy_status_str = function() + return string.format( + "%s (%s)", + (autoclip_enabled and 'enabled' or 'disabled'), + autoclip_method.get():gsub('_', ' ') + ) +end + +self.autocopy_current_method = function() + return autoclip_method.get() +end + +local function notify_autocopy() + if autoclip_enabled then + copy_primary_sub() + end + h.notify(string.format("Clipboard autocopy has been %s.", self.autocopy_status_str())) +end + +self.toggle_autocopy = function() + autoclip_enabled = not autoclip_enabled + notify_autocopy() +end + +self.next_autoclip_method = function() + autoclip_method.bump() + notify_autocopy() +end + +self.init = function(menu, config) + self.menu = menu + self.config = config + + -- The autoclip state is copied as a local value + -- to prevent it from being reset when the user reloads the config file. + autoclip_enabled = self.config.autoclip + autoclip_method.set(self.config.autoclip_method) + + mp.observe_property("sub-text", "string", handle_primary_sub) + mp.observe_property("secondary-sub-text", "string", handle_secondary_sub) +end + +return self diff --git a/config/mpv/scripts/subs2srs/subtitles/secondary_sid.lua b/config/mpv/scripts/subs2srs/subtitles/secondary_sid.lua new file mode 100644 index 0000000..21576e8 --- /dev/null +++ b/config/mpv/scripts/subs2srs/subtitles/secondary_sid.lua @@ -0,0 +1,196 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +This module automatically finds and sets secondary sid if it's not already set. +Secondary sid will be shown when mouse is moved to the top part of the mpv window. +]] + +local mp = require('mp') +local h = require('helpers') + +local self = { + visibility = 'auto', + visibility_states = { auto = true, never = true, always = true, }, +} + +local function is_accepted_language(sub_lang) + -- for missing keys compares nil to true + return self.accepted_languages[sub_lang] == true +end + +local function is_selected_language(track, active_track) + return track.id == mp.get_property_native('sid') or (active_track and active_track.lang == track.lang) +end + +local function is_full(track) + return h.str_contains(track.title, 'full') +end + +local function is_garbage(track) + for _, keyword in pairs({ 'song', 'sign', 'caption', 'commentary' }) do + if h.str_contains(track.title, keyword) then + return true + end + end + return false +end + +local function prioritize_full_subs(tracks_list) + return table.sort(tracks_list, function(first, second) + return (is_full(first) and not is_full(second)) or (is_garbage(second) and not is_garbage(first)) + end) +end + +local function find_best_secondary_sid() + local active_track = h.get_active_track('sub') + local sub_tracks = h.get_loaded_tracks('sub') + prioritize_full_subs(sub_tracks) + for _, track in ipairs(sub_tracks) do + if is_accepted_language(track.lang) and not is_selected_language(track, active_track) then + return track.id + end + end + return nil +end + +local function window_height() + return mp.get_property_native('osd-dimensions/h') +end + +local function get_accepted_sub_langs() + local languages = {} + for lang in self.config.secondary_sub_lang:gmatch('[a-zA-Z-]+') do + languages[lang] = true + end + return languages +end + +local function on_mouse_move(_, state) + -- state = {x=int,y=int, hover=true|false, } + if mp.get_property_native('secondary-sid') and self.visibility == 'auto' and state ~= nil then + mp.set_property_bool( + 'secondary-sub-visibility', + state.hover and (state.y / window_height()) < self.config.secondary_sub_area + ) + end +end + +local function on_file_loaded() + -- If secondary sid is not already set, try to find and set it. + local secondary_sid = mp.get_property_native('secondary-sid') + if secondary_sid == false and self.config.secondary_sub_auto_load == true then + secondary_sid = find_best_secondary_sid() + if secondary_sid ~= nil then + mp.set_property_native('secondary-sid', secondary_sid) + end + end +end + +local function update_visibility() + mp.set_property_bool('secondary-sub-visibility', self.visibility == 'always') +end + +local function init(config) + self.config = config + self.visibility = config.secondary_sub_visibility + self.accepted_languages = get_accepted_sub_langs() + mp.register_event('file-loaded', on_file_loaded) + if config.secondary_sub_area > 0 then + mp.observe_property('mouse-pos', 'native', on_mouse_move) + end + update_visibility() +end + +local function change_visibility() + while true do + self.visibility = next(self.visibility_states, self.visibility) + if self.visibility ~= nil then + break + end + end + update_visibility() + h.notify("Secondary sid visibility: " .. self.visibility) +end + +local function compare_by_preference_then_id(track1, track2) + if is_accepted_language(track1.lang) and not is_accepted_language(track2.lang) then + return true + elseif not is_accepted_language(track1.lang) and is_accepted_language(track2.lang) then + return false + else + return (track1.id < track2.id) + end +end + +local function split_before_after(previous_tracks, next_tracks, all_tracks, current_track_id) + -- works like take_while() and drop_while() combined + local prev = true + for _, track in ipairs(all_tracks) do + if prev == true and track.id == current_track_id then + prev = false + end + if track.id ~= current_track_id then + if prev then + table.insert(previous_tracks, track) + else + table.insert(next_tracks, track) + end + end + end +end + +local function not_primary_sid(track) + return mp.get_property_native('sid') ~= track.id +end + +local function find_new_secondary_sub(direction) + local subtitle_tracks = h.filter(h.get_loaded_tracks('sub'), not_primary_sid) + table.sort(subtitle_tracks, compare_by_preference_then_id) + + local secondary_sid = mp.get_property_native('secondary-sid') + local new_secondary_sub = { id = false, title = "removed" } + + if #subtitle_tracks > 0 then + if not secondary_sid then + new_secondary_sub = (direction == 'prev') and subtitle_tracks[#subtitle_tracks] or subtitle_tracks[1] + else + local previous_tracks = {} + local next_tracks = {} + split_before_after(previous_tracks, next_tracks, subtitle_tracks, secondary_sid) + if direction == 'prev' and #previous_tracks > 0 then + new_secondary_sub = previous_tracks[#previous_tracks] + elseif direction == 'next' and #next_tracks > 0 then + new_secondary_sub = next_tracks[1] + end + end + end + return new_secondary_sub +end + +local function switch_secondary_sid(direction) + local new_secondary_sub = find_new_secondary_sub(direction) + + mp.set_property_native('secondary-sid', new_secondary_sub.id) + if new_secondary_sub.id == false then + h.notify("Removed secondary sid.") + else + h.notify(string.format( + "Secondary #%d: %s (%s)", + new_secondary_sub.id, + new_secondary_sub.title or "No title", + new_secondary_sub.lang or "Unknown" + )) + end +end + +return { + init = init, + change_visibility = change_visibility, + select_previous = function() + switch_secondary_sid('prev') + end, + select_next = function() + switch_secondary_sid('next') + end, +} diff --git a/config/mpv/scripts/subs2srs/subtitles/sub_list.lua b/config/mpv/scripts/subs2srs/subtitles/sub_list.lua new file mode 100644 index 0000000..de7e1c2 --- /dev/null +++ b/config/mpv/scripts/subs2srs/subtitles/sub_list.lua @@ -0,0 +1,74 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Subtitle list remembers selected subtitle lines. +]] + +local h = require('helpers') + +local new_sub_list = function() + local subs_list = {} + + local find_i = function(sub) + for i, v in ipairs(subs_list) do + if sub < v then + return i + end + end + return #subs_list + 1 + end + local get_time = function(position) + local i = position == 'start' and 1 or #subs_list + return subs_list[i][position] + end + local get_text = function() + local speech = {} + for _, sub in ipairs(subs_list) do + table.insert(speech, sub['text']) + end + return table.concat(speech, ' ') + end + local get_n_text = function(sub, n_lines) + local speech = {} + local end_sub = sub + for _, v in ipairs(subs_list) do + if v['start'] - end_sub['end'] >= 20 then + break + end + if v >= sub and #speech < n_lines then + table.insert(speech, v['text']) + end_sub = v + end + end + return table.concat(speech, ' '), end_sub + end + local insert = function(sub) + if sub ~= nil and not h.contains(subs_list, sub) then + table.insert(subs_list, find_i(sub), sub) + return true + end + return false + end + local get_subs_list = function() + local copy = {} + for key, value in pairs(subs_list) do + copy[key] = value + end + return copy + end + return { + get_subs_list = get_subs_list, + get_time = get_time, + get_text = get_text, + get_n_text = get_n_text, + insert = insert, + is_empty = function() + return h.is_empty(subs_list) + end, + } +end + +return { + new = new_sub_list, +} diff --git a/config/mpv/scripts/subs2srs/subtitles/subtitle.lua b/config/mpv/scripts/subs2srs/subtitles/subtitle.lua new file mode 100644 index 0000000..4e8df41 --- /dev/null +++ b/config/mpv/scripts/subs2srs/subtitles/subtitle.lua @@ -0,0 +1,56 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Subtitle class provides methods for storing and comparing subtitle lines. +]] + +local mp = require('mp') + +local Subtitle = { + ['text'] = '', + ['secondary'] = '', + ['start'] = -1, + ['end'] = -1, +} + +function Subtitle:new(o) + o = o or {} + setmetatable(o, self) + self.__index = self + return o +end + +function Subtitle:now(secondary) + local prefix = secondary and "secondary-" or "" + local this = self:new { + ['text'] = mp.get_property(prefix .. "sub-text"), + ['start'] = mp.get_property_number(prefix .. "sub-start"), + ['end'] = mp.get_property_number(prefix .. "sub-end"), + } + if this:is_valid() then + return this:delay(mp.get_property_native("sub-delay") - mp.get_property_native("audio-delay")) + else + return nil + end +end + +function Subtitle:delay(delay) + self['start'] = self['start'] + delay + self['end'] = self['end'] + delay + return self +end + +function Subtitle:is_valid() + return self['start'] and self['end'] and self['start'] >= 0 and self['end'] > self['start'] +end + +Subtitle.__eq = function(lhs, rhs) + return lhs['text'] == rhs['text'] +end + +Subtitle.__lt = function(lhs, rhs) + return lhs['start'] < rhs['start'] +end + +return Subtitle diff --git a/config/mpv/scripts/subs2srs/test.lua b/config/mpv/scripts/subs2srs/test.lua new file mode 100644 index 0000000..d1291d2 --- /dev/null +++ b/config/mpv/scripts/subs2srs/test.lua @@ -0,0 +1,32 @@ +local helpers = require('helpers') + +local function assert_equals(expected, actual) + if expected ~= actual then + error(string.format("TEST FAILED: Expected '%s', got '%s'", expected, actual)) + end +end + +local function test_get_episode_number() + local test_cases = { + { nil, "A Whisker Away.mkv" }, + { nil, "[Placeholder] Gekijouban SHIROBAKO [Ma10p_1080p][x265_flac]" }, + { "06", "[Placeholder] Sono Bisque Doll wa Koi wo Suru - 06 [54E495D0]" }, + { "02", "(Hi10)_Kobayashi-san_Chi_no_Maid_Dragon_-_02_(BD_1080p)_(Placeholder)_(12C5D2B4)" }, + { "01", "[Placeholder] Koi to Yobu ni wa Kimochi Warui - 01 (1080p) [D517C9F0]" }, + { "01", "[Placeholder] Tsukimonogatari 01 [BD 1080p x264 10-bit FLAC] [5CD88145]" }, + { "01", "[Placeholder] 86 - Eighty Six - 01 (1080p) [1B13598F]" }, + { "00", "[Placeholder] Fate Stay Night - Unlimited Blade Works - 00 (BD 1080p Hi10 FLAC) [95590B7F]" }, + { "01", "House, M.D. S01E01 Pilot - Everybody Lies (1080p x265 Placeholder)" }, + { "165", "A Generic Episode-165" } + } + + for _, case in pairs(test_cases) do + local _, _, episode_num = helpers.get_episode_number(case[2]) + assert_equals(case[1], episode_num) + end +end + +-- Runs tests +test_get_episode_number() + +os.exit(print("Tests passed")) diff --git a/config/mpv/scripts/subs2srs/utils/base64.lua b/config/mpv/scripts/subs2srs/utils/base64.lua new file mode 100644 index 0000000..0fe2d06 --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/base64.lua @@ -0,0 +1,46 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Encoding and decoding in base64 +]] + +-- http://lua-users.org/wiki/BaseSixtyFour + +-- character table string +local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + +-- encoding +local function enc(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return b:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end + +-- decoding +local function dec(data) + data = string.gsub(data, '[^'..b..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(b:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end + +return { + enc = enc, + dec = dec, +} diff --git a/config/mpv/scripts/subs2srs/utils/filename_factory.lua b/config/mpv/scripts/subs2srs/utils/filename_factory.lua new file mode 100644 index 0000000..a794fc7 --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/filename_factory.lua @@ -0,0 +1,89 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Creates image and audio filenames compatible with Anki. +]] + +local mp = require('mp') +local h = require('helpers') + +local filename + +local anki_compatible_length = (function() + -- Anki forcibly mutilates all filenames longer than 119 bytes when you run `Tools->Check Media...`. + local allowed_bytes = 119 + local timestamp_bytes = #'_99h99m99s999ms-99h99m99s999ms.webp' + + return function(str, timestamp) + -- if timestamp provided, recalculate limit_bytes + local limit_bytes = allowed_bytes - (timestamp and #timestamp or timestamp_bytes) + + if #str <= limit_bytes then + return str + end + + local bytes_per_char = h.contains_non_latin_letters(str) and #'車' or #'z' + local limit_chars = math.floor(limit_bytes / bytes_per_char) + + if limit_chars == limit_bytes then + return str:sub(1, limit_bytes) + end + + local ret = h.subprocess { + 'awk', + '-v', string.format('str=%s', str), + '-v', string.format('limit=%d', limit_chars), + 'BEGIN{print substr(str, 1, limit); exit}' + } + + if ret.status == 0 then + ret.stdout = h.remove_newlines(ret.stdout) + ret.stdout = h.remove_leading_trailing_spaces(ret.stdout) + return ret.stdout + else + return 'subs2srs_' .. os.time() + end + end +end)() + +local make_media_filename = function() + filename = mp.get_property("filename") -- filename without path + filename = h.remove_extension(filename) + filename = h.remove_filename_text_in_parentheses(filename) + filename = h.remove_text_in_brackets(filename) + filename = h.remove_special_characters(filename) +end + +local function timestamp_range(start_timestamp, end_timestamp, extension) + -- Generates a filename suffix of the form: _00h00m00s000ms-99h99m99s999ms.extension + -- Extension must already contain the dot. + return string.format( + '_%s_%s%s', + h.human_readable_time(start_timestamp), + h.human_readable_time(end_timestamp), + extension + ) +end + +local function timestamp_static(timestamp, extension) + -- Generates a filename suffix of the form: _00h00m00s000ms.extension + -- Extension must already contain the dot. + return string.format( + '_%s%s', + h.human_readable_time(timestamp), + extension + ) +end + +local make_filename = function(...) + local args = {...} + local timestamp = #args < 3 and timestamp_static(...) or timestamp_range(...) + return string.lower(anki_compatible_length(filename, timestamp) .. timestamp) +end + +mp.register_event("file-loaded", make_media_filename) + +return { + make_filename = make_filename, +} diff --git a/config/mpv/scripts/subs2srs/utils/forvo.lua b/config/mpv/scripts/subs2srs/utils/forvo.lua new file mode 100644 index 0000000..09bc596 --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/forvo.lua @@ -0,0 +1,145 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Utils for downloading pronunciations from Forvo +]] + +local utils = require('mp.utils') +local msg = require('mp.msg') +local h = require('helpers') +local base64 = require('utils.base64') +local self = { + output_dir_path = nil, +} + +local function url_encode(url) + -- https://gist.github.com/liukun/f9ce7d6d14fa45fe9b924a3eed5c3d99 + local char_to_hex = function(c) + return string.format("%%%02X", string.byte(c)) + end + if url == nil then + return + end + url = url:gsub("\n", "\r\n") + url = url:gsub("([^%w _%%%-%.~])", char_to_hex) + url = url:gsub(" ", "+") + return url +end + +local function reencode(source_path, dest_path) + local args = { + 'mpv', + source_path, + '--loop-file=no', + '--keep-open=no', + '--video=no', + '--no-ocopy-metadata', + '--no-sub', + '--audio-channels=mono', + '--oacopts-add=vbr=on', + '--oacopts-add=application=voip', + '--oacopts-add=compression_level=10', + '--af-append=silenceremove=1:0:-50dB', + table.concat { '--oac=', self.config.audio_codec }, + table.concat { '--of=', self.config.audio_format }, + table.concat { '--oacopts-add=b=', self.config.audio_bitrate }, + table.concat { '-o=', dest_path } + } + return h.subprocess(args) +end + +local function reencode_and_store(source_path, filename) + local reencoded_path = utils.join_path(self.output_dir_path, filename) + local result = reencode(source_path, reencoded_path) + return result.status == 0 +end + +local function curl_save(source_url, save_location) + local curl_args = { 'curl', source_url, '-s', '-L', '-o', save_location } + return h.subprocess(curl_args).status == 0 +end + +local function get_pronunciation_url(word) + local file_format = self.config.audio_extension:sub(2) + local forvo_page = h.subprocess { 'curl', '-s', string.format('https://forvo.com/search/%s/ja', url_encode(word)) }.stdout + local play_params = string.match(forvo_page, "Play%((.-)%);") + + if play_params then + local iter = string.gmatch(play_params, "'(.-)'") + local formats = { mp3 = iter(), ogg = iter() } + return string.format('https://audio00.forvo.com/%s/%s', file_format, base64.dec(formats[file_format])) + end +end + +local function make_forvo_filename(word) + return string.format('forvo_%s%s', self.platform.windows and os.time() or word, self.config.audio_extension) +end + +local function get_forvo_pronunciation(word) + local audio_url = get_pronunciation_url(word) + + if h.is_empty(audio_url) then + msg.warn(string.format("Seems like Forvo doesn't have audio for word %s.", word)) + return + end + + local filename = make_forvo_filename(word) + local tmp_filepath = utils.join_path(self.platform.tmp_dir(), filename) + + local result + if curl_save(audio_url, tmp_filepath) and reencode_and_store(tmp_filepath, filename) then + result = string.format(self.config.audio_template, filename) + else + msg.warn(string.format("Couldn't download audio for word %s from Forvo.", word)) + end + + os.remove(tmp_filepath) + return result +end + +local append = function(new_data, stored_data) + if self.config.use_forvo == 'no' then + -- forvo functionality was disabled in the config file + return new_data + end + + if type(stored_data[self.config.vocab_audio_field]) ~= 'string' then + -- there is no field configured to store forvo pronunciation + return new_data + end + + if h.is_empty(stored_data[self.config.vocab_field]) then + -- target word field is empty. can't continue. + return new_data + end + + if self.config.use_forvo == 'always' or h.is_empty(stored_data[self.config.vocab_audio_field]) then + local forvo_pronunciation = get_forvo_pronunciation(stored_data[self.config.vocab_field]) + if not h.is_empty(forvo_pronunciation) then + if self.config.vocab_audio_field == self.config.audio_field then + -- improperly configured fields. don't lose sentence audio + new_data[self.config.audio_field] = forvo_pronunciation .. new_data[self.config.audio_field] + else + new_data[self.config.vocab_audio_field] = forvo_pronunciation + end + end + end + + return new_data +end + +local set_output_dir = function(dir_path) + self.output_dir_path = dir_path +end + +local function init(config, platform) + self.config = config + self.platform = platform +end + +return { + append = append, + init = init, + set_output_dir = set_output_dir, +} diff --git a/config/mpv/scripts/subs2srs/utils/pause_timer.lua b/config/mpv/scripts/subs2srs/utils/pause_timer.lua new file mode 100644 index 0000000..e37b0ea --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/pause_timer.lua @@ -0,0 +1,33 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Pause timer stops playback when reaching a set timing. +]] + +local mp = require('mp') +local stop_time = -1 +local check_stop + +local set_stop_time = function(time) + stop_time = time + mp.observe_property("time-pos", "number", check_stop) +end + +local stop = function() + mp.unobserve_property(check_stop) + stop_time = -1 +end + +check_stop = function(_, time) + if time > stop_time then + stop() + mp.set_property("pause", "yes") + end +end + +return { + set_stop_time = set_stop_time, + check_stop = check_stop, + stop = stop, +} diff --git a/config/mpv/scripts/subs2srs/utils/play_control.lua b/config/mpv/scripts/subs2srs/utils/play_control.lua new file mode 100644 index 0000000..901377d --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/play_control.lua @@ -0,0 +1,61 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Provides additional methods for controlling playback. +]] + +local mp = require('mp') +local h = require('helpers') +local pause_timer = require('utils.pause_timer') +local Subtitle = require('subtitles.subtitle') + +local current_sub + +local function stop_at_the_end(sub) + pause_timer.set_stop_time(sub['end'] - 0.050) + h.notify("Playing till the end of the sub...", "info", 3) +end + +local function play_till_sub_end() + local sub = Subtitle:now() + mp.commandv('seek', sub['start'], 'absolute') + mp.set_property("pause", "no") + stop_at_the_end(sub) +end + +local function sub_seek(direction, pause) + mp.commandv("sub_seek", direction == 'backward' and '-1' or '1') + mp.commandv("seek", "0.015", "relative+exact") + if pause then + mp.set_property("pause", "yes") + end + pause_timer.stop() +end + +local function sub_rewind() + mp.commandv('seek', Subtitle:now()['start'] + 0.015, 'absolute') + pause_timer.stop() +end + +local function check_sub() + local sub = Subtitle:now() + if sub and sub ~= current_sub then + mp.unobserve_property(check_sub) + stop_at_the_end(sub) + end +end + +local function play_till_next_sub_end() + current_sub = Subtitle:now() + mp.observe_property("sub-text", "string", check_sub) + mp.set_property("pause", "no") + h.notify("Waiting till next sub...", "info", 10) +end + +return { + play_till_sub_end = play_till_sub_end, + play_till_next_sub_end = play_till_next_sub_end, + sub_seek = sub_seek, + sub_rewind = sub_rewind, +} diff --git a/config/mpv/scripts/subs2srs/utils/switch.lua b/config/mpv/scripts/subs2srs/utils/switch.lua new file mode 100644 index 0000000..5dac1c6 --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/switch.lua @@ -0,0 +1,38 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Switch cycles between values in a table. +]] + +local make_switch = function(states) + local self = { + states = states, + current_state = 1 + } + local bump = function() + self.current_state = self.current_state + 1 + if self.current_state > #self.states then + self.current_state = 1 + end + end + local get = function() + return self.states[self.current_state] + end + local set = function(new_state) + for idx, value in ipairs(self.states) do + if value == new_state then + self.current_state = idx + end + end + end + return { + bump = bump, + get = get, + set = set, + } +end + +return { + new = make_switch +} diff --git a/config/mpv/scripts/subs2srs/utils/timings.lua b/config/mpv/scripts/subs2srs/utils/timings.lua new file mode 100644 index 0000000..d2408d6 --- /dev/null +++ b/config/mpv/scripts/subs2srs/utils/timings.lua @@ -0,0 +1,28 @@ +--[[ +Copyright: Ren Tatsumoto and contributors +License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html + +Object that remembers manually set timings. +]] + +local new_timings = function() + local self = { ['start'] = -1, ['end'] = -1, } + local is_set = function(position) + return self[position] >= 0 + end + local set = function(position, time) + self[position] = time + end + local get = function(position) + return self[position] + end + return { + is_set = is_set, + set = set, + get = get, + } +end + +return { + new = new_timings, +} diff --git a/config/mpv/scripts/subs2srsa/.gitignore b/config/mpv/scripts/subs2srsa/.gitignore deleted file mode 100644 index 850b67c..0000000 --- a/config/mpv/scripts/subs2srsa/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.idea -.vscode -/.github/RELEASE/*.zip -/.github/RELEASE/*.html -*TODO* diff --git a/config/mpv/scripts/subs2srsa/LICENSE b/config/mpv/scripts/subs2srsa/LICENSE deleted file mode 100644 index f288702..0000000 --- a/config/mpv/scripts/subs2srsa/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/config/mpv/scripts/subs2srsa/Makefile b/config/mpv/scripts/subs2srsa/Makefile deleted file mode 100644 index fc346ce..0000000 --- a/config/mpv/scripts/subs2srsa/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -PROJECT := mpvacious -PREFIX ?= /etc/mpv/ -BRANCH ?= remotes/origin/master -VERSION := $(shell git describe --tags $(BRANCH)) -RELEASE_DIR := .github/RELEASE -ZIP := $(RELEASE_DIR)/$(PROJECT)_$(VERSION).zip -DOCS := $(RELEASE_DIR)/README_$(VERSION).html -MD2HTML = md2html --github --full-html - -.PHONY: all clean docs install uninstall - -all: $(ZIP) -docs: $(DOCS) - -$(ZIP): - git archive \ - --prefix=$(PROJECT)_$(VERSION)/ \ - --format=zip \ - -o $@ \ - $(BRANCH) \ - -$(DOCS): - git show "$(BRANCH):README.md" | $(MD2HTML) -o $@ - -install: - find . -type f -iname '*.lua' | while read -r file; do \ - install -Dm644 "$$file" "$(PREFIX)/scripts/$(PROJECT)/$$file"; \ - done - install -Dm644 $(RELEASE_DIR)/subs2srs.conf "$(PREFIX)/script-opts/subs2srs.conf" - -uninstall: - rm -rf -- "$(PREFIX)/scripts/$(PROJECT)" - rm -- "$(PREFIX)/script-opts/subs2srs.conf" - -clean: - rm -- $(ZIP) $(DOCS) diff --git a/config/mpv/scripts/subs2srsa/README.md b/config/mpv/scripts/subs2srsa/README.md deleted file mode 100644 index deefe3c..0000000 --- a/config/mpv/scripts/subs2srsa/README.md +++ /dev/null @@ -1,478 +0,0 @@ -

- -

- -# mpvacious - -[![AUR](https://img.shields.io/badge/AUR-install-blue.svg)](https://aur.archlinux.org/packages/mpv-mpvacious/) -[![Chat](https://img.shields.io/badge/chat-join-green.svg)](https://tatsumoto-ren.github.io/blog/join-our-community.html) -![GitHub](https://img.shields.io/github/license/Ajatt-Tools/mpvacious) -[![Donate](https://img.shields.io/badge/support-developer-orange)](https://tatsumoto.neocities.org/blog/donating-to-tatsumoto.html) - -mpvacious is your semi-automatic subs2srs for mpv. -It supports multiple workflows and allows you to quickly create Anki cards -while watching your favorite TV show. -**[Video demonstration](https://redirect.invidious.io/watch?v=vU85ramvyo4)**. - -## Requirements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GNU/LinuxWindows 10+macOSComments
mpvmpvmpvv0.32.0 or newer.
AnkiAnki
AnkiConnectInstall from AnkiWeb.
curlcurlInstalled by default on all platforms except Windows 7.
xclip or wl-copypbcopyTo copy subtitle text to clipboard.
- -Install all dependencies at once (on [Arch-based](https://www.parabola.nu/) -[distros](https://www.gnu.org/distros/free-distros.en.html)): - -``` -$ sudo pacman -Syu mpv anki curl xclip --needed -``` - -## Prerequisites - -* A guide on how to set up Anki can be found [on our site](https://tatsumoto.neocities.org/blog/setting-up-anki.html). -* If you're on a [Windows](https://www.fsf.org/windows) or a [Windows-like](https://reactos.org/) machine, - a mpv build by `shinchiro` is recommended. -* **macOS** users are advised to use [homebrew](https://brew.sh/) or manually add `mpv` to `PATH`. -* Note that it is not recommended to use FlatPak or similar containers. - If you still want to, [read this](howto/flatpak.md). -* Make sure that your build of mpv supports encoding of audio and images. - This shell command can be used to test it. - - ``` - $ mpv 'test_video.mkv' --loop-file=no --frames=1 -o='test_image.jpg' - ``` - - If the command fails, find a compatible build on the [mpv website](https://mpv.io/installation/) - or instead install FFmpeg and [enable FFmpeg support](#configuration) in `mpvacious`'s config file. -* Most problems with adding audio or images to Anki cards can be fixed - by installing FFmpeg and enabling it settings. - -## Installation - -There are multiple ways you can install `mpvacious`. -I recommend installing with `git` so that you can easily update on demand. - -`mpvacious` is a user-script for mpv, -so it has to be installed in the directory `mpv` reads its user-scripts from. - -| OS | Location | -|-----------|--------------------------------------------------| -| GNU/Linux | `~/.config/mpv/scripts/` | -| Windows | `C:/Users/Username/AppData/Roaming/mpv/scripts/` | - -Windows is not recommended, -but we acknowledge that some people haven't switched to GNU/Linux yet. - -### Using git - -Clone the repo to the `scripts` directory. - -``` -mkdir -p ~/.config/mpv/scripts/ -git clone 'https://github.com/Ajatt-Tools/mpvacious.git' ~/.config/mpv/scripts/subs2srs -``` - -To update, run the following command. - -``` -cd ~/.config/mpv/scripts/subs2srs && git pull -``` - -### From the AUR - -`mpvacious` can be installed with the [mpv-mpvacious](https://aur.archlinux.org/packages/mpv-mpvacious/) package. - -### Manually - -This way is not recommended because it's easy to make a mistake during the process -and end up with a broken install. - -Download -[the repository](https://github.com/Ajatt-Tools/mpvacious/archive/refs/heads/master.zip) -or -[the latest release](https://github.com/Ajatt-Tools/mpvacious/releases) -and extract the folder containing -[subs2srs.lua](https://raw.githubusercontent.com/Ajatt-Tools/mpvacious/master/subs2srs.lua) -to your [mpv scripts](https://github.com/mpv-player/mpv/wiki/User-Scripts) directory. - -
- -Expected directory tree - -``` -~/.config/mpv/scripts -|-- other script 1 -|-- other script 2 -|-- subs2srs -| |-- main.lua -| |-- subs2srs.lua -| `-- other files -`-- other script 3 -``` - -
- -
- -A note for mpv v0.32 and older - -Older versions of `mpv` don't know how to handle user-scripts in subdirectories. -You need to tell mpv where to look for `mpvacious`. - -Open or create `~/.config/mpv/scripts/modules.lua` and add these lines: -``` -local mpv_scripts_dir_path = os.getenv("HOME") .. "/.config/mpv/scripts/" -package.path = package.path .. ';' .. os.getenv("HOME") .. '/.config/mpv/scripts/subs2srs/?.lua' -function load(relative_path) dofile(mpv_scripts_dir_path .. relative_path) end -load("subs2srs/subs2srs.lua") -``` - -
- -**Note:** in [Celluloid](https://www.archlinux.org/packages/community/x86_64/celluloid/) -user scripts are installed in `/.config/celluloid/scripts/`. -When following the instructions above, replace `.config/mpv` with `.config/celluloid` -and optionally `subs2srs` with the name of the folder mpvacious is cloned into. - -## Configuration - -The config file should be created by the user, if needed. - -| OS | Config location | -|--------------------|-------------------------------------------------------------------| -| GNU/Linux | `~/.config/mpv/script-opts/subs2srs.conf` | -| Windows | `C:/Users/Username/AppData/Roaming/mpv/script-opts/subs2srs.conf` | -| Windows (portable) | `mpv.exeフォルダ/portable_config/script-opts/subs2srs.conf` | - -If a parameter is not specified -in the config file, the default value will be used. -mpv doesn't tolerate spaces before and after `=`. - -

- Example configuration file -

- -If the first field is empty, it will be set contain the string `[empty]`. -Otherwise, Anki won't allow mpvacious to add new notes. -This won't happen if the sentence field is first in the note type settings. - -**Tip**: Try [our official note type](https://ankiweb.net/shared/info/1557722832) -if you don't want to configure note fields yourself. -Alternatively, we have a collection of user-created note types, which you can browse -[here](https://github.com/Ajatt-Tools/AnkiNoteTypes). - -If you are having problems playing media files on older mobile devices, -set `audio_format` to `mp3` and/or `snapshot_format` to `jpg`. -Otherwise, I recommend sticking with `opus` for audio, -and `avif` or `webp` for images, -as they greatly reduce the size of the generated files. - -If you still use AnkiMobile (the [proprietary](https://www.gnu.org/proprietary/) Anki app), -set `opus_container` to `m4a` or `webm`. I'll allow iOS to play Opus files, while still maintaining -compatibility with non-Apple devices. For really old iOS devices, set `opus_container` to -[`caf`](https://en.wikipedia.org/wiki/Core_Audio_Format). CAF plays only on Anki Desktop, -AnkiWeb in Safari and AnkiMobile, and is really not recommended. (Please note that -[Lockdown Mode](https://support.apple.com/en-us/105120) completely disables Opus and AVIF support, -though you may try to add an exception for AnkiMobile.) - -If no matter what mpvacious fails to create audio clips and/or snapshots, -change `use_ffmpeg` to `yes`. -By using ffmpeg instead of the encoder built in mpv you can work around most encoder issues. -You need to have ffmpeg installed for this to work. - -### Key bindings - -The user may change some global key bindings, though this step is not necessary. -See [Usage](#usage) for the explanation of what they do. - -| OS | Config location | -|-----------|----------------------------------------------------| -| GNU/Linux | `~/.config/mpv/input.conf` | -| Windows | `C:/Users/Username/AppData/Roaming/mpv/input.conf` | - -Default bindings: - -``` -a script-binding mpvacious-menu-open - -Ctrl+g script-binding mpvacious-animated-snapshot-toggle - -Ctrl+n script-binding mpvacious-export-note - -Ctrl+m script-binding mpvacious-update-last-note -Ctrl+M script-binding mpvacious-overwrite-last-note - -g script-binding mpvacious-quick-card-menu-open -Alt+g script-binding mpvacious-quick-card-sel-menu-open - -Ctrl+c script-binding mpvacious-copy-primary-sub-to-clipboard -Ctrl+C script-binding mpvacious-copy-secondary-sub-to-clipboard -Ctrl+t script-binding mpvacious-autocopy-toggle - -H script-binding mpvacious-sub-seek-back -L script-binding mpvacious-sub-seek-forward - -Alt+h script-binding mpvacious-sub-seek-back-pause -Alt+l script-binding mpvacious-sub-seek-forward-pause - -Ctrl+h script-binding mpvacious-sub-rewind -Ctrl+H script-binding mpvacious-sub-replay -Ctrl+L script-binding mpvacious-sub-play-up-to-next - -Ctrl+v script-binding mpvacious-secondary-sid-toggle -Ctrl+k script-binding mpvacious-secondary-sid-prev -Ctrl+j script-binding mpvacious-secondary-sid-next -``` - -**Note:** A capital letter means that you need to press Shift in order to activate the corresponding binding. -For example, Ctrl+M actually means Ctrl+Shift+m. -mpv accepts both variants in `input.conf`. - -## Usage - -* [Create a card](howto/create_card.md) -* [Quick card creation](howto/create_quick_card.md) -* [Open the "Add" dialog](howto/add_dialog.md) -* [Usage with Rikaitan](howto/yomichan.md) -* [Usage with GoldenDict](howto/goldendict.md) - -### Global bindings - -**Menu:** - -* a - Open `advanced menu`. - -**Enable\Disable animation:** - -* Ctrl+g - If animation is enabled, animated snapshots will be generated instead of static images. - Animated snapshot are like GIFs (just in a different format) - and will capture the video from the start to the end times selected. - -**Make a card:** - -* Ctrl+n - Export a card with the currently visible subtitle line on the front. -Use this when your subs are well-timed, -and the target sentence doesn't span multiple subs. - -**Quick card creation:** - -* g - Quick card creation menu. -* Alt+g - Quick card creation, card selection menu. - -**Update the last card:** - -* Ctrl+m - Append to the media fields of the newly added Anki card. -* Ctrl+Shift+m - Overwrite media fields of the newly added Anki card. - -**Clipboard:** - -* Ctrl+c - Copy current subtitle string to the system clipboard. -* Ctrl+t - Toggle automatic copying of subtitles to the clipboard. - -**Seeking:** - -* Shift+h and Shift+l - Seek to the previous or the next subtitle. -* Alt+h and Alt+l - Seek to the previous, or the next subtitle, and pause. -* Ctrl+h - Seek to the start of the currently visible subtitle. Use it if you missed something. -* Ctrl+Shift+h - Replay current subtitle line, and pause. -* Ctrl+Shift+l - Play until the end of the next subtitle, and pause. Useful for beginners who need - to look up words in each and every dialogue line. - -**Secondary subtitles:** - -* Ctrl+v - Toggle visibility. -* Ctrl+k - Switch to the previous subtitle if it's not already selected. -* Ctrl+j - Switch to the next subtitle if it's not already selected. - -### Menu options - -Advanced menu has the following options: - -* f - Increment number of cards to update. Only affects note updating, including quick card creation. The number of cards to update is reset to 1 upon updating a note. -* shift+f - Decrement number of cards to update. - -* c - Interactive subtitle selection. - The range of the currently displayed subtitle line is selected. The selection then grows both ways based on the following displayed lines. - It does nothing if there are no subs on screen. - -* shift+s - Set the start time to the current sub. The selection then grows forward based on the following displayed lines. - The default selection spans across the range of the currently displayed subtitle line. -* shift+e - Set the end time to the current sub. The selection then grows backward based on the following displayed lines. - The default selection spans across the range of the currently displayed subtitle line. - -Then seek with Shift+h and Shift+l to the previous/next line that you want to add. -Press n to make the card. - -* r - Forget all previously saved timings and associated dialogs. - -* z and Shift+z - Adjust subtitle delay. - -If above fails, you have to manually set timings. -* s - Set the start time. The selection then grows forward based on the following displayed lines. -The default selection spans across the selected start point and the end of the subtitle line. -* e - Set the end time. The selection then grows backward based on the following displayed lines. -The default selection spans across the selected end point and the start of the subtitle line. - -Then, as earlier, press n to make the card. - -**Tip**: change playback speed by pressing [ and ] -to precisely mark start and end of the phrase. - -### My subtitles are not in sync - -If subs are badly timed, first, you could try to re-time them. -Read [Retiming subtitles](https://tatsumoto.neocities.org/blog/retiming-subtitles). -Or shift timings using key bindings provided by mpv (usually z and Shift+z). - -### Example sentence card - -With the addon you can make cards like this in just a few seconds. - -![card-example](https://user-images.githubusercontent.com/69171671/92900057-e102d480-f40e-11ea-8cfc-b00848ca66ff.png) - -### Audio cards - -It is possible to make a card with just audio, and a picture -when subtitles for the show you are watching aren't available, for example. -mpv by default allows you to do a `1` second exact seek by pressing Shift+LEFT and Shift+RIGHT. -Open the mpvacious menu by pressing a, seek to the position you need, and set the timings. -Then press g to invoke the `Add Cards` dialog. -Here's a [video demonstration](https://redirect.invidious.io/watch?v=BXhyckdHPGE). - -If the show is hard-subbed, you can use -[transformers-ocr](https://tatsumoto.neocities.org/blog/mining-from-manga.html) -to recognize and add text to the card. - -### Secondary subtitles - -If you want to add a translation to your cards, and you have the subtitles in that language, -you can add them as secondary subtitles if you run `mpv` with `--secondary-sid=` parameter, -`sid` being the track identifier for the subtitle. - -You also need to specify `secondary_field` in the [config file](#Configuration) -if it is different from the default. - -If you want to load secondary subtitles **automatically**, don't modify the run parameters -and instead set the desired languages in the config file (`secondary_sub_lang` option). - -Secondary subtitles will be visible when hovering over the top part of the `mpv` window. - -https://user-images.githubusercontent.com/69171671/188492261-909ba3e8-b82c-493f-88cf-0ec953dfcfe1.mp4 - -By pressing Ctrl+v you can control secondary sid visibility without using the mouse. - -### Other tools - -If you don't like the default Rikaitan Search tool, try: - -* Clipboard Inserter browser add-on -([chrome](https://chrome.google.com/webstore/detail/clipboard-inserter/deahejllghicakhplliloeheabddjajm)) -([firefox](https://addons.mozilla.org/ja/firefox/addon/clipboard-inserter/)) -* A html page ([1](https://pastebin.com/zDY6s3NK)) ([2](https://pastebin.com/hZ4sawL4)) -to paste the contents of your clipboard to - -You can use any html page as long as it has \\ in it. - -### Additional mpv key bindings - -I recommend adding these lines to your [input.conf](#key-bindings) for smoother experience. -``` -# vim-like seeking -l seek 5 -h seek -5 -j seek -60 -k seek 60 - -# Cycle between subtitle files -K cycle sub -J cycle sub down - -# Add/subtract 50 ms delay from subs -Z add sub-delay +0.05 -z add sub-delay -0.05 - -# Adjust timing to previous/next subtitle -X sub-step 1 -x sub-step -1 -``` - -## Profiles - -Mpvacious supports config profiles. -To make use of them, create a new config file called `subs2srs_profiles.conf` -in the same folder as your [subs2srs.conf](#Configuration). -Inside the file, define available profile names (without `.conf`) and the name of the active profile: - -``` -profiles=subs2srs,english,german -active=subs2srs -``` - -In the example above, I have three profiles. -The first one is the default, -the second one is for learning English, -the third one is for learning German. - -Then in the same folder create config files for each of the defined profiles. -For example, below is the contents of my `english.conf` file: - -``` -deck_name=English sentence mining -model_name=General -sentence_field=Question -audio_field=Audio -image_field=Extra -``` - -You don't have to redefine all settings in the new profile. -Specify only the ones you want to be different from the default. - -To cycle profiles, open the advanced menu by pressing a and then press p. -At any time you can see what profile is active in the menu's status bar. - -## Hacking - -If you want to modify this script -or make an entirely new one from scratch, -these links may help. - -* https://mpv.io/manual/master/#lua-scripting -* https://github.com/mpv-player/mpv/blob/master/player/lua/defaults.lua -* https://github.com/SenneH/mpv2anki -* https://github.com/kelciour/mpv-scripts/blob/master/subs2srs.lua -* https://pastebin.com/M2gBksHT -* https://pastebin.com/NBudhMUk -* https://pastebin.com/W5YV1A9q -* https://github.com/ayuryshev/subs2srs -* https://github.com/erjiang/subs2srs diff --git a/config/mpv/scripts/subs2srsa/ankiconnect.lua b/config/mpv/scripts/subs2srsa/ankiconnect.lua deleted file mode 100644 index f9c87d8..0000000 --- a/config/mpv/scripts/subs2srsa/ankiconnect.lua +++ /dev/null @@ -1,241 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -AnkiConnect requests -]] - -local utils = require('mp.utils') -local msg = require('mp.msg') -local h = require('helpers') -local self = {} - -self.execute = function(request, completion_fn) - -- utils.format_json returns a string - -- On error, request_json will contain "null", not nil. - local request_json, error = utils.format_json(request) - - if error ~= nil or request_json == "null" then - return completion_fn and completion_fn() - else - return self.platform.curl_request(self.config.ankiconnect_url, request_json, completion_fn) - end -end - -self.parse_result = function(curl_output) - -- there are two values that we actually care about: result and error - -- but we need to crawl inside to get them. - - if curl_output == nil then - return nil, "Failed to format json or no args passed" - end - - if curl_output.status ~= 0 then - return nil, "Ankiconnect isn't running" - end - - local stdout_json = utils.parse_json(curl_output.stdout) - - if stdout_json == nil then - return nil, "Fatal error from Ankiconnect" - end - - if stdout_json.error ~= nil then - return nil, tostring(stdout_json.error) - end - - return stdout_json.result, nil -end - -self.get_media_dir_path = function() - -- Ask AnkiConnect where to store media files. - -- If AnkiConnect isn't running, returns nil. - - local ret = self.execute({ - action = "getMediaDirPath", - version = 6, - }) - local dir_path, error = self.parse_result(ret) - if not error then - return dir_path - else - msg.error(string.format("Couldn't retrieve path to collection.media folder: %s", error)) - return nil - end -end - -self.create_deck = function(deck_name) - local args = { - action = "changeDeck", - version = 6, - params = { - cards = {}, - deck = deck_name - } - } - local result_notify = function(_, result, _) - local _, error = self.parse_result(result) - if not error then - msg.info(string.format("Deck %s: check completed.", deck_name)) - else - msg.warn(string.format("Deck %s: check failed. Reason: %s.", deck_name, error)) - end - end - self.execute(args, result_notify) -end - -self.add_note = function(note_fields, tag, gui) - local action = gui and 'guiAddCards' or 'addNote' - local args = { - action = action, - version = 6, - params = { - note = { - deckName = self.config.deck_name, - modelName = self.config.model_name, - fields = note_fields, - options = { - allowDuplicate = self.config.allow_duplicates, - duplicateScope = "deck", - }, - tags = h.is_empty(tag) and {} or { tag, }, - } - } - } - local result_notify = function(_, result, _) - local note_id, error = self.parse_result(result) - if not error then - h.notify(string.format("Note added. ID = %s.", note_id)) - else - h.notify(string.format("Error: %s.", error), "error", 2) - end - end - self.execute(args, result_notify) -end - -self.get_last_note_ids = function(n_cards) - local ret = self.execute { - action = "findNotes", - version = 6, - params = { - query = "added:1" -- find all notes added today - } - } - - local note_ids, _ = self.parse_result(ret) - - if not h.is_empty(note_ids) then - return h.get_last_n_added_notes(note_ids, n_cards) - else - return {} - end -end - -self.get_note_fields = function(note_id) - local ret = self.execute { - action = "notesInfo", - version = 6, - params = { - notes = { note_id } - } - } - - local result, error = self.parse_result(ret) - - if error == nil then - result = result[1].fields - for key, value in pairs(result) do - result[key] = value.value - end - return result - else - return nil - end -end - -self.get_first_field = function(model_name) - local ret = self.execute { - action = "findModelsByName", - version = 6, - params = { - modelNames = { model_name } - } - } - - local result, error = self.parse_result(ret) - - if error == nil then - for _, field in pairs(result[1].flds) do - if field.ord == 0 then - return field.name - end - end - else - msg.error(string.format("Couldn't retrieve the first field's name of note type %s: %s", model_name, error)) - return nil - end -end - -self.gui_browse = function(query) - if not self.config.disable_gui_browse then - self.execute { - action = 'guiBrowse', - version = 6, - params = { - query = query - } - } - end -end - -self.add_tag = function(note_id, tag) - if not h.is_empty(tag) then - self.execute { - action = 'addTags', - version = 6, - params = { - notes = { note_id }, - tags = tag - } - } - end -end - -self.append_media = function(note_id, fields, create_media_fn, tag) - -- AnkiConnect will fail to update the note if it's selected in the Anki Browser. - -- https://github.com/FooSoft/anki-connect/issues/82 - -- Switch focus from the current note to avoid it. - self.gui_browse("nid:1") -- impossible nid - - local args = { - action = "updateNoteFields", - version = 6, - params = { - note = { - id = note_id, - fields = fields, - } - } - } - - local on_finish = function(_, result, _) - local _, error = self.parse_result(result) - if not error then - create_media_fn() - self.add_tag(note_id, tag) - self.gui_browse(string.format("nid:%s", note_id)) -- select the updated note in the card browser - h.notify(string.format("Note #%s updated.", note_id)) - else - h.notify(string.format("Error: %s.", error), "error", 2) - end - end - - self.execute(args, on_finish) -end - -self.init = function(config, platform) - self.config = config - self.platform = platform -end - -return self diff --git a/config/mpv/scripts/subs2srsa/cfg_mgr.lua b/config/mpv/scripts/subs2srsa/cfg_mgr.lua deleted file mode 100644 index 076c0d9..0000000 --- a/config/mpv/scripts/subs2srsa/cfg_mgr.lua +++ /dev/null @@ -1,240 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Config management, validation, loading. -]] - -local mp = require('mp') -local mpopt = require('mp.options') -local msg = require('mp.msg') -local h = require('helpers') -local utils = require('mp.utils') - -local min_side_px = 42 -local max_side_px = 640 -local default_height_px = 200 - --- This constant should be used in place of width and/or height in the config file. --- It tells the encoder to preserve aspect ratio when downscaling snapshots. --- The user almost always wants to set either width or height to this value. --- Note: If set to -1, encoding will fail with the "height/width not divisible by 2" error. -local preserve_aspect_ratio = -2 - -local self = { - config = nil, - profiles = nil, - initial_config = {} -} - -local default_profile_filename = 'subs2srs' -local profiles_filename = 'subs2srs_profiles' - -local function set_file_extension_for_opus() - -- Default to OGG, then change if an extension is supported. - -- https://en.wikipedia.org/wiki/Core_Audio_Format - self.config.audio_extension = '.ogg' - for _, extension in ipairs({ 'opus', 'm4a', 'webm', 'caf' }) do - if extension == self.config.opus_container then - self.config.audio_extension = '.' .. self.config.opus_container - break - end - end -end - -local function set_audio_format() - if self.config.audio_format == 'opus' then - -- https://opus-codec.org/ - self.config.audio_codec = 'libopus' - set_file_extension_for_opus() - else - self.config.audio_codec = 'libmp3lame' - self.config.audio_extension = '.mp3' - end -end - -local function set_video_format() - if self.config.snapshot_format == 'avif' then - self.config.snapshot_extension = '.avif' - self.config.snapshot_codec = 'libaom-av1' - elseif self.config.snapshot_format == 'webp' then - self.config.snapshot_extension = '.webp' - self.config.snapshot_codec = 'libwebp' - else - self.config.snapshot_extension = '.jpg' - self.config.snapshot_codec = 'mjpeg' - end - - -- Animated webp images can only have .webp extension. - -- The user has no choice on this. Same logic for avif. - if self.config.animated_snapshot_format == 'avif' then - self.config.animated_snapshot_extension = '.avif' - self.config.animated_snapshot_codec = 'libaom-av1' - else - self.config.animated_snapshot_extension = '.webp' - self.config.animated_snapshot_codec = 'libwebp' - end -end - -local function ensure_in_range(dimension) - self.config[dimension] = self.config[dimension] < min_side_px and preserve_aspect_ratio or self.config[dimension] - self.config[dimension] = self.config[dimension] > max_side_px and max_side_px or self.config[dimension] -end - -local function conditionally_set_defaults(width, height, quality) - if self.config[width] < 1 and self.config[height] < 1 then - self.config[width] = preserve_aspect_ratio - self.config[height] = default_height_px - end - if self.config[quality] < 0 or self.config[quality] > 100 then - self.config[quality] = 15 - end -end - -local function check_image_settings() - ensure_in_range('snapshot_width') - ensure_in_range('snapshot_height') - conditionally_set_defaults('snapshot_width', 'snapshot_height', 'snapshot_quality') -end - -local function ensure_correct_fps() - if self.config.animated_snapshot_fps == nil or self.config.animated_snapshot_fps <= 0 or self.config.animated_snapshot_fps > 30 then - self.config.animated_snapshot_fps = 10 - end -end - -local function check_animated_snapshot_settings() - ensure_in_range('animated_snapshot_width') - ensure_in_range('animated_snapshot_height') - conditionally_set_defaults('animated_snapshot_width', 'animated_snapshot_height', 'animated_snapshot_quality') - ensure_correct_fps() -end - -local function validate_config() - set_audio_format() - set_video_format() - check_image_settings() - check_animated_snapshot_settings() -end - -local function remember_initial_config() - if h.is_empty(self.initial_config) then - for key, value in pairs(self.config) do - self.initial_config[key] = value - end - else - msg.fatal("Ignoring. Initial config has been read already.") - end -end - -local function restore_initial_config() - for key, value in pairs(self.initial_config) do - self.config[key] = value - end -end - -local function read_profile_list() - mpopt.read_options(self.profiles, profiles_filename) - msg.info("Read profile list. Defined profiles: " .. self.profiles.profiles) -end - -local function read_profile(profile_name) - mpopt.read_options(self.config, profile_name) - msg.info("Read config file: " .. profile_name) -end - -local function read_default_config() - read_profile(default_profile_filename) -end - -local function reload_from_disk() - --- Loads default config file (subs2srs.conf), then overwrites it with current profile. - if not h.is_empty(self.config) and not h.is_empty(self.profiles) then - restore_initial_config() - read_default_config() - if self.profiles.active ~= default_profile_filename then - read_profile(self.profiles.active) - end - validate_config() - else - msg.fatal("Attempt to load config when init hasn't been done.") - end -end - -local function next_profile() - local first, next, new - for profile in string.gmatch(self.profiles.profiles, '[^,]+') do - if not first then - first = profile - end - if profile == self.profiles.active then - next = true - elseif next then - next = false - new = profile - end - end - if next == true or not new then - new = first - end - self.profiles.active = new - reload_from_disk() -end - -local function create_config_file() - local name = default_profile_filename - -- ~/.config/mpv/scripts/ and the mpvacious dir - local parent, child = utils.split_path(mp.get_script_directory()) - -- ~/.config/mpv/ and "scripts" - parent, child = utils.split_path(parent:gsub("/$", "")) - -- ~/.config/mpv/script-opts/subs2srs.conf - local config_filepath = utils.join_path(utils.join_path(parent, "script-opts"), string.format('%s.conf', name)) - local example_config_filepath = utils.join_path(mp.get_script_directory(), ".github/RELEASE/subs2srs.conf") - - local file_info = utils.file_info(config_filepath) - if file_info and file_info.is_file then - print("config already exists") - return - end - - local handle = io.open(example_config_filepath, 'r') - if handle == nil then - return - end - - local content = handle:read("*a") - handle:close() - - handle = io.open(config_filepath, 'w') - if handle == nil then - h.notify(string.format("Couldn't open %s.", config_filepath), "error", 4) - return - end - - handle:write(string.format("# Written by %s on %s.\n", name, os.date())) - handle:write(content) - handle:close() - h.notify("Settings saved.", "info", 2) -end - -local function init(config_table, profiles_table) - create_config_file() - self.config, self.profiles = config_table, profiles_table - -- 'subs2srs' is the main profile, it is always loaded. 'active profile' overrides it afterwards. - -- initial state is saved to another table to maintain consistency when cycling through incomplete profiles. - read_profile_list() - read_default_config() - remember_initial_config() - if self.profiles.active ~= default_profile_filename then - read_profile(self.profiles.active) - end - validate_config() -end - -return { - reload_from_disk = reload_from_disk, - init = init, - next_profile = next_profile, - default_height_px = default_height_px, - preserve_aspect_ratio = preserve_aspect_ratio, -} diff --git a/config/mpv/scripts/subs2srsa/encoder/codec_support.lua b/config/mpv/scripts/subs2srsa/encoder/codec_support.lua deleted file mode 100644 index 26cd91a..0000000 --- a/config/mpv/scripts/subs2srsa/encoder/codec_support.lua +++ /dev/null @@ -1,40 +0,0 @@ ---[[ -Copyright: Ajatt-Tools and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Check what codecs are supported by mpv. -If a desired codec is not supported, set the "use_ffmpeg" config option to "yes". -]] - -local mp = require('mp') -local h = require('helpers') - -local ovc_help = h.subprocess { 'mpv', '--ovc=help' } -local oac_help = h.subprocess { 'mpv', '--oac=help' } - -local function is_audio_supported(codec) - return oac_help.status == 0 and oac_help.stdout:find('--oac=' .. codec, 1, true) ~= nil -end - -local function is_image_supported(codec) - return ovc_help.status == 0 and ovc_help.stdout:find('--ovc=' .. codec, 1, true) ~= nil -end - -local inspection_result = { - snapshot = { - ['libaom-av1'] = is_image_supported('libaom-av1'), - libwebp = is_image_supported('libwebp'), - mjpeg = is_image_supported('mjpeg'), - }, - audio = { - libmp3lame = is_audio_supported('libmp3lame'), - libopus = is_audio_supported('libopus'), - }, -} -for type, codecs in pairs(inspection_result) do - for codec, supported in pairs(codecs) do - mp.msg.info(string.format("mpv supports %s codec %s: %s", type, codec, tostring(supported))) - end -end - -return inspection_result diff --git a/config/mpv/scripts/subs2srsa/encoder/encoder.lua b/config/mpv/scripts/subs2srsa/encoder/encoder.lua deleted file mode 100644 index b05c3db..0000000 --- a/config/mpv/scripts/subs2srsa/encoder/encoder.lua +++ /dev/null @@ -1,729 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Encoder creates audio clips and snapshots, both animated and static. -]] - -local mp = require('mp') -local utils = require('mp.utils') -local h = require('helpers') -local filename_factory = require('utils.filename_factory') -local msg = require('mp.msg') - ---Contains the state of the module -local self = { - snapshot = {}, - audio = {}, - config = nil, - store_fn = nil, - platform = nil, - encoder = nil, - output_dir_path = nil, -} - ------------------------------------------------------------- --- utility functions - -local function pad_timings(padding, start_time, end_time) - local video_duration = mp.get_property_number('duration') - start_time = start_time - padding - end_time = end_time + padding - - if start_time < 0 then - start_time = 0 - end - - if end_time > video_duration then - end_time = video_duration - end - - return start_time, end_time -end - -local function alt_path_dirs() - return { - '/opt/homebrew/bin', - '/usr/local/bin', - utils.join_path(os.getenv("HOME") or "~", '.local/bin'), - } -end - -local function find_exec(name) - local path, info - for _, alt_dir in pairs(alt_path_dirs()) do - path = utils.join_path(alt_dir, name) - info = utils.file_info(path) - if info and info.is_file then - return path - end - end - return name -end - -local function toms(timestamp) - --- Trim timestamp down to milliseconds. - return string.format("%.3f", timestamp) -end - -local function fit_quality_percentage_to_range(quality, worst_val, best_val) - local scaled = worst_val + (best_val - worst_val) * quality / 100 - -- Round to the nearest integer that's better in quality. - if worst_val > best_val then - return math.floor(scaled) - end - return math.ceil(scaled) -end - -local function quality_to_crf_avif(quality_value) - -- Quality is from 0 to 100. For avif images CRF is from 0 to 63 and reversed. - local worst_avif_crf = 63 - local best_avif_crf = 0 - return fit_quality_percentage_to_range(quality_value, worst_avif_crf, best_avif_crf) -end - -local function quality_to_jpeg_qscale(quality_value) - local worst_jpeg_quality = 31 - local best_jpeg_quality = 2 - return fit_quality_percentage_to_range(quality_value, worst_jpeg_quality, best_jpeg_quality) -end - ------------------------------------------------------------- --- ffmpeg encoder - -local ffmpeg = {} - -ffmpeg.exec = find_exec("ffmpeg") - -ffmpeg.prepend = function(...) - return { - ffmpeg.exec, "-hide_banner", "-nostdin", "-y", "-loglevel", "quiet", "-sn", - ..., - } -end - -local function make_scale_filter(algorithm, width, height) - -- algorithm is either "sinc" or "lanczos" - -- Static image scaling uses "sinc", which is the best downscaling algorithm: https://stackoverflow.com/a/6171860 - -- Animated images use Lanczos, which is faster. - return string.format( - "scale='min(%d,iw)':'min(%d,ih)':flags=%s+accurate_rnd", - width, height, algorithm - ) -end - -local function static_scale_filter() - return make_scale_filter('sinc', self.config.snapshot_width, self.config.snapshot_height) -end - -local function animated_scale_filter() - return make_scale_filter( - 'lanczos', - self.config.animated_snapshot_width, - self.config.animated_snapshot_height - ) -end - -ffmpeg.make_static_snapshot_args = function(source_path, output_path, timestamp) - local encoder_args - if self.config.snapshot_format == 'avif' then - encoder_args = { - '-c:v', 'libaom-av1', - -- cpu-used < 6 can take a lot of time to encode. - '-cpu-used', '6', - -- Avif quality can be controlled with crf. - '-crf', tostring(quality_to_crf_avif(self.config.snapshot_quality)), - '-still-picture', '1', - } - elseif self.config.snapshot_format == 'webp' then - encoder_args = { - '-c:v', 'libwebp', - '-compression_level', '6', - '-quality', tostring(self.config.snapshot_quality), - } - else - encoder_args = { - '-c:v', 'mjpeg', - '-q:v', tostring(quality_to_jpeg_qscale(self.config.snapshot_quality)), - } - end - - local args = ffmpeg.prepend( - '-an', - '-ss', toms(timestamp), - '-i', source_path, - '-map_metadata', '-1', - '-vf', static_scale_filter(), - '-frames:v', '1', - h.unpack(encoder_args) - ) - table.insert(args, output_path) - return args -end - -ffmpeg.make_animated_snapshot_args = function(source_path, output_path, start_timestamp, end_timestamp) - local encoder_args - if self.config.animated_snapshot_format == 'avif' then - encoder_args = { - '-c:v', 'libaom-av1', - -- cpu-used < 6 can take a lot of time to encode. - '-cpu-used', '6', - -- Avif quality can be controlled with crf. - '-crf', tostring(quality_to_crf_avif(self.config.animated_snapshot_quality)), - } - else - -- Documentation: https://www.ffmpeg.org/ffmpeg-all.html#libwebp - encoder_args = { - '-c:v', 'libwebp', - '-compression_level', '6', - '-quality', tostring(self.config.animated_snapshot_quality), - } - end - - local args = ffmpeg.prepend( - '-an', - '-ss', toms(start_timestamp), - '-to', toms(end_timestamp), - '-i', source_path, - '-map_metadata', '-1', - '-loop', '0', - '-vf', string.format( - 'fps=%d,%s', - self.config.animated_snapshot_fps, - animated_scale_filter() - ), - h.unpack(encoder_args) - ) - table.insert(args, output_path) - return args -end - -local function make_loudnorm_targets() - return string.format( - 'loudnorm=I=%s:LRA=%s:TP=%s:dual_mono=true', - self.config.loudnorm_target, - self.config.loudnorm_range, - self.config.loudnorm_peak - ) -end - -local function parse_loudnorm(loudnorm_targets, json_extractor, loudnorm_consumer) - local function warn() - msg.warn('Failed to measure loudnorm stats, falling back on dynamic loudnorm.') - end - - return function(success, result) - local json - if success and result.status == 0 then - json = json_extractor(result.stdout, result.stderr) - end - - if json == nil then - warn() - loudnorm_consumer(loudnorm_targets) - return - end - - local loudnorm_args = { loudnorm_targets } - local function add_arg(name, val) - -- loudnorm sometimes fails to gather stats for extremely short inputs. - -- Simply omit the stat to fall back on dynamic loudnorm. - if val ~= '-inf' and val ~= 'inf' then - table.insert(loudnorm_args, string.format('%s=%s', name, val)) - else - warn() - end - end - - local stats = utils.parse_json(json) - add_arg('measured_I', stats.input_i) - add_arg('measured_LRA', stats.input_lra) - add_arg('measured_TP', stats.input_tp) - add_arg('measured_thresh', stats.input_thresh) - add_arg('offset', stats.target_offset) - - loudnorm_consumer(table.concat(loudnorm_args, ':')) - end -end - -local function add_filter(filters, filter) - if #filters == 0 then - filters = filter - else - filters = string.format('%s,%s', filters, filter) - end -end - -local function separate_filters(filters, new_args, args) - -- Would've strongly preferred - -- if args[i] == '-af' or args[i] == '-filter:a' then - -- i = i + 1 - -- add_filter(args[i]) - -- but https://lua.org/manual/5.4/manual.html#3.3.5 says that - -- "You should not change the value of the control variable during the loop." - local expect_filter = false - for i = 1, #args do - if args[i] == '-af' or args[i] == '-filter:a' then - expect_filter = true - else - if expect_filter then - add_filter(filters, args[i]) - else - table.insert(new_args, args[i]) - end - expect_filter = false - end - end -end - -ffmpeg.append_user_audio_args = function(args) - local new_args = {} - local filters = '' - - separate_filters(filters, new_args, args) - if self.config.tie_volumes then - add_filter(filters, string.format("volume=%.1f", mp.get_property_native('volume') / 100.0)) - end - - local user_args = {} - for arg in string.gmatch(self.config.ffmpeg_audio_args, "%S+") do - table.insert(user_args, arg) - end - separate_filters(filters, new_args, user_args) - - if #filters > 0 then - table.insert(new_args, '-af') - table.insert(new_args, filters) - end - return new_args -end - -ffmpeg.make_audio_args = function( - source_path, output_path, start_timestamp, end_timestamp, args_consumer -) - local audio_track = h.get_active_track('audio') - local audio_track_id = audio_track['ff-index'] - - if audio_track and audio_track.external == true then - source_path = audio_track['external-filename'] - audio_track_id = 'a' - end - - local function make_ffargs(...) - return ffmpeg.append_user_audio_args( - ffmpeg.prepend( - '-vn', - '-ss', toms(start_timestamp), - '-to', toms(end_timestamp), - '-i', source_path, - '-map_metadata', '-1', - '-map_chapters', '-1', - '-map', string.format("0:%s", tostring(audio_track_id)), - '-ac', '1', - ... - ) - ) - end - - local function make_encoding_args(loudnorm_args) - local encoder_args - if self.config.audio_format == 'opus' then - encoder_args = { - '-c:a', 'libopus', - '-application', 'voip', - '-apply_phase_inv', '0', -- Improves mono audio. - } - if self.config.opus_container == 'm4a' then - table.insert(encoder_args, '-f') - table.insert(encoder_args, 'mp4') - end - else - -- https://wiki.hydrogenaud.io/index.php?title=LAME#Recommended_encoder_settings: - -- "For very low bitrates, up to 100kbps, ABR is most often the best solution." - encoder_args = { - '-c:a', 'libmp3lame', - '-compression_level', '0', - '-abr', '1', - } - end - - encoder_args = { '-b:a', tostring(self.config.audio_bitrate), h.unpack(encoder_args) } - if loudnorm_args then - table.insert(encoder_args, '-af') - table.insert(encoder_args, loudnorm_args) - end - local args = make_ffargs(h.unpack(encoder_args)) - table.insert(args, output_path) - args_consumer(args) - end - - if not self.config.loudnorm then - make_encoding_args(nil) - return - end - - local loudnorm_targets = make_loudnorm_targets() - local args = make_ffargs( - '-loglevel', 'info', - '-af', loudnorm_targets .. ':print_format=json' - ) - table.insert(args, '-f') - table.insert(args, 'null') - table.insert(args, '-') - h.subprocess( - args, - parse_loudnorm( - loudnorm_targets, - function(stdout, stderr) - local start, stop, json = string.find(stderr, '%[Parsed_loudnorm_0.-({.-})') - return json - end, - make_encoding_args - ) - ) -end - ------------------------------------------------------------- --- mpv encoder - -local mpv = { } - -mpv.exec = find_exec("mpv") - -mpv.prepend_common_args = function(source_path, ...) - return { - mpv.exec, - source_path, - '--no-config', - '--loop-file=no', - '--keep-open=no', - '--no-sub', - '--no-ocopy-metadata', - ..., - } -end - -mpv.make_static_snapshot_args = function(source_path, output_path, timestamp) - local encoder_args - if self.config.snapshot_format == 'avif' then - encoder_args = { - '--ovc=libaom-av1', - -- cpu-used < 6 can take a lot of time to encode. - '--ovcopts-add=cpu-used=6', - string.format('--ovcopts-add=crf=%d', quality_to_crf_avif(self.config.snapshot_quality)), - '--ovcopts-add=still-picture=1', - } - elseif self.config.snapshot_format == 'webp' then - encoder_args = { - '--ovc=libwebp', - '--ovcopts-add=compression_level=6', - string.format('--ovcopts-add=quality=%d', self.config.snapshot_quality), - } - else - encoder_args = { - '--ovc=mjpeg', - '--vf-add=scale=out_range=jpeg', - string.format( - '--ovcopts=global_quality=%d*QP2LAMBDA,flags=+qscale', - quality_to_jpeg_qscale(self.config.snapshot_quality) - ), - } - end - - return mpv.prepend_common_args( - source_path, - '--audio=no', - '--frames=1', - '--start=' .. toms(timestamp), - string.format('--vf-add=lavfi=[%s]', static_scale_filter()), - '-o=' .. output_path, - h.unpack(encoder_args) - ) -end - -mpv.make_animated_snapshot_args = function(source_path, output_path, start_timestamp, end_timestamp) - local encoder_args - if self.config.animated_snapshot_format == 'avif' then - encoder_args = { - '--ovc=libaom-av1', - -- cpu-used < 6 can take a lot of time to encode. - '--ovcopts-add=cpu-used=6', - string.format('--ovcopts-add=crf=%d', quality_to_crf_avif(self.config.animated_snapshot_quality)), - } - else - encoder_args = { - '--ovc=libwebp', - '--ovcopts-add=compression_level=6', - string.format('--ovcopts-add=quality=%d', self.config.animated_snapshot_quality), - } - end - - return mpv.prepend_common_args( - source_path, - '--audio=no', - '--start=' .. toms(start_timestamp), - '--end=' .. toms(end_timestamp), - '--ofopts-add=loop=0', - string.format('--vf-add=fps=%d', self.config.animated_snapshot_fps), - string.format('--vf-add=lavfi=[%s]', animated_scale_filter()), - '-o=' .. output_path, - h.unpack(encoder_args) - ) -end - -mpv.make_audio_args = function(source_path, output_path, - start_timestamp, end_timestamp, args_consumer) - local audio_track = h.get_active_track('audio') - local audio_track_id = mp.get_property("aid") - - if audio_track and audio_track.external == true then - source_path = audio_track['external-filename'] - audio_track_id = 'auto' - end - - local function make_mpvargs(...) - local args = mpv.prepend_common_args( - source_path, - '--video=no', - '--aid=' .. audio_track_id, - '--audio-channels=mono', - '--start=' .. toms(start_timestamp), - '--end=' .. toms(end_timestamp), - string.format( - '--volume=%d', - self.config.tie_volumes and mp.get_property('volume') or 100 - ), - ... - ) - for arg in string.gmatch(self.config.mpv_audio_args, "%S+") do - table.insert(args, arg) - end - return args - end - - local function make_encoding_args(loudnorm_args) - local encoder_args - if self.config.audio_format == 'opus' then - encoder_args = { - '--oac=libopus', - '--oacopts-add=application=voip', - '--oacopts-add=apply_phase_inv=0', -- Improves mono audio. - } - if self.config.opus_container == 'm4a' then - table.insert(encoder_args, '--of=mp4') - end - else - -- https://wiki.hydrogenaud.io/index.php?title=LAME#Recommended_encoder_settings: - -- "For very low bitrates, up to 100kbps, ABR is most often the best solution." - encoder_args = { - '--oac=libmp3lame', - '--oacopts-add=compression_level=0', - '--oacopts-add=abr=1', - } - end - - local args = make_mpvargs( - '--oacopts-add=b=' .. self.config.audio_bitrate, - '-o=' .. output_path, - h.unpack(encoder_args) - ) - if loudnorm_args then - table.insert(args, '--af-append=' .. loudnorm_args) - end - args_consumer(args) - end - - if not self.config.loudnorm then - make_encoding_args(nil) - return - end - - local loudnorm_targets = make_loudnorm_targets() - h.subprocess( - make_mpvargs( - '-v', - '--af-append=' .. loudnorm_targets .. ':print_format=json', - '--ao=null', - '--of=null' - ), - parse_loudnorm( - loudnorm_targets, - function(stdout, stderr) - local start, stop, json = string.find(stdout, '%[ffmpeg%] ({.-})') - if json then - json = string.gsub(json, '%[ffmpeg%]', '') - end - return json - end, - make_encoding_args - ) - ) -end - ------------------------------------------------------------- --- main interface - -local create_animated_snapshot = function(start_timestamp, end_timestamp, source_path, output_path, on_finish_fn) - -- Creates the animated snapshot and then calls on_finish_fn - local args = self.encoder.make_animated_snapshot_args(source_path, output_path, start_timestamp, end_timestamp) - h.subprocess(args, on_finish_fn) -end - -local create_static_snapshot = function(timestamp, source_path, output_path, on_finish_fn) - -- Creates a static snapshot, in other words an image, and then calls on_finish_fn - if not self.config.screenshot then - local args = self.encoder.make_static_snapshot_args(source_path, output_path, timestamp) - h.subprocess(args, on_finish_fn) - else - local args = { 'screenshot-to-file', output_path, 'video', } - mp.command_native_async(args, on_finish_fn) - end - -end - -local report_creation_result = function(file_path) - return function(success, result) - -- result is nil on success for screenshot-to-file. - if success and (result == nil or result.status == 0) and h.file_exists(file_path) then - msg.info(string.format("Created file: %s", file_path)) - return true - else - msg.error(string.format("Couldn't create file: %s", file_path)) - return false - end - end -end - -local create_snapshot = function(start_timestamp, end_timestamp, current_timestamp, filename) - if h.is_empty(self.output_dir_path) then - return msg.error("Output directory wasn't provided. Image file will not be created.") - end - - -- Calls the proper function depending on whether or not the snapshot should be animated - if not h.is_empty(self.config.image_field) then - local source_path = mp.get_property("path") - local output_path = utils.join_path(self.output_dir_path, filename) - - local on_finish = report_creation_result(output_path) - if self.config.animated_snapshot_enabled then - create_animated_snapshot(start_timestamp, end_timestamp, source_path, output_path, on_finish) - else - create_static_snapshot(current_timestamp, source_path, output_path, on_finish) - end - else - print("Snapshot will not be created.") - end -end - -local background_play = function(file_path, on_finish) - return h.subprocess( - { mpv.exec, '--audio-display=no', '--force-window=no', '--keep-open=no', '--really-quiet', file_path }, - on_finish - ) -end - -local create_audio = function(start_timestamp, end_timestamp, filename, padding) - if h.is_empty(self.output_dir_path) then - return msg.error("Output directory wasn't provided. Audio file will not be created.") - end - - if not h.is_empty(self.config.audio_field) then - local source_path = mp.get_property("path") - local output_path = utils.join_path(self.output_dir_path, filename) - - if padding > 0 then - start_timestamp, end_timestamp = pad_timings(padding, start_timestamp, end_timestamp) - end - - local function start_encoding(args) - local on_finish = function(success, result) - local conversion_check = report_creation_result(output_path) - if conversion_check(success, result) and self.config.preview_audio then - background_play(output_path, function() - print("Played file: " .. output_path) - end) - end - end - - h.subprocess(args, on_finish) - end - - self.encoder.make_audio_args( - source_path, output_path, start_timestamp, end_timestamp, start_encoding - ) - else - print("Audio will not be created.") - end -end - -local make_snapshot_filename = function(start_time, end_time, timestamp) - -- Generate a filename for the snapshot, taking care of its extension and whether it's animated or static - if self.config.animated_snapshot_enabled then - return filename_factory.make_filename(start_time, end_time, self.config.animated_snapshot_extension) - else - return filename_factory.make_filename(timestamp, self.config.snapshot_extension) - end -end - -local make_audio_filename = function(start_time, end_time) - -- Generates a filename for the audio - return filename_factory.make_filename(start_time, end_time, self.config.audio_extension) -end - -local toggle_animation = function() - -- Toggles on and off animated snapshot generation at runtime. It is called whenever ctrl+g is pressed - self.config.animated_snapshot_enabled = not self.config.animated_snapshot_enabled - h.notify("Animation " .. (self.config.animated_snapshot_enabled and "enabled" or "disabled"), "info", 2) -end - -local init = function(config) - -- Sets the module to its preconfigured status - self.config = config - self.encoder = config.use_ffmpeg and ffmpeg or mpv -end - -local set_output_dir = function(dir_path) - -- Set directory where media files should be saved. - -- This function is called every time a card is created or updated. - self.output_dir_path = dir_path -end - -local create_job = function(type, sub, audio_padding) - local filename, run_async, current_timestamp - if type == 'snapshot' and h.has_video_track() then - current_timestamp = mp.get_property_number("time-pos", 0) - filename = make_snapshot_filename(sub['start'], sub['end'], current_timestamp) - run_async = function() - create_snapshot(sub['start'], sub['end'], current_timestamp, filename) - end - elseif type == 'audioclip' and h.has_audio_track() then - filename = make_audio_filename(sub['start'], sub['end']) - run_async = function() - create_audio(sub['start'], sub['end'], filename, audio_padding) - end - else - run_async = function() - print(type .. " will not be created.") - end - end - return { - filename = filename, - run_async = run_async, - } -end - -return { - init = init, - set_output_dir = set_output_dir, - snapshot = { - create_job = function(sub) - return create_job('snapshot', sub) - end, - toggle_animation = toggle_animation, - }, - audio = { - create_job = function(sub, padding) - return create_job('audioclip', sub, padding) - end, - }, -} diff --git a/config/mpv/scripts/subs2srsa/find_anki_col.sh b/config/mpv/scripts/subs2srsa/find_anki_col.sh deleted file mode 100755 index a98199b..0000000 --- a/config/mpv/scripts/subs2srsa/find_anki_col.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# Find full path to an opened Anki collection. - -readlink -f -- /proc/$(pgrep '^anki$')/fd/* | grep 'collection.anki2$' diff --git a/config/mpv/scripts/subs2srsa/helpers.lua b/config/mpv/scripts/subs2srsa/helpers.lua deleted file mode 100644 index e8f911e..0000000 --- a/config/mpv/scripts/subs2srsa/helpers.lua +++ /dev/null @@ -1,280 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Various helper functions. -]] - -local mp = require('mp') -local msg = require('mp.msg') -local utils = require('mp.utils') -local this = {} - -this.unpack = unpack and unpack or table.unpack - -this.remove_all_spaces = function(str) - return str:gsub('%s*', '') -end - -this.table_get = function(table, key, default) - if table[key] == nil then - return default or 'nil' - else - return table[key] - end -end - -this.max_num = function(table) - local max = table[1] - for _, value in ipairs(table) do - if value > max then - max = value - end - end - return max -end - -this.get_last_n_added_notes = function(note_ids, n) - table.sort(note_ids) - return { this.unpack(note_ids, math.max(#note_ids - n + 1, 1), #note_ids) } -end - -this.contains = function(table, element) - for _, value in pairs(table) do - if value == element then - return true - end - end - return false -end - -this.minutes_ago = function(m) - return (os.time() - 60 * m) * 1000 -end - -this.is_wayland = function() - return os.getenv('WAYLAND_DISPLAY') ~= nil -end - -this.is_win = function() - return mp.get_property('options/vo-mmcss-profile') ~= nil -end - -this.is_mac = function() - return mp.get_property('options/macos-force-dedicated-gpu') ~= nil -end - -local function map(tab, func) - local t = {} - for k, v in pairs(tab) do - t[k] = func(v) - end - return t -end - -local function args_as_str(args) - return table.concat(map(args, function(str) return string.format("'%s'", str) end), " ") -end - -this.subprocess = function(args, completion_fn, override_settings) - -- if `completion_fn` is passed, the command is ran asynchronously, - -- and upon completion, `completion_fn` is called to process the results. - msg.info("Executing: " .. args_as_str(args)) - local command_native = type(completion_fn) == 'function' and mp.command_native_async or mp.command_native - local command_table = { - name = "subprocess", - playback_only = false, - capture_stdout = true, - capture_stderr = true, - args = args - } - if not this.is_empty(override_settings) then - for k,v in pairs(override_settings) do - command_table[k] = v - end - end - return command_native(command_table, completion_fn) -end - -this.subprocess_detached = function(args, completion_fn) - local overwrite_settings = { - detach=true, - capture_stdout = false, - capture_stderr = false, - } - return this.subprocess(args, completion_fn, overwrite_settings) -end - -this.is_empty = function(var) - return var == nil or var == '' or (type(var) == 'table' and next(var) == nil) -end - -this.contains_non_latin_letters = function(str) - return str:match("[^%c%p%s%w—]") -end - -this.capitalize_first_letter = function(string) - return string:gsub("^%l", string.upper) -end - -this.remove_leading_trailing_spaces = function(str) - return str:gsub('^%s*(.-)%s*$', '%1') -end - -this.remove_leading_trailing_dashes = function(str) - return str:gsub('^[%-_]*(.-)[%-_]*$', '%1') -end - -this.remove_text_in_parentheses = function(str) - -- Remove text like (泣き声) or (ドアの開く音) - -- No deletion is performed if there's no text after the parentheses. - -- Note: the modifier `-´ matches zero or more occurrences. - -- However, instead of matching the longest sequence, it matches the shortest one. - return str:gsub('(%b())(.)', '%2'):gsub('((.-))(.)', '%2') -end - -this.remove_newlines = function(str) - return str:gsub('[\n\r]+', ' ') -end - -this.trim = function(str) - str = this.remove_leading_trailing_spaces(str) - str = this.remove_text_in_parentheses(str) - str = this.remove_newlines(str) - return str -end - -this.escape_special_characters = (function() - local entities = { - ['&'] = '&', - ['"'] = '"', - ["'"] = ''', - ['<'] = '<', - ['>'] = '>', - } - return function(s) - return s:gsub('[&"\'<>]', entities) - end -end)() - -this.remove_extension = function(filename) - return filename:gsub('%.%w+$', '') -end - -this.remove_special_characters = function(str) - return str:gsub('[%c%p%s]', ''):gsub(' ', '') -end - -this.remove_text_in_brackets = function(str) - return str:gsub('%b[]', ''):gsub('【.-】', '') -end - -this.remove_filename_text_in_parentheses = function(str) - return str:gsub('%b()', ''):gsub('(.-)', '') -end - -this.remove_common_resolutions = function(str) - -- Also removes empty leftover parentheses and brackets. - return str:gsub("2160p", ""):gsub("1080p", ""):gsub("720p", ""):gsub("576p", ""):gsub("480p", ""):gsub("%(%)", ""):gsub("%[%]", "") -end - -this.human_readable_time = function(seconds) - if type(seconds) ~= 'number' or seconds < 0 then - return 'empty' - end - - local parts = { - h = math.floor(seconds / 3600), - m = math.floor(seconds / 60) % 60, - s = math.floor(seconds % 60), - ms = math.floor((seconds * 1000) % 1000), - } - - local ret = string.format("%02dm%02ds%03dms", parts.m, parts.s, parts.ms) - - if parts.h > 0 then - ret = string.format('%dh%s', parts.h, ret) - end - - return ret -end - -this.get_episode_number = function(filename) - -- Reverses the filename to start the search from the end as the media title might contain similar numbers. - local filename_reversed = filename:reverse() - - local ep_num_patterns = { - "[%s_](%d?%d?%d)[pP]?[eE]", -- Starting with E or EP (case-insensitive). "Example Series S01E01 [94Z295D1]" - "^(%d?%d?%d)[pP]?[eE]", -- Starting with E or EP (case-insensitive) at the end of filename. "Example Series S01E01" - "%)(%d?%d?%d)%(", -- Surrounded by parentheses. "Example Series (12)" - "%](%d?%d?%d)%[", -- Surrounded by brackets. "Example Series [01]" - "%s(%d?%d?%d)%s", -- Surrounded by whitespace. "Example Series 124 [1080p 10-bit]" - "_(%d?%d?%d)_", -- Surrounded by underscores. "Example_Series_04_1080p" - "^(%d?%d?%d)[%s_]", -- Ending to the episode number. "Example Series 124" - "(%d?%d?%d)%-edosipE", -- Prepended by "Episode-". "Example Episode-165" - } - - local s, e, episode_num - for _, pattern in pairs(ep_num_patterns) do - s, e, episode_num = string.find(filename_reversed, pattern) - if not this.is_empty(episode_num) then - return #filename - e, #filename - s, episode_num:reverse() - end - end -end - -this.notify = function(message, level, duration) - level = level or 'info' - duration = duration or 1 - msg[level](message) - mp.osd_message(message, duration) -end - -this.get_active_track = function(track_type) - -- track_type == audio|sub - for _, track in pairs(mp.get_property_native('track-list')) do - if track.type == track_type and track.selected == true then - return track - end - end - return nil -end - -this.has_video_track = function() - return mp.get_property_native('vid') ~= false -end - -this.has_audio_track = function() - return mp.get_property_native('aid') ~= false -end - -this.str_contains = function(s, pattern) - return not this.is_empty(s) and string.find(string.lower(s), string.lower(pattern)) ~= nil -end - -this.filter = function(arr, func) - local filtered = {} - for _, elem in ipairs(arr) do - if func(elem) == true then - table.insert(filtered, elem) - end - end - return filtered -end - -this.file_exists = function(filepath) - if not this.is_empty(filepath) then - local info = utils.file_info(filepath) - if info and info.is_file and info.size > 0 then - return true - end - end - return false -end - -this.get_loaded_tracks = function(track_type) - --- Return all sub tracks, audio tracks, etc. - return this.filter(mp.get_property_native('track-list'), function(track) return track.type == track_type end) -end - -return this diff --git a/config/mpv/scripts/subs2srsa/howto/add_dialog.md b/config/mpv/scripts/subs2srsa/howto/add_dialog.md deleted file mode 100644 index 22093c6..0000000 --- a/config/mpv/scripts/subs2srsa/howto/add_dialog.md +++ /dev/null @@ -1,9 +0,0 @@ -# Open the "Add" dialog - -1) Open a video in `mpv`. -1) Press a to open advanced menu. -1) Optionally, press c and select the desired subtitle lines with the interactive selection. -1) Press g to open the Add dialog in Anki. -1) Add dictionary definitions using software like GoldenDict, Qolibri, etc. - -After the card is created, you can find it by typing `added:1` in the Anki Browser. diff --git a/config/mpv/scripts/subs2srsa/howto/create_card.md b/config/mpv/scripts/subs2srsa/howto/create_card.md deleted file mode 100644 index e92f77d..0000000 --- a/config/mpv/scripts/subs2srsa/howto/create_card.md +++ /dev/null @@ -1,14 +0,0 @@ -# Make a simple sentence card - -To make a card from the currently visible subtitle line, press Ctrl+n. - -To make a card from two or more subtitle lines: - -1) Press a to open advanced menu. -2) Press c to start interactive selection. -3) Seek to the previous/next subtitle with Shift+h and Shift+l. -4) Press n to create a new card. - -After the card is created, you can find it by typing `added:1` in the Anki Browser. -The card doesn't contain dictionary definitions. -You need to add them yourself afterward, using software like GoldenDict, Qolibri, etc. diff --git a/config/mpv/scripts/subs2srsa/howto/create_quick_card.md b/config/mpv/scripts/subs2srsa/howto/create_quick_card.md deleted file mode 100644 index 619794a..0000000 --- a/config/mpv/scripts/subs2srsa/howto/create_quick_card.md +++ /dev/null @@ -1,31 +0,0 @@ -# Quick Card Creation - -The goal of the quick card creation menu is to streamline a specific flow for media with **well-timed subtitles**: - -1) Add a new note to Anki via - [Rikaitan](https://tatsumoto.neocities.org/blog/setting-up-yomichan.html) - or any other tool that works with AnkiConnect. -2) Update the note via mpvacious. - -To update the most recently added card from the currently visible subtitle line, press gg. - -To make a card from two or more subtitle lines: - -1) Press g to open the quick card creation menu. -2) Press any number [2-9]. This number corresponds to the number of lines to create the card from. - -Note: g1 is also valid. -However, gg is an additional bind to further streamline the most common scenario. - -For example, -g2 creates a card using 2 subtitle lines. - -Like the advanced menu, you can also update multiple cards: - -1) Press Alt+g to select the number of cards for quick card creation. -2) Press any number [2-9]. This number corresponds to the number of cards to update. -3) Press any number [1-9] again. This is the number of lines. - -Note: upon completing the note update, the selected number of cards resets back to the default of one. - -For example, (Alt+g)22 would update the last 2 notes using 2 subtitle lines. diff --git a/config/mpv/scripts/subs2srsa/howto/flatpak.md b/config/mpv/scripts/subs2srsa/howto/flatpak.md deleted file mode 100644 index 46a5787..0000000 --- a/config/mpv/scripts/subs2srsa/howto/flatpak.md +++ /dev/null @@ -1,27 +0,0 @@ -# Flatpak notes - -We think it's best to never use Flatpak. -Specifically, try not to use Flatpak to install `mpv` and `anki`. -Install packages from the official repositories of your distro or from the AUR. - -Read the following notes if you still decide to use Flatpak. - -Make these changes in Flatseal: - -* Enable "Filesystem > All system files" - so it could see `wl-copy`. - Unfortunately, there's no option to provide only a specific system file. -* Add `~/.var/app/net.ankiweb.Anki` to "Filesystem > Other Files" - so mpvacious could add encoded snapshots and audio to Anki. -* Add `PATH=/home/USERNAME/.local/bin:/home/USERNAME/bin:/app/bin:/usr/bin:/run/host/usr/bin` to "Environment > Variables". - There's no option to add a path to `PATH` in Flatseal, - so I opened container, - saved it's PATH and added `/run/host/usr/bin` - so mpvacuous could access `wl-copy`. -* Enable "Shared > Network". - It's enabled by default, but anyway. - -The mpv config root is `~/.var/app/io.mpv.Mpv/config/mpv` - -* `~/.var/app/io.mpv.Mpv/config/mpv/scripts` -* `~/.var/app/io.mpv.Mpv/config/mpv/script-opts` diff --git a/config/mpv/scripts/subs2srsa/howto/goldendict.md b/config/mpv/scripts/subs2srsa/howto/goldendict.md deleted file mode 100644 index 7f355c6..0000000 --- a/config/mpv/scripts/subs2srsa/howto/goldendict.md +++ /dev/null @@ -1,45 +0,0 @@ -# Modifying cards added with GoldenDict - -You can add a card first using GoldenDict, -and then append an audio clip and a picture to it. - -**Note:** the only version of GoldenDict that can create Anki cards with configurable fields is -[xiaoyifang's goldendict](https://github.com/xiaoyifang/goldendict-ng). -Read [Setting up GoldenDict](https://tatsumoto-ren.github.io/blog/setting-up-goldendict.html) and -[How to connect with Anki](https://github.com/xiaoyifang/goldendict-ng/blob/staged/website/docs/topic_anki.md) -if you are new to GoldenDict. - -To send subtitles from `mpv` directly to GoldenDict, -append the following line to `subs2srs.conf`: - -``` -autoclip_method=goldendict -``` - -**Note:** If `goldendict` is not in the PATH, -you have to [add it to the PATH](https://wiki.archlinux.org/title/Environment_variables#Per_user). - -1) Press a to open `advanced menu`. -2) Press t to toggle the `autoclip` option. - -Now as subtitles appear on the screen, -they will be immediately sent to GoldenDict instead of the system clipboard. - -1) Open GoldenDict. -2) Play a video in `mpv`. -3) When you find an unknown word, - select the definition text, - right-click and select "send word to anki" to make a card, - or press Ctrl+Shift+N. -4) Go back to mpv and add an image and an audio clip - to the card you've just made by pressing m while the `advanced menu` is open. - Pressing Shift+m will overwrite any existing data in media fields. - -https://github.com/Ajatt-Tools/mpvacious/assets/69171671/0fc02d24-d320-4d2c-b7a9-cb478e9f0067 - -Don't forget to set the right timings and join lines together -if the sentence is split between multiple subs. -To do it, enter interactive selection by pressing c -and seek to the next or previous subtitle. - -To pair Mecab and GoldenDict, install [gd-tools](https://github.com/Ajatt-Tools/gd-tools). diff --git a/config/mpv/scripts/subs2srsa/howto/yomichan.md b/config/mpv/scripts/subs2srsa/howto/yomichan.md deleted file mode 100644 index 9ea16d6..0000000 --- a/config/mpv/scripts/subs2srsa/howto/yomichan.md +++ /dev/null @@ -1,24 +0,0 @@ -# Modifying cards added with Rikaitan - -You can add a card first using -[Rikaitan](https://tatsumoto.neocities.org/blog/setting-up-yomichan.html), -and then append an audio clip and a picture to it. - -1) Press a to open `advanced menu`. -1) Press t to toggle the `autoclip` option. - -Now as subtitles appear on the screen, they will be immediately copied to the clipboard. -You can use it in combination with clipboard monitor. - -1) Open [Rikaitan Search](https://tatsumoto.neocities.org/blog/what-is-yomichan-search) - by pressing Alt+Insert in your web browser. -1) Play a video in `mpv`. -1) When you find an unknown word, click the + button to make a card for it. -4) Go back to mpv and add an image and an audio clip - to the card you've just made by pressing m while the `advanced menu` is open. - Pressing Shift+m will overwrite any existing data in media fields. - -Don't forget to set the right timings and join lines together -if the sentence is split between multiple subs. -To do it, enter interactive selection by pressing c -and seek to the next or previous subtitle. diff --git a/config/mpv/scripts/subs2srsa/main.lua b/config/mpv/scripts/subs2srsa/main.lua deleted file mode 100644 index 6817586..0000000 --- a/config/mpv/scripts/subs2srsa/main.lua +++ /dev/null @@ -1 +0,0 @@ -require('subs2srs') diff --git a/config/mpv/scripts/subs2srsa/menu.lua b/config/mpv/scripts/subs2srsa/menu.lua deleted file mode 100644 index 4d34937..0000000 --- a/config/mpv/scripts/subs2srsa/menu.lua +++ /dev/null @@ -1,77 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Menu for mpvacious -]] - -local mp = require('mp') -local msg = require('mp.msg') -local h = require('helpers') - -local Menu = { - active = false, - keybindings = {}, - overlay = mp.create_osd_overlay and mp.create_osd_overlay('ass-events'), -} - -function Menu:new(o) - o = o or {} - setmetatable(o, self) - self.__index = self - return o -end - -function Menu:with_update(params) - return function() - local status, error = pcall(h.unpack(params)) - if not status then - msg['error'](error) - end - self:update() - end -end - -function Menu:make_osd() - return nil -end - -function Menu:update() - if self.active == false then return end - self.overlay.data = self:make_osd():get_text() - self.overlay:update() -end - -function Menu:open() - if self.overlay == nil then - h.notify("OSD overlay is not supported in " .. mp.get_property("mpv-version"), "error", 5) - return - end - - if self.active == true then - self:close() - return - end - - for _, val in pairs(self.keybindings) do - mp.add_forced_key_binding(val.key, val.key, val.fn) - end - - self.active = true - self:update() -end - -function Menu:close() - if self.active == false then - return - end - - for _, val in pairs(self.keybindings) do - mp.remove_key_binding(val.key) - end - - self.overlay:remove() - self.active = false -end - -return Menu diff --git a/config/mpv/scripts/subs2srsa/osd_styler.lua b/config/mpv/scripts/subs2srsa/osd_styler.lua deleted file mode 100644 index 3a865dc..0000000 --- a/config/mpv/scripts/subs2srsa/osd_styler.lua +++ /dev/null @@ -1,97 +0,0 @@ ---[[ -A helper class for styling OSD messages -http://docs.aegisub.org/3.2/ASS_Tags/ - -Copyright (C) 2021 Ren Tatsumoto - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -]] - -local OSD = {} -OSD.__index = OSD - -function OSD:new() - return setmetatable({ messages = {} }, self) -end - -function OSD:append(s) - table.insert(self.messages, tostring(s)) - return self -end - -function OSD:newline() - return self:append([[\N]]) -end - -function OSD:tab() - return self:append([[\h\h\h\h]]) -end - -function OSD:size(size) - return self:append('{\\fs'):append(size):append('}') -end - -function OSD:font(name) - return self:append('{\\fn'):append(name):append('}') -end - -function OSD:align(number) - return self:append('{\\an'):append(number):append('}') -end - -function OSD:get_text() - return table.concat(self.messages) -end - -function OSD:color(code) - return self:append('{\\1c&H') - :append(code:sub(5, 6)) - :append(code:sub(3, 4)) - :append(code:sub(1, 2)) - :append('&}') -end - -function OSD:text(text) - return self:append(text) -end - -function OSD:new_layer() - return self:append('\n') -end - -function OSD:bold(s) - return self:append('{\\b1}'):append(s):append('{\\b0}') -end - -function OSD:italics(s) - return self:append('{\\i1}'):append(s):append('{\\i0}') -end - -function OSD:submenu(text) - return self:color('ffe1d0'):bold(text):color('ffffff') -end - -function OSD:item(text) - return self:color('fef6dd'):bold(text):color('ffffff') -end - -function OSD:selected(text) - return self:color('48a868'):bold(text):color('ffffff') -end - -function OSD:red(text) - return self:color('ff0000'):bold(text):color('ffffff') -end - -return OSD diff --git a/config/mpv/scripts/subs2srsa/platform/init.lua b/config/mpv/scripts/subs2srsa/platform/init.lua deleted file mode 100644 index 825d8d4..0000000 --- a/config/mpv/scripts/subs2srsa/platform/init.lua +++ /dev/null @@ -1,14 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Platform-specific functions. -]] - -local h = require('helpers') - -if h.is_win() then - return require('platform.win') -else - return require('platform.nix') -end diff --git a/config/mpv/scripts/subs2srsa/platform/nix.lua b/config/mpv/scripts/subs2srsa/platform/nix.lua deleted file mode 100644 index cbf6c85..0000000 --- a/config/mpv/scripts/subs2srsa/platform/nix.lua +++ /dev/null @@ -1,49 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Platform-specific functions for *nix systems. -]] - -local h = require('helpers') -local self = { healthy = true, clip_util = "", clip_cmd = "", } - -if h.is_mac() then - self.clip_util = "pbcopy" - self.clip_cmd = "LANG=en_US.UTF-8 " .. self.clip_util -elseif h.is_wayland() then - local function is_wl_copy_installed() - local handle = h.subprocess { 'wl-copy', '--version' } - return handle.status == 0 and handle.stdout:match("wl%-clipboard") ~= nil - end - - self.clip_util = "wl-copy" - self.clip_cmd = self.clip_util - self.healthy = is_wl_copy_installed() -else - local function is_xclip_installed() - local handle = h.subprocess { 'xclip', '-version' } - return handle.status == 0 and handle.stderr:match("xclip version") ~= nil - end - - self.clip_util = "xclip" - self.clip_cmd = self.clip_util .. " -i -selection clipboard" - self.healthy = is_xclip_installed() -end - -self.tmp_dir = function() - return os.getenv("TMPDIR") or '/tmp' -end - -self.copy_to_clipboard = function(text) - local handle = io.popen(self.clip_cmd, 'w') - handle:write(text) - handle:close() -end - -self.curl_request = function(url, request_json, completion_fn) - local args = { 'curl', '-s', url, '-X', 'POST', '-d', request_json } - return h.subprocess(args, completion_fn) -end - -return self diff --git a/config/mpv/scripts/subs2srsa/platform/win.lua b/config/mpv/scripts/subs2srsa/platform/win.lua deleted file mode 100644 index e40dd7a..0000000 --- a/config/mpv/scripts/subs2srsa/platform/win.lua +++ /dev/null @@ -1,72 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Platform-specific functions for Windows. -]] - -local mp = require('mp') -local h = require('helpers') -local utils = require('mp.utils') -local base64 = require('utils.base64') -local self = { windows = true, healthy = true, clip_util = "cmd", } -local tmp_files = {} - -mp.register_event('shutdown', function() - for _, file in ipairs(tmp_files) do - os.remove(file) - end -end) - -self.tmp_dir = function() - return os.getenv('TEMP') -end - -self.copy_to_clipboard = function(text) - local args = { - "powershell", "-NoLogo", "-NoProfile", "-WindowStyle", "Hidden", "-Command", - string.format( - "Set-Clipboard ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('%s')))", - base64.enc(text) - ) - } - return h.subprocess_detached( - args, - function() - end - ) -end - -self.gen_random_tmp_file_path = function() - return utils.join_path(self.tmp_dir(), string.format('curl_tmp_%d.txt', math.random(10 ^ 9))) -end - -self.gen_unique_tmp_file_path = function() - local curl_tmpfile_path = self.gen_random_tmp_file_path() - while h.file_exists(curl_tmpfile_path) do - curl_tmpfile_path = self.gen_random_tmp_file_path() - end - return curl_tmpfile_path -end - -self.curl_request = function(url, request_json, completion_fn) - local curl_tmpfile_path = self.gen_unique_tmp_file_path() - local handle = io.open(curl_tmpfile_path, "w") - handle:write(request_json) - handle:close() - table.insert(tmp_files, curl_tmpfile_path) - local args = { - 'curl', - '-s', - url, - '-H', - 'Content-Type: application/json; charset=UTF-8', - '-X', - 'POST', - '--data-binary', - table.concat { '@', curl_tmpfile_path } - } - return h.subprocess(args, completion_fn) -end - -return self diff --git a/config/mpv/scripts/subs2srsa/subs2srs.lua b/config/mpv/scripts/subs2srsa/subs2srs.lua deleted file mode 100644 index 34c79a9..0000000 --- a/config/mpv/scripts/subs2srsa/subs2srs.lua +++ /dev/null @@ -1,746 +0,0 @@ ---[[ -Copyright (C) 2020-2022 Ren Tatsumoto and contributors - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Requirements: -* mpv >= 0.32.0 -* AnkiConnect -* curl -* xclip (when running X11) -* wl-copy (when running Wayland) - -Usage: -1. Change `config` according to your needs -* Config path: ~/.config/mpv/script-opts/subs2srs.conf -* Config file isn't created automatically. - -2. Open a video - -3. Use key bindings to manipulate the script -* Open mpvacious menu - `a` -* Create a note from the current subtitle line - `Ctrl + n` - -For complete usage guide, see -]] - -local mp = require('mp') -local OSD = require('osd_styler') -local cfg_mgr = require('cfg_mgr') -local encoder = require('encoder.encoder') -local h = require('helpers') -local Menu = require('menu') -local ankiconnect = require('ankiconnect') -local switch = require('utils.switch') -local play_control = require('utils.play_control') -local secondary_sid = require('subtitles.secondary_sid') -local platform = require('platform.init') -local forvo = require('utils.forvo') -local subs_observer = require('subtitles.observer') -local codec_support = require('encoder.codec_support') - -local menu, quick_menu, quick_menu_card -local quick_creation_opts = { - _n_lines = nil, - _n_cards = 1, - set_cards = function(self, n) - self._n_cards = math.max(0, n) - end, - set_lines = function(self, n) - self._n_lines = math.max(0, n) - end, - get_cards = function(self) - return self._n_cards - end, - get_lines = function(self) - return self._n_lines - end, - increment_cards = function(self) - self:set_cards(self._n_cards + 1) - end, - decrement_cards = function(self) - self:set_cards(self._n_cards - 1) - end, - clear_options = function(self) - self._n_lines = nil - self._n_cards = 1 - end -} ------------------------------------------------------------- --- default config - -local config = { - -- The user should not modify anything below. - - -- Common - nuke_spaces = false, -- remove all spaces from the primary subtitles on exported anki cards and when copying text to clipboard. - clipboard_trim_enabled = true, -- remove unnecessary characters from strings before copying to the clipboard - use_ffmpeg = false, -- if set to true, use ffmpeg to create audio clips and snapshots. by default use mpv. - reload_config_before_card_creation = true, -- for convenience, read config file from disk before a card is made. - - -- Clipboard and external communication - autoclip = false, -- enable copying subs to the clipboard when mpv starts - autoclip_method = "clipboard", -- one of the methods - autoclip_custom_args = "", -- command to run when autoclip is triggered and autoclip_method and set to "custom_command". - - -- Secondary subtitle - secondary_sub_auto_load = true, -- Automatically load secondary subtitle track when a video file is opened. - secondary_sub_lang = 'eng,en,rus,ru,jp,jpn,ja', -- Language of secondary subs that should be automatically loaded. - secondary_sub_area = 0.15, -- Hover area. Fraction of the window from the top. - secondary_sub_visibility = 'auto', -- One of: 'auto', 'never', 'always'. Controls secondary_sid visibility. Ctrl+V to cycle. - - -- Snapshots - snapshot_format = "avif", -- avif, webp or jpg - snapshot_quality = 15, -- from 0=lowest to 100=highest - snapshot_width = cfg_mgr.preserve_aspect_ratio, -- a positive integer or -2 for auto - snapshot_height = cfg_mgr.default_height_px, -- same - screenshot = false, -- create a screenshot instead of a snapshot; see example config. - - -- Animations - animated_snapshot_enabled = false, -- if enabled captures the selected segment of the video, instead of just a frame - animated_snapshot_format = "avif", -- avif or webp - animated_snapshot_fps = 10, -- positive integer between 0 and 30 (30 included) - animated_snapshot_width = cfg_mgr.preserve_aspect_ratio, -- positive integer or -2 to scale it maintaining ratio (height must not be -2 in that case) - animated_snapshot_height = cfg_mgr.default_height_px, -- positive integer or -2 to scale it maintaining ratio (width must not be -2 in that case) - animated_snapshot_quality = 5, -- positive integer between 0 and 100 (100 included) - - -- Audio clips - audio_format = "opus", -- opus or mp3 - opus_container = "ogg", -- ogg, opus, m4a, webm or caf - audio_bitrate = "18k", -- from 16k to 32k - audio_padding = 0.12, -- Set a pad to the dialog timings. 0.5 = audio is padded by .5 seconds. 0 = disable. - tie_volumes = false, -- if set to true, the volume of the outputted audio file depends on the volume of the player at the time of export - preview_audio = false, -- play created audio clips in background. - - -- Menu - menu_font_name = "Noto Sans CJK JP", - menu_font_size = 25, - show_selected_text = true, - - -- Make sure to remove loudnorm from ffmpeg_audio_args and mpv_audio_args before enabling. - loudnorm = false, - loudnorm_target = -16, - loudnorm_range = 11, - loudnorm_peak = -1.5, - - -- Custom encoding args - -- Defaults are for backward compatibility, in case someone - -- updates mpvacious without updating their config. - -- Better to remove loudnorm from custom args and enable two-pass loudnorm. - -- Enabling loudnorm both through the separate switch and through custom args - -- can lead to unpredictable results. - ffmpeg_audio_args = '-af loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true', - mpv_audio_args = '--af-append=loudnorm=I=-16:TP=-1.5:LRA=11:dual_mono=true', - - -- Anki - create_deck = false, -- automatically create a deck for new cards - allow_duplicates = false, -- allow making notes with the same sentence field - deck_name = "Learning", -- name of the deck for new cards - model_name = "Japanese sentences", -- Tools -> Manage note types - sentence_field = "SentKanji", - secondary_field = "SentEng", - audio_field = "SentAudio", - audio_template = '[sound:%s]', - image_field = "Image", - image_template = 'snapshot', - append_media = true, -- True to append video media after existing data, false to insert media before - disable_gui_browse = false, -- Lets you disable anki browser manipulation by mpvacious. - ankiconnect_url = '127.0.0.1:8765', - - -- Note tagging - -- The tag(s) added to new notes. Spaces separate multiple tags. - -- Change to "" to disable tagging completely. - -- The following substitutions are supported: - -- %n - the name of the video - -- %t - timestamp - -- %d - episode number (if none found, returns nothing) - -- %e - SUBS2SRS_TAGS environment variable - note_tag = "subs2srs %n", - tag_nuke_brackets = true, -- delete all text inside brackets before substituting filename into tag - tag_nuke_parentheses = false, -- delete all text inside parentheses before substituting filename into tag - tag_del_episode_num = true, -- delete the episode number if found - tag_del_after_episode_num = true, -- delete everything after the found episode number (does nothing if tag_del_episode_num is disabled) - tag_filename_lowercase = false, -- convert filename to lowercase for tagging. - - -- Misc info - miscinfo_enable = true, - miscinfo_field = "Notes", -- misc notes and source information field - miscinfo_format = "%n EP%d (%t)", -- format string to use for the miscinfo_field, accepts note_tag-style format strings - - -- Forvo support - use_forvo = "yes", -- 'yes', 'no', 'always' - vocab_field = "VocabKanji", -- target word field - vocab_audio_field = "VocabAudio", -- target word audio -} - --- Defines config profiles --- Each name references a file in ~/.config/mpv/script-opts/*.conf --- Profiles themselves are defined in ~/.config/mpv/script-opts/subs2srs_profiles.conf -local profiles = { - profiles = "subs2srs,subs2srs_english", - active = "subs2srs", -} - ------------------------------------------------------------- --- utility functions -local function _(params) - return function() - return pcall(h.unpack(params)) - end -end - -local function escape_for_osd(str) - str = h.trim(str) - str = str:gsub('[%[%]{}]', '') - return str -end - -local function ensure_deck() - if config.create_deck == true then - ankiconnect.create_deck(config.deck_name) - end -end - -local function load_next_profile() - cfg_mgr.next_profile() - ensure_deck() - h.notify("Loaded profile " .. profiles.active) -end - -local function tag_format(filename) - filename = h.remove_extension(filename) - filename = h.remove_common_resolutions(filename) - - local s, e, episode_num = h.get_episode_number(filename) - - if config.tag_del_episode_num == true and not h.is_empty(s) then - if config.tag_del_after_episode_num == true then - -- Removing everything (e.g. episode name) after the episode number including itself. - filename = filename:sub(1, s) - else - -- Removing the first found instance of the episode number. - filename = filename:sub(1, s) .. filename:sub(e + 1, -1) - end - end - - if config.tag_nuke_brackets == true then - filename = h.remove_text_in_brackets(filename) - end - if config.tag_nuke_parentheses == true then - filename = h.remove_filename_text_in_parentheses(filename) - end - - if config.tag_filename_lowercase == true then - filename = filename:lower() - end - - filename = h.remove_leading_trailing_spaces(filename) - filename = filename:gsub(" ", "_") - filename = filename:gsub("_%-_", "_") -- Replaces garbage _-_ substrings with a underscore - filename = h.remove_leading_trailing_dashes(filename) - return filename, episode_num or '' -end - -local substitute_fmt = (function() - local function substitute_filename(tag, filename) - return tag:gsub("%%n", filename) - end - - local function substitute_episode_number(tag, episode) - return tag:gsub("%%d", episode) - end - - local function substitute_time_pos(tag) - local time_pos = h.human_readable_time(mp.get_property_number('time-pos')) - return tag:gsub("%%t", time_pos) - end - - local function substitute_envvar(tag) - local env_tags = os.getenv('SUBS2SRS_TAGS') or '' - return tag:gsub("%%e", env_tags) - end - - return function(tag) - if not h.is_empty(tag) then - local filename, episode = tag_format(mp.get_property("filename")) - tag = substitute_filename(tag, filename) - tag = substitute_episode_number(tag, episode) - tag = substitute_time_pos(tag) - tag = substitute_envvar(tag) - tag = h.remove_leading_trailing_spaces(tag) - end - return tag - end -end)() - -local function prepare_for_exporting(sub_text) - if not h.is_empty(sub_text) then - sub_text = h.trim(sub_text) - sub_text = h.escape_special_characters(sub_text) - end - return sub_text -end - -local function construct_note_fields(sub_text, secondary_text, snapshot_filename, audio_filename) - local ret = { - [config.sentence_field] = subs_observer.maybe_remove_all_spaces(prepare_for_exporting(sub_text)), - } - if not h.is_empty(config.secondary_field) then - ret[config.secondary_field] = prepare_for_exporting(secondary_text) - end - if not h.is_empty(config.image_field) and not h.is_empty(snapshot_filename) then - ret[config.image_field] = string.format(config.image_template, snapshot_filename) - end - if not h.is_empty(config.audio_field) and not h.is_empty(audio_filename) then - ret[config.audio_field] = string.format(config.audio_template, audio_filename) - end - if config.miscinfo_enable == true then - ret[config.miscinfo_field] = substitute_fmt(config.miscinfo_format) - end - return ret -end - -local function join_media_fields(new_data, stored_data) - for _, field in pairs { config.audio_field, config.image_field, config.miscinfo_field } do - if not h.is_empty(field) then - new_data[field] = h.table_get(stored_data, field, "") .. h.table_get(new_data, field, "") - end - end - return new_data -end - -local function update_sentence(new_data, stored_data) - -- adds support for TSCs - -- https://tatsumoto-ren.github.io/blog/discussing-various-card-templates.html#targeted-sentence-cards-or-mpvacious-cards - -- if the target word was marked by yomichan, this function makes sure that the highlighting doesn't get erased. - - if h.is_empty(stored_data[config.sentence_field]) then - -- sentence field is empty. can't continue. - return new_data - elseif h.is_empty(new_data[config.sentence_field]) then - -- *new* sentence field is empty, but old one contains data. don't delete the existing sentence. - new_data[config.sentence_field] = stored_data[config.sentence_field] - return new_data - end - - local _, opentag, target, closetag, _ = stored_data[config.sentence_field]:match('^(.-)(<[^>]+>)(.-)(]+>)(.-)$') - if target then - local prefix, _, suffix = new_data[config.sentence_field]:match(table.concat { '^(.-)(', target, ')(.-)$' }) - if prefix and suffix then - new_data[config.sentence_field] = table.concat { prefix, opentag, target, closetag, suffix } - end - end - return new_data -end - -local function audio_padding() - local video_duration = mp.get_property_number('duration') - if config.audio_padding == 0.0 or not video_duration then - return 0.0 - end - if subs_observer.user_altered() then - return 0.0 - end - return config.audio_padding -end - ------------------------------------------------------------- --- front for adding and updating notes - -local function maybe_reload_config() - if config.reload_config_before_card_creation then - cfg_mgr.reload_from_disk() - end -end - -local function get_anki_media_dir_path() - return ankiconnect.get_media_dir_path() -end - -local function export_to_anki(gui) - maybe_reload_config() - local sub = subs_observer.collect_from_current() - - if not sub:is_valid() then - return h.notify("Nothing to export.", "warn", 1) - end - - if not gui and h.is_empty(sub['text']) then - sub['text'] = string.format("mpvacious wasn't able to grab subtitles (%s)", os.time()) - end - - encoder.set_output_dir(get_anki_media_dir_path()) - local snapshot = encoder.snapshot.create_job(sub) - local audio = encoder.audio.create_job(sub, audio_padding()) - - snapshot.run_async() - audio.run_async() - - local first_field = ankiconnect.get_first_field(config.model_name) - local note_fields = construct_note_fields(sub['text'], sub['secondary'], snapshot.filename, audio.filename) - - if not h.is_empty(first_field) and h.is_empty(note_fields[first_field]) then - note_fields[first_field] = "[empty]" - end - - ankiconnect.add_note(note_fields, substitute_fmt(config.note_tag), gui) - subs_observer.clear() -end - -local function update_last_note(overwrite) - maybe_reload_config() - local sub - local n_lines = quick_creation_opts:get_lines() - local n_cards = quick_creation_opts:get_cards() - if n_lines then - sub = subs_observer.collect_from_all_dialogues(n_lines) - else - sub = subs_observer.collect_from_current() - end - -- this now returns a table - local last_note_ids = ankiconnect.get_last_note_ids(n_cards) - n_cards = #last_note_ids - - if not sub:is_valid() then - return h.notify("Nothing to export. Have you set the timings?", "warn", 2) - end - - if h.is_empty(sub['text']) then - -- In this case, don't modify whatever existing text there is and just - -- modify the other fields we can. The user might be trying to add - -- audio to a card which they've manually transcribed (either the video - -- has no subtitles or it has image subtitles). - sub['text'] = nil - end - - --first element is the earliest - - if h.is_empty(last_note_ids) or last_note_ids[1] < h.minutes_ago(10) then - return h.notify("Couldn't find the target note.", "warn", 2) - end - - local anki_media_dir = get_anki_media_dir_path() - encoder.set_output_dir(anki_media_dir) - local snapshot = encoder.snapshot.create_job(sub) - local audio = encoder.audio.create_job(sub, audio_padding()) - - local create_media = function() - snapshot.run_async() - audio.run_async() - end - for i = 1, n_cards do - local new_data = construct_note_fields(sub['text'], sub['secondary'], snapshot.filename, audio.filename) - local stored_data = ankiconnect.get_note_fields(last_note_ids[i]) - if stored_data then - forvo.set_output_dir(anki_media_dir) - new_data = forvo.append(new_data, stored_data) - new_data = update_sentence(new_data, stored_data) - if not overwrite then - if config.append_media then - new_data = join_media_fields(new_data, stored_data) - else - new_data = join_media_fields(stored_data, new_data) - end - end - end - - -- If the text is still empty, put some dummy text to let the user know why - -- there's no text in the sentence field. - if h.is_empty(new_data[config.sentence_field]) then - new_data[config.sentence_field] = string.format("mpvacious wasn't able to grab subtitles (%s)", os.time()) - end - - ankiconnect.append_media(last_note_ids[i], new_data, create_media, substitute_fmt(config.note_tag)) - end - subs_observer.clear() - quick_creation_opts:clear_options() -end - ------------------------------------------------------------- --- main menu - -menu = Menu:new { - hints_state = switch.new { 'basic', 'menu', 'global', 'hidden', }, -} - -menu.keybindings = { - { key = 'S', fn = menu:with_update { subs_observer.set_manual_timing_to_sub, 'start' } }, - { key = 'E', fn = menu:with_update { subs_observer.set_manual_timing_to_sub, 'end' } }, - { key = 's', fn = menu:with_update { subs_observer.set_manual_timing, 'start' } }, - { key = 'e', fn = menu:with_update { subs_observer.set_manual_timing, 'end' } }, - { key = 'c', fn = menu:with_update { subs_observer.set_to_current_sub } }, - { key = 'r', fn = menu:with_update { subs_observer.clear_and_notify } }, - { key = 'g', fn = menu:with_update { export_to_anki, true } }, - { key = 'n', fn = menu:with_update { export_to_anki, false } }, - { key = 'm', fn = menu:with_update { update_last_note, false } }, - { key = 'M', fn = menu:with_update { update_last_note, true } }, - { key = 'f', fn = menu:with_update { function() - quick_creation_opts:increment_cards() - end } }, - { key = 'F', fn = menu:with_update { function() - quick_creation_opts:decrement_cards() - end } }, - { key = 't', fn = menu:with_update { subs_observer.toggle_autocopy } }, - { key = 'T', fn = menu:with_update { subs_observer.next_autoclip_method } }, - { key = 'i', fn = menu:with_update { menu.hints_state.bump } }, - { key = 'p', fn = menu:with_update { load_next_profile } }, - { key = 'ESC', fn = function() - menu:close() - end }, - { key = 'q', fn = function() - menu:close() - end }, -} - -function menu:print_header(osd) - if self.hints_state.get() == 'hidden' then - return - end - osd:submenu('mpvacious options'):newline() - osd:item('Timings: '):text(h.human_readable_time(subs_observer.get_timing('start'))) - osd:item(' to '):text(h.human_readable_time(subs_observer.get_timing('end'))):newline() - osd:item('Clipboard autocopy: '):text(subs_observer.autocopy_status_str()):newline() - osd:item('Active profile: '):text(profiles.active):newline() - osd:item('Deck: '):text(config.deck_name):newline() - osd:item('# cards: '):text(quick_creation_opts:get_cards()):newline() -end - -function menu:print_bindings(osd) - if self.hints_state.get() == 'global' then - osd:submenu('Global bindings'):newline() - osd:tab():item('ctrl+c: '):text('Copy current subtitle to clipboard'):newline() - osd:tab():item('ctrl+h: '):text('Seek to the start of the line'):newline() - osd:tab():item('ctrl+g: '):text('Toggle animated snapshots'):newline() - osd:tab():item('ctrl+shift+h: '):text('Replay current subtitle'):newline() - osd:tab():item('shift+h/l: '):text('Seek to the previous/next subtitle'):newline() - osd:tab():item('alt+h/l: '):text('Seek to the previous/next subtitle and pause'):newline() - osd:italics("Press "):item('i'):italics(" to hide mpvacious options."):newline() - elseif self.hints_state.get() == 'menu' then - osd:submenu('Menu bindings'):newline() - osd:tab():item('c: '):text('Set timings to the current sub'):newline() - osd:tab():item('s: '):text('Set start time to current position'):newline() - osd:tab():item('e: '):text('Set end time to current position'):newline() - osd:tab():item('shift+s: '):text('Set start time to current subtitle'):newline() - osd:tab():item('shift+e: '):text('Set end time to current subtitle'):newline() - osd:tab():item('f: '):text('Increment # cards to update '):italics('(+shift to decrement)'):newline() - osd:tab():item('r: '):text('Reset timings'):newline() - osd:tab():item('n: '):text('Export note'):newline() - osd:tab():item('g: '):text('GUI export'):newline() - osd:tab():item('m: '):text('Update the last added note '):italics('(+shift to overwrite)'):newline() - osd:tab():item('t: '):text('Toggle clipboard autocopy'):newline() - osd:tab():item('T: '):text('Switch to the next clipboard method'):newline() - osd:tab():item('p: '):text('Switch to next profile'):newline() - osd:tab():item('ESC: '):text('Close'):newline() - osd:italics("Press "):item('i'):italics(" to show global bindings."):newline() - elseif self.hints_state.get() == 'hidden' then - -- Menu bindings are active but hidden - else - osd:italics("Press "):item('i'):italics(" to show menu bindings."):newline() - end -end - -function menu:warn_formats(osd) - if config.use_ffmpeg then - return - end - for type, codecs in pairs(codec_support) do - for codec, supported in pairs(codecs) do - if not supported and config[type .. '_codec'] == codec then - osd:red('warning: '):newline() - osd:tab():text(string.format("your version of mpv does not support %s.", codec)):newline() - osd:tab():text(string.format("mpvacious won't be able to create %s files.", type)):newline() - end - end - end -end - -function menu:warn_clipboard(osd) - if subs_observer.autocopy_current_method() == "clipboard" and platform.healthy == false then - osd:red('warning: '):text(string.format("%s is not installed.", platform.clip_util)):newline() - end -end - -function menu:print_legend(osd) - osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) - self:print_header(osd) - self:print_bindings(osd) - self:warn_formats(osd) - self:warn_clipboard(osd) -end - -function menu:print_selection(osd) - if subs_observer.is_appending() and config.show_selected_text then - osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(6) - osd:submenu("Primary text"):newline() - for _, s in ipairs(subs_observer.recorded_subs()) do - osd:text(escape_for_osd(s['text'])):newline() - end - if not h.is_empty(config.secondary_field) then - -- If the user wants to add secondary subs to Anki, - -- it's okay to print them on the screen. - osd:submenu("Secondary text"):newline() - for _, s in ipairs(subs_observer.recorded_secondary_subs()) do - osd:text(escape_for_osd(s['text'])):newline() - end - end - end -end - -function menu:make_osd() - local osd = OSD:new() - self:print_legend(osd) - self:print_selection(osd) - return osd -end - ------------------------------------------------------------- ---quick_menu line selection -local choose_cards = function(i) - quick_creation_opts:set_cards(i) - quick_menu_card:close() - quick_menu:open() -end -local choose_lines = function(i) - quick_creation_opts:set_lines(i) - update_last_note(true) - quick_menu:close() -end - -quick_menu = Menu:new() -quick_menu.keybindings = {} -for i = 1, 9 do - table.insert(quick_menu.keybindings, { key = tostring(i), fn = function() - choose_lines(i) - end }) -end -table.insert(quick_menu.keybindings, { key = 'g', fn = function() - choose_lines(1) -end }) -table.insert(quick_menu.keybindings, { key = 'ESC', fn = function() - quick_menu:close() -end }) -table.insert(quick_menu.keybindings, { key = 'q', fn = function() - quick_menu:close() -end }) -function quick_menu:print_header(osd) - osd:submenu('quick card creation: line selection'):newline() - osd:item('# lines: '):text('Enter 1-9'):newline() -end -function quick_menu:print_legend(osd) - osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) - self:print_header(osd) - menu:warn_formats(osd) -end -function quick_menu:make_osd() - local osd = OSD:new() - self:print_legend(osd) - return osd -end - --- quick_menu card selection -quick_menu_card = Menu:new() -quick_menu_card.keybindings = {} -for i = 1, 9 do - table.insert(quick_menu_card.keybindings, { key = tostring(i), fn = function() - choose_cards(i) - end }) -end -table.insert(quick_menu_card.keybindings, { key = 'ESC', fn = function() - quick_menu_card:close() -end }) -table.insert(quick_menu_card.keybindings, { key = 'q', fn = function() - quick_menu_card:close() -end }) -function quick_menu_card:print_header(osd) - osd:submenu('quick card creation: card selection'):newline() - osd:item('# cards: '):text('Enter 1-9'):newline() -end -function quick_menu_card:print_legend(osd) - osd:new_layer():size(config.menu_font_size):font(config.menu_font_name):align(4) - self:print_header(osd) - menu:warn_formats(osd) -end -function quick_menu_card:make_osd() - local osd = OSD:new() - self:print_legend(osd) - return osd -end - ------------------------------------------------------------- --- main - -local main = (function() - local main_executed = false - return function() - if main_executed then - subs_observer.clear_all_dialogs() - return - else - main_executed = true - end - - cfg_mgr.init(config, profiles) - ankiconnect.init(config, platform) - forvo.init(config, platform) - encoder.init(config) - secondary_sid.init(config) - ensure_deck() - subs_observer.init(menu, config) - - -- Key bindings - mp.add_forced_key_binding("Ctrl+c", "mpvacious-copy-sub-to-clipboard", subs_observer.copy_current_primary_to_clipboard) - mp.add_key_binding("Ctrl+C", "mpvacious-copy-secondary-sub-to-clipboard", subs_observer.copy_current_secondary_to_clipboard) - mp.add_key_binding("Ctrl+t", "mpvacious-autocopy-toggle", subs_observer.toggle_autocopy) - mp.add_key_binding("Ctrl+g", "mpvacious-animated-snapshot-toggle", encoder.snapshot.toggle_animation) - - -- Secondary subtitles - mp.add_key_binding("Ctrl+v", "mpvacious-secondary-sid-toggle", secondary_sid.change_visibility) - mp.add_key_binding("Ctrl+k", "mpvacious-secondary-sid-prev", secondary_sid.select_previous) - mp.add_key_binding("Ctrl+j", "mpvacious-secondary-sid-next", secondary_sid.select_next) - - -- Open advanced menu - mp.add_key_binding("a", "mpvacious-menu-open", function() - menu:open() - end) - - -- Add note - mp.add_forced_key_binding("Ctrl+n", "mpvacious-export-note", menu:with_update { export_to_anki, false }) - - -- Note updating - mp.add_key_binding("Ctrl+m", "mpvacious-update-last-note", menu:with_update { update_last_note, false }) - mp.add_key_binding("Ctrl+M", "mpvacious-overwrite-last-note", menu:with_update { update_last_note, true }) - - mp.add_key_binding("g", "mpvacious-quick-card-menu-open", function() - quick_menu:open() - end) - mp.add_key_binding("Alt+g", "mpvacious-quick-card-sel-menu-open", function() - quick_menu_card:open() - end) - - -- Vim-like seeking between subtitle lines - mp.add_key_binding("H", "mpvacious-sub-seek-back", _ { play_control.sub_seek, 'backward' }) - mp.add_key_binding("L", "mpvacious-sub-seek-forward", _ { play_control.sub_seek, 'forward' }) - - mp.add_key_binding("Alt+h", "mpvacious-sub-seek-back-pause", _ { play_control.sub_seek, 'backward', true }) - mp.add_key_binding("Alt+l", "mpvacious-sub-seek-forward-pause", _ { play_control.sub_seek, 'forward', true }) - - mp.add_key_binding("Ctrl+h", "mpvacious-sub-rewind", _ { play_control.sub_rewind }) - mp.add_key_binding("Ctrl+H", "mpvacious-sub-replay", _ { play_control.play_till_sub_end }) - mp.add_key_binding("Ctrl+L", "mpvacious-sub-play-up-to-next", _ { play_control.play_till_next_sub_end }) - - mp.msg.warn("Press 'a' to open the mpvacious menu.") - end -end)() - -mp.register_event("file-loaded", main) diff --git a/config/mpv/scripts/subs2srsa/subtitles/observer.lua b/config/mpv/scripts/subs2srsa/subtitles/observer.lua deleted file mode 100644 index d9284c5..0000000 --- a/config/mpv/scripts/subs2srsa/subtitles/observer.lua +++ /dev/null @@ -1,344 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Observer waits for subtitles to appear on the screen and adds them to a list. -]] - -local h = require('helpers') -local timings = require('utils.timings') -local sub_list = require('subtitles.sub_list') -local Subtitle = require('subtitles.subtitle') -local mp = require('mp') -local platform = require('platform.init') -local switch = require('utils.switch') - -local self = {} - -local dialogs = sub_list.new() -local secondary_dialogs = sub_list.new() -local all_dialogs = sub_list.new() -local all_secondary_dialogs = sub_list.new() -local user_timings = timings.new() - -local append_dialogue = false -local autoclip_enabled = false -local autoclip_method = {} - - ------------------------------------------------------------- --- private - -local function copy_primary_sub() - if autoclip_enabled then - autoclip_method.call() - end -end - -local function append_primary_sub() - local current_sub = Subtitle:now() - all_dialogs.insert(current_sub) - if append_dialogue and dialogs.insert(current_sub) then - self.menu:update() - end -end - -local function append_secondary_sub() - local current_secondary = Subtitle:now('secondary') - all_secondary_dialogs.insert(current_secondary) - if append_dialogue and secondary_dialogs.insert(Subtitle:now('secondary')) then - self.menu:update() - end -end - -local function start_appending() - append_dialogue = true - append_primary_sub() - append_secondary_sub() -end - -local function handle_primary_sub() - append_primary_sub() - copy_primary_sub() -end - -local function handle_secondary_sub() - append_secondary_sub() -end - -local function on_external_finish(success, result, error) - if success ~= true or error ~= nil then - h.notify("Command failed: " .. table.concat(result)) - end -end - -local function external_command_args(cur_lines) - local args = {} - for arg in string.gmatch(self.config.autoclip_custom_args, "%S+") do - if arg == '%MPV_PRIMARY%' then - arg = cur_lines.primary - elseif arg == '%MPV_SECONDARY%' then - arg = cur_lines.secondary - end - table.insert(args, arg) - end - return args -end - -local function call_external_command(cur_lines) - if not h.is_empty(self.config.autoclip_custom_args) then - h.subprocess(external_command_args(cur_lines), on_external_finish) - end -end - -local function current_subtitle_lines() - local primary = dialogs.get_text() - - if h.is_empty(primary) then - primary = mp.get_property("sub-text") - end - - if h.is_empty(primary) then - return nil - end - - local secondary = secondary_dialogs.get_text() - - if h.is_empty(secondary) then - secondary = mp.get_property("secondary-sub-text") or "" - end - - return { primary = self.clipboard_prepare(primary), secondary = secondary } -end - -local function ensure_goldendict_running() - --- Ensure that goldendict is running and is disowned by mpv. - --- Avoid goldendict getting killed when mpv exits. - if autoclip_enabled and self.autocopy_current_method() == "goldendict" then - os.execute("setsid -f goldendict") - end -end - ------------------------------------------------------------- --- autoclip methods - -autoclip_method = (function() - local methods = { 'clipboard', 'goldendict', 'custom_command', } - local current_method = switch.new(methods) - - local function call() - local cur_lines = current_subtitle_lines() - if h.is_empty(cur_lines) then - return - end - - if current_method.get() == 'clipboard' then - self.copy_to_clipboard("autocopy action", cur_lines.primary) - elseif current_method.get() == 'goldendict' then - h.subprocess_detached({ 'goldendict', cur_lines.primary }, on_external_finish) - elseif current_method.get() == 'custom_command' then - call_external_command(cur_lines) - end - end - - return { - call = call, - get = current_method.get, - bump = current_method.bump, - set = current_method.set, - } -end)() - -local function copy_subtitle(subtitle_id) - self.copy_to_clipboard("copy-on-demand", mp.get_property(subtitle_id)) -end - ------------------------------------------------------------- --- public - -self.copy_to_clipboard = function(_, text) - if platform.healthy == false then - h.notify(platform.clip_util .. " is not installed.", "error", 5) - end - if not h.is_empty(text) then - platform.copy_to_clipboard(self.clipboard_prepare(text)) - end -end - -self.clipboard_prepare = function(text) - text = self.config.clipboard_trim_enabled and h.trim(text) or h.remove_newlines(text) - text = self.maybe_remove_all_spaces(text) - return text -end - -self.maybe_remove_all_spaces = function(str) - if self.config.nuke_spaces == true and h.contains_non_latin_letters(str) then - return h.remove_all_spaces(str) - else - return str - end -end - -self.copy_current_primary_to_clipboard = function() - copy_subtitle("sub-text") -end - -self.copy_current_secondary_to_clipboard = function() - copy_subtitle("secondary-sub-text") -end - -self.user_altered = function() - --- Return true if the user manually set at least start or end. - return user_timings.is_set('start') or user_timings.is_set('end') -end - -self.get_timing = function(position) - if user_timings.is_set(position) then - return user_timings.get(position) - elseif not dialogs.is_empty() then - return dialogs.get_time(position) - end - return -1 -end - -self.collect_from_all_dialogues = function(n_lines) - local current_sub = Subtitle:now() - local current_secondary_sub = Subtitle:now('secondary') - all_dialogs.insert(current_sub) - all_secondary_dialogs.insert(current_secondary_sub) - if current_sub == nil then - return Subtitle:new() -- return a default empty new Subtitle to let consumer handle - end - local text, end_sub = all_dialogs.get_n_text(current_sub, n_lines) - local secondary_text, _ - if current_secondary_sub == nil then - secondary_text = '' - else - secondary_text, _ = all_secondary_dialogs.get_n_text(current_secondary_sub, n_lines) -- we'll use main sub's timing - end - return Subtitle:new { - ['text'] = text, - ['secondary'] = secondary_text, - ['start'] = current_sub['start'], - ['end'] = end_sub['end'], - } -end - -self.collect_from_current = function() - --- Return all recorded subtitle lines as one subtitle object. - --- The caller has to call subs_observer.clear() afterwards. - if dialogs.is_empty() then - dialogs.insert(Subtitle:now()) - end - if secondary_dialogs.is_empty() then - secondary_dialogs.insert(Subtitle:now('secondary')) - end - return Subtitle:new { - ['text'] = dialogs.get_text(), - ['secondary'] = secondary_dialogs.get_text(), - ['start'] = self.get_timing('start'), - ['end'] = self.get_timing('end'), - } -end - -self.set_manual_timing = function(position) - user_timings.set(position, mp.get_property_number('time-pos') - mp.get_property("audio-delay")) - h.notify(h.capitalize_first_letter(position) .. " time has been set.") - start_appending() -end - -self.set_manual_timing_to_sub = function(position) - local sub = Subtitle:now() - if sub then - user_timings.set(position, sub[position] - mp.get_property("audio-delay")) - h.notify(h.capitalize_first_letter(position) .. " time has been set.") - start_appending() - else - h.notify("There's no visible subtitle.", "info", 2) - end -end - -self.set_to_current_sub = function() - self.clear() - if Subtitle:now() then - start_appending() - h.notify("Timings have been set to the current sub.", "info", 2) - else - h.notify("There's no visible subtitle.", "info", 2) - end -end - -self.clear = function() - append_dialogue = false - dialogs = sub_list.new() - secondary_dialogs = sub_list.new() - user_timings = timings.new() -end - -self.clear_all_dialogs = function() - all_dialogs = sub_list.new() - all_secondary_dialogs = sub_list.new() -end - -self.clear_and_notify = function() - --- Clear then notify the user. - --- Called by the OSD menu when the user presses a button to drop recorded subtitles. - self.clear() - h.notify("Timings have been reset.", "info", 2) -end - -self.is_appending = function() - return append_dialogue -end - -self.recorded_subs = function() - return dialogs.get_subs_list() -end - -self.recorded_secondary_subs = function() - return secondary_dialogs.get_subs_list() -end - -self.autocopy_status_str = function() - return string.format( - "%s (%s)", - (autoclip_enabled and 'enabled' or 'disabled'), - autoclip_method.get():gsub('_', ' ') - ) -end - -self.autocopy_current_method = function() - return autoclip_method.get() -end - -local function notify_autocopy() - if autoclip_enabled then - copy_primary_sub() - end - h.notify(string.format("Clipboard autocopy has been %s.", self.autocopy_status_str())) -end - -self.toggle_autocopy = function() - autoclip_enabled = not autoclip_enabled - notify_autocopy() -end - -self.next_autoclip_method = function() - autoclip_method.bump() - notify_autocopy() -end - -self.init = function(menu, config) - self.menu = menu - self.config = config - - -- The autoclip state is copied as a local value - -- to prevent it from being reset when the user reloads the config file. - autoclip_enabled = self.config.autoclip - autoclip_method.set(self.config.autoclip_method) - - mp.observe_property("sub-text", "string", handle_primary_sub) - mp.observe_property("secondary-sub-text", "string", handle_secondary_sub) -end - -return self diff --git a/config/mpv/scripts/subs2srsa/subtitles/secondary_sid.lua b/config/mpv/scripts/subs2srsa/subtitles/secondary_sid.lua deleted file mode 100644 index 21576e8..0000000 --- a/config/mpv/scripts/subs2srsa/subtitles/secondary_sid.lua +++ /dev/null @@ -1,196 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -This module automatically finds and sets secondary sid if it's not already set. -Secondary sid will be shown when mouse is moved to the top part of the mpv window. -]] - -local mp = require('mp') -local h = require('helpers') - -local self = { - visibility = 'auto', - visibility_states = { auto = true, never = true, always = true, }, -} - -local function is_accepted_language(sub_lang) - -- for missing keys compares nil to true - return self.accepted_languages[sub_lang] == true -end - -local function is_selected_language(track, active_track) - return track.id == mp.get_property_native('sid') or (active_track and active_track.lang == track.lang) -end - -local function is_full(track) - return h.str_contains(track.title, 'full') -end - -local function is_garbage(track) - for _, keyword in pairs({ 'song', 'sign', 'caption', 'commentary' }) do - if h.str_contains(track.title, keyword) then - return true - end - end - return false -end - -local function prioritize_full_subs(tracks_list) - return table.sort(tracks_list, function(first, second) - return (is_full(first) and not is_full(second)) or (is_garbage(second) and not is_garbage(first)) - end) -end - -local function find_best_secondary_sid() - local active_track = h.get_active_track('sub') - local sub_tracks = h.get_loaded_tracks('sub') - prioritize_full_subs(sub_tracks) - for _, track in ipairs(sub_tracks) do - if is_accepted_language(track.lang) and not is_selected_language(track, active_track) then - return track.id - end - end - return nil -end - -local function window_height() - return mp.get_property_native('osd-dimensions/h') -end - -local function get_accepted_sub_langs() - local languages = {} - for lang in self.config.secondary_sub_lang:gmatch('[a-zA-Z-]+') do - languages[lang] = true - end - return languages -end - -local function on_mouse_move(_, state) - -- state = {x=int,y=int, hover=true|false, } - if mp.get_property_native('secondary-sid') and self.visibility == 'auto' and state ~= nil then - mp.set_property_bool( - 'secondary-sub-visibility', - state.hover and (state.y / window_height()) < self.config.secondary_sub_area - ) - end -end - -local function on_file_loaded() - -- If secondary sid is not already set, try to find and set it. - local secondary_sid = mp.get_property_native('secondary-sid') - if secondary_sid == false and self.config.secondary_sub_auto_load == true then - secondary_sid = find_best_secondary_sid() - if secondary_sid ~= nil then - mp.set_property_native('secondary-sid', secondary_sid) - end - end -end - -local function update_visibility() - mp.set_property_bool('secondary-sub-visibility', self.visibility == 'always') -end - -local function init(config) - self.config = config - self.visibility = config.secondary_sub_visibility - self.accepted_languages = get_accepted_sub_langs() - mp.register_event('file-loaded', on_file_loaded) - if config.secondary_sub_area > 0 then - mp.observe_property('mouse-pos', 'native', on_mouse_move) - end - update_visibility() -end - -local function change_visibility() - while true do - self.visibility = next(self.visibility_states, self.visibility) - if self.visibility ~= nil then - break - end - end - update_visibility() - h.notify("Secondary sid visibility: " .. self.visibility) -end - -local function compare_by_preference_then_id(track1, track2) - if is_accepted_language(track1.lang) and not is_accepted_language(track2.lang) then - return true - elseif not is_accepted_language(track1.lang) and is_accepted_language(track2.lang) then - return false - else - return (track1.id < track2.id) - end -end - -local function split_before_after(previous_tracks, next_tracks, all_tracks, current_track_id) - -- works like take_while() and drop_while() combined - local prev = true - for _, track in ipairs(all_tracks) do - if prev == true and track.id == current_track_id then - prev = false - end - if track.id ~= current_track_id then - if prev then - table.insert(previous_tracks, track) - else - table.insert(next_tracks, track) - end - end - end -end - -local function not_primary_sid(track) - return mp.get_property_native('sid') ~= track.id -end - -local function find_new_secondary_sub(direction) - local subtitle_tracks = h.filter(h.get_loaded_tracks('sub'), not_primary_sid) - table.sort(subtitle_tracks, compare_by_preference_then_id) - - local secondary_sid = mp.get_property_native('secondary-sid') - local new_secondary_sub = { id = false, title = "removed" } - - if #subtitle_tracks > 0 then - if not secondary_sid then - new_secondary_sub = (direction == 'prev') and subtitle_tracks[#subtitle_tracks] or subtitle_tracks[1] - else - local previous_tracks = {} - local next_tracks = {} - split_before_after(previous_tracks, next_tracks, subtitle_tracks, secondary_sid) - if direction == 'prev' and #previous_tracks > 0 then - new_secondary_sub = previous_tracks[#previous_tracks] - elseif direction == 'next' and #next_tracks > 0 then - new_secondary_sub = next_tracks[1] - end - end - end - return new_secondary_sub -end - -local function switch_secondary_sid(direction) - local new_secondary_sub = find_new_secondary_sub(direction) - - mp.set_property_native('secondary-sid', new_secondary_sub.id) - if new_secondary_sub.id == false then - h.notify("Removed secondary sid.") - else - h.notify(string.format( - "Secondary #%d: %s (%s)", - new_secondary_sub.id, - new_secondary_sub.title or "No title", - new_secondary_sub.lang or "Unknown" - )) - end -end - -return { - init = init, - change_visibility = change_visibility, - select_previous = function() - switch_secondary_sid('prev') - end, - select_next = function() - switch_secondary_sid('next') - end, -} diff --git a/config/mpv/scripts/subs2srsa/subtitles/sub_list.lua b/config/mpv/scripts/subs2srsa/subtitles/sub_list.lua deleted file mode 100644 index de7e1c2..0000000 --- a/config/mpv/scripts/subs2srsa/subtitles/sub_list.lua +++ /dev/null @@ -1,74 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Subtitle list remembers selected subtitle lines. -]] - -local h = require('helpers') - -local new_sub_list = function() - local subs_list = {} - - local find_i = function(sub) - for i, v in ipairs(subs_list) do - if sub < v then - return i - end - end - return #subs_list + 1 - end - local get_time = function(position) - local i = position == 'start' and 1 or #subs_list - return subs_list[i][position] - end - local get_text = function() - local speech = {} - for _, sub in ipairs(subs_list) do - table.insert(speech, sub['text']) - end - return table.concat(speech, ' ') - end - local get_n_text = function(sub, n_lines) - local speech = {} - local end_sub = sub - for _, v in ipairs(subs_list) do - if v['start'] - end_sub['end'] >= 20 then - break - end - if v >= sub and #speech < n_lines then - table.insert(speech, v['text']) - end_sub = v - end - end - return table.concat(speech, ' '), end_sub - end - local insert = function(sub) - if sub ~= nil and not h.contains(subs_list, sub) then - table.insert(subs_list, find_i(sub), sub) - return true - end - return false - end - local get_subs_list = function() - local copy = {} - for key, value in pairs(subs_list) do - copy[key] = value - end - return copy - end - return { - get_subs_list = get_subs_list, - get_time = get_time, - get_text = get_text, - get_n_text = get_n_text, - insert = insert, - is_empty = function() - return h.is_empty(subs_list) - end, - } -end - -return { - new = new_sub_list, -} diff --git a/config/mpv/scripts/subs2srsa/subtitles/subtitle.lua b/config/mpv/scripts/subs2srsa/subtitles/subtitle.lua deleted file mode 100644 index 4e8df41..0000000 --- a/config/mpv/scripts/subs2srsa/subtitles/subtitle.lua +++ /dev/null @@ -1,56 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Subtitle class provides methods for storing and comparing subtitle lines. -]] - -local mp = require('mp') - -local Subtitle = { - ['text'] = '', - ['secondary'] = '', - ['start'] = -1, - ['end'] = -1, -} - -function Subtitle:new(o) - o = o or {} - setmetatable(o, self) - self.__index = self - return o -end - -function Subtitle:now(secondary) - local prefix = secondary and "secondary-" or "" - local this = self:new { - ['text'] = mp.get_property(prefix .. "sub-text"), - ['start'] = mp.get_property_number(prefix .. "sub-start"), - ['end'] = mp.get_property_number(prefix .. "sub-end"), - } - if this:is_valid() then - return this:delay(mp.get_property_native("sub-delay") - mp.get_property_native("audio-delay")) - else - return nil - end -end - -function Subtitle:delay(delay) - self['start'] = self['start'] + delay - self['end'] = self['end'] + delay - return self -end - -function Subtitle:is_valid() - return self['start'] and self['end'] and self['start'] >= 0 and self['end'] > self['start'] -end - -Subtitle.__eq = function(lhs, rhs) - return lhs['text'] == rhs['text'] -end - -Subtitle.__lt = function(lhs, rhs) - return lhs['start'] < rhs['start'] -end - -return Subtitle diff --git a/config/mpv/scripts/subs2srsa/test.lua b/config/mpv/scripts/subs2srsa/test.lua deleted file mode 100644 index d1291d2..0000000 --- a/config/mpv/scripts/subs2srsa/test.lua +++ /dev/null @@ -1,32 +0,0 @@ -local helpers = require('helpers') - -local function assert_equals(expected, actual) - if expected ~= actual then - error(string.format("TEST FAILED: Expected '%s', got '%s'", expected, actual)) - end -end - -local function test_get_episode_number() - local test_cases = { - { nil, "A Whisker Away.mkv" }, - { nil, "[Placeholder] Gekijouban SHIROBAKO [Ma10p_1080p][x265_flac]" }, - { "06", "[Placeholder] Sono Bisque Doll wa Koi wo Suru - 06 [54E495D0]" }, - { "02", "(Hi10)_Kobayashi-san_Chi_no_Maid_Dragon_-_02_(BD_1080p)_(Placeholder)_(12C5D2B4)" }, - { "01", "[Placeholder] Koi to Yobu ni wa Kimochi Warui - 01 (1080p) [D517C9F0]" }, - { "01", "[Placeholder] Tsukimonogatari 01 [BD 1080p x264 10-bit FLAC] [5CD88145]" }, - { "01", "[Placeholder] 86 - Eighty Six - 01 (1080p) [1B13598F]" }, - { "00", "[Placeholder] Fate Stay Night - Unlimited Blade Works - 00 (BD 1080p Hi10 FLAC) [95590B7F]" }, - { "01", "House, M.D. S01E01 Pilot - Everybody Lies (1080p x265 Placeholder)" }, - { "165", "A Generic Episode-165" } - } - - for _, case in pairs(test_cases) do - local _, _, episode_num = helpers.get_episode_number(case[2]) - assert_equals(case[1], episode_num) - end -end - --- Runs tests -test_get_episode_number() - -os.exit(print("Tests passed")) diff --git a/config/mpv/scripts/subs2srsa/utils/base64.lua b/config/mpv/scripts/subs2srsa/utils/base64.lua deleted file mode 100644 index 0fe2d06..0000000 --- a/config/mpv/scripts/subs2srsa/utils/base64.lua +++ /dev/null @@ -1,46 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Encoding and decoding in base64 -]] - --- http://lua-users.org/wiki/BaseSixtyFour - --- character table string -local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - --- encoding -local function enc(data) - return ((data:gsub('.', function(x) - local r,b='',x:byte() - for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end - return r; - end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) - if (#x < 6) then return '' end - local c=0 - for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end - return b:sub(c+1,c+1) - end)..({ '', '==', '=' })[#data%3+1]) -end - --- decoding -local function dec(data) - data = string.gsub(data, '[^'..b..'=]', '') - return (data:gsub('.', function(x) - if (x == '=') then return '' end - local r,f='',(b:find(x)-1) - for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end - return r; - end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) - if (#x ~= 8) then return '' end - local c=0 - for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end - return string.char(c) - end)) -end - -return { - enc = enc, - dec = dec, -} diff --git a/config/mpv/scripts/subs2srsa/utils/filename_factory.lua b/config/mpv/scripts/subs2srsa/utils/filename_factory.lua deleted file mode 100644 index a794fc7..0000000 --- a/config/mpv/scripts/subs2srsa/utils/filename_factory.lua +++ /dev/null @@ -1,89 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Creates image and audio filenames compatible with Anki. -]] - -local mp = require('mp') -local h = require('helpers') - -local filename - -local anki_compatible_length = (function() - -- Anki forcibly mutilates all filenames longer than 119 bytes when you run `Tools->Check Media...`. - local allowed_bytes = 119 - local timestamp_bytes = #'_99h99m99s999ms-99h99m99s999ms.webp' - - return function(str, timestamp) - -- if timestamp provided, recalculate limit_bytes - local limit_bytes = allowed_bytes - (timestamp and #timestamp or timestamp_bytes) - - if #str <= limit_bytes then - return str - end - - local bytes_per_char = h.contains_non_latin_letters(str) and #'車' or #'z' - local limit_chars = math.floor(limit_bytes / bytes_per_char) - - if limit_chars == limit_bytes then - return str:sub(1, limit_bytes) - end - - local ret = h.subprocess { - 'awk', - '-v', string.format('str=%s', str), - '-v', string.format('limit=%d', limit_chars), - 'BEGIN{print substr(str, 1, limit); exit}' - } - - if ret.status == 0 then - ret.stdout = h.remove_newlines(ret.stdout) - ret.stdout = h.remove_leading_trailing_spaces(ret.stdout) - return ret.stdout - else - return 'subs2srs_' .. os.time() - end - end -end)() - -local make_media_filename = function() - filename = mp.get_property("filename") -- filename without path - filename = h.remove_extension(filename) - filename = h.remove_filename_text_in_parentheses(filename) - filename = h.remove_text_in_brackets(filename) - filename = h.remove_special_characters(filename) -end - -local function timestamp_range(start_timestamp, end_timestamp, extension) - -- Generates a filename suffix of the form: _00h00m00s000ms-99h99m99s999ms.extension - -- Extension must already contain the dot. - return string.format( - '_%s_%s%s', - h.human_readable_time(start_timestamp), - h.human_readable_time(end_timestamp), - extension - ) -end - -local function timestamp_static(timestamp, extension) - -- Generates a filename suffix of the form: _00h00m00s000ms.extension - -- Extension must already contain the dot. - return string.format( - '_%s%s', - h.human_readable_time(timestamp), - extension - ) -end - -local make_filename = function(...) - local args = {...} - local timestamp = #args < 3 and timestamp_static(...) or timestamp_range(...) - return string.lower(anki_compatible_length(filename, timestamp) .. timestamp) -end - -mp.register_event("file-loaded", make_media_filename) - -return { - make_filename = make_filename, -} diff --git a/config/mpv/scripts/subs2srsa/utils/forvo.lua b/config/mpv/scripts/subs2srsa/utils/forvo.lua deleted file mode 100644 index 09bc596..0000000 --- a/config/mpv/scripts/subs2srsa/utils/forvo.lua +++ /dev/null @@ -1,145 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Utils for downloading pronunciations from Forvo -]] - -local utils = require('mp.utils') -local msg = require('mp.msg') -local h = require('helpers') -local base64 = require('utils.base64') -local self = { - output_dir_path = nil, -} - -local function url_encode(url) - -- https://gist.github.com/liukun/f9ce7d6d14fa45fe9b924a3eed5c3d99 - local char_to_hex = function(c) - return string.format("%%%02X", string.byte(c)) - end - if url == nil then - return - end - url = url:gsub("\n", "\r\n") - url = url:gsub("([^%w _%%%-%.~])", char_to_hex) - url = url:gsub(" ", "+") - return url -end - -local function reencode(source_path, dest_path) - local args = { - 'mpv', - source_path, - '--loop-file=no', - '--keep-open=no', - '--video=no', - '--no-ocopy-metadata', - '--no-sub', - '--audio-channels=mono', - '--oacopts-add=vbr=on', - '--oacopts-add=application=voip', - '--oacopts-add=compression_level=10', - '--af-append=silenceremove=1:0:-50dB', - table.concat { '--oac=', self.config.audio_codec }, - table.concat { '--of=', self.config.audio_format }, - table.concat { '--oacopts-add=b=', self.config.audio_bitrate }, - table.concat { '-o=', dest_path } - } - return h.subprocess(args) -end - -local function reencode_and_store(source_path, filename) - local reencoded_path = utils.join_path(self.output_dir_path, filename) - local result = reencode(source_path, reencoded_path) - return result.status == 0 -end - -local function curl_save(source_url, save_location) - local curl_args = { 'curl', source_url, '-s', '-L', '-o', save_location } - return h.subprocess(curl_args).status == 0 -end - -local function get_pronunciation_url(word) - local file_format = self.config.audio_extension:sub(2) - local forvo_page = h.subprocess { 'curl', '-s', string.format('https://forvo.com/search/%s/ja', url_encode(word)) }.stdout - local play_params = string.match(forvo_page, "Play%((.-)%);") - - if play_params then - local iter = string.gmatch(play_params, "'(.-)'") - local formats = { mp3 = iter(), ogg = iter() } - return string.format('https://audio00.forvo.com/%s/%s', file_format, base64.dec(formats[file_format])) - end -end - -local function make_forvo_filename(word) - return string.format('forvo_%s%s', self.platform.windows and os.time() or word, self.config.audio_extension) -end - -local function get_forvo_pronunciation(word) - local audio_url = get_pronunciation_url(word) - - if h.is_empty(audio_url) then - msg.warn(string.format("Seems like Forvo doesn't have audio for word %s.", word)) - return - end - - local filename = make_forvo_filename(word) - local tmp_filepath = utils.join_path(self.platform.tmp_dir(), filename) - - local result - if curl_save(audio_url, tmp_filepath) and reencode_and_store(tmp_filepath, filename) then - result = string.format(self.config.audio_template, filename) - else - msg.warn(string.format("Couldn't download audio for word %s from Forvo.", word)) - end - - os.remove(tmp_filepath) - return result -end - -local append = function(new_data, stored_data) - if self.config.use_forvo == 'no' then - -- forvo functionality was disabled in the config file - return new_data - end - - if type(stored_data[self.config.vocab_audio_field]) ~= 'string' then - -- there is no field configured to store forvo pronunciation - return new_data - end - - if h.is_empty(stored_data[self.config.vocab_field]) then - -- target word field is empty. can't continue. - return new_data - end - - if self.config.use_forvo == 'always' or h.is_empty(stored_data[self.config.vocab_audio_field]) then - local forvo_pronunciation = get_forvo_pronunciation(stored_data[self.config.vocab_field]) - if not h.is_empty(forvo_pronunciation) then - if self.config.vocab_audio_field == self.config.audio_field then - -- improperly configured fields. don't lose sentence audio - new_data[self.config.audio_field] = forvo_pronunciation .. new_data[self.config.audio_field] - else - new_data[self.config.vocab_audio_field] = forvo_pronunciation - end - end - end - - return new_data -end - -local set_output_dir = function(dir_path) - self.output_dir_path = dir_path -end - -local function init(config, platform) - self.config = config - self.platform = platform -end - -return { - append = append, - init = init, - set_output_dir = set_output_dir, -} diff --git a/config/mpv/scripts/subs2srsa/utils/pause_timer.lua b/config/mpv/scripts/subs2srsa/utils/pause_timer.lua deleted file mode 100644 index e37b0ea..0000000 --- a/config/mpv/scripts/subs2srsa/utils/pause_timer.lua +++ /dev/null @@ -1,33 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Pause timer stops playback when reaching a set timing. -]] - -local mp = require('mp') -local stop_time = -1 -local check_stop - -local set_stop_time = function(time) - stop_time = time - mp.observe_property("time-pos", "number", check_stop) -end - -local stop = function() - mp.unobserve_property(check_stop) - stop_time = -1 -end - -check_stop = function(_, time) - if time > stop_time then - stop() - mp.set_property("pause", "yes") - end -end - -return { - set_stop_time = set_stop_time, - check_stop = check_stop, - stop = stop, -} diff --git a/config/mpv/scripts/subs2srsa/utils/play_control.lua b/config/mpv/scripts/subs2srsa/utils/play_control.lua deleted file mode 100644 index 901377d..0000000 --- a/config/mpv/scripts/subs2srsa/utils/play_control.lua +++ /dev/null @@ -1,61 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Provides additional methods for controlling playback. -]] - -local mp = require('mp') -local h = require('helpers') -local pause_timer = require('utils.pause_timer') -local Subtitle = require('subtitles.subtitle') - -local current_sub - -local function stop_at_the_end(sub) - pause_timer.set_stop_time(sub['end'] - 0.050) - h.notify("Playing till the end of the sub...", "info", 3) -end - -local function play_till_sub_end() - local sub = Subtitle:now() - mp.commandv('seek', sub['start'], 'absolute') - mp.set_property("pause", "no") - stop_at_the_end(sub) -end - -local function sub_seek(direction, pause) - mp.commandv("sub_seek", direction == 'backward' and '-1' or '1') - mp.commandv("seek", "0.015", "relative+exact") - if pause then - mp.set_property("pause", "yes") - end - pause_timer.stop() -end - -local function sub_rewind() - mp.commandv('seek', Subtitle:now()['start'] + 0.015, 'absolute') - pause_timer.stop() -end - -local function check_sub() - local sub = Subtitle:now() - if sub and sub ~= current_sub then - mp.unobserve_property(check_sub) - stop_at_the_end(sub) - end -end - -local function play_till_next_sub_end() - current_sub = Subtitle:now() - mp.observe_property("sub-text", "string", check_sub) - mp.set_property("pause", "no") - h.notify("Waiting till next sub...", "info", 10) -end - -return { - play_till_sub_end = play_till_sub_end, - play_till_next_sub_end = play_till_next_sub_end, - sub_seek = sub_seek, - sub_rewind = sub_rewind, -} diff --git a/config/mpv/scripts/subs2srsa/utils/switch.lua b/config/mpv/scripts/subs2srsa/utils/switch.lua deleted file mode 100644 index 5dac1c6..0000000 --- a/config/mpv/scripts/subs2srsa/utils/switch.lua +++ /dev/null @@ -1,38 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Switch cycles between values in a table. -]] - -local make_switch = function(states) - local self = { - states = states, - current_state = 1 - } - local bump = function() - self.current_state = self.current_state + 1 - if self.current_state > #self.states then - self.current_state = 1 - end - end - local get = function() - return self.states[self.current_state] - end - local set = function(new_state) - for idx, value in ipairs(self.states) do - if value == new_state then - self.current_state = idx - end - end - end - return { - bump = bump, - get = get, - set = set, - } -end - -return { - new = make_switch -} diff --git a/config/mpv/scripts/subs2srsa/utils/timings.lua b/config/mpv/scripts/subs2srsa/utils/timings.lua deleted file mode 100644 index d2408d6..0000000 --- a/config/mpv/scripts/subs2srsa/utils/timings.lua +++ /dev/null @@ -1,28 +0,0 @@ ---[[ -Copyright: Ren Tatsumoto and contributors -License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html - -Object that remembers manually set timings. -]] - -local new_timings = function() - local self = { ['start'] = -1, ['end'] = -1, } - local is_set = function(position) - return self[position] >= 0 - end - local set = function(position, time) - self[position] = time - end - local get = function(position) - return self[position] - end - return { - is_set = is_set, - set = set, - get = get, - } -end - -return { - new = new_timings, -} -- cgit v1.2.3