如何将 aac 转换为 ogg opus 保持比特率和采样率不变
How to convert aac to ogg opus keeping bit rate and sample rate unchanged
我正在尝试将 .aac 文件转换为 .opus,但在使用 ffprobe 检查后,我得到了不同的比特率和采样率。
虽然输入文件的音频流比特率为 245995,但输出文件的音频流没有指定比特率 - "format" 显示比特率为 118788。
当输入文件的音频流采样率为 44100 时,输出为 48000。
ffprobe -v error -show_format -show_streams input.aac
[STREAM]
index=0
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_time_base=1/44100
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/28224000
start_pts=N/A
start_time=N/A
duration_ts=106533390807
duration=3774.567418
bit_rate=245995
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]
[FORMAT]
filename=input.aac
nb_streams=1
nb_programs=0
format_name=aac
format_long_name=raw ADTS AAC (Advanced Audio Coding)
start_time=N/A
duration=3774.567418
size=116065589
bit_rate=245995
probe_score=51
[/FORMAT]
ffmpeg -nostdin -i input.aac -c:a libopus output.opus
ffmpeg version N-93449-g013f714 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-27ubuntu1~18.04)
configuration: --prefix=/home/vagrant/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/vagrant/ffmpeg_build/include --extra-ldflags=-L/home/vagrant/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/vagrant/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 47.105 / 58. 47.105
libavformat 58. 26.101 / 58. 26.101
libavdevice 58. 7.100 / 58. 7.100
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[aac @ 0x55d4b7e21d80] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'input.aac':
Duration: 01:02:54.57, bitrate: 245 kb/s
Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 245 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (aac (native) -> opus (libopus))
[libopus @ 0x55d4b7e3f8c0] No bit rate set. Defaulting to 96000 bps.
Output #0, opus, to 'output.opus':
Metadata:
encoder : Lavf58.26.101
Stream #0:0: Audio: opus (libopus), 48000 Hz, stereo, flt, 96 kb/s
Metadata:
encoder : Lavc58.47.105 libopus
size= 52103kB time=00:59:53.21 bitrate= 118.8kbits/s speed=66.2x
video:0kB audio:51733kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.715930%
ffprobe -v error -show_format -show_streams output.opus
[STREAM]
index=0
codec_name=opus
codec_long_name=Opus (Opus Interactive Audio Codec)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=fltp
sample_rate=48000
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/48000
start_pts=0
start_time=0.000000
duration_ts=172473677
duration=3593.201604
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:ENCODER=Lavc58.47.105 libopus
[/STREAM]
[FORMAT]
filename=output.opus
nb_streams=1
nb_programs=0
format_name=ogg
format_long_name=Ogg
start_time=0.000000
duration=3593.201604
size=53353867
bit_rate=118788
probe_score=100
[/FORMAT]
如何保持输入文件的质量?我在 ffmpeg cmd 中遗漏了什么吗?
Opus 没有 44100 的采样率,所以在这种情况下您必须重新采样。
Opus 的可用采样率为 8、12、16、24 或 48 kHz(根据 RFC6716 section Resampling)。
也可能没有匹配的比特率。那么你无论如何都是 re-encoding,因此质量下降。最后,匹配比特率的尝试并不意味着数据具有相同的编码质量,即使存在一定的相关性。
我正在尝试将 .aac 文件转换为 .opus,但在使用 ffprobe 检查后,我得到了不同的比特率和采样率。
虽然输入文件的音频流比特率为 245995,但输出文件的音频流没有指定比特率 - "format" 显示比特率为 118788。
当输入文件的音频流采样率为 44100 时,输出为 48000。
ffprobe -v error -show_format -show_streams input.aac
[STREAM]
index=0
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_time_base=1/44100
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/28224000
start_pts=N/A
start_time=N/A
duration_ts=106533390807
duration=3774.567418
bit_rate=245995
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]
[FORMAT]
filename=input.aac
nb_streams=1
nb_programs=0
format_name=aac
format_long_name=raw ADTS AAC (Advanced Audio Coding)
start_time=N/A
duration=3774.567418
size=116065589
bit_rate=245995
probe_score=51
[/FORMAT]
ffmpeg -nostdin -i input.aac -c:a libopus output.opus
ffmpeg version N-93449-g013f714 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-27ubuntu1~18.04)
configuration: --prefix=/home/vagrant/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/vagrant/ffmpeg_build/include --extra-ldflags=-L/home/vagrant/ffmpeg_build/lib --extra-libs='-lpthread -lm' --bindir=/home/vagrant/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 47.105 / 58. 47.105
libavformat 58. 26.101 / 58. 26.101
libavdevice 58. 7.100 / 58. 7.100
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[aac @ 0x55d4b7e21d80] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'input.aac':
Duration: 01:02:54.57, bitrate: 245 kb/s
Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 245 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (aac (native) -> opus (libopus))
[libopus @ 0x55d4b7e3f8c0] No bit rate set. Defaulting to 96000 bps.
Output #0, opus, to 'output.opus':
Metadata:
encoder : Lavf58.26.101
Stream #0:0: Audio: opus (libopus), 48000 Hz, stereo, flt, 96 kb/s
Metadata:
encoder : Lavc58.47.105 libopus
size= 52103kB time=00:59:53.21 bitrate= 118.8kbits/s speed=66.2x
video:0kB audio:51733kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.715930%
ffprobe -v error -show_format -show_streams output.opus
[STREAM]
index=0
codec_name=opus
codec_long_name=Opus (Opus Interactive Audio Codec)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=fltp
sample_rate=48000
channels=2
channel_layout=stereo
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/48000
start_pts=0
start_time=0.000000
duration_ts=172473677
duration=3593.201604
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:ENCODER=Lavc58.47.105 libopus
[/STREAM]
[FORMAT]
filename=output.opus
nb_streams=1
nb_programs=0
format_name=ogg
format_long_name=Ogg
start_time=0.000000
duration=3593.201604
size=53353867
bit_rate=118788
probe_score=100
[/FORMAT]
如何保持输入文件的质量?我在 ffmpeg cmd 中遗漏了什么吗?
Opus 没有 44100 的采样率,所以在这种情况下您必须重新采样。
Opus 的可用采样率为 8、12、16、24 或 48 kHz(根据 RFC6716 section Resampling)。
也可能没有匹配的比特率。那么你无论如何都是 re-encoding,因此质量下降。最后,匹配比特率的尝试并不意味着数据具有相同的编码质量,即使存在一定的相关性。