2010-08-14 69 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