mirror of
https://github.com/welpo/tabi.git
synced 2025-11-03 01:20:24 +01:00
2 lines
No EOL
16 KiB
HTML
2 lines
No EOL
16 KiB
HTML
<!doctype html><html lang=en><head><meta charset=UTF-8><meta content="default-src 'self';font-src 'self' data:;img-src 'self' https://* data:;media-src 'self' https://cdn.jsdelivr.net/;style-src 'self';frame-src player.vimeo.com https://www.youtube-nocookie.com;connect-src 'self' https://tabi-stats.osc.garden vhiweeypifbwacashxjz.supabase.co;script-src 'self' https://tabi-stats.osc.garden cdn.jsdelivr.net 'self'" http-equiv=Content-Security-Policy><meta content="width=device-width,initial-scale=1.0" name=viewport><meta content=https://welpo.github.io/tabi name=base><title>
|
||
~/tabi • shuku</title><link href=https://welpo.github.io/tabi/img/seedling.png rel=icon type=image/png><link href='data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y="50%" x="50%" dominant-baseline="central" text-anchor="middle" font-size="88">🌱</text></svg>' rel=icon><link title="~/tabi - Atom Feed" href=https://welpo.github.io/tabi/atom.xml rel=alternate type=application/atom+xml><link href="https://welpo.github.io/tabi/custom_subset.css?h=0b9535a28bc3d5bf2321" rel=stylesheet><link href="https://welpo.github.io/tabi/main.css?h=3716ab3457d2dd050b3c" rel=stylesheet><meta content="light dark" name=color-scheme><meta content=#087e96 name=theme-color><meta content="Shrink media to keep only the dialogue. For immersion language learning." name=description><meta content="Shrink media to keep only the dialogue. For immersion language learning." property=og:description><meta content=shuku property=og:title><meta content=article property=og:type><meta content="https://welpo.github.io/tabi/projects/shuku/social_cards/projects_shuku.jpg?h=521a7f28433a9a361d35" property=og:image><meta content=1353 property=og:image:width><meta content=760 property=og:image:height><meta content="https://welpo.github.io/tabi/projects/shuku/social_cards/projects_shuku.jpg?h=521a7f28433a9a361d35" name=twitter:image><meta content=summary_large_image name=twitter:card><meta content=en_GB property=og:locale:alternate><link href=https://welpo.github.io/tabi/projects/shuku/ hreflang=en rel=alternate><meta content=es_ES property=og:locale:alternate><link href=https://welpo.github.io/tabi/es/projects/shuku/ hreflang=es rel=alternate><meta content=ca_ES property=og:locale:alternate><link href=https://welpo.github.io/tabi/ca/projects/shuku/ hreflang=ca rel=alternate><link href=https://osc.garden/projects/shuku/ rel=canonical><meta content=https://osc.garden/projects/shuku/ property=og:url><meta content=~/tabi property=og:site_name><noscript><link href=https://welpo.github.io/tabi/no_js.css rel=stylesheet></noscript><script src=https://welpo.github.io/tabi/js/initializeTheme.min.js></script><script defer src=https://welpo.github.io/tabi/js/themeSwitcher.min.js></script><script async data-goatcounter=https://tabi-stats.osc.garden/count src=https://tabi-stats.osc.garden/count.js></script><script src="https://welpo.github.io/tabi/js/searchElasticlunr.min.js?h=3626c0ef99daa745b31e" defer></script><body><a href=#main-content id=skip-link>Skip to content</a><header><nav class=navbar><div class=nav-title><a class=home-title href=https://welpo.github.io/tabi/>~/tabi</a></div><div class=nav-navs><ul><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/blog/>blog </a><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/archive/>archive </a><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/tags/>tags </a><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/projects/>projects </a><li class=menu-icons-container><ul class=menu-icons-group><li class="js menu-icon"><div aria-label="Click or press $SHORTCUT to open search" class="search-icon interactive-icon" title="Click or press $SHORTCUT to open search" id=search-button role=button tabindex=0><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"/></svg></div><li class=language-switcher><details class=dropdown><summary aria-label="Language selection" title="Language selection" aria-haspopup=true role=button><div class=language-switcher-icon></div></summary> <div class=dropdown-content role=menu>English<a aria-label=العربية href=https://welpo.github.io/tabi/ar/projects/shuku/ lang=ar role=menuitem>العربية</a><a aria-label=Español href=https://welpo.github.io/tabi/es/projects/shuku/ lang=es role=menuitem>Español</a><a aria-label=Català href=https://welpo.github.io/tabi/ca/projects/shuku/ lang=ca role=menuitem>Català</a></div></details><li class="theme-switcher-wrapper js"><div aria-label="Toggle dark mode" title="Toggle dark/light mode" aria-pressed=false class=theme-switcher role=button tabindex=0></div><div aria-label="Reset mode to default" class="theme-resetter arrow" title="Reset mode to default" aria-hidden=true role=button tabindex=0></div></ul></ul></div></nav></header><div class=content id=main-content><main><article class=h-entry><h1 class="p-name article-title">shuku</h1><a class="u-url u-uid" href=https://welpo.github.io/tabi/projects/shuku/></a><ul class=meta><li class=tag>Tags: <li class=tag><a class=p-category href=https://welpo.github.io/tabi/tags/python/>Python</a>, <li class=tag><a class=p-category href=https://welpo.github.io/tabi/tags/media/>media</a>, <li class=tag><a class=p-category href=https://welpo.github.io/tabi/tags/linguistics/>linguistics</a>, <li class=tag><a class=p-category href=https://welpo.github.io/tabi/tags/cli/>CLI</a></ul><p class=p-summary hidden>Shrink media to keep only the dialogue. For immersion language learning.<section class="e-content body"><p><strong>shuku</strong> (<ruby><rb>縮</rb><rt>しゅく</ruby><ruby><rb>小</rb><rt>しょう</ruby>: “minification”) creates condensed versions of films and TV shows by keeping only the dialogue.<p><video title="shuku demo" autoplay=autoplay class=invertible-image controls loop=true muted src=https://cdn.jsdelivr.net/gh/welpo/shuku/assets/animation_demo/shuku_demo.mov width=800></video><h4 class=centered-text id=github-blog-post-documentation-pypi><a aria-label="Anchor link for: github-blog-post-documentation-pypi" class="header-anchor no-hover-padding" href=#github-blog-post-documentation-pypi><span aria-hidden=true class=link-icon></span></a> <a class=external href=https://github.com/welpo/shuku>GitHub</a> • <a class=external href=https://osc.garden/blog/shuku-condensed-media-language-learning/>Blog post</a> • <a class=external href=https://github.com/welpo/shuku#readme>Documentation</a> • <a class=external href=https://pypi.org/project/shuku/>PyPI</a></h4><h2 id=features><a aria-label="Anchor link for: features" class="header-anchor no-hover-padding" href=#features><span aria-hidden=true class=link-icon></span></a> Features</h2><h3 id=smart-media-handling><a aria-label="Anchor link for: smart-media-handling" class="header-anchor no-hover-padding" href=#smart-media-handling><span aria-hidden=true class=link-icon></span></a> Smart media handling</h3><ul><li>Automatic subtitle detection and matching with fuzzy search<li>Intelligent audio/subtitle track selection<li>Metadata extraction (title, season, episode number)</ul><h3 id=flexible-output><a aria-label="Anchor link for: flexible-output" class="header-anchor no-hover-padding" href=#flexible-output><span aria-hidden=true class=link-icon></span></a> Flexible output</h3><ul><li>Condensed audio (MP3, FLAC, AAC, Opus…)<li>Condensed video<li>Synchronized subtitles (including LRC for karaoke-style review)<li>Clean filenames in output</ul><h3 id=high-customization><a aria-label="Anchor link for: high-customization" class="header-anchor no-hover-padding" href=#high-customization><span aria-hidden=true class=link-icon></span></a> High customization</h3><ul><li>Configurable audio/video quality and codecs<li>Subtitle timing adjustment and padding<li>Skip unwanted content (sound effects, lyrics, specific chapters)<li>Custom FFmpeg arguments support</ul><h3 id=user-experience><a aria-label="Anchor link for: user-experience" class="header-anchor no-hover-padding" href=#user-experience><span aria-hidden=true class=link-icon></span></a> User experience</h3><ul><li>Cross-platform: GNU+Linux, macOS, and Windows<li>Detailed logging with progress indicators<li>Batch processing support</ul><h2 id=development-best-practices><a aria-label="Anchor link for: development-best-practices" class="header-anchor no-hover-padding" href=#development-best-practices><span aria-hidden=true class=link-icon></span></a> Development best practices</h2><ul><li>Comprehensive testing: 100% code coverage<li>Clean code: Type-hinted Python with clear responsibilities<li>Continuous Integration/Deployment<li>Comprehensive documentation</ul><p><a class=external href=https://github.com/welpo/shuku><img alt="shuku social media card" src=/img/social_cards/projects_shuku.jpg></a></section><form action="https://vhiweeypifbwacashxjz.supabase.co/rest/v1/rpc/increment_hits?apikey=sb_publishable_EoB7MFJhCmb6PiAk-GPJ4w_PGhQ44Ru" class=iine-form method=post><input name=page_slug type=hidden value=/projects/shuku/><button aria-label="Like this post" title="Like this post" class=iine-button data-icon=heart data-slug=/projects/shuku/>♥️</button></form></article></main><div id=button-container><div id=toc-floating-container><input class=toggle id=toc-toggle type=checkbox><label class=overlay for=toc-toggle></label><label title="Toggle Table of Contents" class=button for=toc-toggle id=toc-button><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M414.82-193.094q-18.044 0-30.497-12.32-12.453-12.319-12.453-30.036t12.453-30.086q12.453-12.37 30.497-12.37h392.767q17.237 0 29.927 12.487 12.69 12.486 12.69 30.203 0 17.716-12.69 29.919t-29.927 12.203H414.82Zm0-244.833q-18.044 0-30.497-12.487Q371.87-462.9 371.87-480.45t12.453-29.92q12.453-12.369 30.497-12.369h392.767q17.237 0 29.927 12.511 12.69 12.512 12.69 29.845 0 17.716-12.69 30.086-12.69 12.37-29.927 12.37H414.82Zm0-245.167q-18.044 0-30.497-12.32t-12.453-30.037q0-17.716 12.453-30.086 12.453-12.369 30.497-12.369h392.767q17.237 0 29.927 12.486 12.69 12.487 12.69 30.203 0 17.717-12.69 29.92-12.69 12.203-29.927 12.203H414.82ZM189.379-156.681q-32.652 0-55.878-22.829t-23.226-55.731q0-32.549 23.15-55.647 23.151-23.097 55.95-23.097 32.799 0 55.313 23.484 22.515 23.484 22.515 56.246 0 32.212-22.861 54.893-22.861 22.681-54.963 22.681Zm0-245.167q-32.652 0-55.878-23.134-23.226-23.135-23.226-55.623 0-32.487 23.467-55.517t56.12-23.03q32.102 0 54.721 23.288 22.62 23.288 22.62 55.775 0 32.488-22.861 55.364-22.861 22.877-54.963 22.877Zm-.82-244.833q-32.224 0-55.254-23.288-23.03-23.289-23.03-55.623 0-32.333 23.271-55.364 23.272-23.03 55.495-23.03 32.224 0 55.193 23.288 22.969 23.289 22.969 55.622 0 32.334-23.21 55.364-23.21 23.031-55.434 23.031Z"/></svg></label><div class=toc-content><div class=toc-container><ul><li><a href=https://welpo.github.io/tabi/projects/shuku/#github-blog-post-documentation-pypi>GitHub • Blog post • Documentation • PyPI</a><li><a href=https://welpo.github.io/tabi/projects/shuku/#features>Features</a> <ul><li><a href=https://welpo.github.io/tabi/projects/shuku/#smart-media-handling>Smart media handling</a><li><a href=https://welpo.github.io/tabi/projects/shuku/#flexible-output>Flexible output</a><li><a href=https://welpo.github.io/tabi/projects/shuku/#high-customization>High customization</a><li><a href=https://welpo.github.io/tabi/projects/shuku/#user-experience>User experience</a></ul><li><a href=https://welpo.github.io/tabi/projects/shuku/#development-best-practices>Development best practices</a></ul></div></div></div><a title="Go to the top of the page" class=no-hover-padding href=# id=top-button> <svg viewbox="0 0 20 20" fill=currentColor><path d="M3.293 9.707a1 1 0 010-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L4.707 9.707a1 1 0 01-1.414 0z"/></svg> </a></div><span class=hidden id=copy-success> Copied! </span><span class=hidden id=copy-init> Copy code to clipboard </span><script defer src=https://welpo.github.io/tabi/js/copyCodeToClipboard.min.js></script><script defer src=https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js></script></div><footer><section><nav class="socials nav-navs"><ul><li><a class="nav-links no-hover-padding social" href=https://welpo.github.io/tabi/atom.xml> <img alt=feed loading=lazy src=https://welpo.github.io/tabi/social_icons/rss.svg title=feed> </a><li class=js><a class="nav-links no-hover-padding social" data-encoded-email=dGFiaUBvc2MuZ2FyZGVu href=#><img alt=email loading=lazy src=https://welpo.github.io/tabi/social_icons/email.svg title=email> </a><li><a class="nav-links no-hover-padding social" rel=" me" href=https://github.com/welpo/> <img alt=github loading=lazy src=https://welpo.github.io/tabi/social_icons/github.svg title=github> </a><li><a class="nav-links no-hover-padding social" rel=" me" href=https://soundcloud.com/oskerwyld> <img alt=soundcloud loading=lazy src=https://welpo.github.io/tabi/social_icons/soundcloud.svg title=soundcloud> </a><li><a class="nav-links no-hover-padding social" rel=" me" href=https://instagram.com/oskerwyld> <img alt=instagram loading=lazy src=https://welpo.github.io/tabi/social_icons/instagram.svg title=instagram> </a><li><a class="nav-links no-hover-padding social" rel=" me" href=https://youtube.com/@oskerwyld> <img alt=youtube loading=lazy src=https://welpo.github.io/tabi/social_icons/youtube.svg title=youtube> </a><li><a class="nav-links no-hover-padding social" rel=" me" href=https://open.spotify.com/artist/5Hv2bYBhMp1lUHFri06xkE> <img alt=spotify loading=lazy src=https://welpo.github.io/tabi/social_icons/spotify.svg title=spotify> </a></ul></nav><nav class=nav-navs><small> <ul><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/about/> about </a><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/privacy/> privacy policy </a><li><a class="nav-links no-hover-padding" href=https://tabi-stats.osc.garden/> site statistics </a><li><a class="nav-links no-hover-padding" href=https://welpo.github.io/tabi/sitemap.xml> sitemap </a></ul> </small></nav><div class=credits><small> Powered by <a href=https://www.getzola.org>Zola</a> & <a href=https://github.com/welpo/tabi>tabi</a> • <a href=https://github.com/welpo/tabi> Site source </a></small></div></section><script async src=https://welpo.github.io/tabi/js/decodeMail.min.js></script><div class="search-modal js" aria-labelledby=modalTitle id=searchModal role=dialog><h1 class=visually-hidden id=modalTitle>Search</h1><div id=modal-content><div id=searchBar><div aria-hidden=true class=search-icon><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"/></svg></div><input aria-controls=results-container aria-expanded=false autocomplete=off id=searchInput placeholder=Search… role=combobox spellcheck=false><div class="close-icon interactive-icon" title="Clear search" id=clear-search role=button tabindex=0><svg viewbox="0 -960 960 960" xmlns=http://www.w3.org/2000/svg><path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/></svg></div></div><div id=results-container><div id=results-info><span id=zero_results> No results</span><span id=one_results> $NUMBER result</span><span id=many_results> $NUMBER results</span><span id=two_results> $NUMBER results</span><span id=few_results> $NUMBER results</span></div><div id=results role=listbox></div></div></div></div></footer> |