Das Definieren von Bedeutung ist schwer, aber wenn Sie N Miniaturansichten effizient erstellen möchten, die die gesamte Videodatei überspannen, verwende ich dies, um Miniaturansichten der Produktion mit vom Benutzer hochgeladenen Inhalten zu erstellen.
Pseudocode
for X in 1..N T = integer( (X - 0.5) * D / N ) run `ffmpeg -ss <T> -i <movie> -vf select="eq(pict_type\,I)" -vframes 1 image<X>.jpg`
Woher:
- D - Videodauer, die von
ffmpeg -i <movie>
alleine gelesen wird oder ffprobe
die einen schönen JSON - Ausgabeschreiber hat - N - Gesamtzahl der gewünschten Miniaturansichten
- X - Miniaturbildnummer von 1 bis N
- T - Zeitpunkt für Miniaturbild
Einfach das obige notiert den mittleren Keyframe jeder Partition des Films. Wenn der Film beispielsweise 300 Sekunden lang ist und Sie 3 Miniaturbilder wünschen, dauert es nach 50s, 150s und 250s ein Schlüsselbild. Für 5 Miniaturbilder wären es 30s, 90s, 150s, 210s, 270s. Sie können N in Abhängigkeit von der Filmdauer D einstellen, dh für einen 5-minütigen Film gibt es 3 Thumbnails, über 1 Stunde jedoch 20 Thumbnails.
Performance
Jeder Aufruf des obigen ffmpeg
Befehls dauert für ~ 1 GB H.264 einen Bruchteil der Sekunde (!). Das ist, weil es sofort springt <time>
zu positionieren (mind -ss
vor -i
) und nimmt ersten Schlüsselrahmen, der praktisch vollständige JPEG ist. Es wird keine Zeit verschwendet, um den Film an die genaue Zeitposition zu rendern.
Nachbearbeitung
Sie können oben scale
oder mit einer anderen Größenänderungsmethode mischen . Sie können auch einfarbige Rahmen entfernen oder mit anderen Filtern wie z thumbnail
.