gpt4 book ai didi

ffmpeg - 在 ffmpeg filter-complex 中获取中间连接文件的长度

转载 作者:行者123 更新时间:2023-12-04 22:50:16 25 4
gpt4 key购买 nike

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

ffmpeg -i 3.301_to_8.752_Careful.wav -i 8.752_to_18.751_Careful.wav -y 
-filter_complex
[0]silenceremove=start_periods=1:start_threshold=-50dB[mid];[mid]loudnorm=I=-16:TP=-1.5:LRA=11[out];
[1]silenceremove=start_periods=1:start_threshold=-50dB[mid];[mid]loudnorm=I=-16:TP=-1.5:LRA=11[b];
[out][b]concat=v=0:a=1[out]
-b:a 128k -ac 1 -acodec libmp3lame -f mp3 -map [out] -y Careful_Merged.mp3

这是输出的相关部分:
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%

好处是过程链很好,但缺点是我不知道自动修剪后中间文件的结果长度。我的应用程序需要一个“目录”显示每个段的开始和结束,但我无法弄清楚如何在连接之前导出每个修剪文件的持续时间
[ 0]silenceremove=start_periods=1:start_threshold=-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 秒。

关于ffmpeg - 在 ffmpeg filter-complex 中获取中间连接文件的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com