FFmpeg - 持续时间 < 1s 的交叉渐变输入创建空输出
FFmpeg - Crossfading inputs with a duration < 1s creates an empty output
我正在尝试将无声输入与音乐交叉淡入淡出以延迟音乐开始播放的时间。
我使用 fluent-ffmpeg
构建了命令,因此我可以通过我的程序选择静默输入的持续时间。 crossfade的持续时间是根据2个输入的持续时间计算的,如果其中一个太短则等于0。
下面是生成命令的示例:
ffmpeg -f lavfi -i anullsrc=r=44100 -i music.mp3 -y -filter_complex [0]atrim=duration=0.28[atrim_0];[atrim_0][1]acrossfade=d=0:c1=tri:c2=tri[final] -map [final] output.mp3
但是,当无声输入的持续时间低于 1 秒时,无论接下来是哪个音乐输入,此命令都会创建一个空输出文件。使用具有 trim 持续时间 > 1 秒的相同命令创建包含静音和音乐的有效输出。
我试图查看 FFmpeg 调试报告,但无法真正看出问题所在。
以下是调试日志报告的摘录:
Input file #0 (anullsrc=r=44100):
Input stream #0:0 (audio): 14 packets read (28672 bytes); 14 frames decoded (14336 samples);
Total: 14 packets (28672 bytes) demuxed
Input file #1 (music.mp3):
Input stream #1:0 (audio): 504 packets read (210651 bytes); 504 frames decoded (578372 samples);
Total: 504 packets (210651 bytes) demuxed
Output file #0 (output.mp3):
Output stream #0:0 (audio): 0 frames encoded (0 samples); 0 packets muxed (0 bytes);
Total: 0 packets (0 bytes) muxed
知道是什么原因造成的吗?
PS: 我正在使用 FFmpeg 4.4,与 FFmpeg 4.2 相同的命令导致分段错误。不知道有没有用
acrossfade
可以通过两个独占选项接受交叉渐变持续时间:nb_samples
(默认值:44100)和duration
(默认值:0)。如果未设置后者,则使用前者。因此,在您的命令中,淡入淡出使用 44100 个样本或 1 秒的淡入淡出持续时间。过滤器需要两个输入至少与交叉淡化持续时间一样长。
但是,在您的情况下,您似乎只想做两件事:淡入音频并可能延迟它。只需使用 afade
即可。
ffmpeg -i music.mp3 -y -af afade=d=1:curve=tri,adelay=0.28s:all=1 output.mp3
这将使音乐淡入超过一秒并延迟开始 0.28 秒。
我正在尝试将无声输入与音乐交叉淡入淡出以延迟音乐开始播放的时间。
我使用 fluent-ffmpeg
构建了命令,因此我可以通过我的程序选择静默输入的持续时间。 crossfade的持续时间是根据2个输入的持续时间计算的,如果其中一个太短则等于0。
下面是生成命令的示例:
ffmpeg -f lavfi -i anullsrc=r=44100 -i music.mp3 -y -filter_complex [0]atrim=duration=0.28[atrim_0];[atrim_0][1]acrossfade=d=0:c1=tri:c2=tri[final] -map [final] output.mp3
但是,当无声输入的持续时间低于 1 秒时,无论接下来是哪个音乐输入,此命令都会创建一个空输出文件。使用具有 trim 持续时间 > 1 秒的相同命令创建包含静音和音乐的有效输出。
我试图查看 FFmpeg 调试报告,但无法真正看出问题所在。
以下是调试日志报告的摘录:
Input file #0 (anullsrc=r=44100):
Input stream #0:0 (audio): 14 packets read (28672 bytes); 14 frames decoded (14336 samples);
Total: 14 packets (28672 bytes) demuxed
Input file #1 (music.mp3):
Input stream #1:0 (audio): 504 packets read (210651 bytes); 504 frames decoded (578372 samples);
Total: 504 packets (210651 bytes) demuxed
Output file #0 (output.mp3):
Output stream #0:0 (audio): 0 frames encoded (0 samples); 0 packets muxed (0 bytes);
Total: 0 packets (0 bytes) muxed
知道是什么原因造成的吗?
PS: 我正在使用 FFmpeg 4.4,与 FFmpeg 4.2 相同的命令导致分段错误。不知道有没有用
acrossfade
可以通过两个独占选项接受交叉渐变持续时间:nb_samples
(默认值:44100)和duration
(默认值:0)。如果未设置后者,则使用前者。因此,在您的命令中,淡入淡出使用 44100 个样本或 1 秒的淡入淡出持续时间。过滤器需要两个输入至少与交叉淡化持续时间一样长。
但是,在您的情况下,您似乎只想做两件事:淡入音频并可能延迟它。只需使用 afade
即可。
ffmpeg -i music.mp3 -y -af afade=d=1:curve=tri,adelay=0.28s:all=1 output.mp3
这将使音乐淡入超过一秒并延迟开始 0.28 秒。