m4b-tool
เป็น wrapper สำหรับ ffmpeg
และ mp4v2
เพื่อรวม แยก หรือจัดการไฟล์หนังสือเสียงด้วยบทต่างๆ แม้ว่า m4b-tool
ได้รับการออกแบบมาเพื่อจัดการไฟล์ m4b แต่ควรรองรับรูปแบบเสียงเกือบทั้งหมด เช่น mp3, aac, ogg, alac และ flac
หากคุณกำลังใช้โครงการใด ๆ ของฉันและพบว่ามีประโยชน์ โปรดพิจารณาบริจาคเพื่อสนับสนุนฉัน ฉันวางแผนที่จะใช้เงินเพื่อสนับสนุนโครงการโอเพ่นซอร์สอื่นๆ หรือเพื่อการกุศล ขอบคุณ!
>= 25.00$
ขอขอบคุณเป็นพิเศษสำหรับผู้สนับสนุนทุกคนที่บริจาคเงินเป็นรายเดือน >= 25.00$
ชื่อ | จำนวน |
---|---|
นุมินิท | 25.00$ |
รับ Nix และตรวจสอบให้แน่ใจว่าเปิดใช้งาน Flakes แล้ว
nix run github:sandreas/m4b-tool
หรือ nix run github:sandreas/m4b-tool#m4b-tool-libfdk
nix build github:sandreas/m4b-tool
หรือ nix build github:sandreas/m4b-tool#m4b-tool-libfdk
./result/bin/m4b-tool
nix develop
composer2nix --executable --composition=composer.nix
เพื่ออัปเดตไฟล์ .nix ฉันเริ่มการทดสอบ ซึ่งตอนนี้ได้ไปถึงระดับอัลฟ่าตั้งแต่ต้นแล้วและสามารถทดลองใช้ได้ เครื่องมือบรรทัดคำสั่งเขียนด้วย C#
ซึ่งเป็นโอเพ่นซอร์สเต็มรูปแบบและเรียกว่า tone
มันมีชุดฟีเจอร์ที่ดีอยู่แล้ว ดังนั้น หากคุณต้องการลองใช้ นี่คือ:
https://github.com/sandreas/tone
การประกาศนี้ไม่ได้หมายความว่า m4b-tool
นั้นเลิกใช้แล้วหรือจะเป็นในเร็วๆ นี้ การพัฒนา m4b-tool
จะดำเนินต่อไป (อย่างน้อยก็จนกว่า tone จะมีชุดคุณลักษณะคล้ายกับ m4b-tool
) เป็นเพียงการมีเครื่องมือทางเลือกสำหรับคุณสมบัติต่างๆ ที่อาจมีข้อจำกัด
ขอให้สนุก แทบรอไม่ไหวที่จะได้รับคำติชมของคุณ
น่าเสียดายที่ตอนนี้ฉันค่อนข้างยุ่ง ดังนั้น m4b-tool 0.4.2
จึงเก่ามาก เนื่องจากไม่มีแผนที่จะออกเวอร์ชันใหม่โดยไม่มีเอกสารประกอบที่ครบถ้วน จึงมีเพียงเวอร์ชันก่อนเผยแพร่ล่าสุดเท่านั้นที่ได้รับการแก้ไขข้อบกพร่อง มันค่อนข้างเสถียรอยู่แล้ว ดังนั้นหากคุณพบข้อบกพร่องกับ v0.4.2
โปรดลองใช้เวอร์ชันก่อนเผยแพร่ล่าสุด หากได้รับการแก้ไขแล้ว
ขอบคุณแซนเดรียส
https://pilabor.com
merge
ชุดไฟล์เสียง (เช่น MP3 หรือ AAC) ให้เป็นไฟล์ m4b ไฟล์เดียวsplit
ไฟล์ m4b ไฟล์เดียวออกเป็นไฟล์เอาต์พุตหลายไฟล์ตามบทหรืออัลบั้มที่เข้ารหัส flac
ออกเป็นแทร็กเดียวผ่านคิวชีตchapters
สำหรับไฟล์ m4b ที่มีอยู่ผ่านการตรวจจับความเงียบหรือ musicbrainz merge
ไฟล์เสียงทั้งหมดในไดเร็กทอรี data/my-audio-book
เข้ากับไฟล์ data/merged.m4b
(แท็กยังคงอยู่และ data/my-audio-book/cover.jpg
และ data/my-audio-book/description.txt
ถูกฝังอยู่ ถ้ามี)
m4b-tool merge "data/my-audio-book/" --output-file="data/merged.m4b"
split
ไฟล์ m4b ขนาดใหญ่หนึ่งไฟล์ตามบทออกเป็นไฟล์ mp3 หลายไฟล์ที่ data/my-audio-book_splitted/
(แท็กยังคงอยู่ data/my-audio-book_splitted/cover.jpg
จะถูกสร้างขึ้นหาก m4b มีหน้าปก)
m4b-tool split --audio-format mp3 --audio-bitrate 96k --audio-channels 1 --audio-samplerate 22050 "data/my-audio-book.m4b"
chapters
สามารถลองปรับบทที่มีอยู่ของ m4b โดยการตรวจจับความเงียบ
m4b-tool chapters --adjust-by-silence -o "data/destination-with-adjusted-chapters.m4b" "data/source-with-misplaced-chapters.m4b"
เนื่องจากคำสั่งย่อยที่ใช้มากที่สุดของ m4b-tool
ดูเหมือนว่าจะ merge
เรามาพูดถึงแนวปฏิบัติที่ดีที่สุดกันดีกว่า...
น่าเสียดายที่ m4b-tool
มีการขึ้นต่อกันมากมาย ไม่ใช่แค่บรรทัดเดียวเท่านั้น หากคุณต้องการได้รับคุณภาพที่ดีที่สุดและการรองรับการแท็ก การอ้างอิงหลายรายการจะต้องถูกรวบรวมด้วยตนเองพร้อมตัวเลือกพิเศษ นั่นเป็นเหตุผลที่คุณควรดูภาพนักเทียบท่าซึ่งมาพร้อมกับคุณภาพเสียงที่ยอดเยี่ยม รองรับการแท็กด้านบน และติดตั้งง่าย และแทบไม่มีข้อเสียเลย
หมายเหตุ: หากคุณใช้ Windows อาจทำให้ใช้งานได้ยาก
เมื่อรวมหนังสือเสียง คุณควรเตรียมตัวให้พร้อม โครงสร้างไดเร็กทอรีต่อไปนี้ช่วยได้มาก แม้ว่าคุณจะรวมหนังสือเสียงเพียงเล่มเดียวเท่านั้น:
input/<main genre>/<author>/<title>
หรือถ้าเป็นซีรีย์
input/<main genre>/<author>/<series>/<series-part> - <title>
ตัวอย่าง:
input/Fantasy/J.K. Rowling/Quidditch Through the Ages/
input/Fantasy/J.K. Rowling/Harry Potter/1 - Harry Potter and the Philosopher's Stone/
หมายเหตุ: หากชื่อหนังสือเสียงของคุณมีอักขระพาธที่ไม่ถูกต้อง เช่น
/
ให้แทนที่ด้วยเครื่องหมายขีดกลาง-
ในตอนนี้ เนื่องจากคุณต้องการหน้าปกและคำอธิบายสำหรับหนังสือเสียงของคุณเกือบทุกครั้ง คุณควรเพิ่มไฟล์ต่อไปนี้ในไดเร็กทอรีหลัก:
cover.jpg
(หรือ cover.jpeg
หรือ cover.png
)description.txt
(อย่าลืมใช้การเข้ารหัสไฟล์ข้อความ UTF-8
สำหรับเนื้อหา)ตัวอย่าง:
input/Fantasy/J.K. Rowling/Quidditch Through the Ages/cover.jpg
input/Fantasy/J.K. Rowling/Quidditch Through the Ages/description.txt
หมายเหตุ:
m4b-tool
จะค้นหาและฝังไฟล์เหล่านี้โดยอัตโนมัติ แต่จะไม่ล้มเหลว หากไม่มีอยู่
บทต่างๆ เหมาะที่จะเพิ่ม จุดอ้างอิง สำหรับหนังสือเสียงของคุณ ช่วยจดจำตำแหน่งสุดท้ายและปรับปรุงประสบการณ์โดยทั่วไป
หากคุณต้องการปรับบทด้วยตนเอง คุณสามารถเพิ่ม chapters.txt
(ตำแหน่งเดียวกันกับ cover.jpg
) โดยมีเนื้อหาดังต่อไปนี้ ( <chapter-start>
<chapter-title>
):
00:00:00.000 Intro
00:04:19.153 This is
00:09:24.078 A way to add
00:14:34.500 Chapters manually
หากไฟล์อินพุตของคุณถูกแท็ก แท็กเหล่านี้จะถูกใช้เพื่อสร้างข้อมูลเมตาของบทตาม title
ดังนั้น หากคุณแท็กไฟล์อินพุตของคุณด้วยชื่อบทที่ถูกต้องเป็น title
แทร็ก สิ่งนี้จะส่งผลให้ได้ไฟล์ m4b
ที่ดีและสะอาดตาพร้อมชื่อบทที่ถูกต้อง
คุณสมบัติที่ยอดเยี่ยมอีกประการหนึ่งตั้งแต่ m4b-tool
v.0.4.0 คือพารามิเตอร์ --max-chapter-length
บ่อยครั้งที่ไฟล์อินพุตแต่ละไฟล์มีขนาดใหญ่เกินไป ซึ่งส่งผลให้บทต่างๆ มีระยะเวลายาวนานมาก สิ่งนี้อาจสร้างความรำคาญได้ หากคุณต้องการข้ามไปยังจุดใดจุดหนึ่ง เนื่องจากคุณต้องกรอกลับหรือกรอไปข้างหน้าและกดปุ่มค้างไว้เป็นเวลานาน แทนที่จะให้ทิปก่อนหน้าหรือถัดไปสองสามครั้ง หากต้องการเพิ่มบทย่อยโดยอัตโนมัติ คุณสามารถระบุ:
--max-chapter-length=300,900
สิ่งนี้จะทำให้ m4b-tool
บทย่อยมีชื่อเหมือนต้นฉบับและได้รับดัชนีเพิ่มเติม นี่เป็นวิธีที่ดีในการเก็บชื่อจริงแต่ต้องไม่มีบทที่มีระยะเวลายาวเกินไป
หากคุณเป็นเจ้าของ iPod หนังสือเสียงที่ยาวเกินไปอาจมีปัญหา เนื่องจาก iPod รองรับเฉพาะอัตราการสุ่มตัวอย่าง 32 บิตเท่านั้น หากหนังสือเสียงของคุณมีความยาวเกิน 27 ชั่วโมงด้วยอัตราการสุ่มตัวอย่าง 22050Hz คุณสามารถจัดเตรียม --adjust-for-ipod
เพื่อลดขนาดหนังสือเสียงของคุณโดยอัตโนมัติ ซึ่งส่งผลให้คุณภาพลดลง แต่อย่างน้อยก็ใช้งานได้กับ iPod เครื่องเก่าที่ดีของคุณ...
m4b-tool
รองรับงานการแปลงหลายงานควบคู่ไปกับพารามิเตอร์ --jobs
(เช่น --jobs=2
) หากคุณต้องแปลงไฟล์มากกว่าหนึ่งไฟล์ ซึ่งเป็นกรณีทั่วไป คุณจะเพิ่มความเร็วการผสานได้เกือบสองเท่าโดยระบุ --jobs=2
พารามิเตอร์ (หรือเพิ่มเป็นสี่เท่าด้วย --jobs=4
หากคุณมีระบบควอดคอร์ ฯลฯ .) อย่าระบุตัวเลขที่สูงกว่าจำนวนคอร์ในระบบของคุณ - ซึ่งจะทำให้การรวมช้าลง...
หมายเหตุ: หากคุณเรียกใช้การแปลงบนคอร์ทั้งหมด จะส่งผลให้มีการใช้งาน CPU เกือบ 100% ซึ่งอาจทำให้ประสิทธิภาพของระบบช้าลง
--batch-pattern
ใน m4b-tool v.0.4.0
คุณลักษณะ --batch-pattern
ถูกเพิ่มเข้ามา สามารถใช้ในการแปลงหนังสือเสียงหลายเล่มพร้อมกันได้ แต่ยังแปลงเพียงหนังสือเสียงเพียงเล่มเดียวด้วย เนื่องจากคุณสามารถสร้างแท็กจากโครงสร้างไดเร็กทอรีที่มีอยู่ได้
คำแนะนำ: พารามิเตอร์
output-file
จะต้องเป็นไดเร็กทอรี เมื่อใช้--batch-pattern
แม้แต่พารามิเตอร์ --batch-pattern
หลายตัวก็ได้รับการสนับสนุน ในขณะที่การจับคู่แรกจะถูกใช้ก่อน ดังนั้น หากคุณสร้างโครงสร้างไดเร็กทอรีตามที่อธิบายไว้ข้างต้น คำสั่งสุดท้ายในการรวม input/Fantasy/Harry Potter/1 - Harry Potter and the Philosopher's Stone/
ไปยัง output/Fantasy/Harry Potter/1 - Harry Potter and the Philosopher's Stone.m4b
จะมีลักษณะเช่นนี้:
m4b-tool merge -v --jobs=2 --output-file="output/" --max-chapter-length=300,900 --adjust-for-ipod --batch-pattern="input/%g/%a/%s/%p - %n/" --batch-pattern="input/%g/%a/%n/" "input/"
ในโหมด
--batch-pattern
ไฟล์ที่มีอยู่จะถูกข้ามไปโดยค่าเริ่มต้น
หากคุณทำตามขั้นตอนข้างต้นด้วยอิมเมจนักเทียบท่าหรือติดตั้งและคอมไพล์การอ้างอิงทั้งหมด คุณควรได้รับผลลัพธ์ต่อไปนี้:
libfdk_aac
genre
, author
, title
, sorttitle
ฯลฯ จากการใช้ --batch-pattern
cover.jpg
(หรือ cover.jpeg
หรือ cover.png
) และ description.txt
มีอยู่ในไดเร็กทอรีหลัก cover
description
และ longdesc
จะถูกฝังไว้ หากต้องการใช้นักเทียบท่ากับ m4b-tool
คุณต้องทำก่อน
pull
อิมเมจนักเทียบท่าอย่างเป็นทางการ (แนะนำ)build
Dockerfile
ในไดเรกทอรีหลัก อิมเมจนักเทียบท่า อย่างเป็นทางการ มีอยู่ใน DockerHub พวกมันค่อนข้างเป็นการทดลอง แต่ได้รับการพิสูจน์แล้วว่าทำงานได้ดี แท็ก latest
ถือเป็น หนทางที่จะใช้ ร่วมกับฟีเจอร์และการแก้ไข Bleeding Edge แท็กลงวันที่จะถูกเผยแพร่เป็นครั้งคราว (เช่น sandreas/m4b-tool:2022-09-25
) ซึ่งถือว่า ค่อนข้าง เสถียร เพื่อให้แน่ใจว่ารูปภาพ latest
ที่เสียหายจะไม่ทำให้การตั้งค่าทั้งหมดของคุณเสียหาย
# pull the image
docker pull sandreas/m4b-tool:latest
# create an alias for m4b-tool running docker
alias m4b-tool='docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd)":/mnt sandreas/m4b-tool:latest'
# testing the command
m4b-tool --version
หมายเหตุ: หากคุณใช้นามแฝงข้างต้น โปรดจำไว้ว่าคุณไม่สามารถใช้เส้นทางที่แน่นอนได้ (เช่น
/tmp/data/audiobooks/harry potter 1
) หรือลิงก์สัญลักษณ์ คุณต้องเปลี่ยนเป็นไดเร็กทอรีและใช้เส้นทางสัมพันธ์ (เช่นcd /tmp/data && m4b-tool merge "audiobooks/harry potter 1" --output-file harry.m4b
)
หากต้องการสร้างคอนเทนเนอร์นักเทียบท่าด้วยตนเองสำหรับการเปิดตัว m4b-tool
เฉพาะ จำเป็นต้องจัดเตรียมพารามิเตอร์พิเศษสำหรับการดาวน์โหลดเวอร์ชันเฉพาะลงในอิมเมจ เช่น สำหรับ v.0.4.1
:
# clone m4b-tool repository
git clone https://github.com/sandreas/m4b-tool.git
# change directory
cd m4b-tool
# build docker image - this will take a while
docker build . -t m4b-tool
# create an alias for m4b-tool running docker
alias m4b-tool='docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd)":/mnt m4b-tool'
# testing the command
m4b-tool --version
# use the specific pre-release from 2022-07-16
docker build . --build-arg M4B_TOOL_DOWNLOAD_LINK=https://github.com/sandreas/m4b-tool/files/9125095/m4b-tool.tar.gz -t m4b-tool
หมายเหตุ: คุณสามารถแก้ไขตัวแปรตามใน
Dockerfile
ได้
นักพัฒนาหรือผู้เชี่ยวชาญอาจต้องการรัน m4b-tool
รุ่นแบบกำหนดเองที่สมบูรณ์ หรือสร้างโค้ดด้วยตนเอง (เช่น หากคุณแยกพื้นที่เก็บข้อมูลและใช้แพตช์บางส่วน) หากเป็นกรณีนี้ คุณสามารถจัดเก็บบิลด์แบบกำหนดเองไว้ที่ dist/m4b-tool.phar
โดยสัมพันธ์กับ Dockerfile
จากนั้นจึงสร้างบิลด์เริ่มต้น
# dist/m4b-tool.phar is available
docker build . -t m4b-tool
หลังจากนี้บิลด์แบบกำหนดเองควรถูกรวมเข้ากับอิมเมจนักเทียบท่า
บน MacOS คุณสามารถใช้ brew
จัดการแพ็คเกจที่ยอดเยี่ยมเพื่อติดตั้ง m4b-tool
การได้รับคุณภาพเสียงที่ดีที่สุดต้องใช้ความพยายามเพิ่มเติม คุณต้อง คอมไพล์ ffmpeg
ใหม่ด้วยตัวแปลงสัญญาณ libfdk_aac
ที่ไม่ฟรี สิ่งนี้จำเป็นต้องถอนการติดตั้งแพ็คเกจ ffmpeg
เริ่มต้นหากติดตั้งไว้ เนื่องจาก brew
ลดความเป็นไปได้สำหรับ ตัวเลือกพิเศษ ไม่มีที่เก็บ ffmpeg-with-options
อย่างเป็นทางการ แต่เป็น tap
ที่ค่อนข้างดีที่คุณสามารถใช้เพื่อประหยัดเวลา
# FIRST INSTALL ONLY: if not already done, remove existing ffmpeg with default audio quality options
# check for ffmpeg with libfdk and uninstall if libfdk is not already available
[ -x "$(which ffmpeg)" ] && (ffmpeg -hide_banner -codecs 2>&1 | grep libfdk || brew uninstall ffmpeg)
# tap required repositories
brew tap sandreas/tap
brew tap homebrew-ffmpeg/ffmpeg
# check available ffmpeg options and which you would like to use
brew options homebrew-ffmpeg/ffmpeg/ffmpeg
# install ffmpeg with at least libfdk_aac for best audio quality
brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-fdk-aac
# install m4b-tool
brew install sandreas/tap/m4b-tool
# check installed m4b-tool version
m4b-tool --version
หากสิ่งที่กล่าวมาข้างต้นไม่ได้ผลสำหรับคุณหรือคุณเพียงต้องชำระเงิน m4b-tool
ก่อนใช้งานจริง คุณอาจต้องการลองวิธี ที่ง่ายและรวดเร็ว มันจะใช้งานได้ แต่คุณจะได้คุณภาพเสียงที่ลดลง และ ไม่มีการสนับสนุนสำหรับการเรียงลำดับแท็ก
# tap m4b-tool repository
brew tap sandreas/tap
# install dependencies
brew install ffmpeg fdk-aac-encoder mp4v2
# install m4b-tool with acceptable audio quality and no sort tagging
brew install --ignore-dependencies sandreas/tap/m4b-tool
# install all dependencies
sudo apt install ffmpeg mp4v2-utils fdkaac php-cli php-intl php-json php-mbstring php-xml
# install / upgrade m4b-tool
sudo wget https://github.com/sandreas/m4b-tool/releases/download/v.0.4.2/m4b-tool.phar -O /usr/local/bin/m4b-tool && sudo chmod +x /usr/local/bin/m4b-tool
# check installed m4b-tool version
m4b-tool --version
หมายเหตุ: หากคุณต้องการได้รับคุณภาพเสียงที่ดีที่สุดเท่าที่จะเป็นไปได้ คุณต้องคอมไพล์
ffmpeg
ด้วยตัวเข้ารหัสคุณภาพสูงfdk-aac
(--enable-libfdk_aac
) - ดู https://trac.ffmpeg.org/wiki/CompilationGuide/ Ubuntu สำหรับคำแนะนำทีละขั้นตอนในการคอมไพล์ffmpeg
m4b-tool
เขียนด้วย PHP
และใช้ ffmpeg
, mp4v2
และ fdkaac
ซึ่งเป็นตัวเลือกสำหรับตัวแปลงสัญญาณที่มีประสิทธิภาพสูงเพื่อทำการแปลง ดังนั้นคุณจะต้องมีเครื่องมือต่อไปนี้ใน %PATH% ของคุณ:
php
>= 7.1 โดยเปิดใช้งานส่วนขยาย mbstring
(https://php.net)ffmpeg
(https://www.ffmpeg.org)mp4v2
( mp4chaps
, mp4art
ฯลฯ https://github.com/sandreas/m4b-tool/releases/download/v0.2/mp4v2-windows.zip )fdkaac
(เป็นทางเลือก เฉพาะในกรณีที่คุณต้องการประสิทธิภาพสูงสำหรับบิตเรตต่ำ <= 32k, http://wlc.io/2015/06/20/fdk-aac/ - คำเตือน: ไม่เป็นทางการ!)หากต้องการตรวจสอบการขึ้นต่อกัน การรันคำสั่งต่อไปนี้ผ่านทางบรรทัดคำสั่งควรแสดงผลลัพธ์ที่คล้ายกัน:
$ php -v
Copyright (c) 1997-2018 The PHP Group [...]
$ ffmpeg -version
ffmpeg version 4.1.1 Copyright (c) 2000-2019 the FFmpeg developers [...]
$ mp4chaps --version
mp4chaps - MP4v2 2.0.0
$ fdkaac
fdkaac 1.0.0 [...]
หากคุณแน่ใจว่า ติดตั้งการอ้างอิงทั้งหมดแล้ว ขั้นตอนต่อไปคือการดาวน์โหลด m4b-tool
รุ่นล่าสุดจาก
https://github.com/sandreas/m4b-tool/releases
ขึ้นอยู่กับระบบปฏิบัติการ คุณสามารถเปลี่ยนชื่อ m4b-tool.phar
เป็น m4b-tool
และรัน m4b-tool --version
ได้โดยตรงจากบรรทัดคำสั่ง หากคุณไม่แน่ใจ คุณสามารถใช้คำสั่ง php m4b-tool.phar --version
เพื่อตรวจสอบว่าการติดตั้งสำเร็จหรือไม่ สิ่งนี้ควรจะใช้ได้กับทุกระบบ
หากคุณต้องการใช้ซอร์สโค้ดล่าสุดพร้อมคุณสมบัติและการแก้ไขใหม่ทั้งหมด คุณสามารถสร้างจากซอร์สได้เช่นกัน บิลด์ปัจจุบันอาจไม่เสถียรและควรใช้เพื่อการทดสอบเท่านั้น หรือหากคุณต้องการคุณสมบัติเฉพาะที่ยังไม่ได้เปิดตัว
mp4v2
ที่กำหนดเองเพื่อการเรียงลำดับที่แม่นยำหนังสือเสียงส่วนใหญ่ไม่ได้จำหน่ายตามลำดับตัวอักษร ตัวอย่างที่โดดเด่นคือแฮร์รี่ พอตเตอร์ ดังนั้น หากคุณมีหนังสือเสียง Harry Potter ทั้งหมดก็ขึ้นอยู่กับเครื่องเล่นของคุณ แต่อาจจะไม่เรียงลำดับที่ถูกต้อง... มาดูกันว่าจะเรียงลำดับตัวอักษรอย่างไร:
และลำดับที่ถูกต้องน่าจะเป็น:
มีวิธีแก้ไขสำหรับเรื่องนี้ คุณต้องแท็กหนังสือเสียงด้วย sortname
ที่กำหนดเองและ/หรือ sortalbum
หากเครื่องเล่นของคุณรองรับแท็กเหล่านี้ ลำดับก็จะถูกต้องแล้ว แม้ว่าชื่อจะยังคงเป็นชื่อดั้งเดิมก็ตาม เพื่อให้บรรลุเป้าหมายนี้ ฉันต้องสร้าง mp4v2
เวอร์ชันที่กำหนดเอง ( mp4tags
ที่แม่นยำยิ่งขึ้น) เพื่อเพิ่มตัวเลือกสำหรับแท็กเหล่านี้ และเพิ่มแท็กหลอก --series
และ --series-part
ดังนั้นหากคุณทำสิ่งต่อไปนี้:
m4b-tool merge --name="Harry Potter and the Chamber of Secrets" --series="Harry Potter" --series-part="2" --output-file="output/Harry Potter and the Chamber of Secrets.m4b" "input/Harry Potter and the Chamber of Secrets"
มันจะส่งผลให้:
Harry Potter and the Chamber of Secrets
Harry Potter 2 - Harry Potter and the Chamber of Secrets
mp4v2
แบบกำหนดเองในอิมเมจนักเทียบท่า มีการติดตั้งเวอร์ชันที่กำหนดเองแล้ว
git clone https://github.com/sandreas/mp4v2
cd mp4v2
./configure
make && sudo make install
ใน m4b-tool
การแปลงเสียงทั้งหมดจะดำเนินการด้วย ffmpeg
ส่งผลให้คุณภาพเสียงค่อนข้างลดลงโดยใช้ตัวเข้ารหัสฟรี อย่างไรก็ตาม คุณภาพที่ดีที่สุดต้องใช้ความพยายามเป็นพิเศษ ดังนั้นหากคุณใช้โปรแกรมเปลี่ยนไฟล์ฟรี m4b-tool
อาจแสดงคำแนะนำต่อไปนี้:
เวอร์ชัน ffmpeg ของคุณไม่สามารถสร้าง aac คุณภาพสูงสุดโดยใช้ตัวเข้ารหัส aac แทน libfdk_aac
นั่นไม่ใช่ปัญหาจริงๆ เนื่องจากความแตกต่างระหว่างตัวเข้ารหัส aac
และ libfdk_aac
แทบจะไม่สังเกตเห็นได้ชัดเจนในกรณีส่วนใหญ่ แต่เพื่อที่จะเอาชนะคำใบ้และรับคุณภาพเสียงที่ดีที่สุดเท่าที่จะเป็นไปได้ คุณต้องใช้ตัวเข้ารหัสที่ไม่ฟรี ซึ่งไม่ได้รวมอยู่ใน ffmpeg
ตามค่าเริ่มต้น (เหตุผลด้านลิขสิทธิ์) ขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้ การติดตั้งตัวเข้ารหัสที่ไม่ฟรีอาจต้องใช้ทักษะ ความพยายาม และเวลาเพิ่มเติมเล็กน้อย (ดูหมายเหตุสำหรับระบบปฏิบัติการของคุณด้านบน) คุณต้องตัดสินใจว่าคุ้มค่ากับความพยายามเพิ่มเติมเพื่อให้ได้คุณภาพที่ดีขึ้นเล็กน้อยหรือไม่ หากคุณใช้อิมเมจนักเทียบท่า คุณควรได้รับคุณภาพที่ดีที่สุดตามค่าเริ่มต้น
หากคุณใช้บิตเรตต่ำมาก (<= 32k) คุณสามารถใช้โปรไฟล์ประสิทธิภาพสูงเพื่อปรับปรุงคุณภาพเสียงเพิ่มเติมได้ (เช่น --audio-profile=aac_he
สำหรับโมโน) น่าเสียดายที่การใช้งานที่มีประสิทธิภาพสูงของ ffmpeg
ทำให้เกิดไฟล์เสียงที่ไม่สามารถใช้ได้กับเครื่องเล่นจำนวนมาก (รวมถึง iTunes ด้วย) หากต้องการสร้างไฟล์ประสิทธิภาพสูงที่เข้ากันได้กับเครื่องเล่นทั่วไป คุณจะต้องติดตั้ง fdkaac
ในตอนนี้
รายละเอียดเพิ่มเติม:
คุณคิดว่ามีปัญหากับ m4b-tool
หรือไม่ ขั้นแรกให้ดูปัญหาที่ทราบด้านล่าง หากวิธีนี้ไม่ได้ผล โปรดระบุข้อมูลต่อไปนี้เมื่อเพิ่มปัญหา:
m4b-tool merge my-audio-book/ --output-file merged.m4b
the resulting file merged.m4b is only 5kb
ตัวอย่าง:
Title: m4b-tool does not embed covers
If i run m4b-tool with a folder containing a cover.png, it does not embed the cover and shows an error message.
OS: Ubuntu 16.04 LTS
Command: `m4b-tool merge my-audio-book/ ---output-file merged.m4b`
Error: Cannot embed cover, cover is not a valid image file
Attached files: cover.png
หากคุณได้รับข้อยกเว้น PHP ในกรณีส่วนใหญ่ ปัญหาดังกล่าวจะเกิดจากการกำหนดค่าของ PHP หากไม่คุ้นเคยกับการกำหนดค่า PHP คุณสามารถทำตามคำแนะนำเหล่านี้เพื่อแก้ไขปัญหาที่ทราบบางประการ:
[Exception]
charset windows-1252 is not supported - use one of these instead: utf-8
สิ่งนี้ส่วนใหญ่เกิดขึ้นบน windows เนื่องจาก mbstring
-Extension ใช้เพื่อแปลงชุดอักขระภายใน ดังนั้นจึงรองรับตัวอักษรพิเศษ เช่น เครื่องหมายบนเครื่องหมายภาษาเยอรมันในทุกแพลตฟอร์ม เพื่อแก้ไขปัญหานี้ คุณต้องเปิดใช้งานส่วนขยาย mbstring:
รัน php --ini
บนบรรทัดคำสั่ง:
C:>php --ini
...
Loaded Configuration File: C:Program Filesphpphp.ini
เปิดไฟล์การกำหนดค่า (เช่น C:Program Filesphpphp.ini
) ในโปรแกรมแก้ไขข้อความและค้นหา extension=
บน Windows ควรมีรายการดังนี้:
;extension=php_mbstring.dll
ลบ ;
เพื่อเปิดใช้งานส่วนขยาย:
extension=php_mbstring.dll
ตอนนี้ทุกอย่างควรจะทำงานได้ตามที่คาดไว้
รายการต่อไปนี้ประกอบด้วยคำสั่งที่เป็นไปได้ทั้งหมด รวมทั้ง merge
split
และ chapters
พร้อมด้วยการอ้างอิงพารามิเตอร์ที่มีอยู่ในทุกคำสั่ง
ด้วย m4b-tool
คุณสามารถรวมชุดไฟล์เสียงเข้ากับไฟล์หนังสือเสียง m4b ไฟล์เดียวได้
m4b-tool merge "data/my-audio-book" --output-file="data/my-audio-book.m4b"
สิ่งนี้จะรวมไฟล์เสียงทั้งหมดในโฟลเดอร์ data/my-audio-book
เข้ากับ my-audio-book.m4b
โดยใช้ tag-title ของทุกไฟล์เพื่อสร้างบท
หากมีไฟล์ data/my-audio-book/cover.jpg
(หรือ cover.jpeg
หรือ cover.png
) ไฟล์นั้นจะถูกใช้เป็นหน้าปกสำหรับไฟล์ m4b ที่ได้
หมายเหตุ: หากคุณใช้ไฟล์เสียงที่ไม่ได้แท็ก คุณสามารถระบุ musicbrainz id เพื่อรับชื่อบทที่ถูกต้องได้ โปรดดูข้อมูลเพิ่มเติมที่บทคำสั่ง
สำหรับตัวเลือกทั้งหมด โปรดดูที่ m4b-tool merge --help
:
Description:
Merges a set of files to one single file
Usage:
merge [options] [--] <input> [<more-input-files>...]
Arguments:
input Input file or folder
more-input-files Other Input files or folders
Options:
--logfile[=LOGFILE] file to log all output [default: ""]
--debug enable debug mode - sets verbosity to debug, logfile to m4b-tool.log and temporary encoded files are not deleted
-f, --force force overwrite of existing files
--no-cache clear cache completely before doing anything
--ffmpeg-threads[=FFMPEG-THREADS] specify -threads parameter for ffmpeg - you should also consider --jobs when merge is used [default: ""]
--platform-charset[=PLATFORM-CHARSET] Convert from this filesystem charset to utf-8, when tagging files (e.g. Windows-1252, mainly used on Windows Systems) [default: ""]
--ffmpeg-param[=FFMPEG-PARAM] Add argument to every ffmpeg call, append after all other ffmpeg parameters (e.g. --ffmpeg-param="-max_muxing_queue_size" --ffmpeg-param="1000" for ffmpeg [...] -max_muxing_queue_size 1000) (multiple values allowed)
-a, --silence-min-length[=SILENCE-MIN-LENGTH] silence minimum length in milliseconds [default: 1750]
-b, --silence-max-length[=SILENCE-MAX-LENGTH] silence maximum length in milliseconds [default: 0]
--max-chapter-length[=MAX-CHAPTER-LENGTH] maximum chapter length in seconds - its also possible to provide a desired chapter length in form of 300,900 where 300 is desired and 900 is max - if the max chapter length is exceeded, the chapter is placed on the first silence between desired and max chapter length [default: "0"]
--name[=NAME] custom name, otherwise the existing metadata will be used
--sortname[=SORTNAME] custom sortname, that is used only for sorting
--album[=ALBUM] custom album, otherwise the existing metadata for name will be used
--sortalbum[=SORTALBUM] custom sortalbum, that is used only for sorting
--artist[=ARTIST] custom artist, otherwise the existing metadata will be used
--sortartist[=SORTARTIST] custom sortartist, that is used only for sorting
--genre[=GENRE] custom genre, otherwise the existing metadata will be used
--writer[=WRITER] custom writer, otherwise the existing metadata will be used
--albumartist[=ALBUMARTIST] custom albumartist, otherwise the existing metadata will be used
--year[=YEAR] custom year, otherwise the existing metadata will be used
--description[=DESCRIPTION] custom short description, otherwise the existing metadata will be used
--longdesc[=LONGDESC] custom long description, otherwise the existing metadata will be used
--comment[=COMMENT] custom comment, otherwise the existing metadata will be used
--copyright[=COPYRIGHT] custom copyright, otherwise the existing metadata will be used
--encoded-by[=ENCODED-BY] custom encoded-by, otherwise the existing metadata will be used
--cover[=COVER] custom cover, otherwise the existing metadata will be used
--skip-cover skip extracting and embedding covers
--series[=SERIES] custom series, this pseudo tag will be used to auto create sort order (e.g. Harry Potter or The Kingkiller Chronicles)
--series-part[=SERIES-PART] custom series part, this pseudo tag will be used to auto create sort order (e.g. 1 or 2.5)
--audio-format[=AUDIO-FORMAT] output format, that ffmpeg will use to create files [default: "m4b"]
--audio-channels[=AUDIO-CHANNELS] audio channels, e.g. 1, 2 [default: ""]
--audio-bitrate[=AUDIO-BITRATE] audio bitrate, e.g. 64k, 128k, ... [default: ""]
--audio-samplerate[=AUDIO-SAMPLERATE] audio samplerate, e.g. 22050, 44100, ... [default: ""]
--audio-codec[=AUDIO-CODEC] audio codec, e.g. libmp3lame, aac, ... [default: ""]
--audio-profile[=AUDIO-PROFILE] audio profile, when using extra low bitrate - valid values: aac_he, aac_he_v2 [default: ""]
--adjust-for-ipod auto adjust bitrate and sampling rate for ipod, if track is too long (may result in low audio quality)
--fix-mime-type try to fix MIME-type (e.g. from video/mp4 to audio/mp4) - this is needed for some players to prevent an empty video window
-o, --output-file=OUTPUT-FILE output file
--include-extensions[=INCLUDE-EXTENSIONS] comma separated list of file extensions to include (others are skipped) [default: "aac,alac,flac,m4a,m4b,mp3,oga,ogg,wav,wma,mp4"]
-m, --musicbrainz-id=MUSICBRAINZ-ID musicbrainz id so load chapters from
--no-conversion skip conversion (destination file uses same encoding as source - all encoding specific options will be ignored)
--batch-pattern[=BATCH-PATTERN] multiple batch patterns that can be used to merge all audio books in a directory matching the given patterns (e.g. %a/%t for author/title) - parameter --output-file must be a directory (multiple values allowed)
--dry-run perform a dry run without converting all the files in batch mode (requires --batch-pattern)
--jobs[=JOBS] Specifies the number of jobs (commands) to run simultaneously [default: 1]
--use-filenames-as-chapters Use filenames for chapter titles instead of tag contents
--no-chapter-reindexing Do not perform any reindexing for index-only chapter names (by default m4b-tool will try to detect index-only chapters like Chapter 1, Chapter 2 and reindex it with its numbers only)
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--batch-pattern
หากคุณใช้พารามิเตอร์ --batch-pattern
ระบบจะรองรับตัวยึดตำแหน่งต่อไปนี้
title
/ name
: %n
sort_name
: %N
album
: %m
,sort_album
: %M
,artist
: %a
,sort_artist
: %A
,genre
: %g
,writer
: %w
,album_artist
: %t
,year
: %y
,description
: %d
,long_description
: %D
,comment
: %c
,copyright
: %C
,encoded_by
: %e
,group(ing)
: %G
,purchase_date
: %U
,series
: %s
,series_part
: %p
, m4b-tool
สามารถใช้เพื่อแยก m4b
เดี่ยวออกเป็นไฟล์ต่อบท หรืออัลบั้มที่เข้ารหัส flac
ออกเป็นแทร็กเดียวผ่านคิวชีต
m4b-tool split --audio-format mp3 --audio-bitrate 96k --audio-channels 1 --audio-samplerate 22050 "data/my-audio-book.m4b"
วิธีนี้จะแยกไฟล์ data/my-audio-book.m4b into
ไฟล์ MP3 สำหรับแต่ละบท โดยเขียนไฟล์ลงใน data/my-audio-book_splitted/
หากคุณต้องการแยกไฟล์ flac
ที่มีหลายแทร็ก จำเป็นต้องมีคิวชีทที่มีชื่อไฟล์ flac
ตรงกัน ( my-album.flac
ต้องใช้ my-album.cue
):
# my-album.cue is automatically found and used for splitting
m4b-tool split --audio-format=mp3 --audio-bitrate=192k --audio-channels=2 --audio-samplerate=48000 "data/my-album.flac"
สำหรับตัวเลือกทั้งหมด โปรดดูที่ m4b-tool split --help
:
Description:
Splits an m4b file into parts
Usage:
split [options] [--] <input>
Arguments:
input Input file or folder
Options:
--logfile[=LOGFILE] file to dump all output [default: ""]
--debug enable debug mode - sets verbosity to debug, logfile to m4b-tool.log and temporary files are not deleted
-f, --force force overwrite of existing files
--no-cache do not use cached values and clear cache completely
--ffmpeg-threads[=FFMPEG-THREADS] specify -threads parameter for ffmpeg [default: ""]
--platform-charset[=PLATFORM-CHARSET] Convert from this filesystem charset to utf-8, when tagging files (e.g. Windows-1252, mainly used on Windows Systems) [default: ""]
--ffmpeg-param[=FFMPEG-PARAM] Add argument to every ffmpeg call, append after all other ffmpeg parameters (e.g. --ffmpeg-param="-max_muxing_queue_size" --ffmpeg-param="1000" for ffmpeg [...] -max_muxing_queue_size 1000) (multiple values allowed)
-a, --silence-min-length[=SILENCE-MIN-LENGTH] silence minimum length in milliseconds [default: 1750]
-b, --silence-max-length[=SILENCE-MAX-LENGTH] silence maximum length in milliseconds [default: 0]
--max-chapter-length[=MAX-CHAPTER-LENGTH] maximum chapter length in seconds - its also possible to provide a desired chapter length in form of 300,900 where 300 is desired and 900 is max - if the max chapter length is exceeded, the chapter is placed on the first silence between desired and max chapter length [default: "0"]
--audio-format[=AUDIO-FORMAT] output format, that ffmpeg will use to create files [default: "m4b"]
--audio-channels[=AUDIO-CHANNELS] audio channels, e.g. 1, 2 [default: ""]
--audio-bitrate[=AUDIO-BITRATE] audio bitrate, e.g. 64k, 128k, ... [default: ""]
--audio-samplerate[=AUDIO-SAMPLERATE] audio samplerate, e.g. 22050, 44100, ... [default: ""]
--audio-codec[=AUDIO-CODEC] audio codec, e.g. libmp3lame, aac, ... [default: ""]
--audio-profile[=AUDIO-PROFILE] audio profile, when using extra low bitrate - valid values (mono, stereo): aac_he, aac_he_v2 [default: ""]
--adjust-for-ipod auto adjust bitrate and sampling rate for ipod, if track is to long (may lead to poor quality)
--name[=NAME] provide a custom audiobook name, otherwise the existing metadata will be used [default: ""]
--sortname[=SORTNAME] provide a custom audiobook name, that is used only for sorting purposes [default: ""]
--album[=ALBUM] provide a custom audiobook album, otherwise the existing metadata for name will be used [default: ""]
--sortalbum[=SORTALBUM] provide a custom audiobook album, that is used only for sorting purposes [default: ""]
--artist[=ARTIST]