获取ffmpeg过滤器复合体中中间连接文件的长度

获取ffmpeg过滤器复合体中中间连接文件的长度,ffmpeg,concatenation,metadata,tableofcontents,fluent-ffmpeg,Ffmpeg,Concatenation,Metadata,Tableofcontents,Fluent Ffmpeg,我正在编写一个media Electron应用程序,它偶尔需要单独修剪=>单独规范化=>连接=>将不同数量的WAV文件转换为MP3。 我已经成功地使用了FFMPEG(通过Fluent FFMPEG)来实现这一点(命令包装以实现可见性): 以下是输出的相关部分: Guessed Channel Layout for Input Stream #0.0 : mono Input #0, wav, from '3.301_to_8.752_Careful.wav': Duration: 00:00

我正在编写一个media Electron应用程序,它偶尔需要单独修剪=>单独规范化=>连接=>将不同数量的WAV文件转换为MP3。 我已经成功地使用了FFMPEG(通过Fluent FFMPEG)来实现这一点(命令包装以实现可见性):

以下是输出的相关部分:

Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from '3.301_to_8.752_Careful.wav':
  Duration: 00:00:05.50, bitrate: 705 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, mono, s16, 705 kb/s
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, wav, from '8.752_to_18.751_Careful.wav':
  Duration: 00:00:10.30, bitrate: 705 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
  Stream #0:0 (pcm_s16le) -> silenceremove
  Stream #1:0 (pcm_s16le) -> silenceremove
  concat -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
Output #0, mp3, to 'Careful_Merged.mp3':
  Metadata:
    TSSE            : Lavf58.28.101
    Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, mono, fltp, 128 kb/s (default)
    Metadata:
      encoder         : Lavc58.53.101 libmp3lame
size=     246kB time=00:00:15.69 bitrate= 128.4kbits/s speed=33.8x
video:0kB audio:246kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.170563%
好处是过程链很好,但缺点是我不知道automagic修剪后中间文件的最终长度。我的应用程序需要一个“目录”,显示每个片段的开始和结束,但我不知道如何在连接之前导出每个修剪文件的持续时间 [
0]消音器移动=开始时段=1:开始时段阈值=-50dB[mid];[mid]loudnorm=I=-16:TP=-1.5:LRA=11[out]
和串联
[out][b]concat=v=0:a=1[out]

它是如此优雅,因为它是,我宁愿不保存中间文件到磁盘或修剪音频两次,以获得我需要的信息。我所需要的是每个人的持续时间,我可以做数学题。 是否有一个过滤器可以内联导出中间持续时间,或者有一种方法可以获取连接操作的日志


有什么想法吗?

如果您使用
-loglevel verbose
-v 40
运行命令,concat将以微秒为单位记录事件的段EOF

[Parsed_concat_0 @ 00000000037e3440] EOF on in0:v0, 0 streams left in segment.
[Parsed_concat_0 @ 00000000037e3440] Segment finished at pts=5500000
[Parsed_concat_0 @ 00000000037e3440] EOF on in1:v0, 0 streams left in segment.
[Parsed_concat_0 @ 00000000037e3440] Segment finished at pts=6533333

第一段的长度为5.5秒,第二段的长度为6533333 us-5500000 us=1.03秒。

太棒了!我尝试了几种不同的日志记录级别(主要是调试),但没有意识到“pts”是我在毫秒内所需要的。现在我只需要通过fluent-ffmpeg捕获并解析日志。谢谢
[Parsed_concat_0 @ 00000000037e3440] EOF on in0:v0, 0 streams left in segment.
[Parsed_concat_0 @ 00000000037e3440] Segment finished at pts=5500000
[Parsed_concat_0 @ 00000000037e3440] EOF on in1:v0, 0 streams left in segment.
[Parsed_concat_0 @ 00000000037e3440] Segment finished at pts=6533333