Создавайте видео из PNG с помощью FFMPEG и переменных временных меток для каждого изображения.

Я пытаюсь взять стопку скриншотов PNG и отметку времени каждого скриншота и создать видео с ffmpeg, которое воссоздает время скриншотов.

Судя по справке ffmpeg, -vsync 0 вроде бы то, что мне нужно,

-vsync параметр

0, транзитная передача Каждый кадр со своей меткой времени передается от демультиплексора к мультиплексору.

Кто-нибудь знает, как передать эту информацию о метке времени в ffmpeg? В настоящее время каждый снимок экрана имеет время записи в миллисекундах в качестве имени файла.

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

ffmpeg -vsync 0 -pattern_type glob -i '*.png' -c:v libx264 output.mp4


person Joseph Lust    schedule 14.11.2020    source источник
comment
ffmpeg может использовать измененное время файла для установки временных меток, но не имени файла,   -  person Gyan    schedule 15.11.2020


Ответы (1)


Сценарий: получить время из имени файла минус предыдущее время файла = продолжительность временного видео, затем объединить видео

#!/bin/bash
LST=($(ls -1tr Screenshot*.png))
TOT=${#LST[*]}
f="${LST[0]}"
#Screenshot_20201115_135335.png
FNM="${f%.*}"
SEC="${FNM:24:2}"
MIN="${FNM:22:2}"
HOU="${FNM:20:2}"
echo $f $HOU $MIN $SEC
BEG=$(echo "$HOU * 3600 + $MIN * 60 + $SEC" | bc -l)
echo $f $BEG
INP=("-i" "$f")
OUT="${f%.*}.mkv"
TXT=list.txt
echo "#png to mkv" > $TXT

for (( i=1; i<=$(( $TOT -1 )); i++ )); do
  f="${LST[$i]}"
  FNM="${f%.*}"
  SEC="${FNM:24:2}"
  MIN="${FNM:22:2}"
  HOU="${FNM:20:2}"
  TIM=$(echo "$HOU * 3600 + $MIN * 60 + $SEC" | bc -l)
  DUR=$(echo "$TIM - $BEG" | bc -l)
  echo $f $TIM $DUR
  ffmpeg -y -hide_banner -loop 1 "${INP[@]}" -t $DUR "/tmp/${OUT}"
  echo "file '/tmp/${OUT}'" >> $TXT
  BEG=$TIM
  INP=("-i" "$f")
  OUT="${f%.*}.mkv"
done

ffmpeg -y -hide_banner -loop 1 "${INP[@]}" -t 5 "/tmp/${OUT}"
echo "file '/tmp/${OUT}'" >> $TXT

cat "$TXT"
ffmpeg -hide_banner -f concat -safe 0 -i "$TXT" -c:v h264_nvenc -cq 20 -y /tmp/output.mkv
ffplay /tmp/output.mkv
person Баяр Гончикжапов    schedule 15.11.2020