当前位置: 首页>>技术教程>>正文


将mp4转换为mp3

, ,

问题描述

我有一个视频我需要转换为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的每个文件。

这有点粗糙,但做的工作。

第三种解决方案

soundconverter

ffmpeg,lame,ubuntu

ffmpeg,lame,ubuntu

是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

ffmpeg,lame,ubuntu

第七种方案

把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

参考

utilities.sh

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1217.html,未经允许,请勿转载。