Achivid sirve para disminuir el tamaño de archivos .mp4.
Este programa usa flags de ffmpeg para reducir sus dimensiones (por defecto un %50 más pequeño, se puede cambiar con -t xx:yy, es decir, largo por alto separado por dos puntos).
También setea (arbitrariamente hasta ahora) el valor de setsar a 1:1.
El archivo debe ubicarse en la ruta en que se ejecute el programa, esto para la gestión de archivos temporales.
Una vez finalizado el proceso de ffmpeg se puede escoger si conservar el archivo original o no.
Para instalar, copiar código en archivo achivid en /usr/bin.
Modo de uso:
$ achivid -f archivo.mp4
Código:
#!/bin/sh
printf ":: 6f-achivid :: \n\n"
while getopts ":f:t" opt; do
case $opt in
f) f="$OPTARG";; # fichero
t) t="$OPTARG";; # tamaño
esac
done
# confirma que se señala fichero a editar
if [ -z "$f" ]; then
printf "Indica el fichero que quieres editar\n\n achivid -f test.mp4 [-t xxx:yyy]\n\n"
exit
fi
archivo=$f
# confirma que archivo es de video
# confirma que fichero está en directorio
sl='\/'
a0=$(echo "$archivo" | sed s/"$sl"/\n/)
a1=$(printf "%s\n" "$a0" | sed -n 1p)
printf "$archivo" > tmpachivid_loc0
printf "$a1" > tmpachivid_loc1
a4=$(diff tmpachivid_loc0 tmpachivid_loc1 )
rm tmpachivid_loc*
if [ ! -z "$a4" ]; then
echo 'Debes estar en el directorio en que está el archivo que quieres manipular'
exit
fi
# determina tamaño de salida
if [ ! -z "$t" ]; then # usuario señala tamaño
# verifica formato de tamaño
# define
scale=$t
else # usuario NO señala tamaño
res=$(ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height -of csv=s=x:p=0 \
"$archivo" | sed s/x/\n/)
rX=$(printf "%s\n" "$res" | sed -n 1p)
rY=$(printf "%s\n" "$res" | sed -n 2p)
eX=$(expr "$rX" % 2)
eY=$(expr "$rY" % 2)
if [ "$eX" -ne 0 ]; then
rX=$(expr "$rX" + 1)
fi
if [ "$eY" -ne 0 ]; then
rY=$(expr "$rY" + 1)
fi
scale="$rX":"$rY"
done=1
# EJECUTA EDICIÓN
fi
if [ "$done" -eq 1 ]; then
printf "ffmpeg init\n"
ffmpeg -loglevel quiet -stats -i "$archivo" -vf scale="$scale",setsar=1:1 ch_"$archivo"
printf "mantener archivo?\n 1-si \n otro-no \n"
antes=$(ls -lh "$archivo")
read mantener
if [ "$mantener" -eq 1 ]; then
printf "manteniendo archivo: original_$archivo \n"
mv "$archivo" original_"$archivo"
else
printf "eliminando archivo original \n"
rm "$archivo"
fi
printf "renombrando archivo temporal\n\n"
mv ch_"$archivo" "$archivo"
printf "resultados:\n"
echo "$antes"
ls -lh "$archivo"
fi