ffmpeg提取人声
时间: 2024-08-21 12:00:39 浏览: 68
FFmpeg是一个强大的跨平台命令行工具,用于处理音频和视频流。如果你想从视频文件中提取人声(通常是指单声道的人声而不是混响环境),你可以使用FFmpeg的`-vn`选项(表示“无声模式”,不处理视频)和`-an`选项(表示“禁用所有音频”),然后指定`-ac 1`(只保留一个音频通道,通常是左声道,因为大部分语音信息在这一侧)以及合适的音频编码器,如`aac`或`copy`(如果源文件已经是AAC编码,可以复制原音轨)。
例如,这样的命令可以提取名为"video.mp4"的视频文件中的人声:
```bash
ffmpeg -i video.mp4 -vn -an -ac 1 -acodec aac output_audio.aac
```
这将会创建一个新的AAC音频文件"output_audio.aac",其中只包含人声。
相关问题
ffmpeg 提取人声
FFmpeg 是一个开源的跨平台音视频处理工具,它提供了非常丰富的音视频处理功能,包括提取人声等。提取人声可以通过将音频分离为背景音乐和人声两个部分来实现。
在 FFmpeg 中,可以使用下面这个命令来提取人声:
```
ffmpeg -i input.mp3 -ac 1 -filter_complex "[0:a]pan=mono|c0=c1[mono]" -map "[mono]" output.mp3
```
其中,`input.mp3` 是输入音频文件名,`output.mp3` 是输出音频文件名。
具体解释如下:
- `-i input.mp3`:指定输入音频文件;
- `-ac 1`:将音频通道数设置为 1,即将音频转换为单声道;
- `-filter_complex "[0:a]pan=mono|c0=c1[mono]"`:使用 `pan` 滤镜将左右声道合并成单声道,并存储到名为 `mono` 的虚拟输出中;
- `-map "[mono]"`:将 `mono` 虚拟输出映射到输出文件中。
这样,输出的音频文件中就只剩下人声部分了。
import os import subprocess def extract_audio(filename): # 提取音频 cmd = 'ffmpeg -i {} -vn -acodec copy audio.mp3'.format(filename) subprocess.call(cmd, shell=True) def remove_vocals(filename): # 使用spleeter库去掉人声 cmd = 'spleeter separate -p spleeter:2stems -o output audio.mp3' subprocess.call(cmd, shell=True) def convert_to_wav(filename): # 将音频文件转换为wav格式 cmd = 'ffmpeg -i output/audio/accompaniment.wav -acodec pcm_s16le -ac 1 -ar 16000 final.wav' subprocess.call(cmd, shell=True) def clean_up(): # 删除过程中生成的音频文件 os.remove('audio.mp3') os.remove('final.wav') os.removedirs('output') if name == 'main': # 文件名 filename = '这世界那么多人.mp3' # 提取音频 extract_audio(filename) # 去除人声 remove_vocals('3544242627.mp3') # 转换格式 convert_to_wav(filename) # 删除过程中生成的文件 clean_up() 这串代码的remove_vocals()函数该输什么文件
在函数参数中传入的应该是提取音频后的音频文件名,即'audio.mp3'。因此,修改代码如下:
```
def remove_vocals(filename):
# 使用spleeter库去掉人声
cmd = 'spleeter separate -p spleeter:2stems -o output {}'.format(filename)
subprocess.call(cmd, shell=True)
```
同时,在主函数中调用remove_vocals()函数时,应该传入提取音频后的音频文件名,即'audio.mp3'。因此,修改代码如下:
```
if __name__ == '__main__':
# 文件名
filename = '这世界那么多人.mp3'
# 提取音频
extract_audio(filename)
# 去除人声
remove_vocals('audio.mp3')
# 转换格式
convert_to_wav(filename)
# 删除过程中生成的文件
clean_up()
```