Как я могу разделить кучу файлов m4a на куски и заменить их метаданные на ffmpeg? - PullRequest
0 голосов
/ 28 ноября 2018

Я прочитал множество тем, которые частично касались моей проблемы, и попытался написать скрипт, который разбивает аудиофайл .m4a по частям и заменяет его метаданные.

Мне не удалось добиться этого водна строка (может быть, вы можете сказать мне, как это сделать), но подошли довольно близко к этим двум сценариям.(Я разделил их на две части только для удобства чтения и отладки.)

#!/bin/bash
# cutaudio.sh

input=$1
output=$2
duration=$3

ffmpeg -i $input -map 0 -f segment -segment_time $duration -c copy "$output-%03d.m4a"

Приведенный выше скрипт отлично работает и разбивает файлы на куски заданной длины.

#! /bin/bash
# stripmetadata.sh


input=$1

n="1"
for i in $input*; do 
    title="Part $n"
    ffmpeg -i $i -map 0 -metadata title="$title" -c copy -y "$i"
    n=$((n + 1))
done

Этот скрипт на самом делеудается заменить заголовок в метаданных, однако файлы также удаляются до первой секунды.Все они размером 33,7 Кб после второго сценария.Я все еще новичок в ffmpeg, так что помощь будет очень полезна!

Редактировать: Вот результирующий скрипт, для всех, кто заинтересован: https://github.com/adrifromhh/cutaudio Я использую его, чтобы вырезать загруженные аудиокниги(из YouTube или записано из Audible) в пригодных для использования частях.

1 Ответ

0 голосов
/ 28 ноября 2018

Чтобы развернуть комментарий oguzismail, вы должны записать во временный файл, а затем переписать исходный файл чанка, например,

for i in $input*; do title="Part $n" ffmpeg -i $i -map 0 -metadata title="$title" -c copy -y /tmp/tmp.m4a mv -f /tmp/tmp.m4a "$i" n=$((n + 1)) done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...