Я передаю данные из одного процесса в другой, но этот поток необходимо отфильтровать. Первый процесс есть, ffmpeg
а второй есть ffplay
. ffmpeg
предоставляет необработанный видеокадр для fplay
рендеринга, однако он добавляет заголовок 32 байта к каждому кадру . Для кадра 720p это означает, что каждые 1280x720x4 байта дополнены 32 байтами.
Это влияет на ffplay
воспроизведение, и мне нужно иметь некоторую фильтрацию этого потока байтов, которая будет отбрасывать этот заголовок для каждого кадра. Скорее всего, такие инструменты, как od
или xxd
должны быть использованы, но мне трудно понять, как именно.
ffmpeg -f avfoundation -pixel_format 0rgb -framerate 25 -video_size 1280x720 -i "0" -map 0:v -c copy -f rawvideo -vframes 1 - | perl -e 'print substr $buff, 1 while sysread *STDIN, $buff, 3686432' > /tmp/frame.0rgb
. Подсчет байтовwc -c /tmp.frame.0rgb
echo {a..z} | sed 's/ //g'
и это правильно выводитcdefgjklmnqrstuxyz
для 5 + 2. Проверьте свои числа.dd if=/dev/urandom bs=3686432 count=1 > /tmp/random
что дает 3686432 случайных байтов (wc -c /tmp/random
), а затемcat /tmp/random | perl -e 'print substr $buff, 32 while sysread *STDIN, $buff, 3686432' > /tmp/truncated
- как ожидается, даст 3686400, но это не так - дает 3684256 байт вместо (wc -c /tmp/truncated
).This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level (with 2 registered patches, see perl -V for more detail)