sách gpt4 ai đã đi

perl - 在 perl 中使用 ffmpeg 打印视频时长信息

In lại 作者:行者123 更新时间:2023-12-04 23:09:38 27 4
mua khóa gpt4 Nike

你好
我正在尝试获取视频持续时间并将视频插入数据库。
但现在我正在使用 ffmpeg 提取视频时长。
在过去的 1 周里,我正在为此工作。
我能够在linux中完成这项工作。
但在 Windows 中,它只是无法打印持续时间。
这是代码。

sử dụng nghiêm ngặt;
use warnings;
use IPC::Open3;

my @list = glob('*.mp3 *.mp4 *.mpg *.aac *.midi *m3u *.mpa *.dat *.avi');

foreach my $song (@list){

print "$song \n";

my $filename = $song;

my %videoInfo = videoInfo($filename);
print "duration: " . $videoInfo{'duration'}. "\n";
print "durationsecs: " . $videoInfo{'durationsecs'}. "\n\n";

}

sub videoInfo {

# ffmpeg command

my $ffmpeg = 'C:\ffmpeg.exe';



my %finfo = (

'duration' => "00:00:00.00",
'durationsecs' => "0"
);

my $file = shift;



# escaping characters

$file =~ s/(\W)/$1/g;



open3( "nul", "nul", \*ERPH, "$ffmpeg -i $file" ) or die "can't run $ffmpeg\n";

my @res = ;

foreach (@res) {



#duration

if (m!Duration: ([0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9])!) {

$finfo{'duration'} = $1;

}

}


my $tenths = substr( $finfo{'duration'}, 9, 2 );


my $seconds = substr( $finfo{'duration'}, 6, 2 );

my $minutes = substr( $finfo{'duration'}, 3, 2 );

my $hours = substr( $finfo{'duration'}, 0, 2 );

$finfo{'durationsecs'} = ( $tenths * .01 ) + $seconds + ( $minutes * 60 ) + ( $hours * 360 );

return %finfo;
}

我在 C:\中安装了 ffmpeg 并给出了路径。

ffmpeg 工作正常,正在显示比特率、编解码器等(这里我已经删除了它,因为我只需要持续时间)但它只是不打印任何持续时间,它只是打印 00:00:00.00。

我怀疑它是数组中的搜索问题。

请帮我解决这个问题..

这是我从命令提示符运行 ffmpeg 时的输出
C:\>ffmpeg.exe -i cisco1.flv
FFmpeg version Sherpya-r10707, Copyright (c) 2000-2007 Fabrice Bellard, et al.
libavutil version: 49.5.0
libavcodec version: 51.45.0
libavformat version: 51.14.0
built on Oct 11 2007 06:25:25, gcc: 4.2.1 [Sherpya]
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cisco1.flv':
Duration: 00:08:37.0, start: 0.000000, bitrate: 421 kb/s
Stream #0.0(und): Audio: mpeg4aac, 44100 Hz, stereo
Stream #0.1(und): Video: h264, yuv420p, 960x720, 29.97 fps(r)
Must supply at least one output file

在这里你可以看到持续时间很好。

如果我添加一个
print;

上面代码中的语句下面的行
foreach (@res) {

它将显示相同的 ffmpeg 输出

1 Câu trả lời

你匹配:

if (m!Duration: ([0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9])!) {

但输出是:
Duration: 00:08:37.0, start: 0.000000, bitrate: 421 kb/s

Xin lưu ý, . 后面只有一位数字。 .

尝试:
if (m!Duration:\s+([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\.[0-9][0-9]?)!) {

nếu như . 后面有一位或两位数字,它将匹配。 (并且您应该在正则表达式中转义 .,否则它匹配任何单个字符)。
$ cat input
FFmpeg version Sherpya-r10707, Copyright (c) 2000-2007 Fabrice Bellard, et al.
libavutil version: 49.5.0
libavcodec version: 51.45.0
libavformat version: 51.14.0
built on Oct 11 2007 06:25:25, gcc: 4.2.1 [Sherpya]
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cisco1.flv':
Duration: 00:08:37.0, start: 0.000000, bitrate: 421 kb/s
Stream #0.0(und): Audio: mpeg4aac, 44100 Hz, stereo
Stream #0.1(und): Video: h264, yuv420p, 960x720, 29.97 fps(r)
Must supply at least one output file
$ cat input | perl -ne 'if (m!Duration:\s+([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\.[0-9][0-9]?)!) { print $1, "\n"; }'
00:08:37.0

关于perl - 在 perl 中使用 ffmpeg 打印视频时长信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5701614/

27 4 0
Bài viết được đề xuất: iphone - 使用 iPhone 的 ffmpeg 库旋转视频
Bài viết được đề xuất: ffmpeg - Directshow,将流传递给 ffmpeg 之类的程序
Bài viết được đề xuất: lệnh ffmpeg vstats
Bài viết được đề xuất: ffmpeg - 如何使用 ffmpeg flv 提高质量
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com