-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathadv-args.html
More file actions
205 lines (181 loc) · 17.1 KB
/
adv-args.html
File metadata and controls
205 lines (181 loc) · 17.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Specification of FFmpeg Argument dict ffmpeg_args — python-ffmpegio 0.11.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="_static/plot_directive.css" />
<link rel="stylesheet" type="text/css" href="_static/css/custom.css?v=048f17f8" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=f3b36f1a"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
python-ffmpegio
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">Specification of FFmpeg Argument dict <code class="code docutils literal notranslate"><span class="pre">ffmpeg_args</span></code></a><ul>
<li><a class="reference internal" href="#examples">Examples</a></li>
<li><a class="reference internal" href="#ffmpeg-filtergraph-class-specification">FFmpeg FilterGraph Class Specification</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">python-ffmpegio</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Specification of FFmpeg Argument dict <code class="code docutils literal notranslate"><span class="pre">ffmpeg_args</span></code></li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/adv-args.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="specification-of-ffmpeg-argument-dict-ffmpeg-args">
<span id="adv-args"></span><h1>Specification of FFmpeg Argument dict <code class="code docutils literal notranslate"><span class="pre">ffmpeg_args</span></code><a class="headerlink" href="#specification-of-ffmpeg-argument-dict-ffmpeg-args" title="Link to this heading"></a></h1>
<p>FFmpeg command can be invoked directly with <a class="reference internal" href="adv-ffmpeg.html#ffmpegio.ffmpegprocess.run" title="ffmpegio.ffmpegprocess.run"><code class="xref py py-func docutils literal notranslate"><span class="pre">ffmpegio.ffmpegprocess.run()</span></code></a> or
<a class="reference internal" href="adv-ffmpeg.html#ffmpegio.ffmpegprocess.Popen" title="ffmpegio.ffmpegprocess.Popen"><code class="xref py py-class docutils literal notranslate"><span class="pre">ffmpegio.ffmpegprocess.Popen</span></code></a> (see <a class="reference internal" href="adv-ffmpeg.html#adv-ffmpeg"><span class="std std-ref">the reference page</span></a>
for the details). Both of them fully support the FFmpeg command line option
arguments, which can be specified via as <code class="xref py py-mod docutils literal notranslate"><span class="pre">subprocess</span></code> via <code class="code docutils literal notranslate"><span class="pre">ffmpeg_args</span></code>
argument, which may be supplied as a string or a list of strings to be compatible
with <code class="xref py py-mod docutils literal notranslate"><span class="pre">subprocess</span></code> in a plain dict object.</p>
<p>The FFmpeg command line options structure:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ffmpeg<span class="w"> </span><span class="o">[</span>global_options<span class="o">]</span><span class="w"> </span><span class="o">{[</span>input_file_options<span class="o">]</span><span class="w"> </span>-i<span class="w"> </span>input_url<span class="o">}</span><span class="w"> </span>...<span class="w"> </span><span class="se">\</span>
<span class="w"> </span><span class="o">{[</span>output_file_options<span class="o">]</span><span class="w"> </span>output_url<span class="o">}</span><span class="w"> </span>...
</pre></div>
</div>
<p>All the options and urls are mapped to <code class="code docutils literal notranslate"><span class="pre">ffmpeg_args</span></code> by:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="n">input_url</span><span class="p">,</span> <span class="n">input_file_options</span><span class="p">),</span> <span class="o">...</span><span class="p">],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[(</span><span class="n">output_url</span><span class="p">,</span> <span class="n">output_file_options</span><span class="p">),</span> <span class="o">...</span><span class="p">],</span>
<span class="s2">"global_options"</span><span class="p">:</span> <span class="n">global_options</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Any Python sequence types may be used in place of the tuples are lists in the above definition.</p>
<p><code class="code docutils literal notranslate"><span class="pre">input_file_options</span></code>, <code class="code docutils literal notranslate"><span class="pre">output_file_options</span></code>, and <code class="code docutils literal notranslate"><span class="pre">global_options</span></code> are optional. If
URL does not require any options, set its options to <code class="code docutils literal notranslate"><span class="pre">None</span></code>. If no global options, the
<code class="code docutils literal notranslate"><span class="pre">"global_options"</span></code> dict entry may be omitted or set to <code class="code docutils literal notranslate"><span class="pre">None</span></code>.</p>
<p>To specify options, each set of options is a dict with option keys as the dict keys <strong>without</strong> the
leading dash (-). For stream-specific options, the key shall include the full stream specifiers. For
example, use <code class="code docutils literal notranslate"><span class="pre">"b:v"</span></code> as the dict key to specify the video bitrate.</p>
<p>Option values may be given as any Python type, so long as it can be converted to <code class="code docutils literal notranslate"><span class="pre">str</span></code> at the
time of the subprocess invocation. If an option does not take any values, then use <code class="code docutils literal notranslate"><span class="pre">None</span></code>. For
any option which can be defined multiple times (e.g., <code class="code docutils literal notranslate"><span class="pre">map</span></code>), specify its value as a sequence
with each of its elements defining a value for each FFmpeg option. Another exception are the filters
(<code class="code docutils literal notranslate"><span class="pre">vf</span></code>, <code class="code docutils literal notranslate"><span class="pre">af</span></code>, and <code class="code docutils literal notranslate"><span class="pre">filter_complex</span></code>) which values may be given with special option
value structure (to be covered later).</p>
<p>All defined options are passed unchecked to FFmpeg.</p>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Link to this heading"></a></h2>
<p>First, here are how to set up some of the examples in <a class="reference external" href="https://ffmpeg.org/ffmpeg.html#Description">FFmpeg Documentation</a>
for the <code class="xref py py-mod docutils literal notranslate"><span class="pre">ffmpegio</span></code>:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># To set the video bitrate of the output file to 64 kbit/s:</span>
<span class="c1"># ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi</span>
<span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"input.avi"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"output.avi"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"b:v"</span><span class="p">:</span> <span class="s2">"64k"</span><span class="p">,</span> <span class="s2">"bufsize"</span><span class="p">:</span> <span class="s2">"64k"</span><span class="p">})],</span>
<span class="p">}</span>
<span class="c1"># To force the frame rate of the input file (valid for raw formats only) to 1 fps and</span>
<span class="c1"># the frame rate of the output file to 24 fps:</span>
<span class="c1"># ffmpeg -r 1 -i input.m2v -r 24 output.avi</span>
<span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"input.avi"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"r"</span><span class="p">:</span> <span class="mi">1</span><span class="p">})],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"output.avi"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"r"</span><span class="p">:</span> <span class="mi">24</span><span class="p">})],</span>
<span class="p">}</span>
<span class="c1"># automatic stream selection</span>
<span class="c1"># ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov</span>
<span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"A.avi"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> <span class="p">(</span><span class="s2">"B.mp4"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">"out1.mkv"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">(</span><span class="s2">"out2.wav"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">(</span><span class="s2">"out3.mov"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"map"</span><span class="p">:</span> <span class="s2">"1:a"</span><span class="p">,</span> <span class="s2">"c:a"</span><span class="p">:</span> <span class="s2">"copy"</span><span class="p">}),</span>
<span class="p">],</span>
<span class="p">}</span>
<span class="c1"># unlabeled filtergraph outputs</span>
<span class="c1"># ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt</span>
<span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"A.avi"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> <span class="p">(</span><span class="s2">"C.mkv"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> <span class="p">(</span><span class="s2">"B.mp4"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">"out1.mp4"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">(</span><span class="s2">"out2.srt"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">],</span>
<span class="s2">"global_options"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"filter_complex"</span><span class="p">:</span> <span class="s2">"overlay"</span><span class="p">}</span>
<span class="p">}</span>
<span class="c1"># labeled filtergraph outputs</span>
<span class="c1"># ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \</span>
<span class="c1"># -map '[outv]' -an out1.mp4 \</span>
<span class="c1"># out2.mkv \</span>
<span class="c1"># -map '[outv]' -map 1:a:0 out3.mkv</span>
<span class="n">ffmpeg_args</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"inputs"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"A.avi"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> <span class="p">(</span><span class="s2">"B.mp4"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span> <span class="p">(</span><span class="s2">"C.mkv"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)],</span>
<span class="s2">"outputs"</span><span class="p">:</span> <span class="p">[</span>
<span class="p">(</span><span class="s2">"out1.mp4"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"map"</span><span class="p">:</span> <span class="s2">"[outv]"</span><span class="p">,</span> <span class="s2">"an"</span><span class="p">:</span> <span class="kc">None</span><span class="p">}),</span>
<span class="p">(</span><span class="s2">"out2.mkv"</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="p">(</span><span class="s2">"out3.mkv"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"map"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"[outv]"</span><span class="p">,</span> <span class="s2">"1:a:0"</span><span class="p">)}),</span>
<span class="p">],</span>
<span class="s2">"global_options"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"filter_complex"</span><span class="p">:</span> <span class="s2">"[1:v]hue=s=0[outv];overlay;aresample"</span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="ffmpeg-filtergraph-class-specification">
<h2>FFmpeg FilterGraph Class Specification<a class="headerlink" href="#ffmpeg-filtergraph-class-specification" title="Link to this heading"></a></h2>
<p>TBD</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>© Copyright 2021-2022, Takeshi (Kesh) Ikuma, Louisiana State University Health Sciences Center.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>