首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中解释ffmpeg输出

我开始在FFmpeg中工作,我想创建一个列表,其中将包含静默间隔的开始和结束时间戳。我确实使用FFmpeg输出了这些间隔,但我需要格式化输出,使其看起来更具可读性,这就是为什么我要创建一个列表,然后使用一个自定义函数打印它。我知道我应该在这里使用正则表达式,但是我不确定我应该如何编写它,也不确定我应该如何阅读FFmpeg控制台输出。我的静默检测函数如下所示:

代码语言:javascript
运行
AI代码解释
复制
def detect_silence_ffmpeg():
    command = r"ffmpeg -i audio.wav -af silencedetect=n=-40dB:d=0.5 -f null - "
    subprocess.call(command, shell=True)

此函数在7秒长的样本视频上的输出为:

代码语言:javascript
运行
AI代码解释
复制
ffmpeg version git-2020-06-03-b6d7c4c Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.1 (GCC) 20200523
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 49.100 / 56. 49.100
  libavcodec     58. 90.100 / 58. 90.100
  libavformat    58. 44.100 / 58. 44.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 84.100 /  7. 84.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'audio.wav':
  Metadata:
    encoder         : Lavf58.44.100
  Duration: 00:00:07.34, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf58.44.100
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc58.90.100 pcm_s16le
[silencedetect @ 00000202fc71e680] silence_start: 0
[silencedetect @ 00000202fc71e680] silence_end: 1.16374 | silence_duration: 1.16374
[silencedetect @ 00000202fc71e680] silence_start: 1.94558
[silencedetect @ 00000202fc71e680] silence_end: 3.41345 | silence_duration: 1.46787
[silencedetect @ 00000202fc71e680] silence_start: 3.8578
[silencedetect @ 00000202fc71e680] silence_end: 5.84844 | silence_duration: 1.99063
[silencedetect @ 00000202fc71e680] silence_start: 6.43653
size=N/A time=00:00:07.33 bitrate=N/A speed= 308x    
video:0kB audio:1264kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[silencedetect @ 00000202fc71e680] silence_end: 7.33868 | silence_duration: 0.902154

这段代码应该在一个小时左右的视频上实现,所以我真的需要找到一种方法来格式化这个输出,比这个更好。这将是它,任何帮助将非常感谢:)

附言:我们的想法是,这应该主要在Windows上工作,但如果跨平台也是可能的,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 22:10:59

我找到了答案。可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
command = r"ffmpeg -i audio.wav -af silencedetect=n=-40dB:d=0.5 -f null - "
out = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

stdout, stderr = out.communicate()

这样,stdout变量将成为代表控制台上的输出的字符串。当然,这需要导入子流程模块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62300504

复制
相关文章
【脚本】配置yum源的repo文件
执行前需要把centos的镜像和iaas的镜像 上传到/root上,如果其他地方,可以去脚本里修改目录
Xiongan-桃子
2023/06/10
5850
R-批量文件读取
文件的批量读取,一般在拿到数据时,如果是大批量的数据,那么就需要多次的读取 10个文件以为的内容通过10行的内容可以读取,但是如果是上百个文件,那么读取的 时候就比较复杂,解决思路是通过循环进行读取
火星娃统计
2020/09/15
6940
修改IDEA国际化文件的Unicode字符成汉字
把√打上!
JavaEdge
2021/02/22
4540
修改IDEA国际化文件的Unicode字符成汉字
Unicode 字符串
引号前小写的"u"表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:
用户8442333
2021/05/27
1K0
Unicode不可见字符
不可见字符”\u200b”为 Unicode Character ‘ZERO WIDTH SPACE’ (U+200B),可用于内容标识,不占位数。
周小董
2019/03/25
5.6K0
Unicode不可见字符
R-脚本命名和管理推荐
有经验的前辈,R里的脚本都是step0、step1、step2,一清二楚,相关内容都集中在Rproject里;
生信技能树
2019/05/22
1.1K0
R-脚本命名和管理推荐
Python查找包含指定字符串的所有文件
代码功能: 查找包含指定字符串的所有文件。 技术要点: 1)广度优先遍历目录树; 2)检查文件中是否包含特定的字符串。 运行效果:
Python小屋屋主
2019/12/13
3.2K0
Python查找包含指定字符串的所有文件
通达OA文件包含全版本 getshell | Nmap 脚本
今天就做了全版本匹配,但是我发现似乎只有 v11 和 2017 版本存在文件包含漏洞,文件上传是都存在的,但不是web目录(webroot) 所以今天更新了一下 2017 版本的利用,顺便改了一下result的值和拼错了的 nothing
意大利的猫
2020/08/20
1.5K0
unicode字符串解析
在http接口接收时,很多接口提供方都喜欢把汉字通过unicode的方式传过来,而数字和字母保持不变,就像这样。
逝兮诚
2019/10/30
1.4K0
字符编码ascii、unicode、ut
计算机是美国人发明和最早使用的,他们为了解决计算机处理字符串的问题,就将数字字母和一些常用的符号做成了一套编码,这个编码就是ASIIC码。ASIIC码包括数字大小写字母和常用符号,一共128个,1字节(byte)=8bit,8bit能表示的最大数是256,所以ASIIC编码中一个字符的大小就是1个字节
py3study
2020/01/19
9570
Word反查字符的unicode码
最近写字符处理的相关程序,需要和字符编码打交道,Windows自带的字符映射表只能通过unicode码查找字符,但是测试时通常要通过字符查找其unicode码,使用起来很不方便。
极客中心
2021/01/21
1.5K0
Word反查字符的unicode码
shell 脚本统计文件夹下所有文件的字符数
最近写了一些文章存放在一个文件夹下,今天想看看自己到底写了多少内容。于是想写一个脚本来进行统计。最终代码如下:
FungLeo
2019/05/26
2.5K1
小师妹学JavaIO之:文件编码和字符集Unicode
小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现了一个无法解决的问题。把大象装进冰箱到底有几步?乱码的问题又是怎么解决的?快来跟F师兄一起看看吧。
程序那些事
2020/07/08
5920
字符串包含
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
1.4K0
文件包含漏洞与文件包含Bypass漏洞基础
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。
天钧
2020/03/12
3.2K0
Unicode中的空格字符一览(翻译)
本文列出了 Unicode 中的各种空格字符。有关说明, 还请参阅 Unicode 标准中的 第6章 书写系统和标点符号 还有Unicode标准中的 一般标点符号的区段描述 。本文还列出了3个宽度为0的字符, 故可称其为零宽度空格。
Kitov
2022/09/28
10.8K0
Unicode中的空格字符一览(翻译)
Python 中文转Unicode字符串
Python 3.6 代码: # -*- coding: utf-8 -* def to_unicode(string): ret = '' for v in string: ret = ret + hex(ord(v)).upper().replace('0X', '\\u') return ret print(to_unicode("中国")) 输出: "D:\Program Files (x86)\Python36-32\python.exe" E:
py3study
2020/01/13
2.7K0
java---Unicode-字符转换器
实现一个字符(包括汉字)的简单互相转换; package cn.hncu.gui2; import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionL
谙忆
2021/01/20
1.1K0
java---Unicode-字符转换器
艺术鬼才!Unicode 字符还能这么玩?
上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。
andyxh
2020/07/28
1.9K0
Go 中文和unicode字符之间转换
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
孤烟
2020/09/27
5.3K0

相似问题

在不同的表单之间切换

20

使用无线输入在部分表单之间切换

216

bounds.size.width与bounds.width在between中的区别?

12

在表单之间切换

12

在表单之间切换

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档