Obrazy rur ffmpeg wyodrębnione z wideo

8

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?

Birjolaxew
źródło
Spróbuj-f png - | ...
Gyan
@Mulvya To powoduje błąd [NULL @ 0x10e2860] Requested output format 'png' is not a suitable output format pipe:: Invalid argument.
Birjolaxew
2
Spróbować -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.
Gyan
@Mulvya To rzeczywiście działało. Dziękuję bardzo :)
Birjolaxew

Odpowiedzi:

7

tak jest!

dodaj argument -f image2pipei określ wyjściową nazwę pliku jako pojedynczy myślnik ( -w tym kontekście oznacza to stdout) i określ wejściową nazwę pliku również jako pojedynczy myślnik ( -i -w tym kontekście oznacza stdin) i wyraźnie określ format wyjściowy (np. dla png : -c:v png), tutaj jest pełna przykładów:

ffmpeg -i - -ss 00:00:3 -s 650x390 -vframes 1 -c:v png -f image2pipe -
hanshenrik
źródło