Это моё решение, оно хорошо работает на Ubuntu-16.04.02-LTS. Он основан на другом опубликованном решении, но улучшил обработку глав и сгенерированных файлов для каждой главы.
Это пример выполнения:
$ mkv-split-chapters some-mkv-file.mkv Filename: some-mkv-file Extension: mkv Filedir: . ffmpeg -i some-mkv-file.mkv -ss 0.000000 -to 394.800000 -acodec copy -vcodec copy ./some-mkv-file-#00.mkv [...] ffmpeg -i some-mkv-file.mkv -ss 394.800000 -to 767.160000 -acodec copy -vcodec copy ./some-mkv-file-#01.mkv [...] ffmpeg -i some-mkv-file.mkv -ss 757.160000 -to 1216.720000 -acodec copy -vcodec copy ./some-mkv-file-#02.mkv [...]
Это скрипт:
$ cat /usr/local/bin/mkv-split-chapters #!/bin/bash file="$1" if [ -z "$file" ]; then echo "Missing file argument!" exit 1 fi filename=$(basename "$file") fileextension="$" filename="$" filedir=$(dirname "$file") echo "Filename: $filename" echo "Extension: $fileextension" echo "Filedir: $filedir" ffmpeg -i $file 2>&1 | grep 'Chapter' | grep 'start' | grep ', end' | awk "{ chapter=\$2 # replace : with nil gsub(/:/, \"\", chapter) start=\$4 # remove everything but 0-9. gsub(/[^0123456789\.]/, \"\", start) end=\$6 command=sprintf(\"ffmpeg -i $file -ss %s -to %s -acodec copy -vcodec copy $filedir/$filename-%s.$fileextension\n\", start, end, chapter) print(command) system(command) }"
Сценарий также доступен здесь:
https://github.com/dpsenner/mkv-split-chapters
Какая операционная система?