Mogę użyć następującego polecenia, aby wyodrębnić obrazy z wideo za pomocą ffmpeg i zapisać je w systemie plików:
... | ffmpeg -i - -f image2 'img-%03d.png'
Chciałbym przesłać te obrazy do innej aplikacji, niż zapisywać je w systemie plików - sposób, w jaki są one rozdzielane w potoku, nie ma większego znaczenia, ponieważ będzie to skrypt, który sam kontroluję.
Następujące nie działa:
... | ffmpeg -i - -f image2 pipe: | ...
Błąd z
[image2 @ 0xe1cfc0] Could not get frame filename number 2 from pattern 'pipe:' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument
Czy jest jakiś sposób, aby oddzielić obrazy wyodrębnione z wideo za pomocą ffmpeg, bez użycia systemu plików?
-f png - | ...
[NULL @ 0x10e2860] Requested output format 'png' is not a suitable output format pipe:: Invalid argument
.-f image2pipe -vcodec png - | ...
. PNG może nie działać, jeśli tak, to po wyjściu z vcodec plik wyjściowy będzie miał postać MJPEG.Odpowiedzi:
tak jest!
dodaj argument
-f image2pipe
i określ wyjściową nazwę pliku jako pojedynczy myślnik (-
w tym kontekście oznacza tostdout
) i określ wejściową nazwę pliku również jako pojedynczy myślnik (-i -
w tym kontekście oznaczastdin
) i wyraźnie określ format wyjściowy (np. dla png :-c:v png
), tutaj jest pełna przykładów:źródło