Mono file size is larger than Stereo file size, for same content and settings. [Stereo uses lower bitrate.]
Hello, I have some old Mono audio recordings from a CD that are stored in Stereo FLAC files. If I transcode one into a Stereo OPUS file using:
ffmpeg -y -i ./input.flac -codec:a libopus -compression_level 10 -vbr on -b:a 192k -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_reference_loudness= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -af volume=replaygain=album -loglevel quiet ./output.opus
Results in a 7,299,479 byte (7.0 MiB) file.
encoder=Lavc58.91.100 libopus
Pre-skip: 312
Playback gain: 0 dB
Channels: 2
Original sample rate: 48000 Hz
Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min)
Page duration: 1000.0ms (max), 999.8ms (avg), 940.0ms (min)
Total data length: 7299479 bytes (overhead: 0.656%)
Playback length: 6m:04.933s
Average bitrate: 160 kbit/s, w/o overhead: 159 kbit/s
Since the audio is Mono: I thought it would be interesting to throw away the right channel. And I used this command to transcode:
ffmpeg -y -i ./input.flac -codec:a libopus -compression_level 10 -vbr on -b:a 192k -map_channel 0.0.0 -metadata replaygain_album_gain= -metadata replaygain_album_peak= -metadata replaygain_reference_loudness= -metadata replaygain_track_gain= -metadata replaygain_track_peak= -af volume=replaygain=album -loglevel quiet ./output.opus
Results in a 8,804,150 byte (8.4 MiB) file.
encoder=Lavc58.91.100 libopus
Pre-skip: 312
Playback gain: 0 dB
Channels: 1
Original sample rate: 48000 Hz
Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min)
Page duration: 1000.0ms (max), 999.8ms (avg), 940.0ms (min)
Total data length: 8804150 bytes (overhead: 0.556%)
Playback length: 6m:04.933s
Average bitrate: 193 kbit/s, w/o overhead: 191.9 kbit/s
Which was surprising, as I expected little to no difference between the file sizes. It appears that OPUS is using a bitrate of 160k for the Stereo version, instead of the requested 192k bitrate [which is being used in Mono].
To ensure this wasn't an issue coming from ffmpeg, I transcoded the same file using opusenc:
opusenc --bitrate 192k ./input.flac ./output.opus
Results in a 7,307,706 byte (7.0 MiB) file.
ENCODER=opusenc from opus-tools 0.2
ENCODER_OPTIONS=--bitrate 192k
Pre-skip: 312
Playback gain: -12.2891 dB
Channels: 2
Original sample rate: 44100 Hz
Packet duration: 20.0ms (max), 20.0ms (avg), 20.0ms (min)
Page duration: 1000.0ms (max), 999.8ms (avg), 940.0ms (min)
Total data length: 7307706 bytes (overhead: 0.667%)
Playback length: 6m:04.933s
Average bitrate: 160.2 kbit/s, w/o overhead: 159.1 kbit/s
Which are virtually the same results as ffmpeg.
This seems like a bug. At the very least, I would expect the Stereo bitrates to be closer to 192k.
Or maybe this some sort a Mono documentation issue? [i.e. VBR doesn't work?]
Thanks for reading.
System details:
Linux 5.8.12-arch1-1 #1 SMP PREEMPT Sat, 26 Sep 2020 21:42:58 +0000 x86_64 GNU/Linux
ffmpeg n4.3.1
libopusenc 0.2.1
opusenc opus-tools 0.2 (using libopus 1.3.1)