【问题标题】:Bad bitrate in 3gp file, convert to mp3 using ffmpeg3gp 文件中的比特率不好,使用 ffmpeg 转换为 mp3
【发布时间】:2014-02-14 19:00:56
【问题描述】:

我在手机上录制通话(仅作为音频)。记录存储到 3gp 文件。当我播放单个文件时,可以提到它的播放速度比正常的对话速度快几倍。我测试过,使用命令在ffplay上播放的

ffplay.exe %1 -ar 8000

听起来像真正的速度。

我想使用 ffmpeg 文件(在 Windows 上运行的简单批处理脚本)将 3gp 文件转换为 mp3 文件。我从命令行开始

ffmpeg.exe -i %1 -ar 8000 -f mp3 %1.mp3

但是 mp3 的 bitaire 听起来不太好(太快了)。我用 -b、-b:a 和其他参数进行了实验,但比特率没有改变。

我使用哪些参数将 3gp 更改为具有适当比特率值的 mp3 文件?

【问题讨论】:

  • %1 是文件名
  • 您应该包含完整的ffmpeg 控制台输出。

标签: ffmpeg mp3 bitrate


【解决方案1】:

您将在下面找到我修改为包含 .3gp 文件的脚本。 它还处理 .mp4 .mkv 和 .webm 文件。 声音的清晰度在 30k 时很好,这就是这里的情况,但是如果您想要更大的文件并具有更好的声音清晰度,请尝试 2​​00k。 例如,调用您的脚本文件 vidconvmp3.sh 并保存它。 然后modch +x vidconvmp3.sh 授权执行。 然后 ./vidconvmp3.sh ,如果你在桌面上运行终端,你的批处理将运行并将你的 mp3 文件扔到一个名为 Desktop-mp3 的文件夹中...... tah dah。

#!/usr/bin/env bash

# My bash Script to convert mp4 to mp3
# By NerdJK23
# web: www.computingforgeeks.com
# email: kiplangatmtai@gmail.com

# Requires
# ffmpeg installed
# lame installed
# Check https://computingforgeeks.com/how-to-convert-mp4-to-mp3-on-linux/

echo -ne """
1: Current directory
2: Provide directory
"""
echo ""
echo -n "Selection : "
read selection

case $selection in
    1)
    echo "Okay.."
    echo ""
    echo "Current dir is `pwd` "
    ;;
    2)
    echo ""
    echo -n "Give diretory name: "
    read dir_name

# Check if given directory is valid
if [ -d $dir_name ]; then

    cd "${$dir_name}"
    echo "Current directory is `pwd` "
    echo 
else
    echo "Invalid directory, exiting.."
    echo ""
    exit 10
fi

    echo
    ;;

   *)
       echo
       echo "Wrong selection"
       exit 11
       ;;
esac

echo ""

# Create dir to store mp3 files if it doesn't exist
# First get the current directory name

current_dir=`pwd`
base_name=` basename "$current_dir"`

if [[ ! -d "$base_name"-mp3 ]]; then

echo "$base_name" | xargs  -d "\n" -I {} mkdir {}-mp3
    echo ""
fi
echo ""


# Bigin to covert videos to mp3 audio files
# -d "\n" > Change delimiter from any whitespace to end of line character 

find . -name "*.mp4" -o -name "*.mkv" -o -name "*.webm" -o -name "*.3gp" | xargs  -d "\n"  -I {} ffmpeg -i {} -b:a 30K -vn "$base_name"-mp3/{}.mp3 

# remove video extensions

cd "${base_name}"-mp3

for file_name in *; do      
    mv "$file_name" "`echo $file_name | sed  "s/.mp4//g;s/.mkv//g;s/.3pg//g;s/.webm//g"`";
done

# Move audio directory to ~/Music

if [[ ! -d ~/Music ]]; then
    mkdir ~/Music
fi
cd ..

mv  "$base_name"-mp3 ~/Music/

# Check if conversion successfull

echo ""

if [[ $? -eq "0" ]];then
    echo " All files converted successfully"
else
    echo "Conversation failed"
    exit 1
fi

【讨论】:

    【解决方案2】:

    嗯,你发出的命令是正确的。我自己尝试过它们并且工作正常。因此,首先只需使用 1 个文件而不是 batch files 重试。

    这里是命令1

    ffmpeg -i input.3gp -ar 32k -f mp3 out.mp3 
    

    结果

    out.mp3 的比特率为 47kbps

    命令 2

    ffmpeg -i inout.3gp -b:a 32k out.mp3
    

    out.mp3 的比特率 32kbps

    所以你可以选择上述任何一种。 干杯:)

    【讨论】:

      【解决方案3】:
      -ar 8000
      

      强制 ffmpeg 将您的输入文件解释为以 8kHz 采样。是这种情况还是您尝试将其下采样到 8 kHz?

      如果是这样,请尝试以下方法:

      -af "aresample=8000"
      

      如果您对此感到满意,请将其标记为好答案;)

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 2016-10-12
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-15
        相关资源
        最近更新 更多