Encoding 使用FFMPEG和可变的每幅图像时间戳从PNG创建视频

Encoding 使用FFMPEG和可变的每幅图像时间戳从PNG创建视频,encoding,ffmpeg,screenshot,frame-rate,vsync,Encoding,Ffmpeg,Screenshot,Frame Rate,Vsync,我正在尝试获取一堆屏幕截图PNG和每个屏幕截图的时间戳,并使用ffmpeg创建一个视频,以重新创建屏幕截图的计时 根据ffmpeg帮助,-vsync0似乎是我需要的 -垂直同步参数 0,传递每个帧及其时间戳从 解复用器到复用器 有人知道如何将此时间戳信息传递到ffmpeg?目前,每个屏幕截图都有记录时间(毫秒)作为文件名 下面的示例不接受我能告诉您的任何计时信息,因此我正在寻找合适的格式来传递到命令 ffmpeg-vsync 0-pattern_-type glob-i'*.png'-c:v l

我正在尝试获取一堆屏幕截图PNG和每个屏幕截图的时间戳,并使用
ffmpeg
创建一个视频,以重新创建屏幕截图的计时

根据
ffmpeg
帮助,
-vsync0
似乎是我需要的

-垂直同步参数

0,传递每个帧及其时间戳从 解复用器到复用器

有人知道如何将此时间戳信息传递到
ffmpeg
?目前,每个屏幕截图都有记录时间(毫秒)作为文件名

下面的示例不接受我能告诉您的任何计时信息,因此我正在寻找合适的格式来传递到命令


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

脚本:从文件名获取时间,减去上一个文件时间=临时视频的持续时间,然后是concat视频

#!/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
#/bin/bash
LST=($(ls-1tr屏幕截图*.png))
TOT=${LST[*]}
f=“${LST[0]}”
#截图_20201115_135335.png
FNM=“${f%.*}”
SEC=“${FNM:24:2}”
MIN=“${FNM:22:2}”
HOU=“${FNM:20:2}”
回声$f$HOU$MIN$SEC
BEG=$(回声“$HOU*3600+$MIN*60+$SEC”| bc-l)
echo$f$BEG
INP=(“-i”“f”)
OUT=“${f%.*}.mkv”
TXT=list.TXT
echo“#png到mkv”>$TXT
对于((i=1;i>$TXT)
BEG=$TIM
INP=(“-i”“f”)
OUT=“${f%.*}.mkv”
完成
ffmpeg-y-hide_banner-loop 1“${INP[@]}”-t5”/tmp/${OUT}”
echo“file'/tmp/${OUT}'>>$TXT
cat“$TXT”
ffmpeg-hide_banner-f concat-safe 0-i“$TXT”-c:v h264_invenc-cq 20-y/tmp/output.mkv
ffplay/tmp/output.mkv

ffmpeg可以使用修改后的文件时间设置时间戳,但不能设置文件名,