gpt4 book ai didi

ffmpeg - 使用 ffmpeg 连接音频文件会导致错误的总持续时间

转载 作者:行者123 更新时间:2023-12-04 23:10:11 30 4
gpt4 key购买 nike

“错误的总持续时间”是指与音频文件的单个持续时间之和不同的总持续时间。
sum_duration_files != 持续时间(文件连接)
特别是我用这个命令连接了 2 个 OGG 音频文件

ffmpeg -safe 0 -loglevel quiet \
-f concat -segment_time_metadata 1 -i {m3u_file_name} \
-vf select=concatdec_select \
-af aselect=concatdec_select,aresample=async=1 \
{ogg_file_name}
我得到以下信息
# Output of:  ffprobe <FILE>.ogg


======== files_in

Input #0, ogg, from 'f1.ogg':
Duration: 00:00:04.32, start: 0.000000, bitrate: 28 kb/s
Stream #0:0: Audio: opus, 48000 Hz, mono, fltp


Input #0, ogg, from 'f2.ogg':
Duration: 00:00:00.70, start: 0.000000, bitrate: 68 kb/s
Stream #0:0: Audio: vorbis, 44100 Hz, mono, fltp, 160 kb/s
Metadata:
ENCODER : Lavc57.107.100 libvorbis
音符时长:4.32 和 0.7 秒
这是输出文件。
========== files out (concatenate of files_in)

Input #0, ogg, from 'f_concat_v1.ogg':
Duration: 00:00:04.61, start: 0.000000, bitrate: 61 kb/s
Stream #0:0: Audio: vorbis, 48000 Hz, mono, fltp, 80 kb/s
Metadata:
ENCODER : Lavc57.107.100 libvorbis
持续时间:4.61 秒
由于 4.61 sec != 4.32 + 0.7 sec 我有问题。

最佳答案

这里的问题是对这些文件使用了错误的连接方法。如FFmpeg wiki article建议,文件级连接 (-f concat) 要求列表中的所有文件具有完全相同的编解码器参数。在您的情况下,它们之间只有 channel 数( mono )和样本格式( flt )是通用的。另一方面,编解码器( opusvorbis )和采样率( 4800044100 )不同。-f concat获取第一组参数并使用它运行。在您的情况下,它对所有文件使用 48000 S/s。虽然第二个文件是 44100 S/s,但它假定为 48k(所以它会比它播放得更快)。我不知道编解码器的差异如何在输出中发挥作用。
因此,标准方法是使用 -filter_complex concat=a=1:v=1:n=2这些文件作为单独的输入给出。
出于好奇,您是否听过错误持续时间的输出文件? [编辑:没关系,你的自我回答表明其中一个是无声的轨道]

关于ffmpeg - 使用 ffmpeg 连接音频文件会导致错误的总持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71361071/

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