Как преобразовать aac в ogg opus, сохранив битрейт и частоту дискретизации без изменений - PullRequest
1 голос
/ 23 июня 2019

Я пытаюсь преобразовать файл .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?

1 Ответ

1 голос
/ 25 июня 2019

Частота дискретизации 44100 с Opus отсутствует, поэтому в этом случае вам необходимо выполнить повторную выборку.

Также может не соответствовать битрейт.Тогда вы все равно перекодируете и, следовательно, потеря качества.И, наконец, попытка сопоставить битрейты не означает, что данные имеют одинаковое качество кодирования, даже если существует определенная корреляция.

...