Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#8538 closed defect (invalid)

-ar and -ac don't appear to work with stream_specifier > 0

Reported by: Chris Howie Owned by:
Priority: minor Component: ffmpeg
Version: unspecified Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
When using ffmpeg to generate an HLS output with multiple renditions, -ar:0 and -ac:0 work to set the audio sample rate and channel count of the first output stream.

-ar:1, -ac:1, -ar:2, -ac:2, etc. do not cause any errors but also appear to have no effect; the rate and channel count from the input stream is used for all but the first HLS output stream.

-ar and -ac (without stream specifiers) will set the rate and channel count for all output streams correctly.

The particular input file does not appear to be relevant. This same behavior is produced with every input file I have tried.

How to reproduce:

$ ffmpeg -version
ffmpeg version 4.2.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100
libpostproc    55.  5.100 / 55.  5.100
% ffmpeg -i input.mp4
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    creation_time   : 2013-06-05T23:42:03.000000Z
    com.apple.finalcutstudio.media.uuid: 05AC8CB0-598D-4DF0-8719-8D71EE88135E
    com.apple.finalcutstudio.media.history.uuid: 4A73B189-408C-416E-93D3-5216E8AEF0A7
    timecode        : 00:00:00:00
  Duration: 00:04:52.90, start: 0.000000, bitrate: 8344 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 8227 kb/s, 30 fps, 30 tbr, 3k tbn, 6k tbc (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : H.264
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 112 kb/s (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Sound Media Handler
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:38.000000Z
      handler_name    : Time Code Media Handler
      timecode        : 00:00:00:00
% ffmpeg -y -fflags +genpts+igndts+ignidx -i input.mp4 -fflags +genpts+igndts+ignidx -t 00:05:00 \
    -preset slow \
    -force_key_frames 'expr:gte(t,n_forced*2)' \
    -sc_threshold 0 \
    -c:v h264 \
    -c:a aac \
    -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 \
    -profile:v:0 high     -b:v:0 3000k -maxrate:v:0 3200k -bufsize:v:0 4500k -b:a:0 128k -ac:0 1 -ar:0 48000 -filter:v:0 'fps=fps=30,format=yuv420p,scale=-2:720' \
    -profile:v:1 baseline -b:v:1 1500k -maxrate:v:1 1600k -bufsize:v:1 2250k -b:a:1 128k -ac:1 1 -ar:1 48000 -filter:v:1 'fps=fps=30,format=yuv420p,scale=-2:480' \
    -profile:v:2 baseline -b:v:2 1200k -maxrate:v:2 1280k -bufsize:v:2 1800k -b:a:2  96k -ac:2 1 -ar:2 48000 -filter:v:2 'fps=fps=30,format=yuv420p,scale=-2:360' \
    -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
    -master_pl_name master.m3u8 \
    -f hls -hls_time 6 -hls_playlist_type vod \
    -hls_segment_filename "out/a/v%v/playlist%04d.ts" \
    "out/a/v%v/playlist.m3u8"
...
Output #0, hls, to 'out/a/v%v/playlist.m3u8':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    timecode        : 00:00:00:00
    com.apple.finalcutstudio.media.uuid: 05AC8CB0-598D-4DF0-8719-8D71EE88135E
    com.apple.finalcutstudio.media.history.uuid: 4A73B189-408C-416E-93D3-5216E8AEF0A7
    encoder         : Lavf58.29.100
    Stream #0:0(eng): Video: h264 (libx264), yuv420p(progressive), 1280x720, q=-1--1, 3000 kb/s, 30 fps, 90k tbn, 30 tbc (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 3200000/0/3000000 buffer size: 4500000 vbv_delay: -1
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, mono, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Sound Media Handler
      encoder         : Lavc58.54.100 aac
    Stream #0:2(eng): Video: h264 (libx264), yuv420p(progressive), 854x480, q=-1--1, 1500 kb/s, 30 fps, 90k tbn, 30 tbc (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 1600000/0/1500000 buffer size: 2250000 vbv_delay: -1
    Stream #0:3(eng): Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Sound Media Handler
      encoder         : Lavc58.54.100 aac
    Stream #0:4(eng): Video: h264 (libx264), yuv420p(progressive), 640x360, q=-1--1, 1200 kb/s, 30 fps, 90k tbn, 30 tbc (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : Lavc58.54.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 1280000/0/1200000 buffer size: 1800000 vbv_delay: -1
    Stream #0:5(eng): Audio: aac (LC), 44100 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2013-06-05T23:53:26.000000Z
      handler_name    : Apple Sound Media Handler
      encoder         : Lavc58.54.100 aac

Note that the first output stream is 48kHz and mono, but the second two are 44.1kHz and mono in contradiction to the supplied arguments. The ffmpeg manpage (as well as ffmpeg's lack of an error on these arguments) would seem to indicate that this should work.

Change History (4)

comment:1 by Chris Howie, 4 years ago

Apparently my proofreader broke on the last sentence.

the second two are 44.1kHz and mono

the second two are 44.1kHz and stereo

comment:2 by Gyan, 4 years ago

Priority: normalminor
Resolution: invalid
Status: newclosed

Stream specifiers are parsed independently of the type of option it's applied to. So, -ac:2 is set for the 3rd output stream, whichever type that is. To set it for the third audio output stream, you need -ac:a:2. Similarly, in -b:a:2, the option is b and the specifier is a:2.

Last edited 4 years ago by Gyan (previous) (diff)

comment:3 by Chris Howie, 4 years ago

Ah, that makes sense. Not sure how I missed that. Thanks for the information and sorry for the noise.

comment:4 by Carl Eugen Hoyos, 4 years ago

Version: 4.2unspecified

I thought this is a duplicate of ticket #4823.

Note: See TracTickets for help on using tickets.