Невозможно получить прямую ссылку - получено 403 Запрещено [дубликат]

Dada una matriz arr3 que contiene datos de muestra:

declare -a arr3=([0]="00:00:22.180 --> 00:00:25.600"
                 [1]="00:00:24.070 --> 00:00:27.790")

Puede recorrer cada elemento de la matriz, eliminar la hora de inicio y la hora de finalización, convertirlos en fracciones de segundo, calcular la duración y luego convertir esa duración de nuevo al formato hh :mm :ss.sss para el comando ffmpeg.

# converts HH:MM:SS.sss to fractional seconds
codes2seconds() (
  local hh=${1%%:*}
  local rest=${1#*:}
  local mm=${rest%%:*}
  local ss=${rest#*:}
  printf "%s" $(bc <<< "$hh * 60 * 60 + $mm * 60 + $ss")
)

# converts fractional seconds to HH:MM:SS.sss
seconds2codes() (
  local seconds=$1
  local hh=$(bc <<< "scale=0; $seconds / 3600")
  local remainder=$(bc <<< "$seconds % 3600")
  local mm=$(bc <<< "scale=0; $remainder / 60")
  local ss=$(bc <<< "$remainder % 60")
  printf "%02d:%02d:%06.3f" "$hh" "$mm" "$ss"
)

subtracttimes() (
  local t1sec=$(codes2seconds "$1")
  local t2sec=$(codes2seconds "$2")
  printf "%s" $(bc <<< "$t2sec - $t1sec")
)

declare -a arr3=([0]="00:00:22.180 --> 00:00:25.600"
                 [1]="00:00:24.070 --> 00:00:27.790")

for range in "${arr3[@]}"
do
  duration=$(subtracttimes "${range%% -->*}" "${range##*--> }")
  printf "%s\n" "ffmpeg -i movie.mp4 -ss ${range%% -->*} -t $duration -async 1 cut.mp4"
done

La función codes2secondsespera entrada en formato HH :MM :SS.sss;elimina los diversos elementos mediante la expansión de parámetros y luego los pasa a bcpara la conversión en número total de segundos.

La función seconds2codesespera una fracción de segundos e invierte la conversión, lo que da como resultado una cadena HH :MM :SS.sss.

La función subtracttimesconvierte los dos parámetros en fracciones de segundo y luego pregunta a bccuál es la diferencia.

El bucle al final pasa por cada elemento de arr3; utiliza las funciones anteriores para calcular la duración (nuevamente usando la expansión de parámetros para recuperar los dos tiempos )y luego imprime una llamada de muestra ffmpegpara que coincida con su salida de muestra.

Resultados:

ffmpeg -i movie.mp4 -ss 00:00:22.180 -t 3.420 -async 1 cut.mp4
ffmpeg -i movie.mp4 -ss 00:00:24.070 -t 3.720 -async 1 cut.mp4
72
29.06.2014, 11:58
0 ответов

Теги

Похожие вопросы