moviepy 在音频文件末尾引入了奇怪的音频伪影。为什么?

问题描述 投票:0回答:1

这些不存在于原始音频文件中。它们在视频创建过程中以某种方式添加到末尾。请参阅此屏幕截图,了解波形前后的比较:

enter image description here

更奇怪的是,这些文物听起来有点像叙述者。听起来好像下一个句子要开始了,他刚开始说出第一个单词的前 0.1 秒,然后突然被切断。但这作为一种解释没有多大意义,因为所有这些代码所做的只是获取一个音频文件,并将视频元素放在它上面。

虽然我的代码还有更多内容,但以下是相关部分:

    current_audio_file = os.path.join(current_video_folder_path, f'{current_video_title_template}-part-{current_video_section}.mp3')
audio_clip = AudioFileClip(current_audio_file)
        final_clip = concatenate_videoclips(clips).subclip(0, audio_clip.duration)
    final_clip = final_clip.set_audio(audio_clip)
    final_clip_path = os.path.join(current_video_folder_path, f"video-part-{current_video_section}.mp4")

    final_clip.write_videofile(final_clip_path, codec="libx264", audio_codec="aac")

我尝试过的一件事是将音频编解码器切换为不同的编解码器。没有区别。事实上,它引入了一种完全相同的音频伪影 - 不像同一地点的独特音频伪影,它实际上是相同的声音。

我目前最好的想法是一个糟糕但实用的解决方法:只需从每个音频文件末尾删除最后 0.2 秒即可。我在这里这样做了,如下所示,它有效地消除了伪影。这似乎表明,它可能是在将其转换为 AudioFileClip() 元素的过程中生成的?

    current_audio_file = os.path.join(current_video_folder_path, f'{current_video_title_template}-part-{current_video_section}.mp3')
audio_clip = AudioFileClip(current_audio_file)

# Trim the last 0.X seconds from the audio
# this is a poor, but functional, workaround to remove those weird artifacts at end of certain audio clips.
audio_duration = audio_clip.duration
audio_clip = audio_clip.subclip(0, max(0, audio_duration - 0.2))

我只是运行了这个来调试,实际上这本身就引入了音频工件:

current_audio_file = os.path.join(current_video_folder_path, f'{current_video_title_template}-part-{current_video_section}.mp3')
audio_clip = AudioFileClip(current_audio_file)

# Export the trimmed audio for inspection
debug_audio_path = os.path.join(current_video_folder_path, f'debug_{current_video_section}.mp3')
audio_clip.write_audiofile(debug_audio_path)

exit()

还尝试将其转换为 WAV 音频文件,并将其用作输入,然后也导出为 WAV 音频文件 - 与最后的工件相同的问题。

无论如何,如果有人以前经历过这个,或者有任何想法,我会很好奇。

python mp3 mp4 aac
1个回答
0
投票

您遇到的问题可能是由于在处理或编码步骤期间音频末尾引入的轻微伪影造成的。一个简单而有效的解决方法是从音频文件末尾修剪一小部分。以下是修复方法:

audio_clip = audio_clip.subclip(0, audio_clip.duration - 0.05)

为什么这有效:

由于编码怪异或 moviepy 的同步问题,该伪影通常出现在音频文件的末尾。 修剪最后 0.05 秒可以消除此伪影,同时保持音频的其余部分完好无损。 这种方法对我来说一直有效。如果问题仍然存在,您可以稍微调整修剪持续时间(例如 0.02 或 0.1 秒)以更好地适合您的文件。

© www.soinside.com 2019 - 2024. All rights reserved.