Ticket #867 (closed defect: fixed)

Opened 18 months ago

Last modified 6 months ago

support in24 audio in mov muxer

Reported by: dericed Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: atag mov
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

In order to maintain interoperability with a broadcast system I need to transcode audio to pcm_s24be with an 'in24' codecid. Using ffmpeg the codecid for '-acodec pcm_s24be' produces a codecid of 'lpcm' even if I specify '-atag in24'

Here's my output using ffmpeg to try to output an 'in24' audio stream in Quicktime:

ffmpeg -i MI-351_8b.mov -vn -acodec pcm_s24be -atag in24 in24.mov
ffmpeg version N-32741-g440e984, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 27 2011 09:48:51 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-libfreetype --enable-nonfree --enable-hardcoded-tables --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid
  libavutil      51. 33.100 / 51. 33.100
  libavcodec     53. 48.100 / 53. 48.100
  libavformat    53. 28.100 / 53. 28.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 55.100 /  2. 55.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  5.100 /  0.  5.100
  libpostproc    51.  2.100 / 51.  2.100

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'MI-351_8b.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.14.0
  Duration: 00:00:13.03, start: 0.000000, bitrate: 169865 kb/s
    Stream #0:0(eng): Video: rawvideo (2vuy / 0x79757632), uyvy422, 720x486, 167793 kb/s, SAR 9:10 DAR 4:3, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : 
                        DataHandler
    Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 2 channels, s32, 2304 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : 
                        DataHandler
Output #0, mov, to 'in24.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.28.100
    Stream #0:0(eng): Audio: pcm_s24be (in24 / 0x34326E69), 48000 Hz, 2 channels, s32, 2304 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : 
                        DataHandler
Stream mapping:
  Stream #0:1 -> #0:0 (pcm_s24le -> pcm_s24be)
Press [q] to stop, [?] for help
size=    3666kB time=00:00:13.03 bitrate=2304.4kbits/s    
video:0kB audio:3665kB global headers:0kB muxing overhead 0.018598%

Checking the file shows the fourcc is 'lpcm':

ffmpeg -i in24.mov
ffmpeg version N-32741-g440e984, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec 27 2011 09:48:51 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-libfreetype --enable-nonfree --enable-hardcoded-tables --cc=/usr/bin/gcc-4.2 --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid
  libavutil      51. 33.100 / 51. 33.100
  libavcodec     53. 48.100 / 53. 48.100
  libavformat    53. 28.100 / 53. 28.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 55.100 /  2. 55.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  5.100 /  0.  5.100
  libpostproc    51.  2.100 / 51.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in24.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.28.100
  Duration: 00:00:13.03, start: 0.000000, bitrate: 2304 kb/s
    Stream #0:0(eng): Audio: pcm_s24be (lpcm / 0x6D63706C), 48000 Hz, 2 channels, s32, 2304 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : 
                        DataHandler
At least one output file must be specified

The same command through ffmbc works and produces an output with 'in24' codec id.

Attachments

SoudieF_ffmpeg_in24.mov Download (1.4 MB) - added by dericed 17 months ago.
force in24 with ffmpeg
SoundieF_ffmbc_in24.mov Download (1.4 MB) - added by dericed 17 months ago.
force in24 with ffmbc

Change History

comment:1 Changed 18 months ago by cehoyos

  • Keywords mov added
  • Status changed from new to open
  • Component changed from undetermined to avformat
  • Reproduced by developer set

(Where do you try to force a video tag?)

Does the following work-around allow to produce correct files for you, no -tag needed?

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index e5f0c4c..9635c92 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -464,7 +464,7 @@ static int mov_write_audio_tag(AVIOContext *pb, MOVTrack *track)
     uint32_t tag = track->tag;

     if (track->mode == MODE_MOV) {
-        if (mov_get_lpcm_flags(track->enc->codec_id))
+        if (!tag && mov_get_lpcm_flags(track->enc->codec_id))
             tag = AV_RL32("lpcm");
         version = 2;
     }

comment:2 Changed 17 months ago by cehoyos

Could you test this patch?
 http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/138633

QuickTime? does not read "in24" here, so the resulting file does not play for me on OSX.

comment:3 Changed 17 months ago by dericed

Hi, I tested the patch a few days ago and it didn't seem to work. QuickTime? played the audio back as silence whereas the same -atag command with ffmbc worked. I'll redo the test today with patched ffmpeg and ffmbc to provide samples and outputs. Thanks.

comment:4 Changed 17 months ago by dericed

So this patch does force the output to use the 'in24' codec id; however the resulting file plays out as silence or a faint buzz sound.

Here's the ffmpeg report

