Last active
January 9, 2024 01:05
-
-
Save sasasin/afd806084e23e87416576061a8b18ed0 to your computer and use it in GitHub Desktop.
EPUB を mp4 に変換するやつ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -ve | |
set -o pipefail | |
# EPUB ファイルをチャプター毎の mp4 ファイルに変換するシェルスクリプト | |
## 依存関係 | |
# brew install w3m が必要 | |
# unzip で、EPUBファイルからコンテンツ抽出 | |
# find, sort で、EPUBファイル内にあるXHTMLファイルをリストアップ | |
# w3m で、XHTMLファイルからHTMLタグを除去し txt に変換 | |
# say コマンドで txt から mp4 ファイルに変換 | |
## 音声設定 | |
# say コマンドの、システムの声、読み上げ速度などは、 | |
# macOS システム環境設定 -> アクセシビリティ -> 読み上げコンテンツ | |
# にて調整する必要がある。 | |
# say コマンドのCLIオプションは、日本語には効かないようだ | |
## 入力 | |
# コマンドライン引数で EPUB ファイルパスを渡す | |
EPUB_FILE_PATH="$1" | |
EPUB_FILE_NAME="$(basename -s .epub ${EPUB_FILE_PATH})" | |
## 出力 | |
# 勝手に場所を掘ります | |
WORK_DIR="$HOME"/tmp/"${EPUB_FILE_NAME}" | |
rm -rf "${WORK_DIR}" | |
# この場所に mp4 が転がります | |
mkdir -p "${WORK_DIR}/mp4" | |
cp ${EPUB_FILE_PATH} "${WORK_DIR}"/ | |
cd "${WORK_DIR}" | |
unzip "${WORK_DIR}"/"${EPUB_FILE_NAME}".epub | |
# 並列で変換しようと思ったが、オライリーの400ページ級の技術書が、20分程度で変換できた。 | |
# がんばって並列にせんでも、十分実用に耐える速度であるように思った。 | |
# 多量の EPUB ファイルを並列変換したいのなら、このシェルスクリプト自体を並列稼動させればよい。 | |
find . -type f -name "*.xhtml" \ | |
| sort -u \ | |
| while read EPUB_XHTML_FILE_PATH; do | |
EPUB_XHTML_FILE_NAME="$(basename -s .xhtml ${EPUB_XHTML_FILE_PATH})" | |
EPUB_MP4_FILE_PATH="${WORK_DIR}/mp4/${EPUB_FILE_NAME}.${EPUB_XHTML_FILE_NAME}.m4a" | |
echo "${EPUB_MP4_FILE_PATH}" | |
cat "${EPUB_XHTML_FILE_PATH}" \ | |
| w3m -dump -T text/html -cols 5000 \ | |
| say --file-format "m4af" --data-format "alac" -o "${EPUB_MP4_FILE_PATH}" --progress | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment