From patchwork Sat Jan 6 16:52:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Sabatini X-Patchwork-Id: 45503 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2449:b0:199:85ec:e0df with SMTP id t9csp145337pzc; Sat, 6 Jan 2024 08:52:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IECkHbd4lrlII3Cc0A+SMvYPXGGLV1AlCWROGqajP7pIbZbKNTgZvBydH/K4Na0GZXzxO44 X-Received: by 2002:a50:f61c:0:b0:557:81aa:c036 with SMTP id c28-20020a50f61c000000b0055781aac036mr38534edn.9.1704559974014; Sat, 06 Jan 2024 08:52:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704559973; cv=none; d=google.com; s=arc-20160816; b=Ph261+NHVySdl+EZorVSpOrHgptj1ZlZvaGDswXhNyJYS1WMVmnEXEdN/0zo8kQ5tA 04qFpEaZ/jrZcHLO0qN49wzGVioyOa6y+oMmjymewadov1y3FjkgWIexCZaT6vPhnEZU ek1CAPZfTZQH9rMjlVwDpOJtuhKTwOt3ZvVhYXNhHjBj67aWf6K3t/Wf4SK+juZ+a6W3 5WeKJYpENB4FkGhaV0uxeXkyvChPawfEuxhYV2jWNGjDSX5fIRqPtW1hIiSO9vThn9At Gy8H4Kyy1YcnCE6n1JXq5lnxqaAO/CBDH87elb3TyyC1AHcwZI5pkGjmnpsj+zutwUG4 ZNQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=djGMgJWF9hpqCINbWgBq9CHAR8jI5UCbVjSJgEAD1WQ=; fh=QdWxt2OToL83TTnLQn0lGhLakV7i1QyAJdC8te7qN0E=; b=bRgWQZdGccuD4J5p+aV+OVAA3ogv+7IbwfM2NuFHW7vY/s9mbM+Psf9GdO2wGyJHKs hYkofs1fuqb4FqPKTk/uAaUFgm9eUZmmBm0x3wgv0YO0b4tK68pSP5+l3nMFciyesBLy 5RZxGAHMZA97zr7J4uU9R54PsuwD8HidQYYKUiNADdOysZLo8vvH0nxc37uqst4X6gUg kO5tF2O1e4SiDdE+QwBrEQmN+YtBqJFG6JqdYPbB6DUEympbPfnk1w1is0R3aE1ZueF6 9MKulOR8V/+rfxOtwyJyAGvcYR3iyZEYM5MJSw1LrlzwrTzpJUsN8mJYPlYhRD8EaKEc cKkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Wd8i05e9; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id cn3-20020a0564020ca300b0055466fb458dsi1594292edb.171.2024.01.06.08.52.52; Sat, 06 Jan 2024 08:52:53 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Wd8i05e9; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 27C3D68C22A; Sat, 6 Jan 2024 18:52:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 29F4A68C22A for ; Sat, 6 Jan 2024 18:52:42 +0200 (EET) Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-2cd1ca52f31so4829551fa.3 for ; Sat, 06 Jan 2024 08:52:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704559960; x=1705164760; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=pskz9a31qPkYt1lgws80z4EG8VVGPyN2MxhK6qGK87s=; b=Wd8i05e9XA/e02igLvSYL3vXx7lEc4T2rX1l0DnFtJXyLQn+aOPmSX19w4KQXP51JJ Ob8BRHa0tcCu3x547lpXmyv+qsT7T0HImat923CLVYoRduQaSRhZQdl1gIf+10Swlk6V SDOysGldU5jug/zVp4Ex+OcSqx3Q1eLF5eXssR3wk+umN9PEu2Xo1wudLN8EE2137mbN epz+xnZCESgiTidRSsRgVT/NZPJtXzSFmIycajKtO1rP+wf7zv25L58X9McFSKeiWshb hI8O1E0YNPTuohJWnQlfbN5XdCThLA2/ZU/6T4kCLZp77lgVfOvl22II7XSRqxAf3rc/ Mxxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704559960; x=1705164760; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pskz9a31qPkYt1lgws80z4EG8VVGPyN2MxhK6qGK87s=; b=T8v5dHnBDxsu1ktZQO3wrsOQ1PS7J0bxdUqvfBQnUfYR1iXbAbq6WtpMPwY1ezcZKj i5g79vsGxMQKxbRLXR3y/iHUMFEfGiPM0XwFlvxXOr2yT5KqGZjYksaqeStRFJLcK9to 3z4xOj8ryXa2tWZjyjj1AsPkeWi0lhpw87K5R9QPjOlAQKqV71wiy2L6LLNzIUrftmrK axhI0E9fI5xlEp1ZPNynWox+CLuPOZ5tBYAFQibqcOZ7ZpuBgJYg9T7qJS9PZLQNoehG ibxj34iEnYHhBxrJFZp9SMuoPJ3Nj31muA52rU5XFr0LqpRn6+cTu+EDOLv79eYreXVo B+5g== X-Gm-Message-State: AOJu0Yz311lQ5rcL6NeUaUAjPPITiEPFzvPvhmLXHHWc7EkG7vpgBocg aI92gD9FQIuA9TXhiw69AZBI5i34sf4= X-Received: by 2002:a2e:2282:0:b0:2cd:11f9:a628 with SMTP id i124-20020a2e2282000000b002cd11f9a628mr414795lji.68.1704559959437; Sat, 06 Jan 2024 08:52:39 -0800 (PST) Received: from mariano (dynamic-adsl-84-220-189-10.clienti.tiscali.it. [84.220.189.10]) by smtp.gmail.com with ESMTPSA id eo15-20020a056402530f00b00557556858ffsm918446edb.60.2024.01.06.08.52.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 08:52:38 -0800 (PST) Received: by mariano (Postfix, from userid 1000) id 892C3BFCDC; Sat, 6 Jan 2024 17:52:37 +0100 (CET) From: Stefano Sabatini To: FFmpeg development discussions and patches Date: Sat, 6 Jan 2024 17:52:37 +0100 Message-Id: <20240106165237.274448-1-stefasab@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] doc/muxers: extend documentation for MOV muxers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Stefano Sabatini Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: hrq1vIO+1Ogv --- doc/muxers.texi | 468 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 321 insertions(+), 147 deletions(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index 7b705b6a9e..345a55e8f4 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -19,6 +19,327 @@ enabled demuxers and muxers. A description of some of the currently available muxers follows. +@section 3gp, 3g2, f4v, ipod, ismv, mov, mp4, psp + +MOV/MPEG-4/ISOMBFF format family muxers. + +This section covers formats belonging to the QuickTime / MOV family, +also named after the MPEG-4 Part 14 format, also named after the ISO +base media file format (ISOBMFF). + +The MOV format was originally developed for the Apple QuickTime +container format. Then it was later used as basis for the MPEG MPEG-4 +Part 1 (later Part 14) format, also named after ISO/IEC 14496-1. + +The format was later generalized into the ISO base media file format, +also named MPEG-4 Part 12 format or ISO/IEC 14496-12 or ISO/IEC +15444-12. + +It comprises the following muxers: + +@table @samp +@item 3gp +Third Generation Partnership Project (3GPP) format for 3G UMTS +multimedia services. + +@item 3g2 +Third Generation Partnership Project 2 (3GP2 or 3GPP2) format for 3G +CDMA2000 multimedia services, similar to @code{3gp} with extensions +and limitations + +@item f4v +Adobe Flash Video format. + +@item ipod +MPEG4 file formation audio file, as MOV/MP4 but limited to contain +only audio streams, typically played with the Apple ipod device + +@item ismv +Microsoft IIS (Internet Information Services) Smooth Streaming +Audio/Video (ISMV or ISMA) format. This is based on MPEG-4 Part 14 +format with a few incompatible variants, used to stream media files +for the Microsoft IIS server. + +@item mov +A QuickTime format identified by the @code{.mov} extension, used +natively by Apple QuickTime player. + +@item mp4 +MP4 or MPEG-4 Part 14 format. + +@item psp +PlayStation Portable MP4/MPEG-4 Part 14 format variant. This is based +on MPEG-4 Part 14 format with a few incompatible variants, used to +play files on PlayStation devices. +@end table + +@subsection Fragmentation + +The @samp{mov}, @samp{mp4}, and @samp{ismv} muxers support +fragmentation. Normally, a MOV/MP4 file has all the metadata about all +packets stored in one location. + +This data is usually written at the end of the file, but it can be +moved to the start for better playback by adding @code{+faststart} to +the @code{-movflags}, or using the @command{qt-faststart} tool). + +A fragmented file consists of a number of fragments, where packets and +metadata about these packets are stored together. Writing a fragmented +file has the advantage that the file is decodable even if the writing +is interrupted (while a normal MOV/MP4 is undecodable if it is not +properly finished), and it requires less memory when writing very long +files (since writing normal MOV/MP4 files stores info about every +single packet in memory until the file is closed). The downside is +that it is less compatible with other applications. + +Fragmentation is enabled by setting one of the options that define +how to cut the file into fragments: +@table @option +@item frag_duration +@item frag_size +@item min_frag_duration +@item movflags +frag_keyframe +@item movflags +frag_custom +@end table + +If more than one condition is specified, fragments are cut when one of +the specified conditions is fulfilled. The exception to this is the +option @option{min_frag_duration}, which has to be fulfilled for any +of the other conditions to apply. + +@subsection Options + +@table @option + +@item brand @var{brand_string} +Override major brand. + +@item empty_hdlr_name @var{bool} +Enable to skip writing the name inside a @code{hdlr} box. +Default is @code{false}. + +@item encryption_key @var{key} +set the media encryption key in hexadecimal format + +@item encryption_kid @var{kid} +set the media encryption key identifier in hexadecimal format + +@item encryption_scheme @var{scheme} +configure the encryption scheme, allowed values are @samp{none}, and +@samp{cenc-aes-ctr} + +@item frag_duration @var{duration} +Create fragments that are @var{duration} microseconds long. + +@item frag_interleave @var{number} +Interleave samples within fragments (max number of consecutive +samples, lower is tighter interleaving, but with more overhead. It is +set to @code{0} by default. + +@item frag_size @var{size} +create fragments that contain up to @var{size} bytes of payload data + +@item iods_audio_profile @var{profile} +specify iods number for the audio profile atom (from -1 to 255), +default is @code{-1} + +@item iods_video_profile @var{profile} +specify iods number for the video profile atom (from -1 to 255), +default is @code{-1} + +@item ism_lookahead @var{num_entries} +specify number of lookahead entries for ISM files (from 0 to 255), +default is @code{0} + +@item min_frag_duration @var{duration} +do not create fragments that are shorter than @var{duration} microseconds long + +@item moov_size @var{bytes} +Reserves space for the moov atom at the beginning of the file instead of placing the +moov atom at the end. If the space reserved is insufficient, muxing will fail. + +@item mov_gamma @var{gamma} +specify gamma value for gama atom (as a decimal number from 0 to 10), +default is @code{0.0}, must be set together with @code{+ movflags} + +@item movflags @var{flags} +Set various muxing switches. The following flags can be used: +@table @samp +@item cmaf +write CMAF (Common Media Application Format) compatible fragmented +MP4 output + +@item dash +write DASH (Dynamic Adaptive Streaming over HTTP) compatible fragmented +MP4 output + +@item default_base_moof +Similarly to the @samp{omit_tfhd_offset} flag, this flag avoids +writing the absolute base_data_offset field in tfhd atoms, but does so +by using the new default-base-is-moof flag instead. This flag is new +from 14496-12:2012. This may make the fragments easier to parse in +certain circumstances (avoiding basing track fragment location +calculations on the implicit end of the previous track fragment). + +@item delay_moov +delay writing the initial moov until the first fragment is cut, or +until the first fragment flush + +@item disable_chpl +Disable Nero chapter markers (chpl atom). Normally, both Nero chapters +and a QuickTime chapter track are written to the file. With this +option set, only the QuickTime chapter track will be written. Nero +chapters can cause failures when the file is reprocessed with certain +tagging programs, like mp3Tag 2.61a and iTunes 11.3, most likely other +versions are affected as well. + +@item faststart +Run a second pass moving the index (moov atom) to the beginning of the +file. This operation can take a while, and will not work in various +situations such as fragmented output, thus it is not enabled by +default. + +@item frag_custom +Allow the caller to manually choose when to cut fragments, by calling +@code{av_write_frame(ctx, NULL)} to write a fragment with the packets +written so far. (This is only useful with other applications +integrating libavformat, not from @command{ffmpeg}.) + +@item frag_discont +signal that the next fragment is discontinuous from earlier ones + +@item frag_every_frame +fragment at every frame + +@item frag_keyframe +start a new fragment at each video keyframe + +@item global_sidx +write a global sidx index at the start of the file + +@item isml +create a live smooth streaming feed (for pushing to a publishing point) + +@item negative_cts_offsets +Enables utilization of version 1 of the CTTS box, in which the CTS offsets can +be negative. This enables the initial sample to have DTS/CTS of zero, and +reduces the need for edit lists for some cases such as video tracks with +B-frames. Additionally, eases conformance with the DASH-IF interoperability +guidelines. + +This option is implicitly set when writing @samp{ismv} (Smooth +Streaming) files. + +@item omit_tfhd_offset +Do not write any absolute base_data_offset in tfhd atoms. This avoids +tying fragments to absolute byte positions in the file/streams. + +@item prefer_icc +If writing colr atom prioritise usage of ICC profile if it exists in +stream packet side data. + +@item rtphint +add RTP hinting tracks to the output file + +@item separate_moof +Write a separate moof (movie fragment) atom for each track. Normally, +packets for all tracks are written in a moof atom (which is slightly +more efficient), but with this option set, the muxer writes one +moof/mdat pair for each track, making it easier to separate tracks. + +@item skip_sidx +Skip writing of sidx atom. When bitrate overhead due to sidx atom is +high, this option could be used for cases where sidx atom is not +mandatory. When the @samp{global_sidx} flag is enabled, this option +is ignored. + +@item skip_trailer +skip writing the mfra/tfra/mfro trailer for fragmented files + +@item use_metadata_tags +use mdta atom for metadata + +@item write_colr +write colr atom even if the color info is unspecified. This flag is +experimental, may be renamed or changed, do not use from scripts. + +@item write_gama +write deprecated gama atom +@end table + +@item movie_timescale @var{scale} +Set the timescale written in the movie header box (@code{mvhd}). +Range is 1 to INT_MAX. Default is @code{1000}. + +@item rtpflags @var{flags} +Add RTP hinting tracks to the output file. + +The following flags can be used: +@table @samp +@item h264_mode0 +use mode 0 for H.264 in RTP + +@item latm +use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC + +@item rfc2190 +use RFC 2190 packetization instead of RFC 4629 for H.263 + +@item send_bye +send RTCP BYE packets when finishing + +@item skip_rtcp +do not send RTCP sender reports +@end table + +@item skip_iods @var{bool} +skip writing iods atom (default value is @code{true}) + +@item use_editlist @var{bool} +use edit list (default value is @code{auto}) + +@item use_stream_ids_as_track_ids +use stream ids as track ids (default value is @code{false}) + +@item video_track_timescale @var{scale} +Set the timescale used for video tracks. Range is @code{0} to INT_MAX. If +set to @code{0}, the timescale is automatically set based on the +native stream time base. Default is @code{0}. + +@item write_btrt @var{bool} +Force or disable writing bitrate box inside stsd box of a track. The +box contains decoding buffer size (in bytes), maximum bitrate and +average bitrate for the track. The box will be skipped if none of +these values can be computed. Default is @code{-1} or @code{auto}, +which will write the box only in MP4 mode. + +@item write_prft @var{option} +Write producer time reference box (PRFT) with a specified time source for the +NTP field in the PRFT box. Set value as @samp{wallclock} to specify timesource +as wallclock time and @samp{pts} to specify timesource as input packets' PTS +values. + +@item write_tmcd @var{bool} +Specify @code{on} to force writing a timecode track, @code{off} to disable it +and @code{auto} to write a timecode track only for mov and mp4 output (default). + +Setting value to @samp{pts} is applicable only for a live encoding use case, +where PTS values are set as as wallclock time at the source. For example, an +encoding use case with decklink capture source where @option{video_pts} and +@option{audio_pts} are set to @samp{abs_wallclock}. +@end table + +@subsection Examples + +@itemize +@item +Push Smooth Streaming content in real time to a publishing point on +IIS with the @samp{ismv} muxer using @command{ffmpeg}: +@example +ffmpeg -re @var{} -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) +@end example +@end itemize + @anchor{a64} @section a64 @@ -1623,153 +1944,6 @@ ffmpeg -i INPUT -f md5 - See also the @ref{hash} and @ref{framemd5} muxers. -@section mov, mp4, ismv - -MOV/MP4/ISMV (Smooth Streaming) muxer. - -The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4 -file has all the metadata about all packets stored in one location -(written at the end of the file, it can be moved to the start for -better playback by adding @code{+faststart} to the @code{-movflags}, or -using the @command{qt-faststart} tool). - -A fragmented -file consists of a number of fragments, where packets and metadata -about these packets are stored together. Writing a fragmented -file has the advantage that the file is decodable even if the -writing is interrupted (while a normal MOV/MP4 is undecodable if -it is not properly finished), and it requires less memory when writing -very long files (since writing normal MOV/MP4 files stores info about -every single packet in memory until the file is closed). The downside -is that it is less compatible with other applications. - -Fragmentation is enabled by setting one of the options that define -how to cut the file into fragments: @code{-frag_duration}, @code{-frag_size}, -@code{-min_frag_duration}, @code{-movflags +frag_keyframe} and -@code{-movflags +frag_custom}. If more than one condition is specified, -fragments are cut when one of the specified conditions is fulfilled. The -exception to this is @code{-min_frag_duration}, which has to be fulfilled for -any of the other conditions to apply. - -@subsection Options - -@table @option -@item frag_duration @var{duration} -Create fragments that are @var{duration} microseconds long. -@item frag_size @var{size} -Create fragments that contain up to @var{size} bytes of payload data. -@item min_frag_duration @var{duration} -Don't create fragments that are shorter than @var{duration} microseconds long. -@item movflags @var{flags} -Set various muxing switches. The following flags can be used: -@table @samp -@item frag_keyframe -Start a new fragment at each video keyframe. -@item frag_custom -Allow the caller to manually choose when to cut fragments, by -calling @code{av_write_frame(ctx, NULL)} to write a fragment with -the packets written so far. (This is only useful with other -applications integrating libavformat, not from @command{ffmpeg}.) -@item empty_moov -Write an initial moov atom directly at the start of the file, without -describing any samples in it. Generally, an mdat/moov pair is written -at the start of the file, as a normal MOV/MP4 file, containing only -a short portion of the file. With this option set, there is no initial -mdat atom, and the moov atom only describes the tracks but has -a zero duration. - -This option is implicitly set when writing ismv (Smooth Streaming) files. -@item separate_moof -Write a separate moof (movie fragment) atom for each track. Normally, -packets for all tracks are written in a moof atom (which is slightly -more efficient), but with this option set, the muxer writes one moof/mdat -pair for each track, making it easier to separate tracks. - -This option is implicitly set when writing ismv (Smooth Streaming) files. -@item skip_sidx -Skip writing of sidx atom. When bitrate overhead due to sidx atom is high, -this option could be used for cases where sidx atom is not mandatory. -When global_sidx flag is enabled, this option will be ignored. -@item faststart -Run a second pass moving the index (moov atom) to the beginning of the file. -This operation can take a while, and will not work in various situations such -as fragmented output, thus it is not enabled by default. -@item rtphint -Add RTP hinting tracks to the output file. -@item disable_chpl -Disable Nero chapter markers (chpl atom). Normally, both Nero chapters -and a QuickTime chapter track are written to the file. With this option -set, only the QuickTime chapter track will be written. Nero chapters can -cause failures when the file is reprocessed with certain tagging programs, like -mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well. -@item omit_tfhd_offset -Do not write any absolute base_data_offset in tfhd atoms. This avoids -tying fragments to absolute byte positions in the file/streams. -@item default_base_moof -Similarly to the omit_tfhd_offset, this flag avoids writing the -absolute base_data_offset field in tfhd atoms, but does so by using -the new default-base-is-moof flag instead. This flag is new from -14496-12:2012. This may make the fragments easier to parse in certain -circumstances (avoiding basing track fragment location calculations -on the implicit end of the previous track fragment). -@item negative_cts_offsets -Enables utilization of version 1 of the CTTS box, in which the CTS offsets can -be negative. This enables the initial sample to have DTS/CTS of zero, and -reduces the need for edit lists for some cases such as video tracks with -B-frames. Additionally, eases conformance with the DASH-IF interoperability -guidelines. - -This option is implicitly set when writing ismv (Smooth Streaming) files. -@end table - -@item moov_size @var{bytes} -Reserves space for the moov atom at the beginning of the file instead of placing the -moov atom at the end. If the space reserved is insufficient, muxing will fail. - -@item write_tmcd -Specify @code{on} to force writing a timecode track, @code{off} to disable it -and @code{auto} to write a timecode track only for mov and mp4 output (default). - -@item write_btrt @var{bool} -Force or disable writing bitrate box inside stsd box of a track. -The box contains decoding buffer size (in bytes), maximum bitrate and -average bitrate for the track. The box will be skipped if none of these values -can be computed. -Default is @code{-1} or @code{auto}, which will write the box only in MP4 mode. - -@item write_prft -Write producer time reference box (PRFT) with a specified time source for the -NTP field in the PRFT box. Set value as @samp{wallclock} to specify timesource -as wallclock time and @samp{pts} to specify timesource as input packets' PTS -values. - -Setting value to @samp{pts} is applicable only for a live encoding use case, -where PTS values are set as as wallclock time at the source. For example, an -encoding use case with decklink capture source where @option{video_pts} and -@option{audio_pts} are set to @samp{abs_wallclock}. - -@item empty_hdlr_name @var{bool} -Enable to skip writing the name inside a @code{hdlr} box. -Default is @code{false}. - -@item movie_timescale @var{scale} -Set the timescale written in the movie header box (@code{mvhd}). -Range is 1 to INT_MAX. Default is 1000. - -@item video_track_timescale @var{scale} -Set the timescale used for video tracks. Range is 0 to INT_MAX. -If set to @code{0}, the timescale is automatically set based on -the native stream time base. Default is 0. -@end table - -@subsection Example - -Smooth Streaming content can be pushed in real time to a publishing -point on IIS with this muxer. Example: -@example -ffmpeg -re @var{} -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1) -@end example - @section mp3 The MP3 muxer writes a raw MP3 stream with the following optional features: