我正在寻找一种方法来批量降低我的大量 mp3 文件集合中的 mp3 比特率。考虑到这一定是一件非常常见的事情,这真是令人惊讶的困难。
事实上,有数十个甚至数百个来自人们询问如何做到这一点的帖子,以及声称可以做到这一点的数十种不同金额的公用事业。环顾四周并尝试了一些免费软件,令我惊讶的是,没有任何软件使批量转换/调整任务变得容易。
如果我想转换单个文件,有人告诉我这是一个不错的方法:
ffmpeg -y -loglevel "error" -i "my_music_file.mp3" -acodec libmp3lame -ab $BITRATE "my_music_file_new.mp3"
Run Code Online (Sandbox Code Playgroud)
(尽管我更希望文件在原地更改并产生相同的名称。)
我需要一个使用 ffmpeg 的简单 bash 脚本,它将递归地遍历我的音乐目录并更改我的 mp3 文件的比特率。
我正在使用MediaCodec从相机编码H.264视频,问题是,当我移动手机时,输出视频的质量非常高,视频中充满了马赛克/视觉块.
Belows是一些细节:
我的编码器比特率是500 kbps,比特率模式是BITRATE_MODE_VBR.
我尝试将比特率改为800 kbps,输出视频质量提高很多,如果我改变比特率模式BITRATE_MODE_CQ,输出视频质量是完美的,但比特率将增加到1400 kbps.
我希望将平均比特率保持在低水平,例如500 kbps,但是当手机移动时允许比特率突发到更高的比特率,例如800 kbps.在iOS VideoToolBox中,有一个API kVTCompressionPropertyKey_DataRateLimits可以设置平均比特率和最大比特率,但在Android中,我怎样才能实现平均最大比特率控制?
我注意到在配置MediaCodec时有一个隐藏"max-bitrate"参数,但它没有效果(因为Android框架忽略了这个参数,请参阅http://androidxref.com/7.1.1_r6/xref/frameworks/av/ media/libstagefright/ACodec.cpp #configureCodec),我也注意到有一个隐藏"质量"参数,但它也没有效果.
我只是有这个问题,因为我在 ffmpeg 中使用了以下命令:
ffmpeg -i input.wav -filter:a "volume=0.2" output.wav
Run Code Online (Sandbox Code Playgroud)
按照此处的文档进行操作:https ://trac.ffmpeg.org/wiki/AudioVolume
但是,当我创建新文件时,输出的大小是输入的一半,并且音轨的比特率也降低了。
所以我的问题是:
有谁知道 FFMPEG 中 bufsize 的公式以及它检查的速率是什么?
我似乎找不到任何具体的答案。
是不是:bufsize = 比特率/速率?
在计算中是否应该使用最大速率而不是比特率?
计算完成检查的速率的示例:
bitrate: 700Kbps
maxrate: 700Kbps
bufsize: 70Kb
700Kbps/70Kb = 10 sec
Run Code Online (Sandbox Code Playgroud)
是对的吗?对我来说,这听起来不太正确,因为较小的 bufsize 应该以较高的速率运行检查,而 10 秒似乎间隔太长。
公式需要倒转吗?
有人知道公式和单位的正确语法吗?
我写了一个演示来使用 MediaCodec 和 MediaMuxer 录制视频。
我用我的demo录制了一段视频,用ffprobe查看视频,结果如下:
Duration: 00:00:06.86, start: 0.000000, bitrate: 723 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 619 kb/s, SAR 1:1 DAR 4:3, 30.02 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2015-06-05 13:19:24
handler_name : VideoHandle
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 96 kb/s (default)
Metadata:
creation_time : 2015-06-05 13:19:24
handler_name : SoundHandle
Run Code Online (Sandbox Code Playgroud)
它包含视频和音频信息,我发现音频属性与我在源代码中设置的相同,但视频属性不正确。我的视频设置源码如下:
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, 384000); …Run Code Online (Sandbox Code Playgroud) 我想知道如何计算该视频的比特率:
http://jell.yfish.us/media/jellyfish-30-mbps-hd-hevc.mkv
视频详情:jellyfish-30-mbps-hd-hevc 视频详情来自 MediaInfo

我使用Format Factory 4.0.0将*.mkv视频转换为*.mp4,质量为[AVC高质量和大小],其发送到ffmpeg的命令是:
-y -i ellyfish-30-mbps-hd-hevc.mkv -s 1920x1080 -b:v 2724k -ac 2 -r 29.970 -c:v libx264 -ar 48000 -b:a 192k -c:a aac -aspect 16:9 jellyfish-30-mbps-hd-hevc [AVC High quality and size].mp4
Run Code Online (Sandbox Code Playgroud)
问题:
格式工厂如何计算视频比特率:-b:v 2724k?
我在网上有一个 .mp3 文件列表,我想获得最高质量的文件。多媒体文件的质量等于它们的比特率。
比特率本身应该在文件的标头中找到。如果没有,也可以使用音轨的长度。(文件大小 / 轨道长度 = 比特率)
如果我在本地拥有这些文件,这些事情会很容易,但我想通过 HTTP 获取这些信息并确定哪个文件具有最高的质量。
我可以从 HTTP 标头中获取音轨的长度吗?如果没有,是否可以仅获取描述长度/比特率的位,而不是下载整个文件?
我正在用 python 编写代码,但问题非常普遍,所以我不会将其标记为 python 问题。
根据带宽的定义,它是频谱的宽度。因此带宽应以 Hz 为单位进行测量。但 bps、Mbps、kbps 几乎到处都被用作带宽的度量。我需要知道的是,为什么使用 bps、kbps 等数据传输速率测量来测量信号的带宽。
bitrate ×10
ffmpeg ×4
mp3 ×4
android ×2
video ×2
audio ×1
bandwidth ×1
bash ×1
delphi ×1
encoder ×1
h.264 ×1
mediacodec ×1
mediamuxer ×1
networking ×1
python ×1
re-encoding ×1