2010-08-14 67 views
0

如果我有一个包含像这样多个FLV文件的数组:如何使用FLV :: Splice模块合并多个FLV文件?

my @src_files = qw (1.flv 2.flv 3.flv 4.flv 5.flv 6.flv 7.flv); 

我可以叫flvbind .exe文件作为一个外部命令行程序来完成合并,像这样:

my $args = join(' ',@src_files); 
my $dest_file = 'merged.flv'; 
system "flvbind $dest_file $args"; 

但使用例如为FLV::Splice是这样的:

use FLV::Splic; 
my $converter = FLV::Splice->new(); 
$converter->add_input('first.flv'); 
$converter->add_input('second.flv'); 
$converter->save('output.flv'); 

我似乎无法弄清楚如何做同样的事情,如flvbind的确如此。 我一定要添加冗长每PARAM像这样:

use FLV::Splice; 

my $dest_file = 'merged.flv'; 
my $converter = FLV::Splice->new(); 
$converter->add_input('1.flv'); 
$converter->add_input('2.flv'); 
$converter->add_input('3.flv'); 
$converter->add_input('4.flv'); 
$converter->add_input('5.flv'); 
$converter->add_input('6.flv'); 
$converter->add_input('7.flv'); 
$converter->save("$dest_file"); 

这看起来并不像正确的方法。我的意思是我必须详细地添加每个参数?有没有办法简化add_input方法的重复使用?任何指针?感谢一如既往:)

更新: 事实证明,这是一个愚蠢的问题。谢谢,@Eric给我正确的答案。我想使用for循环来减少add_input方法的重复使用,但不知何故,我认为它不会工作,我认为我被卡住了。那么,我会提醒自己下次不要轻易打扰别人。

+0

我不知道什么是proccess是flvbind.exe做,但FLV :: Splice只会尝试合并这些文件,如果它不起作用,我不会感到惊讶......模块页面上的更多内容也是这样的:“如果片段具有不同的帧率,此工具也可能产生无法播放的内容。这取决于玩家的实现.'如果flvbind有一个编码过程,那么你应该坚持下去。 – Prix 2010-08-14 04:58:09

+0

@Prix,感谢您的评论。是的,FLV :: Splice有时不起作用。但是我问是否有一种方法可以简化add_input方法的重复使用? – Mike 2010-08-14 05:18:10

回答

3

它很容易,以减少重复:

$converter->add_input($_) for @src_files; 

或包裹在一个子程序整个事情:

sub flv_splice { 
    my $dest_file = shift; 
    my $converter = FLV::Splice->new(); 
    $converter->add_input($_) for @_; 
    $converter->save($dest_file); 
} 

flv_splice 'merged.flv', @src_files; 
+0

谢谢。这是否工作?我也想过使用for循环。那么,我会给它一个测试。 – Mike 2010-08-14 05:21:23

+0

我无法对FLV :: Splice模块进行任何说明,我没有使用它(但会在某个时候给它一个尝试,看起来很有趣),这是如何减少重复并使其更容易使用。 – 2010-08-14 05:23:56

+0

哈哈,是的,它确实有用!我想使用for循环,然后不知何故,我认为它不会工作,然后我认为我卡住了。 – Mike 2010-08-14 05:26:13