Я передаю данные из одного процесса в другой, но этот поток необходимо отфильтровать. Первый процесс - ffmpeg а второй - ffplay . ffmpeg предоставляет необработанный видеокадр для fplay , однако он добавляет заголовок 32 байта к каждому кадру . Для кадра 720p это означает, что каждые 1280x720x4 байта дополнены 32 байтами.

Это влияет на воспроизведение ffplay и мне нужна некоторая фильтрация этого байтового потока, которая отбрасывает этот заголовок для каждого кадра. Скорее всего, следует использовать такие инструменты, как od или xxd , но мне трудно понять, как именно.

1 ответ1

0

Perl на помощь!

perl -e 'print substr $buff, 32 while sysread *STDIN, $buff, 1280 * 720 * 4 + 32'

Смотрите substr и sysread.

Может возникнуть проблема, если SSIZE_MAX на вашей платформе меньше 1280 * 720 * 4 + 32 или по какой-то другой причине вы не можете прочитать все байты одновременно. Может быть, попробуйте этот скрипт на Perl:

#!/usr/bin/perl
use warnings;
use strict;

my ($BLOCK_SIZE, $HEADER_SIZE) = (3686400, 32);

while (1) {
    my $block_size = 0;
    my $block = "";
    my $buff_size;
    while (1) {
        $buff_size = sysread *STDIN, my $buff,
                             $HEADER_SIZE + $BLOCK_SIZE - $block_size;
        last unless $buff_size;

        $block .= $buff;
        $block_size += $buff_size;
    }
    last unless $block_size;

    substr $block, 0, $HEADER_SIZE, "";
    print $block;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .