如何使用FFmpeg将音频转换为AAC格式,但保持与旧文件相同的比特率?

3
我不指望这种情况经常发生,但是在通过批处理文件重新编码视频文件为h265时,我会检查音频是否为aac格式。如果不是,则希望转换为aac格式,但保持与旧文件使用的比特率相同,因为如果我只是转换为aac,ffmpeg将使用默认的128kbps值。对于任何旧视频,比特率可能会低于该值,因此升级会稍微增加文件大小。

有没有办法将其转换为aac但保持旧的比特率?

以下是我尝试的方法,但它仍将旧的mp3 89kbps流转换为aac 128 kbps:

ffmpeg -i test.mp4 -acodec aac -vcodec copy test.aac.mp4

请注意,上面只是为了测试目的而提供的信息,我实际上是在转换视频。

注意2:我的问题与其他被建议相似的问题完全不同。我没有问题将ffprobe结果存储在变量中,也没有提到过这一点。


2
你应该编写一个脚本,使用像ffprobe或mp3info这样的工具读取输入文件的比特率,然后将该比特率应用于你的ffmpeg命令。 - Ahmed_Faraz
可能是CMD批处理变量无法保存FFprobe输出的重复问题。 - Squashman
1个回答

3
你可以使用ffprobe来检测输入文件的音频流码率,并根据该命令的输出执行适当的FFMPEG命令。以下是一个小型bash脚本,它将检测音频流的比特率,如果比特率低于128Kbps,则在转换过程中使用原始比特率。这可以避免上采样:
#!/usr/bin/env bash
AUDIO_BITRATE=`ffprobe -v error -select_streams a:0  -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 $1`
if [[ $AUDIO_BITRATE < 128000 ]]; then
  ffmpeg -i $1 -acodec aac -ab ${AUDIO_BITRATE}k -vcodec copy new-$1
else
  ffmpeg -i $1 -acodec aac -vcodec copy new-$1
fi

如果您需要将视频转换为其他格式并且没有安装FFMPEG,您可以使用商业转换API,例如Zamzar


是的,我知道如何做到这一点,但如果ffmpeg中有一个单独的开关,比如-b:a copy,告诉ffmpeg复制比特率而不需要多个行来进行条件语句,那将会更简单。我只是在问ffmpeg是否具备这种能力。 - gregm
@gregm ffmpeg没有这样的功能。 - llogan
好的,谢谢。我已经在检查音频比特率是否低于默认的128k,所以我将使用该设置变量来设置重新编码的比特率。从mp3转换为aac似乎会增加一点文件大小,但并不多(我以为它会减小文件大小)。 - gregm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接