【问题标题】:Extracted audio from video files is too large从视频文件中提取的音频太大
【发布时间】:2020-03-26 17:43:45
【问题描述】:
我正在尝试从视频文件中提取音频。我在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 中使用上述命令。
【问题讨论】:
标签:
python
audio
ffmpeg
moviepy
【解决方案2】:
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 脚本,称为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
我可以得到ie。
trial_copy.opus
【解决方案3】:
从视频文件中提取的音频太大
您正在输出 WAV。这是未压缩的,因此它会忽略您的比特率 (-ab),并会创建比输入中的压缩音频更大的文件。 See Wav audio file compression not working.
任何其他库或提取音频文件的方式至少与完整视频文件大小相同或小于完整视频文件。
您可以使用stream copy模式(-c copy)提取音频而无需重新编码:
ffmpeg -i input.mp4 -map 0:a -c copy output.m4a
文件大小将相同,因为您基本上只是复制和粘贴音频(重新混合)。