From 3ceaaf31a5fea22e03c95d202c439a9194c0a20e Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 14 Nov 2022 20:17:41 +0300 Subject: [PATCH] =?utf8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D1=82?= =?utf8?q?=D1=8C=20=D0=B0=D1=83=D0=B4=D0=B8=D0=BE=D0=BA=D0=BD=D0=B8=D0=B3?= =?utf8?q?=D1=83=20=D0=BD=D0=B0=20=D1=87=D0=B0=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Скачал я тут аудиокниги. Одна книга -- один файл. Но, благо, с метаинформацией о частях (к сожалению в 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 -- 2.50.0