#11462: Cannot embed .scc file into .mp4 using -c:s copy
-------------------------------------+-------------------------------------
             Reporter:  Zach         |                    Owner:  (none)
                 Type:  enhancement  |                   Status:  new
             Priority:  important    |                Component:
                                     |  undetermined
              Version:  git-master   |               Resolution:
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Comment (by Zach):

 The catch is sometimes captions are muxed into the file like mxf 436m, and
 sometimes they are embedded in the video frame data and ffmpeg needs to
 support converting between the two regardless of whether the video track
 gets re-encoded.  For example an mxf file with AVC video, PCM audio and
 436m captions should only need the audio re-encoded and captions combined
 with the AVC video to go to mp4.  This would use a very similar data chain
 compared to extracting and embedding from a .mcc or .scc file, just with a
 VANC/VBI encapsulation instead of user data encapsulation.

 Video Copy + CC with audio transcode
 {{{

 ┌──────────┬─────────────────────┐                          ┌─────────┐
 │ demuxer  │                     │       audio packets      │  Audio  │
 Raw Audio
 ╞══════════╡ stream 0 (audio)    ├──────────────────────────┤ Encoder
 ├─────────╮
 │          │                     │                          │  (PCM)  │
 │
 │INPUT.mxf ├─────────────────────┤    Elementry Stream      └─────────┘
 │
 │          │                     │    Packets
 │
 │          │ stream 1 (video)    ├───────────────────────────────────────╮
 │
 │          │                     │                                       │
 │
 │          ├─────────────────────┤                                       │
 │
 │          │                     │ raw VANC    ┌─────────┐               │
 │
 │          │   stream 2 (data)   │ packets     │  VANC   │ Text Stream   │
 │
 │          │ VBI_Vanc_smpte_436m ├────────────►│ decoder ├───────────╮   │
 │
 │          │                     │             │         │           │   │
 │
 └──────────┴─────────────────────┘             └─────────┘           │   │
 │
                                            ╭─────────────◄───────────╯   │
 │
                                            │ ╭───────────────◄───────────╯
 │
                                            │ │
 ┌────────────────────────┐     │
                                            │ │   │       Embed CC
 │     │
                                            │ ╰──►│     in User Data
 │     │
                                            │     │
 │     │
                                            ╰────►│
 ├───╮ │
                                                  │
 │   │ │
 └────────────────────────┘   │ │
 ▼ ▼
 │ │
 ┌──────────┬─────────────────────┐
 │ │
 │ muxer    │                     │         Elementry Stream Packets
 │ │
 ╞══════════╡  stream 0
 │◄───────────────────────────────────────────╯ │
 │          │  (video w/CC)       │                with CC
 │
 │OUTPUT.mp4├─────────────────────┤          ┌─────────┐
 │
 │          │                     │          │  Audio  │
 │
 │          │ stream 1 (audio)    │◄─────────┤ Encoder
 ├─────────────────────────╯
 │          │                     │          │  (aac)  │
 └──────────┴─────────────────────┘          └─────────┘


 ┌──────────┬─────────────────────┐
 │ demuxer  │                     │       audio packets
 ╞══════════╡ stream 0 (audio)
 ├──────────────────────────────────────────────────╮
 │          │                     │
 │
 │INPUT.mp4 ├─────────────────────┤
 │
 │          │                     │
 │
 │          │ stream 1 (video)    ├───────────────────────────────────────╮
 │
 │          │                     │                                       │
 │
 └──────────┴─────────────────────┘                                       │
 │
                                                                          │
 │
                                              ╭───────────────◄───────────╯
 │
                                              │
 ┌──────────────────────────┐       │
                                              │   │       Extract CC
 │────╮  │
 ╰──►╞══════════════════════════╡    │  │
                                                  │
 │    │  │
                                                  │     From User Data
 │──╮ │  │
                                                  │
 │  │ │  │
 └──────────────────────────┘  │ │  │
 ▼ ▼  ▼
 │ │  │
 ┌──────────┬──────────────────────┐
 │ │  │
 │ muxers   │                      │
 │ │  │
 ╞══════════╡ stream 0 (video)
 │◄───────────────────────────────────────────╯ │  │
 │ OUT.m4v  │                      │
 │  │
 │          ├──────────────────────┤
 │  │
 │          │                      │
 │  │
 │out.mcc   │ stream 2 (Text (cc))
 │◄─────────────────────────────────────────────╯  │
 │          │                      │
 │
 │          ├──────────────────────┤
 │
 │          │                      │
 │
 │ out.aac  │ stream 2 (Audio)
 │◄────────────────────────────────────────────────╯
 │          │                      │
 └──────────┴──────────────────────┘

 }}}

 Transcoding Example
 {{{
 ┌──────────┬─────────────────────┐
 │ demuxer  │                     │       audio packets
 ╞══════════╡ stream 0 (audio)
 ├──────────────────────────────────────────────╮
 │          │                     │
 │
 │INPUT.mxf ├─────────────────────┤ video    ┌─────────┐     raw
 │
 │          │                     │ packets  │  video  │ video frames
 │
 │          │ stream 1 (video)    ├─────────►│ decoder ├──────────────────╮
 │
 │          │                     │          │         │              │   │
 │
 │          ├─────────────────────┤          └─────────┘              │   │
 │
 │          │                     │ raw Text ┌─────────┐     raw      │   │
 │
 │          │   stream 2 (data)   │ packets  │  VANC   │ text frames  │   │
 │
 │          │ VBI_Vanc_smpte_436m ├─────────►│ decoder ├──────────────╮   │
 │
 │          │                     │          │         │              │   │
 │
 └──────────┴─────────────────────┘          └─────────┘              │   │
 │
                                            ╭─────────────◄───────────╯   │
 │
                                            │ ╭───────────────◄───────────╯
 │
                                            │ │
 ┌────────────────────────┐     │
                                            │ │   │       Merge CC
 │     │
                                            │ ╰──►│
 │     │
                                            │     │
 │     │
                                            ╰────►│
 ├───╮ │
                                                  │
 │   │ │
 └────────────────────────┘   │ │
 ▼ ▼
 │ │
 ┌──────────┬─────────────────────┐ video    ┌─────────┐
 │ │
 │ muxer    │                     │ packets  │  video  │   Raw Video Frames
 │ │
 ╞══════════╡  stream 0           │◄─────────┤ encoder
 ├───────────────────────╯ │
 │          │  (video w/CC)       │          │(libx264)│     with CC
 │
 │OUTPUT.mp4├─────────────────────┤          └─────────┘
 │
 │          │                     │
 │
 │          │ stream 1 (audio)
 │◄─────────────────────────────────────────────╯
 │          │                     │
 └──────────┴─────────────────────┘


 ┌──────────┬─────────────────────┐
 │ demuxer  │                     │       audio packets
 ╞══════════╡ stream 0 (audio)
 ├──────────────────────────────────────────────────╮
 │          │                     │
 │
 │INPUT.mp4 ├─────────────────────┤ video    ┌─────────┐     raw
 │
 │          │                     │ packets  │  video  │ video frames w/CC
 │
 │          │ stream 1 (video)    ├─────────►│ decoder ├──────────────────╮
 │
 │          │                     │          │         │                  │
 │
 └──────────┴─────────────────────┘          └─────────┘                  │
 │
                                                                          │
 │
                                              ╭───────────────◄───────────╯
 │
                                              │
 ┌──────────────────────────┐        │
                                              │   │       Split CC
 │────╮   │
 ╰──►╞══════════════════════════╡    │   │
                                                  │
 │    │   │
                                                  │
 │──╮ │   │
                                                  │
 │  │ │   │
 └──────────────────────────┘  │ │   │
 ▼ ▼   ▼
 │ │   │
 ┌──────────┬──────────────────────┐ video    ┌─────────┐
 │ │  │
 │ muxers   │                      │ packets  │  video  │
 │ │  │
 ╞══════════╡ stream 0 (video)     │◄─────────┤ encoder
 ├───────────────────────╯ │  │
 │ OUT.m4v  │                      │          │(libx264)│
 │  │
 │          ├──────────────────────┤          └─────────┘
 │  │
 │          │                      │
 │  │
 │out.aac   │ stream 1 (audio)
 │◄─────────────────────────────────────────────╯  │
 │          │                      │
 │
 │          ├──────────────────────┤
 │
 │          │                      │
 │
 │ out.mcc  │ stream 2 (Text (cc))
 │◄────────────────────────────────────────────────╯
 │          │                      │
 └──────────┴──────────────────────┘
 }}}

 Is there any way to condense the needed functions to less such that the
 proposed EmbedCC and MergeCC can be the same function?

 Stream Types:
 VBI_VANC_smpte_436m
 A/53 part 4 CC Data (text stream)
 Video Elementary Stream with user data
 Uncompressed Frame with user data CC

 Any architectural change should support conversion between these 4 types.
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/11462#comment:32>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac

To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to