ffmpeg started on 2012-01-18 at 00:04:21
Report written to "ffmpeg-20120118-000421.log"
Command line:
./ffmpeg -y -report -i SoundieF.mpeg -ss 10 -t 5 -vn -acodec pcm_s24le -atag in24 SoudieF_ffmpeg_in24.mov
ffmpeg version N-36769-gb18e17e Copyright (c) 2000-2012 the FFmpeg developers
  built on Jan 12 2012 21:51:39 with llvm_gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
  configuration: 
  libavutil      51. 34.100 / 51. 34.100
  libavcodec     53. 55.100 / 53. 55.100
  libavformat    53. 29.100 / 53. 29.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 59.100 /  2. 59.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
[mpeg @ 0x7fd570828a00] Format mpeg probed with size=4096 and score=52
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2500
[mpeg @ 0x7fd570828a00] Probe with size=794, packets=1 detected mpegvideo with score=25
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2499
[mpeg @ 0x7fd570828a00] Probe with size=2809, packets=2 detected mpegvideo with score=25
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2498
[mpeg @ 0x7fd570828a00] Probe with size=4824, packets=3 detected mpegvideo with score=25
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2497
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2496
[mpeg @ 0x7fd570828a00] Probe with size=8854, packets=5 detected mpegvideo with score=25
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2495
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2494
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2493
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2492
[mpeg @ 0x7fd570828a00] Probe with size=16914, packets=9 detected mpegvideo with score=25
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2491
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2490
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2489
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2488
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2487
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2486
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2485
[mpeg @ 0x7fd570828a00] probing stream 0 pp:2484
[mpeg @ 0x7fd570828a00] Probe with size=33034, packets=17 detected mpegvideo with score=51
[mpeg @ 0x7fd570828a00] probed stream 0
[mpeg2video @ 0x7fd570831000] err{or,}_recognition separate: 1; 1
[mpeg2video @ 0x7fd570831000] err{or,}_recognition combined: 1; 10001
[mpeg2video @ 0x7fd570831000] detected 2 logical cores
[mpeg2video @ 0x7fd570831000] Unsupported bit depth: 0
[mp2 @ 0x7fd570830a00] err{or,}_recognition separate: 1; 1
[mp2 @ 0x7fd570830a00] err{or,}_recognition combined: 1; 10001
[mpeg @ 0x7fd570828a00] max_analyze_duration 5000000 reached at 5005000
Input #0, mpeg, from 'SoundieF.mpeg':
  Duration: 00:02:24.10, start: 839.378778, bitrate: 3786 kb/s
    Stream #0:0[0x1e0], 152, 1/90000: Video: mpeg2video (Main), yuv420p, 352x480 [SAR 20:11 DAR 4:3], 3500 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1c0], 193, 1/90000: Audio: mp2, 48000 Hz, stereo, s16, 224 kb/s
Incompatible sample format 's16' for codec 'pcm_s24le', auto-selecting format 's32'
[pcm_s24le @ 0x7fd570831c00] err{or,}_recognition separate: 1; 1
[pcm_s24le @ 0x7fd570831c00] err{or,}_recognition combined: 1; 10001
[mp2 @ 0x7fd570830a00] err{or,}_recognition separate: 1; 10001
[mp2 @ 0x7fd570830a00] err{or,}_recognition combined: 1; 10001
Output #0, mov, to 'SoudieF_ffmpeg_in24.mov':
  Metadata:
    encoder         : Lavf53.29.100
    Stream #0:0, 0, 1/48000: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32, 2304 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (mp2 -> pcm_s24le)
Press [q] to stop, [?] for help
size=    1405kB time=00:00:04.99 bitrate=2305.2kbits/s    
video:0kB audio:1404kB global headers:0kB muxing overhead 0.051193%

I tested the same equivalent command in ffmbc which did produce a playable file. Here's the ffmbc output

ffmbc -y -i SoundieF.mpeg -ss 10 -t 5 -vn -acodec pcm_s24le -atag in24 SoundieF_ffmbc_in24.mov
FFmbc version 0.7-rc4
Copyright (c) 2008-2011 Baptiste Coudurier and the FFmpeg developers
Input #0, mpeg, from 'SoundieF.mpeg':
 Duration: 00:02:24.11, start: 839.368778, bitrate: 3786 kb/s
   Stream #0.0[0x1e0](und): Video: mpeg2video (Main), yuv420p, 352x480i tff [PAR 20:11 DAR 4:3], 3500 kb/s, 29.97 fps
   Stream #0.1[0x1c0](und): Audio: mp2, 48000 Hz, stereo, s16, 224 kb/s
Incompatible sample format 's16' for codec 'pcm_s24le', auto-selecting format 's32'
Output #0, mov, to 'SoundieF_ffmbc_in24.mov':
 Metadata:
   encoder: FFmbc 0.7
   Stream #0.0(und): Audio: pcm_s24le, 48000 Hz, stereo, s32, 2304 kb/s
