Rawvideo и rgb32, переданные в FFmpeg

Я конвертирую файл в формат PNG, используя этот вызов:

ffmpeg.exe -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s <width>x<height> -i infile -f image2 -vcodec png out.png

Я хочу использовать конвертер, который можно связать или скомпилировать в коммерческий продукт с закрытым исходным кодом, в отличие от FFmpeg, поэтому мне нужно понять формат входного файла, который я передаю.

Итак, что означает rawvideo для FFmpeg?

Является ли FFmpeg определением, какой тип исходного формата имеет входной файл, или rawvideo обозначает что-то отдельное?

Что означает rgb32?

Размер входного файла немного больше, чем (width * height * 8) байтов.

Ответ 1

Обычно видеофайл содержит видеопоток (формат которого указан с помощью -vcodec), встроенный в медиаконтейнер (например, mp4, mkv, wav и т.д.). Опция -f используется для указания формата контейнера. -f rawvideo - это, в основном, фиктивный параметр, который сообщает ffmpeg, что ваше видео не находится в каком-либо контейнере.

-vcodec rawvideo означает, что видеоданные внутри контейнера не сжимаются. Тем не менее, существует много способов несжатого видео, поэтому необходимо указать параметр -pix_fmt. В вашем случае -pix_fmt rgb32 говорит, что каждый пиксель в ваших необработанных видеоданных использует 32 бита (по 1 байт для красного, зеленого и синего, а оставшийся байт игнорируется).

Для получения дополнительной информации о том, что означают опции, см. документацию ffmpeg.