#!/bin/bash # Versija 0.02; 2020.12.12 # (C) Karlis Kalviskis # Licence: GPL # Izvelk informāciju no dotajā direktorijā un visās apakšdirektorijās esošiem video failiem # Rezultātu izdrukā uz piedāvātā ierīces, tādēļ, ja grib saglabāt failā, raksti, piemēram: # ./par_filmaam.sh > ../kopsavilkums.csv> ### Aiļu saturs ######################################################## # Faila vārds ar relatīvo ceļu # Ilgums (hh:mm:ss.ssss) # Ilgums (ssss.ssss) # Faila izmērs (baitos) # Video saspiedēja īsais nosaukums # Attēla patiesais platums (pikseļos) # Attēla patiesais augstums (pikseļos) # Attēla rādamias platums (pikseļos) # Attēla rādamais augstums (pikseļos) # Pikseļu malu attiecība # Attēla malu attiecība # Kadru skaits sekundē # Video vidējais apjoms, bitu skaits sekundē # Skaņas saspiedēja īsais nosaukums # Skaņas diskretizācijas frekvence (skaņas sasmalcinājums, Hz) # Skaņas kanālu skaits # Skaņas kanālu izkartojums # Skaņas vidējais apjoms, bitu skaits sekundē # Filmas videjais apjoms, megabiti sekundē ######################################################################## # Izdrukā kā kļūdas paziņojumu errcho(){ >&2 echo $@; } # Pārbauda, vai ir vajadzīgās programmas for PROG in bc ffprobe ; do type -P $PROG &>/dev/null || { errcho "Programma «$PROG» nav atrodama. Darbs pārtraukts"; exit 10; } done # Lielākais kopīgais dalītājs gcd(){ if [ $2 -lt $1 ]; then local A=$1 local B=$2 else local B=$1 local A=$2 fi local T while [[ $B > 0 ]] ; do let T=A let A=B let B=T%B done return $A } # Video malu attiecības attiecibas(){ local W=$1 local H=$2 gcd $W $H local A=$? let W=W/A let H=H/A ATTIECIBA_STR=$(echo "$W : $H") } echo "fails f_duration f_duration_d f_size v_codec_name v_width v_height v_coded_width v_coded_height v_sample_aspect_ratio v_display_aspect_ratio v_r_frame_rate v_bit_rate a_codec_name a_sample_rate a_channels a_channel_layout a_bit_rate s_bit_rate" for veids in mp4 avi mkv wmv; do for fails in $(find . -iname "*.$veids"); do f_duration=$(ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal "$fails") read -d "\n" -s -r \ f_duration_d f_size \ <<<$(ffprobe \ -v quiet -show_entries format=duration,size -of default=noprint_wrappers=1:nokey=1 \ "$fails") read -d "\n" -s -r \ v_codec_name v_width v_height v_coded_width v_coded_height v_sample_aspect_ratio v_display_aspect_ratio v_r_frame_rate v_bit_rate \ <<<$(ffprobe \ -v quiet -select_streams v:0 -of default=noprint_wrappers=1:nokey=1 -show_entries \ stream=codec_name,width,height,coded_width,coded_height,sample_aspect_ratio,display_aspect_ratio,r_frame_rate,bit_rate \ "$fails") read -d "\n" -s -r \ a_codec_name a_sample_rate a_channels a_channel_layout a_bit_rate \ <<<$(ffprobe \ -v quiet -select_streams a:0 -of default=noprint_wrappers=1:nokey=1 -show_entries \ stream=codec_name,sample_rate,channels,channel_layout,bit_rate \ "$fails") # Megabiti sekundē. Faila izmērs dots baitos, tādēļ 8 / 1024^2 = 0,0000076294 s_bit_rate=$(echo "scale=8; ($f_size / $f_duration_d) * 0.00000763" | bc) # Dažiem video 'display_aspect_ratio' rādās kā 'N/A', tādēļ jārēķina pašam ATTIECIBA_STR='' attiecibas $v_width $v_height v_sample_aspect_ratio=$ATTIECIBA_STR attiecibas $v_coded_width $v_coded_height v_display_aspect_ratio=$ATTIECIBA_STR #Kadru skaits sekundē tiek rādīts kā attiecība. Jāpārvēš daļskaitlī v_r_frame_rate=$(echo "scale=2; $v_r_frame_rate" | bc) echo "$fails $f_duration $f_duration_d $f_size $v_codec_name $v_width $v_height $v_coded_width $v_coded_height $v_sample_aspect_ratio $v_display_aspect_ratio $v_r_frame_rate $v_bit_rate $a_codec_name $a_sample_rate $a_channels $a_channel_layout $a_bit_rate $s_bit_rate" done done