小编xol*_*dec的帖子

Python从视频文件中提取wav

有关:

如何使用python从视频文件中提取音频?

从wav中提取视频中的音频

如何从视频中翻录音频?

我的问题是如何从视频文件中提取wav音轨video.avi呢?我阅读了许多文章,并且人们建议使用(从Python)ffmpeg作为子进程(因为没有可靠的python绑定到ffmpeg - 唯一的希望是,PyFFmpeg但我发现它现在没有维护).我不知道这是不是正确的解决方案,我正在寻找一个好的解决方案.
我看了gstreamer并发现它很好但无法满足我的需求 - 我发现从命令行完成此任务的唯一方法就像

 gst-launch-0.10 playbin2 uri=file://`pwd`/ex.mp4  audio-sink='identity single-segment=true ! audioconvert ! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)16000, channels=(int)1 ! wavenc !  filesink location=foo.wav’ 
Run Code Online (Sandbox Code Playgroud)

但它效率不高,因为我需要在播放视频和同时写入wav文件时等待多年.

ffmpeg 好多了:

avconv  -i foo.mp4  -ab 160k -ac 1 -ar 16000 -vn ffaudio.wav
Run Code Online (Sandbox Code Playgroud)

但是我无法从python启动它(不是作为命令行子进程).你能否指出我从python作为命令行实用程序启动ffmpeg的优点和缺点?(我的意思是使用python multiprocessing模块或类似的东西).

第二个问题.

将长wav文件剪成碎片的简单方法是什么,这样我就不会破坏任何单词?我的意思是10到20秒的长度,句子/单词在暂停期间的开始和结束?

我知道如何在任意作品上打破它们:

import wave


win= wave.open('ffaudio.wav', 'rb')
wout= wave.open('ffsegment.wav', 'wb')

t0, t1= 2418, 2421 # cut audio between 2413, 2422 seconds
s0, s1= int(t0*win.getframerate()), int(t1*win.getframerate())
win.readframes(s0) …
Run Code Online (Sandbox Code Playgroud)

python audio video ffmpeg gstreamer

20
推荐指数
3
解决办法
4万
查看次数

误解perl regexp评估

一天的好时光!我正在读一本关于perl的书:"编程Perl"由Larry Wall,Tom Christiansen,Jon Orwant撰写.在这本书中,我发现了一些作者没有澄清的例子(或者我当时没有得到).

首先

这仅打印ONCE.

 "adfsfloglig"=~ /.*(?{print "hi"})f/;
Run Code Online (Sandbox Code Playgroud)

但这打印"嗨"TWICE ?? 怎么解释?

 "adfsfloglig"=~ /.*(?{print "hi"})log/;
Run Code Online (Sandbox Code Playgroud)

继续经历甚至使事情变得更糟:

  "adfsfloglig"=~ /.*(?{print "hi"})sflog/;
Run Code Online (Sandbox Code Playgroud)

上面的代码串再次打印ONCE这个可怕的"hi"!大约一个星期后,我完全理解了一件事 - 我需要帮助:)所以我请求你帮助我.

第二个(这是炸弹!)

 $_ = "lothiernbfj";

 m/        (?{$i = 0; print "setting i to 0\n"})
       (.(?{ local $i = $i + 1; print "\ti is $i"; print "\tWas founded $&\n" }))*
       (?{print "\nchecking rollback\n"})
       er
       (?{ $result = $i; print "\nsetting result\n"})
 /x;
 print "final $result\n";
Run Code Online (Sandbox Code Playgroud)

在这里,$result屏幕上的最终打印等于匹配的字符数.*,但我不再重复.

当打开调试打印(如上所示)时,我看到,$i每当新的字符包含在$&(字符串的匹配部分)中时,它就会递增.

最后$i等于11(字符串中的字符数量),然后有7次回滚,当.* …

regex perl

7
推荐指数
2
解决办法
207
查看次数

值与平均值(值)之间的差异

我想知道是否可以像下面一样进行查询.

我有一个包含id 和的表value.Exapmle:

 table EXAMPLE
|id        |  value     |
|        1 |          65|
|        2 |          13|
|        3 |          22|
Run Code Online (Sandbox Code Playgroud)

我想要的是使得返回集合的查询如下:

|id        |  value     | average | difference|   
|        2 |          13|     33.3|       20.3|
|        3 |          22|     33.3|       11.3|
Run Code Online (Sandbox Code Playgroud)

问题是如何处理不同的栏目?

还有一个问题:如何在集合中仅包含比平均值更少或更大的值,

SELECT id,
       value,
       (SELECT AVG(value) FROM EXAMPLE ) as average
having 
       value <  average.
Run Code Online (Sandbox Code Playgroud)

我使用的原因having,而不是where在于where选择,因此我不能在它使用平均(平均被计算在查询执行的选择阶段)执行之前.

我还怀疑我不仅计算一次AVG(值),而且计算表中的每一行.我对吗 ?如果我,那是非常糟糕的,这肯定不是我想要的.

关于子查询的MySQL执行顺序,请给我一些启示,或者为这个主题分享一些链接.先感谢您.

mysql sql

2
推荐指数
1
解决办法
754
查看次数

标签 统计

audio ×1

ffmpeg ×1

gstreamer ×1

mysql ×1

perl ×1

python ×1

regex ×1

sql ×1

video ×1