Stream mapping:
 Stream #0.1 -> #0.0
Press [q] to stop, [?] for help
adding 863 audio samples in stream #0.1
[mov @ 0x7f9309000c00] replacing header in front, copying  1.38MB                                                          
size=    1411kB time=00:00:05.00 bitrate=2306.5kbits/s    
video:0kB audio:1409kB global headers:0kB muxing overhead 0.107009%

I'll attach the output files to the ticket. Perhaps the ticket should be renamed to 'support in24 audio'.

Changed 17 months ago by dericed

force in24 with ffmpeg

Changed 17 months ago by dericed

force in24 with ffmbc

comment:5 Changed 10 months ago by michael

  • Summary changed from -tag:[v|a] doesn't force a fourcc to support in24 audio in mov muxer

-v/atag certainly work with avi for example, so changing the title according to the suggestion

comment:6 Changed 6 months ago by dericed

Not exactly sure when this was fixed, but when I now try to replicate the commands I originally posted the output is as expected.

ffmpeg -i fcp_capture2.mov -vn -acodec pcm_s24be -atag in24 in24.mov
ffmpeg version 1.0.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Dec 18 2012 23:49:10 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-ffplay
  libavutil      52. 12.100 / 52. 12.100
  libavcodec     54. 80.100 / 54. 80.100
  libavformat    54. 49.102 / 54. 49.102
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 28.102 /  3. 28.102
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8b5080f200] Stream #1: not enough frames to estimate rate; consider increasing probesize
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8b5080f200] Stream #2: not enough frames to estimate rate; consider increasing probesize
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8b5080f200] Stream #3: not enough frames to estimate rate; consider increasing probesize
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8b5080f200] Stream #4: not enough frames to estimate rate; consider increasing probesize
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8b5080f200] Stream #5: not enough frames to estimate rate; consider increasing probesize
Guessed Channel Layout for  Input Stream #0.2 : stereo
Guessed Channel Layout for  Input Stream #0.3 : mono
Guessed Channel Layout for  Input Stream #0.4 : mono
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fcp_capture2.mov':
  Metadata:
    creation_time   : 2012-11-29 21:23:35
    timecode        : 01:26:27;06
  Duration: 00:00:00.40, start: 0.098771, bitrate: 216637 kb/s
    Stream #0:0(eng): Video: rawvideo (2vuy / 0x79757632), uyvy422, 720x486, 136674 kb/s, 24.41 fps, 29.97 tbr, 2997 tbn, 2997 tbc
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
    Stream #0:1(eng): Subtitle: eia_608 (c608 / 0x38303663)
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
    Stream #0:2(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32, 2304 kb/s
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
    Stream #0:3(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
    Stream #0:4(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
    Stream #0:5(eng): Data: none (tmcd / 0x64636D74)
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
      timecode        : 01:26:27;06
Output #0, mov, to 'in24.mov':
  Metadata:
    timecode        : 01:26:27;06
    encoder         : Lavf54.49.102
    Stream #0:0(eng): Audio: pcm_s24be (in24 / 0x34326E69), 48000 Hz, stereo, s32, 2304 kb/s
    Metadata:
      creation_time   : 2012-11-29 21:23:36
      handler_name    : Apple Alias Data Handler
Stream mapping:
  Stream #0:2 -> #0:0 (pcm_s24le -> pcm_s24be)
Press [q] to stop, [?] for help
size=     134kB time=00:00:00.57 bitrate=1916.9kbits/s    
video:0kB audio:133kB subtitle:0 global headers:0kB muxing overhead 0.551449%

Then read back the output

ffmpeg -i in24.mov 
ffmpeg version 1.0.git Copyright (c) 2000-2012 the FFmpeg developers
  built on Dec 18 2012 23:49:10 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-ffplay
  libavutil      52. 12.100 / 52. 12.100
  libavcodec     54. 80.100 / 54. 80.100
  libavformat    54. 49.102 / 54. 49.102
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 28.102 /  3. 28.102
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in24.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 512
    compatible_brands: qt  
    encoder         : Lavf54.49.102
  Duration: 00:00:00.47, start: 0.098000, bitrate: 2314 kb/s
    Stream #0:0(eng): Audio: pcm_s24be (in24 / 0x34326E69), 48000 Hz, stereo, s32, 2304 kb/s
    Metadata:
      handler_name    : DataHandler
At least one output file must be specified

The result is the same if I omit the -atag in24, the output defaults to the in24 fourcc. It appears that in24 is now supported in the mov muxer.

comment:7 Changed 6 months ago by cehoyos

  • Status changed from open to closed
  • Resolution set to fixed

This was fixed in January by Michael, thank you for testing again!

Note: See TracTickets for help on using tickets.