[Linux 音视频技术] 我写的mkv转MP4的软件,和copy文件一样快
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/06/02/mkv_to_mp4.html
一个小程序,主要是用来解开封装,然后在用mp4来封装,所以问题都在封装上面,没有必要在转一次.
必须安装mkvtoolnix,mp4box,mediainfo.这三个软件.先用mediainfo得到信息后,用mkvtoolnix来解封装.在用mp4box来封装
使用方法
#mkv_to_mp4.pl 视频名.mkv
#!/usr/bin/perl -w
use Data::Dumper;
use strict;
next unless $ARGV[0];
my $f_name = $ARGV[0];
my $d_name = $ARGV[0];
$d_name =~ s/mkv/mp4/g;
print "$d_name 存在" if (-e $d_name);
sleep 1;
die if (-e $d_name);
open MEDIAINFO,"/usr/bin/mediainfo \"$f_name\" 2>&1 |" or print "$!";
my %info = ();
my $name;
while()
{
chomp;
s/\s+//g;
next if /^\s*$/;
if (! /:/){
$name = $_;
$info{$name} = {};
}
if(/:/)
{
#print $name;
my ($key,$values);
($key,$values) = split(/:/,$_);
$info{$name}->{$key} = $values;
}
}
close MEDIAINFO;
print "$f_name,";
my $mkvextract = "mkvextract tracks \"$f_name\" 1:\"$f_name.264\"";
my $mp4box = " -add \"$f_name.264\" -add \"$f_name.aac\" \"$d_name\"";
foreach(%info){
my $hash = $_;
if($hash eq "Video")
{
print "Video\n";
print "Format,$info{$hash}->{'Framerate'}\n" if ($info{$hash}->{'Framerate'});
$mp4box = "MP4Box -fps $info{$hash}->{'Framerate'}".$mp4box if ($info{$hash}->{'Framerate'});
}
}
foreach(%info){
my $hash = $_;
if($hash =~ /^(Audio.*)/)
{
print "ID,$info{$hash}->{'ID'}\n" if ($info{$hash}->{'ID'});
print "CodecID,$info{$hash}->{'CodecID'}\n" if ($info{$hash}->{'CodecID'} eq "A_AAC");
print "Language,$info{$hash}->{'Language'}\n" if ($info{$hash}->{'Language'});
$mkvextract = $mkvextract." $info{$hash}->{'ID'}:\"$f_name.aac\" " if ($info{$hash}->{'CodecID'} eq "A_AAC");
}
}
system($mkvextract);
system($mp4box);
unlink "$f_name.264" if (-e "$f_name.264");
unlink "$f_name.aac" if (-e "$f_name.aac");



















第一次来,居然搞了个沙发!博主,你那个东东免费的吧!
那个东东,当然免费……………..哈哈,代码都拿出来了
sh: Illegal option -d
@yoyicue
原因是安装了 mkvtoolnix 和 mediainfo 但是没有安装 gpac (mp4box)
囧 还是报 sh: Illegal option -d
我试了你的程序,前面都正常,看得出这个是个不错的程序,转换速度很快,我感觉好于国外的script,但可惜到最后好像是打开aac文件出错,LZ帮助解释一下,多谢了。
Opening file /media/ST500/哈利波特与阿兹卡的囚犯.mkv.aac failed
Error importing /media/ST500/哈利波特与阿兹卡的囚犯.mkv.aac: Requested URL is not valid or cannot be found