Opened 8 years ago
Closed 8 years ago
#7288 closed defect (invalid)
The amix filter is truncating a channel on merge
| Reported by: | David Weber | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avfilter |
| Version: | unspecified | Keywords: | amix |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
When merging 3 opus encoded audio channels in a mkv formatted container, the primary issue is that the first channel is incorrectly truncated. As a separate issue, the 3rd channel is incorrectly positioned in time.
We have the following from ffprobe of the input file:
Stream #0:0: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.023000000
Stream #0:1: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.048000000
Stream #0:2: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.038000000
- Stream #0.0 is 2 seconds long, starts at 0 seconds and contains a 1kHz sine wave that was opus encoded
- Stream #0.1 is 2 seconds long, starts at 0 seconds and contains a 1.5kHz sine wave that was opus encoded
- Strea2 #0.2 is 1 second long, with the first packet apearing at 1 second and contains a 2kHz sine wave that was opus encoded
How to reproduce:
The ffmpeg version is 4.0.1-0york0~16.04 (Ubuntu)
ffmpeg --i test.mkv -filter_complex amix=inputs=3:duration=longest -ar 8000 test.wav
This produces the expected wav file with the input stream #0:0 truncated at 1 second. The stream #0:2 starts at 0 seconds even though the first packet appears 1 second into the mkv stream.
This can be established by viewing a spectrogram of test.wav (Audacity has such a tool). Attached is the input file (test.mkv) as well as an annotated output from Audacity's spectrogram view.
Attachments (3)
Change History (9)
by , 8 years ago
by , 8 years ago
| Attachment: | Spectrogram-annotated.png added |
|---|
Annotated spectrogram produced by Audacity
comment:1 by , 8 years ago
| Keywords: | amix added |
|---|
Please test current FFmpeg git head and please provide the command line you tested together with the complete, uncut console output to make this a valid ticket.
comment:2 by , 8 years ago
Full ffmpeg output:
ffmpeg version 4.0.1-0york0~16.04 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
configuration: --prefix=/usr --extra-version='0york0~16.04' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --target-os=linux --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Input #0, matroska,webm, from 'test.mkv':
Metadata:
ENCODER : Lavf57.83.100
Duration: 00:00:02.05, start: 0.008000, bitrate: 27 kb/s
Stream #0:0: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.023000000
Stream #0:1: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.048000000
Stream #0:2: Audio: opus, 48000 Hz, mono, fltp (default)
Metadata:
DURATION : 00:00:02.038000000
File 'test.wav' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 (opus) -> amix:input0
Stream #0:1 (opus) -> amix:input1
Stream #0:2 (opus) -> amix:input2
amix -> Stream #0:0 (pcm_s16le)
Press [q] to stop, [?] for help
Output #0, wav, to 'test.wav':
Metadata:
ISFT : Lavf58.12.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s (default)
Metadata:
encoder : Lavc58.18.100 pcm_s16le
size= 32kB time=00:00:02.05 bitrate= 127.4kbits/s speed= 169x
video:0kB audio:32kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.238971%
comment:3 by , 8 years ago
The amix filter does not care about packet pts, so reported bug is invalid.
comment:4 by , 8 years ago
The primary bug is stream 0:0 is being incorrectly truncated, not the incorrect start time for stream 0:2
comment:5 by , 8 years ago
I can confirm that the git HEAD from github (ffmpeg version N-91396-g27662ed) exhibits the same error
comment:6 by , 8 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
As already mentioned amix filter does not care for input start time, it happily consumes all streams from beginning. Use other filters like adelay to delay one of input streams.



Input file for the test