我将数据从一个进程传输到另一个进程,但此流需要过滤。第一个进程是ffmpeg
,第二个进程是ffplay
。ffmpeg
提供要渲染的原始视频帧fplay
,但它添加了每帧 32 字节标头对于 720p 帧,这意味着每 1280x720x4 字节前面都会添加 32 个字节。
这会影响ffplay
播放,我需要对这个字节流进行一些过滤,从而删除每个帧的标头。最有可能的是,应该使用od
或之类的工具xxd
,但我很难弄清楚具体怎么做。
答案1
Perl 来救援!
perl -e 'print substr $buff, 32 while sysread *STDIN, $buff, 1280 * 720 * 4 + 32'
如果您的平台上的 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;
}