Программная отправка байтов в ffmpeg через STDIN для создания файла неподвижного изображения - PullRequest
2 голосов
/ 08 октября 2019

Я пытаюсь использовать код vb.net для отправки информации об отдельных пикселях в виде байтов в ffmpeg с целью сохранения файла неподвижного изображения DPX. Я уже успешно прочитал DPX-файлы и вывел их через STDOUT в код vb.net.

Кажется, что существует множество примеров передачи файлов фильмов, но есть и несоответствия, например, некоторые люди используют image2pipe и другие. используя rawvideo. Я не уверен, когда использовать один над другим. Различные методы, которые я пробовал, приводят к тому, что ffmpeg возвращает ошибки, такие как «Пакет слишком мал для заголовка DPX» или «Ошибка при декодировании потока № 0: 0: при обработке ввода обнаружены неверные данные». Насколько я понимаю, я не предоставляю заголовок, только необработанные значения отдельных пикселей RGBRGBRGB .... в виде байтового массива.

Аргументы, отправляемые в ffmpeg через командную строку:

-f image2pipe -pix_fmt rgb24 -s 16x16 -bits_per_raw_sample 8 -c: v dpx -i - \ MyPath \ MyFilename.dpx

Мой код vb.net выглядит следующим образом:

Dim P As New Process
P.StartInfo.FileName = m_FFMPEGExecutable_PathFile
P.StartInfo.Arguments = (see above arguments)
P.StartInfo.UseShellExecute = False
P.StartInfo.CreateNoWindow = True
P.StartInfo.RedirectStandardInput = True
p.Start


'Test image: A single red, green, blue, black and white pixel followed by all black

Dim Tiny((16 * 16) - 1) As Byte

Tiny(0) = 255
Tiny(1) = 0
Tiny(2) = 0

Tiny(3) = 0
Tiny(4) = 255
Tiny(5) = 0

Tiny(6) = 0
Tiny(7) = 0
Tiny(8) = 255

For i As byte = 9 To ((16x16)-1)
   Tiny(i) = 255
Next

'Send the rgb byte array to ffmpeg:
P.StandardInput.BaseStream.Write(Tiny, 0, Tiny.Length)
P.StandardInput.Flush()
P.StandardInput.Close()

Я пробовал много вариантов приведенных выше аргументов ffmpeg, но не могу избежать этих ошибок. Будем благодарны за любые предложения, включая информацию о том, когда использовать image2pipe и rawvideo.

...