[FFmpeg-devel] [RFC][PATCH] Tool to sort files a bit
Sat Oct 9 11:23:30 CEST 2010
On date Saturday 2010-10-09 00:12:17 +0200, Michael Niedermayer encoded:
> The attached script creates directories and symlinks for multimedia files
> based on container and codec in the file. I hope ive not done this work
> it needs to be checked by someone who knows shell escaping to make it
> secure ive made no attempt at making it secure.
> Also if people are ok with it id like to commit this so more people can work on
> it, iam not an expert on shell programming ...
> yes its intended to help with incoming / samples maybe at some point or even
> to help people sort their personal file collections
> commit ca9a964c2eba0ba6cda767cfe2d74b80c245dd4c
> Author: Michael Niedermayer <michaelni at gmx.at>
> Date: Fri Oct 8 23:58:51 2010 +0200
> Tool to analyze multimedia files and create directories and symlinks for the
> container type and codecs in each file that point back to the file.
> diff --git a/tools/jauche_sortierer.sh b/tools/jauche_sortierer.sh
> new file mode 100755
> index 0000000..517353f
> --- /dev/null
> +++ b/tools/jauche_sortierer.sh
> @@ -0,0 +1,19 @@
> +#add pixelformat/sampleformat into the path of the codecs
The name of the script and of $TMP are weird, as already noted...
Also $TMP should contain at least the pid, in order to avoid conflicts
with other concurrent instances of the script, so I suggest:
> +for v do
what is v?
> + BASE=`basename $v`
> + echo $v | egrep -i '(public|private)' >/dev/null && echo Warning $v may be private
> + $FFP $v 2> $TMP
> + FORM=`(grep 'Input #0, ' -m1 $TMP || echo 'Input #0, unknown') | sed 's/Input #0, \([a-zA-Z0-9_]*\).*/\1/' `
Since we're using ffprobe the parsing can be simplified a lot (and
made more robust), using ffprobe -show_streams -show_format, also it
should make trivial to add support for other features like pixfmts,
samplefmts, codec tags.
Also I tend to prefer the $(...) syntax over `...`, as it is generally
more readable (and my editor allows to match opening and closing
> + mkdir -p $TARGET/container/$FORM
> + ln -s $v $TARGET/container/$FORM/$BASE
> + eval `grep 'Stream #0\.[^:]*: [a-zA-Z0-9][^:]*: [a-zA-Z0-9]' $TMP | sed 's#[^:]*: \([a-zA-Z0-9]*\)[^:]*: \([a-zA-Z0-9]*\).*#mkdir -p '$TARGET'/\1/\2 ; ln -s '$v' '$TARGET'/\1/\2/'$BASE' ; #'`
Missing rm $TMP at the end.
FFmpeg = Fiendish & Fabulous MultiPurpose Excellent Gymnast
More information about the ffmpeg-devel