конвертировать значение метаданных в строку при выполнении преобразования ffmpeg - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть скрипт, который разбивает mp3-файлы на более мелкие файлы и постепенно их нумерует.Сейчас я также пытаюсь постепенно увеличивать заголовок -метаданных числовое значение и дорожку-метаданных числовое значение, но ffmpeg видит все как строку.Строка, с которой у меня возникла проблема:

ffmpeg -i "$f" -f segment -segment_time 1200 -ar 22050 -ac 1 -metadata title="$%03d-$fn.mp3" -metadata track="$%02d" "$splitdirname/%03d-$fn.mp3" #split every 20mins

Если вы посмотрите на созданный заголовок метаданных, он говорит: $% 03d-title_of_file.mp3 Я пытаюсь получить метаданныезаголовок с приращением, например 001-title_of_file.mp3 , 002-title_of_file.mp3 , 003-title_of_file.mp3 , ...

Полный сценарий, который я использую, приведен ниже:

#!/bin/bash
#run using bash mp3spl.sh
currentdir="$(pwd)" #get current directory


for f in *.mp3 # only look for mp3 files
do

#fn=`echo "$1" | cut -d'.' -f1` #get just the filename no extension
fn=$(basename "$f" | cut -d'.' -f1) #get just the filename no extension
echo "($fn)"

splitdirname="$currentdir/split-$fn" #sub directory with correct names
#echo "splitdirname $splitdirname"
mkdir -p "$splitdirname" #make split directory
#echo "Processing $f"
ffmpeg -i "$1" 2> tmp.txt

ffmpeg -i "$f" -f segment -segment_time 1200 -ar 22050 -ac 1 -metadata title="$%03d-$fn.mp3" -metadata track="$%02d" "$splitdirname/%03d-$fn.mp3" #split every 20mins

#rm tmp.txt

done

Использование -metadata title = "$% 03d- $ fn.mp3" -metadata track = "$% 02d" не создает добавочные числас ведущими нулями при использовании с ffmpeg.

1 Ответ

0 голосов
/ 04 февраля 2019

Синтаксис %03d действителен только для шаблонов входных или выходных файлов, для тех (де) мультиплексоров, которые реализуют этот тип анализа (например, image2, segment).Вы не можете использовать его для установки атрибутов метаданных.Другими словами, вы не можете заставить ffmpeg заполнять поле текущим именем файла сегмента.

Кроме того, $ в $%03d не имеет смысла - здесь вы не ссылаетесь на переменную оболочки.

Если вы хотите установить метаданные в соответствии с именем файла сгенерированного файла, вы должны сделать это за второй проход.Зацикливайтесь на каждом сгенерированном файле, анализируйте его имя файла и используйте его для установки значения метаданных.Скопируйте существующие аудио / видео потоки с помощью -c copy и -map 0 (последнее необходимо, если у вас более одного аудио / видео потока).

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