Я использую ffmpeg для извлечения неподвижных изображений из видео. С заданного времени, на заданную продолжительность, используя параметры -ss и -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

(Сначала я начинаю с метки времени / продолжительности, чтобы ffmpeg запускал демукс в этот момент.)

Однако я хочу использовать несколько начальных точек (например, в 00:01:12 дюйма извлекать изображения в течение 2 секунд; в 00:11:00 минут в, извлекать изображения в течение 4 секунд; и т.д.) Я могу сделать это вручную, заменяя временную метку и длительность и каждый раз перемещая выходные изображения, но в идеале я хочу вводить временные метки и длительности одновременно, а не перезаписывать выходные изображения. Есть ли способ сделать это? Возможно, с внешним файлом с отметками времени / продолжительностью?

Я новичок в этом, и предпочитаю делать это только с ffmpeg, а не использовать bash.

1 ответ1

1

Я не вижу способа сделать это с помощью ffmpeg легко. Существует мультиплексор сегмента, но вы не можете установить продолжительность сегментов.

Ничто не мешает вам делать это так, что я считаю довольно простым. Просто создайте текстовый файл, содержащий разделенный запятыми список начальных точек и длительностей:

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

А потом в Баш:

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

Это создаст выходные файлы, начинающиеся с уникального номера (1, 2, 3,…).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .