Ich möchte ein MP4-Video in Einzelbilder (z.B. JPG) umwandeln - bitte fragt nicht nach dem warum, das zu erklären dauert zu lange, es ist definitiv nicht für illegale Zwecke.
Mit LoadMovie komme ich schonmal nicht weiter, denn es erkennt das Format nicht.
Ich suche daher nach einer externen DLL, mit der ich das bewerkstelligen kann. Wenn ich damit ein bestimmtes Frame des Videos in ein Purebasic-Image kopieren könnte, wäre das perfekt.
Hat jemand eine Idee?
Einzelnes Frame aus MP4 in Image kopieren?
-
- Beiträge: 1
- Registriert: 12.02.2010 12:24
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Einzelnes Frame aus MP4 in Image kopieren?
Im englischen Forum scheinen sich ein paar damit auszukennen: https://www.purebasic.fr/english/viewto ... 79#p434579
Aber ich hab das noch nie gemacht, deswegen ist das nur eine kleine Hilfestellung.
Wieso hast du eigentlich in Offtopic gepostet? Willst du das nicht mit Purebasic machen? Wenn dir auch andere Tools reichen, dann geht das wohl mit fast jedem Videobearbeitungsprogramm, wahrscheinlich sogar mit VLC.
Aber ich hab das noch nie gemacht, deswegen ist das nur eine kleine Hilfestellung.
Wieso hast du eigentlich in Offtopic gepostet? Willst du das nicht mit Purebasic machen? Wenn dir auch andere Tools reichen, dann geht das wohl mit fast jedem Videobearbeitungsprogramm, wahrscheinlich sogar mit VLC.
Re: Einzelnes Frame aus MP4 in Image kopieren?
Mit ffmpeg geht es, wie schnell das ist im Vergleich zu anderen Verfahren kann ich aber nicht sagen.
ffmpeg muss bei diesem Beispiel im gleichen Verzeichnis wie das Video und Sourcefile liegen!
ffmpeg gibt es hier: https://www.ffmpeg.org
Beispiel (extrahieren der Einzelframes JPG):
Das Ganze geht auch direkt mit ffmpeg.
Der Beispielcode zeigt jedoch wie auf die Einzelbilder zwecks Manipulation in PureBasic zugegriffen werden kann.
ffmpeg muss bei diesem Beispiel im gleichen Verzeichnis wie das Video und Sourcefile liegen!
ffmpeg gibt es hier: https://www.ffmpeg.org
Beispiel (extrahieren der Einzelframes JPG):
Code: Alles auswählen
UseJPEGImageEncoder()
Global Programm.i
Global Output.s
Global *Blob
Global BlobSize.i
Global Image.i
Global Frame.i
Global X.i
Global Y.i
Global Offset.i
Global Color.i
#VIDEO_WIDTH = 1280
#VIDEO_HEIGHT = 720
#VIDEO_COLOR = 3
#VIDEO_TOOL = "ffmpeg.exe"
#VIDEO_TASK = "-i XYZ.mp4 -f image2pipe -vcodec rawvideo -pix_fmt rgb24 -";<- change name of MP4!
BlobSize = #VIDEO_WIDTH * #VIDEO_HEIGHT * #VIDEO_COLOR
*Blob = AllocateMemory(BlobSize)
If *Blob
Image = CreateImage(#PB_Any,#VIDEO_WIDTH,#VIDEO_HEIGHT)
If Image
Programm = RunProgram(#VIDEO_TOOL,#VIDEO_TASK,#Null$,#PB_Program_Open|#PB_Program_Read)
While ProgramRunning(Programm)
Frame + 1
If ReadProgramData(Programm,*Blob,BlobSize) = BlobSize
If StartDrawing(ImageOutput(Image))
For Y = 0 To #VIDEO_HEIGHT - 1
For X = 0 To #VIDEO_WIDTH - 1
Offset = (Y * (#VIDEO_WIDTH * #VIDEO_COLOR)) + (X * #VIDEO_COLOR)
CopyMemory(*Blob + Offset,@Color,3)
Plot(X,Y,Color)
Next
Next
SaveImage(Image,"Frame_" + Str(Frame) + ".jpg",#PB_ImagePlugin_JPEG)
StopDrawing()
EndIf
EndIf
; If Frame = 10
; Break
; EndIf
Wend
FreeImage(Image)
EndIf
FreeMemory(*Blob)
EndIf
Der Beispielcode zeigt jedoch wie auf die Einzelbilder zwecks Manipulation in PureBasic zugegriffen werden kann.
Re: Einzelnes Frame aus MP4 in Image kopieren?
Ja, dass kann der VLC.NicTheQuick hat geschrieben:Im englischen Forum scheinen sich ein paar damit auszukennen: https://www.purebasic.fr/english/viewto ... 79#p434579
Aber ich hab das noch nie gemacht, deswegen ist das nur eine kleine Hilfestellung.
Wieso hast du eigentlich in Offtopic gepostet? Willst du das nicht mit Purebasic machen? Wenn dir auch andere Tools reichen, dann geht das wohl mit fast jedem Videobearbeitungsprogramm, wahrscheinlich sogar mit VLC.
[Aktuelles Projekt: Core Project | Media Library (Core Project based)]
- OS: Windows 7 Ultimate x64 | PB: PureBasic 5.40 x86/x64
CPU: AMD Phenom(TM) II X4 965 BE (4x 3.4GHz @3.8GHz) | GPU: nVidia GeForce 8200 (512MB), nVidia GeForce GT 730 (4096MB)
RAM: 8GB | HDD: 250GB Samsung, 1TB Samsung