问题描述
我有一个视频我需要转换为mp3(从命令行 – 而不是GUI):video.mp4
我试过了:
ffmpeg -i -b 192 video.mp4 video.mp3
没有成功。我收到以下错误:
WARNING: library configuration mismatch
Seems stream 0 codec frame rate differs from container frame rate: 59.83 (29917/500) -> 59.75 (239/4)
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Encoder (codec id 86017) not found for output stream #0.0
所以我试着跛脚:
lame -h -b 192 video.mp4 video.mp3
我明白了:
Warning: unsupported audio format
我错过了什么吗?
最佳解决方案
对于具有恒定比特率编码(CBR)的FFmpeg:
ffmpeg -i video.mp4 -vn \
-acodec libmp3lame -ac 2 -ab 160k -ar 48000 \
audio.mp3
或者如果要使用可变比特率编码(VBR):
ffmpeg -i video.mp4 -vn \
-acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000 \
audio.mp3
VBR示例的目标比特率为165 Kbit /s,比特率范围为140 … 185。
次佳解决方案
我有一个使用mplayer
的shell脚本(所以它可以转换任何mplayer
可以播放的内容)来提取音频,然后使用lame
对其进行编码。这是代码:
#! /bin/bash
# any2mp3.sh
# Converts to mp3 anything mplayer can play
# Needs mplayer amd lame installed
[ $1 ] || { echo "Usage: $0 file1.wma file2.wma"; exit 1; }
for i in "$@"
do
[ -f "$i" ] || { echo "File $i not found!"; exit 1; }
done
[ -f audiodump.wav ] && {
echo "file audiodump.wav already exists"
exit 1
}
for i in "$@"
do
ext=`echo $i | sed 's/[^.]*\.\([a-zA-Z0-9]\+\)/\1/g'`
j=`basename "$i" ".$ext"`
j="$j.mp3"
echo
echo -n "Extracting audiodump.wav from $i... "
mplayer -vo null -vc null -af resample=44100 -ao pcm:waveheader:fast \
"$i" >/dev/null 2>/dev/null || {
echo "Problem extracting file $i"
exit 1
}
echo "done!"
echo -n "Encoding to mp3... "
lame -m s audiodump.wav -o "$j" >/dev/null 2>/dev/null
echo "done!"
echo "File written: $j"
done
# delete temporary dump file
rm -f audiodump.wav
首先你需要apt-get install mplayer lame
。之后,将代码放在名为”any2mp3.sh”的文件中,授予执行权限,并将其放入$ PATH中,您将能够:
$ any2mp3.sh file.mp4 another-file.wma yet-another.file.ogg
它将转换传递给具有相同名称的mp3的每个文件。
这有点粗糙,但做的工作。
第三种解决方案
是GNOME桌面的领先音频文件转换器。它读取GStreamer可读取的任何内容(Ogg Vorbis,AAC,MP3,FLAC,WAV,AVI,MPEG,MOV,M4A,AC3,DTS,ALAC,MPC,Short,APE,SID,MOD,XM,S3M等… ),写入WAV,FLAC,MP3,AAC和Ogg Vorbis文件,或使用GNOME音频配置文件。
SoundConverter旨在使用简单,速度非常快。由于采用多线程设计,它将使用尽可能多的内核来加速转换。它还可以从视频中提取音频。
如何使用VLC将MP4转换为MP3
-
打开VLC媒体播放器。点击”Media”> “Convert”进入”Open Media”窗口。单击屏幕右侧的”Add”按钮进入Windows资源管理器。找到要转换的硬盘驱动器上的MP4。单击屏幕底部的”Convert”按钮。
-
选择目标文件的名称。
-
单击”Audio Codec”选项卡,然后从”Codec”下拉框中选择”MP3″。按”Start”按钮开始将MP4转换为MP3音频。
-
单击开始
第四种方案
我使用这个小脚本将m4a转换为mp3。
#!/bin/bash
for i in *.m4a; do
avconv -i "$i" -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 "`basename "$i" .m4a`.mp3"
done
第五种方案
我认为问题在于你的ffmpeg命令的语法。
ffmpeg -i source_filename -vn -ab 192k -acodec libmp3lame -ac 2 output_filename
应该管用。
第六种方案
首先,你必须了解一些事情。
MP3
是一种音频格式。
MP4
是一种视频格式。
要从MP4中取出音频(并将其保存为MP3),请使用soundconverter。
第七种方案
把Upd_Sanity.mp4转换成Upd_Sanity.mp3
$ sudo apt-get install ffmpeg && sudo apt-get install libavcodec-extra-53
$ ffmpeg -i Upd_Sanity.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 Upd_Sanity.mp3
或(不推荐使用ffmpeg
)
$ avconv -i Upd_Sanity.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 Upd_Sanity.mp3
Description
-i input file name
-vn disable video recording
-acodec force audio codec to libmp3lame
-ac set the number of audio channels
-ar set the audio sampling frequency
如果你需要经常使用它,
第1步:创建执行转换的bash函数
## utilities.sh
convertMP4toMP3(){
echo -n "Enter source mp4 file : "
read sourceFile
echo -n "Enter destination mp3 file : "
read destFile
avconv -i $sourceFile -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 $destFile
}
第2步:源bash文件
$ source utilities.sh
步骤3:开始转换调用功能convertMP4toMP3
$ convertMP4toMP3
Enter source mp4 file : Upd_Sanity.mp4
Enter destination mp3 file : UPd_sanity.mp3