Skip to content

Instantly share code, notes, and snippets.

@Xitsa
Last active October 1, 2023 18:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xitsa/c6808c51ae92a91150eb2e4bf8578f5b to your computer and use it in GitHub Desktop.
Save Xitsa/c6808c51ae92a91150eb2e4bf8578f5b to your computer and use it in GitHub Desktop.
Перекодируем m4b
Использовать примерно так,
на примере файла Robert "Robert Zelazny - Lord of Light.m4b":
1. копируем все эти файлы во временную папку,
правим в них пути к ffmpeg, ffprobe, jq;
2. запускаем разбор
ParseChaptersM4b.bat "Robert Zelazny - Lord of Light.m4b" >> m4btomp3.bat
3) в m4btomp3.bat получим следующее содержание:
chcp 65001
rem Сначала надо извлечь все разделы с помощью ffprobe
rem ParseChaptersM4b.bat <filename>
rem А потом соответственно подкорректировать строки по образцу
SET COMMON_META=-map_chapters -1 -metadata artist="Roger Zelazny" -metadata album="Lord of Light"
SET FFMPEG=C:\WorkProg\Encoders\ffmpeg\bin\ffmpeg.exe
SET ACODEC=-acodec libmp3lame -ar 44100 -ab 128k
%FFMPEG% -i %1 -ss 0.000000 -to 15.557000 %ACODEC% -vn %COMMON_META% -metadata track="1/9" -metadata title="Opening Credits" "1.Opening Credits.mp3"
%FFMPEG% -i %1 -ss 15.557000 -to 6215.354000 %ACODEC% -vn %COMMON_META% -metadata track="2/9" -metadata title="Chapter 1" "2.Chapter 1.mp3"
%FFMPEG% -i %1 -ss 6215.354000 -to 12047.139000 %ACODEC% -vn %COMMON_META% -metadata track="3/9" -metadata title="Chapter 2" "3.Chapter 2.mp3"
%FFMPEG% -i %1 -ss 12047.139000 -to 18330.110000 %ACODEC% -vn %COMMON_META% -metadata track="4/9" -metadata title="Chapter 3" "4.Chapter 3.mp3"
%FFMPEG% -i %1 -ss 18330.110000 -to 24290.835000 %ACODEC% -vn %COMMON_META% -metadata track="5/9" -metadata title="Chapter 4" "5.Chapter 4.mp3"
%FFMPEG% -i %1 -ss 24290.835000 -to 30342.327000 %ACODEC% -vn %COMMON_META% -metadata track="6/9" -metadata title="Chapter 5" "6.Chapter 5.mp3"
%FFMPEG% -i %1 -ss 30342.327000 -to 35932.833000 %ACODEC% -vn %COMMON_META% -metadata track="7/9" -metadata title="Chapter 6" "7.Chapter 6.mp3"
%FFMPEG% -i %1 -ss 35932.833000 -to 41426.094000 %ACODEC% -vn %COMMON_META% -metadata track="8/9" -metadata title="Chapter 7" "8.Chapter 7.mp3"
%FFMPEG% -i %1 -ss 41426.094000 -to 41454.074195 %ACODEC% -vn %COMMON_META% -metadata track="9/9" -metadata title="End Credits" "9.End Credits.mp3"
4) посмотрели m4btomp3.bat, поправили если надо общие метаданные и запускаем его
m4btomp3.bat "Robert Zelazny - Lord of Light.m4b"
Вот и всё,
тут вроде всё очевидно и при необходимости корректируется руками.
ffmpeg и ffprobe я брал здесь https://www.gyan.dev/ffmpeg/builds/
jq — здесь https://jqlang.github.io/jq/download/
chcp 65001
rem Сначала надо извлечь все разделы с помощью ffprobe
rem ParseChaptersM4b.bat <filename>
rem А потом соответственно подкорректировать строки по образцу
SET COMMON_META=-map_chapters -1 -metadata artist="Roger Zelazny" -metadata album="Lord of Light"
SET FFMPEG=C:\WorkProg\Encoders\ffmpeg\bin\ffmpeg.exe
SET ACODEC=-acodec libmp3lame -ar 44100 -ab 128k
rem Ниже надо добавить выхлоп ParseChaptersM4b.bat
@echo off
SET FFPROBE=C:\WorkProg\Encoders\ffmpeg\bin\ffprobe.exe
SET JQ=C:\WorkProg\Jq\jq.exe
%FFPROBE% -print_format json -show_chapters %1 2>nul | jq -r -f ParseChaptersM4b.jq
.chapters as $chaps | .chapters[] | "%FFMPEG% -i %1 -ss \(.start_time) -to \(.end_time) %ACODEC% -vn %COMMON_META% -metadata track=\"\(.id + 1)/\($chaps|length)\" -metadata title=\"\(.tags.title)\" \"\(.id + 1).\(.tags.title).mp3\""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment