So molto poco di scripting bash o di comandi Terminal, questo è tutto molto nuovo per me quindi per favore portami con me.
Script originale
Vorrei usare uno script che ho trovato su littlefield.info come servizio di automazione. Questo è lo script originale:
for file in *.flv *.mov *.mp4
do mediainfo "--Inform=Video;%Duration%" $file
done | awk '{total+=$0}END{total=total/1000}END{print strftime("%H:%M:%S",total,1)}'
Spiegato dal creatore:
- Cycle through every video file in a folder,
- Passing it to the mediainfo program to extract the duration in milliseconds,
- Passing that result to the awk program to add up all the numbers to give us a total,
- Passing that to awk again to divide that number by 1000 to give the number of seconds,
- Passing that that to the strftime function to display the result in Hours:Minutes:Seconds format.
Script modificato
Ho installato la mediainfo CLI e ho iniziato a sperimentare. Apparentemente strftime
non è disponibile su mac, quindi ho dovuto cercare un altro modo su come convertire i secondi in output leggibili. Ho messo insieme il seguente script (probabilmente orribilmente inefficiente, ma hey .. funziona):
# the cd is needed for automator
cd "$1"
i=$(for file in *.flv *.mov *.mp4
do mediainfo "--Inform=Video;%Duration%" $file
done | awk '{total+=$0}END{print total}')
((i/=1000, sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%dh%02dm%02ds" $hrs $min $sec)
echo -e "Total duration of video files in this folder:\n\n$timestamp" > _total_duration.txt
Funziona perfettamente bene in Terminal. Ma eseguirlo come un servizio da Finder fornisce il seguente output:
Total duration of video files in this folder:
0h00m00s
awk problema variabile
La durata non dovrebbe essere 0. Ho iniziato la risoluzione dei problemi e ho ridotto lo script al seguente:
for file in *.flv *.mov *.mp4
do mediainfo "--Inform=Video;%Duration%" $file
done | awk '{total+=$0}END{print total}' > "test_file_awk.txt"
Sembra che ci sia un problema con la variabile total
in AWK. Non emette alcunché quando viene eseguito da Finder ma funziona correttamente da Terminale.
Ragazzi avete idea di cosa sto facendo male?