ffmpeg: imágenes de video en diferentes secciones y numeradas gradualmente

0

Estoy usando ffmpeg para extraer imágenes fijas de un video. Desde un momento dado, para una duración dada usando los parámetros -ss y -t.

ffmpeg -ss 00:10:01 -t 2 -i /Volumes/OO_8/VideoSource.mkv -qscale:v 2 -start_number  /Users/Olivier/Pictures/ScreenCaptures/ViewsOfNature-%4d.jpeg

(Comienzo con la marca de tiempo / duración primero para que ffmpeg comience el demux en ese punto).

Sin embargo, quiero usar varios puntos de partida (por ejemplo, a las 00:01:12 in, extraer las imágenes durante 2 segundos; a las 00:11:00 minutos, extraer las imágenes durante 4 segundos; etc.) que puedo hacer esto manualmente, reemplazando la marca de tiempo y la duración, y moviendo las imágenes de salida cada vez, pero idealmente quiero ingresar las marcas de tiempo y las duraciones de una vez, y no sobrescribir las imágenes de salida. ¿Hay alguna forma de hacer esto? ¿Quizás con un archivo externo con las marcas de tiempo / duraciones?

Soy nuevo en esto y prefiero hacerlo solo con ffmpeg, no usar bash.

OlivierOO
fuente

Respuestas:

1

No veo una manera de hacerlo con ffmpeg fácilmente. Hay un silenciador de segmento pero no puede establecer la duración de los segmentos.

No hay nada que te impida hacerlo así, lo que creo que es bastante simple. Simplemente cree un archivo de texto que contenga una lista separada por comas de puntos de inicio y duraciones:

$ cat split.txt
00:01:05,5
00:06:10,2
00:08:25,1

Y luego en Bash:

count=1
while read -r -d ',' start duration; do
  ffmpeg -ss "$start" -i input.mp4 -t "$duration" "$count-output-%04d.jpg"
  (( count++ ))
done < split.txt

Esto creará archivos de salida que comienzan con un número único (1, 2, 3, ...).

slhck
fuente
Intenté también con 00:01:02.01(el último es el marco) y eso pareció resolverlo, pero aún a veces se rechaza una marca de tiempo. Jugar con los valores parece resolverse (aumentando o disminuyendo) parece resolverlo. Sospecho que es con ffmpeg que no encuentra esa posición en el archivo fuente. He intentado posiciones aleatorias hasta ahora. Intentaré con las posiciones reales que necesito y volveré sobre esto.
OlivierOO
Creo que fue un problema de lectura de formato / archivo con Bash. La marca de tiempo es HH:MM:SS.msecy eso siempre debería funcionar. Tenga en cuenta que no son marcos. Cuando no encuentra un marco a la hora especificada, tomará el siguiente.
slhck
Ahora tengo: 00:01:02.000 1.5 00:10:06.000 2 00:12:01.030 2 00:16:06.050 1 esto funciona. (El valor de 1.5 para la duración de la última línea Probé más tarde, que también funciona.)
OlivierOO