Как сделать видео с фиксированной продолжительностью

У меня есть видео:

видео1 - 923 секунды

video2 - 1457 секунд

video3 - 860 секунд

Мне нужно вырезать эти видео и зафиксировать его длительность - 600 секунд. Но сложность в том, что мне нужно их по схеме нарезать

видео

Куда:

  1. синие сегменты всегда 120 секунд (исправлено);

  2. красные сегменты я должен разрезать;

  3. зеленые сегменты я не должен резать.

После этого мне нужно соединить синие и зеленые сегменты в новом 600-секундном видео, например

видео

Поскольку видео1, видео2, видео3 имеют разную длительность, тогда красный и зеленый сегменты должны иметь разную длительность, они должны быть пропорциональны продолжительности видео.

Мне нужна чистая команда ffmpeg (avconv) или скрипт bash. Понятия не имею, как это сделать.

1 ответ

Решение

Вероятно, самый простой способ сделать это - создать список решений для редактирования (EDL), который затем можно использовать для написания окончательного видео. я не знаю ffmpeg/avconv, но mplayer/mencoder справлюсь с этим вполне, посмотри документы.

чтобы создать EDL, используйте функцию вроде:

make_edl() {
 DUR=$1
 PRE=$2
 SLICES=$3
 POST=$4
 ## get the duration of the cut-up pieces
 SNIPPET=$(((DUR-PRE-POST)/SLICES))
 START=$PRE
 STOP=$((DUR-POST))

 curr=$START

 while [ $curr -lt $STOP ]; do
   currstop=$((cur+SNIPPET))
   if [ $currstop -gt $STOP ]; then
     currstop=$STOP
   fi
   echo "${curr} $((curr+SNIPPET)) 0"
   curr=$((curr+2*SNIPPET))
 done
}

# ...

## the following create an EDL for a 923sec movie,
## where we have 120sec of intro, than 31 alternating slices
## and 120sec of outro
make_edl 923 120 31 120 > myedl.txt

## apply the EDL
mencoder -edl myedl.txt input923.mov -o output923.mov

из-за ограничений арифметики bash (только целочисленные), это не может быть очень точным

Другие вопросы по тегам