Как сделать видео с фиксированной продолжительностью
У меня есть видео:
видео1 - 923 секунды
video2 - 1457 секунд
video3 - 860 секунд
Мне нужно вырезать эти видео и зафиксировать его длительность - 600 секунд. Но сложность в том, что мне нужно их по схеме нарезать
Куда:
синие сегменты всегда 120 секунд (исправлено);
красные сегменты я должен разрезать;
зеленые сегменты я не должен резать.
После этого мне нужно соединить синие и зеленые сегменты в новом 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 (только целочисленные), это не может быть очень точным