0

I have a script which splits mp3 files into smaller files and incrementally numbers them. I'm now also trying to incrementally increase the -metadata title number value and -metadata track number value but ffmpeg sees everything as a string. The line I'm having issue with is.

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 

If you look at the metadata title created it says $%03d-title_of_file.mp3 I'm trying to get the metatdata title to increment like 001-title_of_file.mp3, 002-title_of_file.mp3, 003-title_of_file.mp3,...

The full script i'm using is below:

#!/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 

Using -metadata title="$%03d-$fn.mp3" -metadata track="$%02d" does not create incremental numbers with leading zeros when used with ffmpeg.

3
  • Why are you expecting $%03d to be a) filled with a number and b) be incremented? Commented Feb 4, 2019 at 12:32
  • Possible duplicate of How to add leading zeros for for-loop in shell? Commented Feb 4, 2019 at 12:32
  • @slhck %03d-$fn.mp3 will create incremental numbers with leading zeros with ffmpeg but not used within the -metadata tag Commented Feb 4, 2019 at 12:52

1 Answer 1

1

The %03d syntax is only valid for input or output file patterns, for those (de)muxers that implement this kind of parsing (e.g., image2, segment). You cannot use it for setting metadata attributes. In other words, you can't have ffmpeg populate the field with the current segment filename.

Also, the $ in $%03d does not make sense—you're not referring to a shell variable here.

If you want to set the metadata according to the filename of the file that is generated, you have to do this in a second pass. Loop over each generated file, parse its filename, and use that to set the metadata value. Copy the existing audio/video streams with -c copy and -map 0 (the latter is necessary if you have more than one audio/video stream).

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.