我正在尝试从视频文件中提取音频。我已经尝试在Python中使用moviepy,ffmpeg之类的库。 提取的音频文件太大。对于大小为75 MB的音频文件,该音频文件来自moviepy大约为1.1 GB。即使采用16 kbps的比特率和16000 Hz的采样率,提取的文件也将达到200 MB的大小。其他任何库或提取的音频文件的大小至少等于或小于完整视频文件的方式。
'ffmpeg -i trial_copy.mp4 -ac 1 -ab 16000 -ar 16000 output.wav'
我在ffmpeg中使用以上命令。
答案 0 :(得分:2)
从视频文件中提取的音频太大
您正在输出WAV。这是未压缩的,因此它将忽略您的比特率(-ab
),并且将创建比输入中的压缩音频更大的文件。 See Wav audio file compression not working。
任何其他库或提取的音频文件的大小至少等于或小于完整视频文件的方式。
您可以使用stream copy模式(-c copy
)提取音频而无需重新编码:
ffmpeg -i input.mp4 -map 0:a -c copy output.m4a
文件大小将相同,因为您基本上只是复制和粘贴音频(重新混合)。
答案 1 :(得分:1)
ffmpeg
应该安装程序ffprobe
,该程序可以提供有关电影文件中音频文件格式的信息。
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "trial_copy.mp4"
例如opus
,然后它可以用于从文件复制音频而无需转换格式
ffmpeg -v error -i "trial_copy.mp4" -vn -acodec copy "trial_copy.opus"
我将其用作名为bash
的{{1}}脚本
ffextract_audio
使用
#!/bin/bash
# get codec name / audio file extension
# -v error
# : without extra info
# -select_streams a:0
# : check only audio stream
# -show_entries stream=codec_name
# : get codec_name
# -of default=noprint_wrappers=1:nokey=1
# : remove key name and wrappers
# -i "$1"
# : input file
EXT=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$1")
BASE=${1%.*}
echo output: $BASE.$EXT
# extract audio from $1 and save in $2
# -v error
# : without extra info
# -i "$1"
# : input file
# -vn
# : without video
# -acodec copy
# : copy audio (doesn't change codec)
# "$1.$EXT"
# : output file with extra extension
ffmpeg -v error -i "$1" -vn -acodec copy "$BASE.$EXT"
我可以得到。
ffextrac_audio trial_copy.mp4
答案 2 :(得分:0)
尝试使用它,https://sourceforge.net/projects/gmkvextractgui/
或
ffmpeg -i trial_copy.mp4 -f s16le -ar 16000 output.wav