]> Sergey Matveev's repositories - stargrave-blog.git/commit
Разделить аудиокнигу на части
authorSergey Matveev <stargrave@stargrave.org>
Mon, 14 Nov 2022 17:17:41 +0000 (20:17 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 14 Nov 2022 19:01:37 +0000 (22:01 +0300)
commit3ceaaf31a5fea22e03c95d202c439a9194c0a20e
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent27e88a567d405428275b6a716903184bf01372b8
Разделить аудиокнигу на части

Скачал я тут аудиокниги. Одна книга -- один файл. Но, благо, с
метаинформацией о частях (к сожалению в MP4 контейнере, а не Matroska).
Надо разделить на много файлов, так как ни на одном своём
MP3-проигрывателе нельзя быстро отмотать, например, на час вперёд.

FFmpeg-овская утилита ffprobe может выдать метаинформацию в JSON
формате. А дальше в цикле вызываю ffmpeg для создания набора WAV файлов.
Предварительно полность. декомпрессировав весь звук, потому что каждый
вызов ffmpeg с "перемоткой" вперёд -- отъедает кучу CPU, это медленно.

    ffprobe -i *.m4b -print_format json -show_chapters > json
    ids=`gojq ".chapters[-1].id" < json`
    ffmpeg -i *.m4b -map_metadata -1 -ac 1 -y wav.wav
    for i ({0..$ids}) {
        start=`gojq ".chapters[$i].start" < json`
        start=$(( $start / 1000 ))
        finish=`gojq ".chapters[$i].end" < json`
        finish=$(( $finish / 1000 ))
        finish=$(( $finish + 1 - $start ))
        ffmpeg -i wav.wav -ss ${start}s -t ${finish}s -y \
            `printf "%03d" $(( $i + 1 ))`.wav
    }
    rm wav.wav
    normalize *.wav