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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta content="en" name="language">
<title>GraphicsMagick Cineon and SMTPE DPX Support</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link media="screen" href="docutils-articles.css" type="text/css" rel="stylesheet">
<meta content="Describes GraphicsMagick's support for Cineon and SMPTE DPX formats. " name="description" >
<meta content="GraphicsMagick, Cineon, DPX, SMPTE 268M, Motion Picture" name="keywords" >
</head>
<body>
<div class="banner">
<img src="images/gm-107x76.png" alt="GraphicMagick logo" width="107" height="76" />
<span class="title">GraphicsMagick</span>
<form action="http://www.google.com/search">
<input type="hidden" name="domains" value="www.graphicsmagick.org" />
<input type="hidden" name="sitesearch" value="www.graphicsmagick.org" />
<span class="nowrap"><input type="text" name="q" size="25" maxlength="255" /> <input type="submit" name="sa" value="Search" /></span>
</form>
</div>
<div class="navmenu">
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="project.html">Project</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="README.html">Install</a></li>
<li><a href="Hg.html">Source</a></li>
<li><a href="NEWS.html">News</a> </li>
<li><a href="utilities.html">Utilities</a></li>
<li><a href="programming.html">Programming</a></li>
<li><a href="reference.html">Reference</a></li>
</ul>
</div>
<div class="document" id="graphicsmagick-cineon-and-smtpe-dpx-support">
<h1 class="title">GraphicsMagick Cineon and SMTPE DPX Support</h1>
<!-- -*- mode: rst -*- -->
<!-- This text is in reStucturedText format, so it may look a bit odd. -->
<!-- See http://docutils.sourceforge.net/rst.html for details. -->
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#introduction" id="id1">Introduction</a></p></li>
<li><p><a class="reference internal" href="#applications" id="id2">Applications</a></p></li>
<li><p><a class="reference internal" href="#dpx-features" id="id3">DPX features</a></p>
<ul>
<li><p><a class="reference internal" href="#basic" id="id4">Basic</a></p></li>
<li><p><a class="reference internal" href="#colorspaces" id="id5">Colorspaces</a></p></li>
<li><p><a class="reference internal" href="#storage" id="id6">Storage</a></p></li>
<li><p><a class="reference internal" href="#yet-to-be-supported" id="id7">Yet to be supported</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#using-graphicsmagick" id="id8">Using GraphicsMagick</a></p>
<ul>
<li><p><a class="reference internal" href="#image-resize" id="id9">Image Resize</a></p></li>
<li><p><a class="reference internal" href="#annotate-image" id="id10">Annotate Image</a></p></li>
<li><p><a class="reference internal" href="#colorspace-transformation" id="id11">Colorspace Transformation</a></p></li>
<li><p><a class="reference internal" href="#modifying-an-image-in-place" id="id12">Modifying An Image In-Place</a></p></li>
<li><p><a class="reference internal" href="#creating-a-contact-sheet" id="id13">Creating A Contact Sheet</a></p></li>
<li><p><a class="reference internal" href="#animating-a-sequence" id="id14">Animating A Sequence</a></p></li>
<li><p><a class="reference internal" href="#displaying-one-image-frame" id="id15">Displaying One Image Frame</a></p></li>
<li><p><a class="reference internal" href="#viewing-a-sequence" id="id16">Viewing A Sequence</a></p></li>
<li><p><a class="reference internal" href="#using-the-batch-capability" id="id17">Using the Batch capability</a></p></li>
</ul>
</li>
<li><p><a class="reference internal" href="#options-and-attributes" id="id18">Options And Attributes</a></p>
<ul>
<li><p><a class="reference internal" href="#command-options" id="id19">Command options</a></p></li>
<li><p><a class="reference internal" href="#dpx-attributes" id="id20">DPX Attributes</a></p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="introduction">
<h1><a class="toc-backref" href="#id1">Introduction</a></h1>
<p>GraphicsMagick supports legacy Legacy 10-bit Kodak Cineon format as
well as high-grade support for <a class="reference external" href="http://www.smpte.org/">SMPTE</a> DPX Version 2.0 (<a class="reference external" href="http://www.smpte.org/">SMPTE</a>
268M-2003). SMPTE DPX RGB and YCbCr colorspaces are supported. The
DPX implementation supports 8, 10, 12, and 16 bits/sample and any
arbitrary image pixel size. The Cineon implementation supports 8 and
10 bits/sample.</p>
<p>Film images are usually captured at <em>2K</em> resolution (82 pixels/mm),
<em>4K</em> resolution (164 pixels/mm), or even <em>8K</em> resolution (328
pixels/mm), where the actual resolution values approximate the
horizontal dimension of the image. A table of <a class="reference external" href="http://www.surrealroad.com/digital/index.php/archives/2005/standard-data-resolutions/">typical pixel
resolutions</a> for various film sizes may be found on the <a class="reference external" href="http://blog.surrealroad.com//">Surreal
Road</a> site (table reproduced here for convenience). File sizes may be
quite large and range in size from 8MB to as much as 180MB. The common
10-bit <em>2K</em> format consumes 12MB of disk while a 10-bit <em>4K</em> scan
consumes 50MB of disk.</p>
<table>
<caption>Standard data resolutions</caption>
<colgroup>
<col style="width: 57%" />
<col style="width: 13%" />
<col style="width: 18%" />
<col style="width: 13%" />
</colgroup>
<thead>
<tr><th class="head"><p>Format</p></th>
<th class="head"><p>Picture
aspect
ratio</p></th>
<th class="head"><p>Standard
pixel
resolution</p></th>
<th class="head"><p>Pixel
aspect
ratio</p></th>
</tr>
</thead>
<tbody>
<tr><td><p>Apple iPod video</p></td>
<td><p>1.33</p></td>
<td><p>320×240</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>Apple iPhone video</p></td>
<td><p>1.5</p></td>
<td><p>480×320</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>Sony PlayStationPortable</p></td>
<td><p>1.76</p></td>
<td><p>480×272</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>SD video (PAL, DV)</p></td>
<td><p>1.33</p></td>
<td><p>720×576</p></td>
<td><p>1.067</p></td>
</tr>
<tr><td><p>SD video (NTSC, DV)</p></td>
<td><p>1.33</p></td>
<td><p>720×486</p></td>
<td><p>0.9</p></td>
</tr>
<tr><td><p>SD video (PAL, square pixels)</p></td>
<td><p>1.33</p></td>
<td><p>768×576</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>SD video (NTSC, square pixels)</p></td>
<td><p>1.33</p></td>
<td><p>648×486</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>DVD video (NTSC, 4:3)</p></td>
<td><p>1.33</p></td>
<td><p>720×480</p></td>
<td><p>0.9</p></td>
</tr>
<tr><td><p>DVD video (PAL, 4:3)</p></td>
<td><p>1.33</p></td>
<td><p>720×576</p></td>
<td><p>1.067</p></td>
</tr>
<tr><td><p>DVD video (NTSC, 16:9)</p></td>
<td><p>1.78</p></td>
<td><p>720×480</p></td>
<td><p>1.185</p></td>
</tr>
<tr><td><p>DVD video (PAL, 16:9)</p></td>
<td><p>1.78</p></td>
<td><p>720×576</p></td>
<td><p>1.69</p></td>
</tr>
<tr><td><p>Blu-ray</p></td>
<td><p>1.78</p></td>
<td><p>1920×1080</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>HD video @720</p></td>
<td><p>1.78</p></td>
<td><p>1280×720</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>HD video @1080 (certain types)</p></td>
<td><p>1.78</p></td>
<td><p>1440×1080</p></td>
<td><p>1.33</p></td>
</tr>
<tr><td><p>HD video @1080</p></td>
<td><p>1.78</p></td>
<td><p>1920×1080</p></td>
<td><p>1.0</p></td>
</tr>
<tr><td><p>DVC Pro HD @59.94i</p></td>
<td><p>1.78</p></td>
<td><p>1280×1080</p></td>
<td><p>1.5</p></td>
</tr>
<tr><td><p>16mm</p></td>
<td><p>1.37</p></td>
<td><p>1712×1240</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Super-16</p></td>
<td><p>1.65</p></td>
<td><p>2048×1240</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>“Academy” aperture (2k)</p></td>
<td><p>1.37</p></td>
<td><p>1828×1332</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>“Academy” aperture (4k)</p></td>
<td><p>1.37</p></td>
<td><p>3656×2664</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Cinemascope (Squeezed, 2k)</p></td>
<td><p>2.35</p></td>
<td><p>1828×1556</p></td>
<td><p>2.00</p></td>
</tr>
<tr><td><p>Cinemascope (Squeezed, 4k)</p></td>
<td><p>2.35</p></td>
<td><p>3656×2664</p></td>
<td><p>2.00</p></td>
</tr>
<tr><td><p>Cinemascope (Unsqueezed, 2k)</p></td>
<td><p>2.35</p></td>
<td><p>2048×872</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Cinemascope (Unsqueezed, 4k)</p></td>
<td><p>2.35</p></td>
<td><p>3656×1556</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Full Aperture (2k)</p></td>
<td><p>1.33</p></td>
<td><p>2048×1556</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Full Aperture (4k)</p></td>
<td><p>1.33</p></td>
<td><p>4096×3112</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>8-perf “VistaVision” (3k)</p></td>
<td><p>1.5</p></td>
<td><p>3072×2048</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>8-perf “VistaVision” (6k)</p></td>
<td><p>1.5</p></td>
<td><p>6144×4096</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Red (16:9, 4k)</p></td>
<td><p>1.78</p></td>
<td><p>4096×2304</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Red (2:1, 4k)</p></td>
<td><p>2.0</p></td>
<td><p>4096×2048</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Digital Cinema (2k)</p></td>
<td><p>1.9</p></td>
<td><p>2048×1080</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>Digital Cinema (4k)</p></td>
<td><p>1.9</p></td>
<td><p>4096×2160</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>UHDTV ("4k")</p></td>
<td><p>1.78</p></td>
<td><p>3840×2160</p></td>
<td><p>1.00</p></td>
</tr>
<tr><td><p>UHDTV ("8k")</p></td>
<td><p>1.78</p></td>
<td><p>7860×4320</p></td>
<td><p>1.00</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="applications">
<h1><a class="toc-backref" href="#id2">Applications</a></h1>
<p>The strength of GraphicsMagick versus specialized proprietary software
are its cost (absolutely free!), open source availability (user is
able to fix software flaws or tailor software to meet specific needs),
general purpose image processing capabilities, deep image capabilities
(up to 32-bits per sample), excellent performance, platform
independence, lack of encumbering usage licenses, and robust
implementation. Examples of areas where GraphicsMagick may be used
are:</p>
<blockquote>
<ul class="simple">
<li><p>View the image on a display.</p></li>
<li><p>Scaling (for example, <em>4K</em> to <em>2K</em> or 1920x1080 HD with excellent quality)</p></li>
<li><p>Cropping</p></li>
<li><p>Rotation</p></li>
<li><p>Filtering</p></li>
<li><p>ICC ICM profile-based color management and transformations</p></li>
<li><p>Gamma adjustment</p></li>
<li><p>Color adjustment</p></li>
<li><p>Conversion to grayscale</p></li>
<li><p>Text annotations</p></li>
<li><p>Compositions</p></li>
<li><p>Drawing on images (for example drawing markers on image)</p></li>
<li><p>Conversion to and from other formats (e.g. Kodak Cineon, TIFF, JPEG, SGI,
Postscript, PNG, and PNM)</p></li>
</ul>
</blockquote>
<p>GraphicsMagick's DPX file format support is very comprehensive. It
goes beyond the DPX format support in other applications by striving
to implement the complete DPX specification rather than just a few
commonly used sub-formats. The capabilities of GraphicsMagick's DPX
support are as follows:</p>
</div>
<div class="section" id="dpx-features">
<h1><a class="toc-backref" href="#id3">DPX features</a></h1>
<div class="section" id="basic">
<h2><a class="toc-backref" href="#id4">Basic</a></h2>
<blockquote>
<ul class="simple">
<li><p>Anything which can be read, can also be written.</p></li>
<li><p>All DPX header information (including the user specific area) are
stored as image attributes and restored when the image is written.</p></li>
<li><p>Image source header information is updated appropriately.</p></li>
</ul>
</blockquote>
</div>
<div class="section" id="colorspaces">
<h2><a class="toc-backref" href="#id5">Colorspaces</a></h2>
<blockquote>
<ul class="simple">
<li><p>Linear RGB</p></li>
<li><p>Cineon Log RGB (default density range = 2.048)</p></li>
<li><p>Grayscale (Luma)</p></li>
<li><p>Rec. 601 and Rec. 709 YCbCr (4:4:4 and 4:2:2). Below-black and
above-white values are clipped.</p></li>
</ul>
</blockquote>
</div>
<div class="section" id="storage">
<h2><a class="toc-backref" href="#id6">Storage</a></h2>
<blockquote>
<ul class="simple">
<li><p>Bits per sample of 1, 8, 10, 12, and 16.</p></li>
<li><p>Packed, or fill type A or B for 10/12 bits.</p></li>
<li><p>All RGB-oriented element types (R, G, B, A, RGB, RGBA, ABGR).</p></li>
<li><p>YCbCr</p></li>
<li><p>Planar (multi-element) storage fully supported.</p></li>
<li><p>Alpha may be stored in a separate element.</p></li>
<li><p>Big and little endian storage.</p></li>
</ul>
</blockquote>
</div>
<div class="section" id="yet-to-be-supported">
<h2><a class="toc-backref" href="#id7">Yet to be supported</a></h2>
<blockquote>
<ul class="simple">
<li><p>Composite video.</p></li>
<li><p>Floating point formats (32 and 64 bits)</p></li>
<li><p>Depth channel (not supportable within GraphicsMagick).</p></li>
<li><p>Studio (reduced range) YCbCr and RGB.</p></li>
</ul>
</blockquote>
<p>The software is written efficiently so the performance when reading
and writing files is limited by the performance of the file I/O
subsystem. The software is designed to avoid seeking while reading
and writing so that files may be read and written over pipes, or via a
user provided file descriptor.</p>
</div>
</div>
<div class="section" id="using-graphicsmagick">
<h1><a class="toc-backref" href="#id8">Using GraphicsMagick</a></h1>
<div class="section" id="image-resize">
<h2><a class="toc-backref" href="#id9">Image Resize</a></h2>
<p>GraphicsMagick is easy to use. The following is an example of scaling
a <em>4K</em> 16 bit scan to a <em>2K</em> <em>Academy</em> 10 bit image using the <a class="reference external" href="convert.html">convert</a>
command:</p>
<pre class="literal-block">gm convert 4k.dpx -resize 1828x1556 -depth 10 2k.dpx</pre>
<p>The above example uses the default resizing filters which are
optimized for quality, but take longer than some other filters. The
<em>box</em> resize filter provides reasonably good scaling in a reasonable
amount of time:</p>
<pre class="literal-block">gm convert 4k.dpx -filter box -resize 1828x1556 -depth 10 2k.dpx</pre>
<p>The above example command takes about 4 seconds (on an Apple 2.5GHz G5
PowerMac or Intel 2.4GHz Xeon) to down-convert from a 131MB <em>5K</em>
(5232x4376) original 16-bit scan from a NorthLight scanner to a 11MB
<em>2K</em> 10-bit working image. Operations on more typical <em>2K</em> images take
about a quarter of a second.</p>
</div>
<div class="section" id="annotate-image">
<h2><a class="toc-backref" href="#id10">Annotate Image</a></h2>
<p>The following example shows how GraphicsMagick's resize capability may
be combined with its powerful drawing capability to take a full size
source image and produce a smaller (720x576) version which includes
the image filename and timecode at the top of the image, and a logo
<em>bug</em> image in the bottom right corner:</p>
<pre class="literal-block">gm convert infile.dpx -resize '720x576!' \
-draw 'fill "white";text-undercolor "Blue";font "Helvetica";font-size 18;\
text 10,20 "%f (%[DPX:tv.time.code])";image atop 500,400 0,0 "gm-125x80t.png"' \
outfile.dpx</pre>
<p>As may be seen, the argument to -draw can become extremely long, so to
make things easy, the drawing commands may be placed in a simple text
file and passed by reference to the draw comand:</p>
<p>First lets check what we edited into our drawing command file:</p>
<pre class="literal-block">% cat drawcmd.txt
fill "white"
text-undercolor "Blue"
font "Helvetica"
font-size 18
text 10,20 "%f (%[DPX:tv.time.code])"
image atop 500,400 "0,0 "gm-125x80t.png"</pre>
<p>and now we can apply it by passing the filename prefixed with a '@' to the
-draw command:</p>
<pre class="literal-block">gm convert infile.dpx -resize '720x576!' -draw '@drawcmd.txt' outfile.dpx</pre>
<p>The <span class="docutils literal">0,0</span> in the image composition command argument says to use the
image as is. If the composited image should be automatically resized,
then simply replace the <span class="docutils literal">0,0</span> with the desired size.</p>
<p>There are a number of powerful scripting environments for
GraphicsMagick. One of these is RMagick (Ruby language interface to
GraphicsMagick). In Ruby, the same effect may be obtained via a script
that looks like:</p>
<pre class="literal-block">#! /usr/local/bin/ruby -w
require 'RMagick'
include Magick
img = Image.read('infile.dpx')[0]
frog = Image.read('gm-125x80t.png')[0]
gc = Draw.new
gc.fill('white')
gc.text_undercolor("Blue")
gc.font("Helvetica")
gc.font_size(18)
gc.text(10, 20, "%f (%[DPX:tv.time.code])")
gc.composite(500, 400, 0, 0, frog, AtopCompositeOp)
gc.draw(img)
img.write('outfile.dpx')</pre>
<p>In addition to Ruby, there are scripting interfaces for Perl, Python,
Tcl, and Ch (C-like scripting language).</p>
</div>
<div class="section" id="colorspace-transformation">
<h2><a class="toc-backref" href="#id11">Colorspace Transformation</a></h2>
<p>To convert an RGB file to a 4:2:2 YCbCr file in Rec 709 space:</p>
<pre class="literal-block">gm convert 2k.dpx -depth 10 -colorspace Rec709YCbCr -sampling-factor 4:2:2 2k-ycbcr.dpx</pre>
</div>
<div class="section" id="modifying-an-image-in-place">
<h2><a class="toc-backref" href="#id12">Modifying An Image In-Place</a></h2>
<p>Besides convert, which converts from one file to another, there is
<a class="reference external" href="mogrify.html">mogrify</a> which transforms the file in place. A temporary file is used
(if necessary) to ensure that the existing image file is not damaged
if something goes wrong (e.g., not enough disk space). Note that
unlike some applications supporting DPX/Cineon, when a file is modifed
<em>in-place</em> , it is completely re-written. While GraphicsMagick makes
every attempt to preserve header information, some previously existing
features of the file (such as the offset to the pixel data) may
change.</p>
<p>A typical mogrify command is</p>
<pre class="literal-block">gm mogrify -resize 1828x1556 -depth 10 file-0001.dpx file-0002.dpx</pre>
<p>Multiple files may be specified on the command line so the same
command may process hundreds of files in one invocation.</p>
<p>Unix users can use the find and xargs programs to perform operations
on any number of files:</p>
<pre class="literal-block">find /assets/001 -name '*.dpx' -print | \
xargs gm mogrify -resize 1828x1556 -depth 10</pre>
<p>Xargs works by pasting as many file names as possible on the end of
the command provided to it.</p>
<p>The GNU version of xargs provides an added benefit. It is able to run
several commands in the background. This means that if your system has
multiple CPUs, it can take advantage of all the CPUs while still using
one command:</p>
<pre class="literal-block">find /assets/001 -name '*.dpx' -print | \
xargs --max-procs 3 --max-args 25 gm mogrify -resize 1828x1556 -depth 10</pre>
<p>The mogrify command supports the -output-directory option to sent
files to a different directory than the input files. This allows
processing a large number of files without overwriting the input
files:</p>
<pre class="literal-block">mkdir dest
cd source
gm mogrify -output-directory ../dest -resize 1828x1556 -depth 10 '*.dpx'</pre>
<p>Note that the entire input file path specification is preserved when
composing the output path so that the input file path is simply
appended to the output directory path. Also, unless the
-create-directories option is added, the user is responsible for
creating any necessary destination directories. As an example of the
path composition algorithm, if the input file name is specified as
source/file.dpx and the output directory is specified as dest, then
the output file path will be dest/source/file.dpx.</p>
<p>Here is an incantation which recursively processes all DPX files under
source and sends the result to a similar directory tree under dest.</p>
<pre class="literal-block">mkdir dest
cd source
find . name '*.dpx' -print | xargs gm mogrify -output-directory ../dest \
-create-directories -resize 1828x1556 -depth 10</pre>
</div>
<div class="section" id="creating-a-contact-sheet">
<h2><a class="toc-backref" href="#id13">Creating A Contact Sheet</a></h2>
<p>GraphicsMagick may be used to create a contact sheet (grid of
thumbnails with name and size) by using the <em>VID</em> pseudoformat which
accepts a wildcarded argument of files (protected by quotes!) to
read. The output files are buffered while files are being read so
there is a practical limit to the number of files which may be
processed at once. To output to a Postscript file:</p>
<pre class="literal-block">gm convert "vid:*.dpx" "contact-sheet.ps"</pre>
<p>or to a PDF file:</p>
<pre class="literal-block">gm convert "vid:*.dpx" "contact-sheet.pdf"</pre>
<p>or to a sequence of JPEG files ranging from contact-sheet-000.jpg to
contact-sheet-999.jpg:</p>
<pre class="literal-block">gm convert "vid:*.dpx" "contact-sheet-%03d.jpg"</pre>
<p>or to a MIFF file which may be used to interactively browse the
original files using 'gm display':</p>
<pre class="literal-block">gm convert "vid:*.dpx" "contact-sheet.miff"</pre>
</div>
<div class="section" id="animating-a-sequence">
<h2><a class="toc-backref" href="#id14">Animating A Sequence</a></h2>
<p>GraphicsMagick may be used to animate an image sequence on an X11
display using the <a class="reference external" href="animate.html">animate</a> subcommand. Frames are buffered in memory
(pre-loaded into the X11 server) so the number of frames which may be
animated at once is limited. GraphicsMagick has been used to animate
1080P (1920x1080) images at 24 frames per second with at least 300
frames in the sequence.More frames may be buffered on 64-bit
systems. Many more frames may be animated by preparing a reduced set
of frames in advance.</p>
<p>To visualize an animation at 24 frames per second (delay (1/24)*100) use</p>
<pre class="literal-block">gm animate -delay 4.17 'Frame_*.dpx'</pre>
<p>In order to obtain a preview of a larger sequence, and if the frames
are numbered, a broader span of time may be animated by selecting
every 10^th frame (terminating with zero) to animate at 2.4 frames per
second:</p>
<pre class="literal-block">gm animate -delay 41.7 'Frame_*0.dpx'</pre>
</div>
<div class="section" id="displaying-one-image-frame">
<h2><a class="toc-backref" href="#id15">Displaying One Image Frame</a></h2>
<p>An image frame may be displayed on an X11 server using the <a class="reference external" href="display.html">display</a>
subcommand. By default the name of the image file is displayed in the
title bar. By specifying the format of the title, other useful
information such as the time code (see the DPX Attributes section for
more details) may be included in the window title:</p>
<pre class="literal-block">gm display -title '%f (%[DPX:tv.time.code])' foo.dpx</pre>
</div>
<div class="section" id="viewing-a-sequence">
<h2><a class="toc-backref" href="#id16">Viewing A Sequence</a></h2>
<p>A sequence of images may be displayed on an X11 server using the
<a class="reference external" href="display.html">display</a> subcommand. Unlike 'gm animate' there are no arbitrary limits
when displaying a sequence this way. Unlike 'gm animate' the
inter-frame delay can not be set to less than a second (100 ticks is
one second).</p>
<pre class="literal-block">gm display +progress -delay 100 'Frame_*.dpx'</pre>
</div>
<div class="section" id="using-the-batch-capability">
<h2><a class="toc-backref" href="#id17">Using the Batch capability</a></h2>
<p>A 'batch' command is provided (starting with the GraphicsMagick 1.3.18
release) which supports executing an arbitrary number of
GraphicsMagick commands from a file, or provided via standard input,
while executing just one instance of GraphicsMagick. This provides
for more efficiency and for use of GraphicsMagick as a co-process. An
arbitrary script which produces the commands may continue to produce
the commands as GraphicsMagick executes them. For example (Bourne
shell script):</p>
<pre class="literal-block">outdir=outdir
mkdir $outdir
find fromdir -name '*.dpx'| sort |
while read infile
do
outfile=$outdir/`basename $infile`
echo time convert $infile -gaussian 0x1 $outfile
done | gm batch -</pre>
</div>
</div>
<div class="section" id="options-and-attributes">
<h1><a class="toc-backref" href="#id18">Options And Attributes</a></h1>
<div class="section" id="command-options">
<h2><a class="toc-backref" href="#id19">Command options</a></h2>
<p>The following command options are particularly useful when dealing with
DPX files:</p>
<dl class="simple">
<dt>-colorspace {CineonLog|RGB|Gray|Rec601Luma|Rec709Luma|Rec601YCbCr|Rec709YCbCr}</dt>
<dd><p>Specifies the colorspace to be used when saving the DPX
file. CineonLog selects log encoding according to Kodak Cineon
specifications. RGB selects linear RGB encoding. Gray selects
linear gray encoding similar to RGB, but with a single
channel. Rec601Luma requests that RGB is converted to a gray image
using Rec601 Luma. Rec709Luma requests that RGB is converted to a
gray image using Rec709Luma. Rec601YCbCr requests that the image
is saved as YCbCr according to Rec601 (SDTV)
specifications. Rec709CbCr requests that the image is saved as
YCbCr according to Rec709 (HDTV) specifications.</p>
</dd>
<dt>-endian {lsb|msb}</dt>
<dd><p>Specifies the endian order to use when writing the DPX
file. GraphicsMagick writes big-endian DPX files by default since
they are the most portable. Other implementations may use the
native order of the host CPU (e.g. little-endian when using an
Intel 'x86 CPU).</p>
</dd>
<dt>-depth <value></dt>
<dd><p>Specifies the number of bits to preserve in a color sample. By
default the output file is written with the same number of bits as
the input file. For example, if the input file is 16 bits, it may
be reduced to 10 bits via '-depth 10'.</p>
</dd>
<dt>-define dpx:bits-per-sample=<value></dt>
<dd><p>If the dpx:bits-per-sample key is defined, GraphicsMagick will
write DPX images with the specified bits per sample, overriding
any existing depth value. If this option is not specified, then
the value is based on the existing image depth value from the
original image file. The DPX standard supports bits per sample
values of 1, 8, 10, 12, and 16. Many DPX readers demand a sample
size of 10 bits with type A padding (see below).</p>
</dd>
<dt>-define dpx:colorspace={rgb|cineonlog}</dt>
<dd><p>Use the dpx:colorspace option when reading a DPX file to specify
the colorspace the DPX file uses. This overrides the colorspace
type implied by the DPX header (if any). Currently files with the
transfer characteristic Printing Density are assumed to be log
encoded density while files marked as Linear are assumed to be
linear. Hint: use <span class="docutils literal"><span class="pre">-define</span> dpx:colorspace=rgb</span> in order to avoid
the log to linear transformation for DPX files which use Printing
Density.</p>
</dd>
<dt>-define dpx:packing-method={packed|a|b|lsbpad|msbpad}</dt>
<dd><p>DPX samples may be output within 32-bit words. They may be tightly
packed end-to-end within the words ("packed"), padded with null
bits to the right of the sample ("a" or "lsbpad"), or padded with
null bits to the left of the sample ("b" or "msbpad"). This option
only has an effect for sample sizes of 10 or 12 bits. If samples
are not packed, the DPX standard recommends type A padding. Many
DPX readers demand a sample size of 10 bits with type A padding.</p>
</dd>
<dt>-define dpx:pixel-endian={lsb|msb}</dt>
<dd><p>DPX pixels should use the endian order that the DPX header
specifies. Sometimes there is a mis-match and the pixels use a
different endian order than the file header specifies. For
example, the file header may specify little endian, but the pixels
are in big-endian order. To work around that use -define
dpx-pixel-endian=msb when reading the file. Likewise, this option
may be used to intentionally write the pixels using a different
order than the header.</p>
</dd>
<dt>-define dpx:swap-samples={true|false}</dt>
<dd><p>GraphicsMagick strives to adhere to the DPX standard but certain
aspects of the standard can be quite confusing. As a result, some
10-bit DPX files have Red and Blue interchanged, or Cb and Cr
interchanged due to an different interpretation of the standard,
or getting the wires crossed. The swap-samples option may be
supplied when reading or writing in order to read or write using
the necessary sample order.</p>
</dd>
<dt>-define dpx:swap-samples-read={true|false}</dt>
<dd><p>Similar to dpx:swap-samples but only applied while reading.</p>
</dd>
<dt>-define dpx:swap-samples-write={true|false}</dt>
<dd><p>Similar to dpx:swap-samples but only applied while writing.</p>
</dd>
<dt>-interlace plane</dt>
<dd><p>By default, samples are stored contiguously in a single element
when possible. Specifying '-interlace plane' causes each sample
type (e.g. 'red') to be stored in its own image element. Planar
storage is fully supported for grayscale (with alpha) and RGB. For
YCbCr, chroma must be 4:2:2 subsampled in order to use planar
storage. While planar storage offers a number of benefits, it
seems that very few DPX-supporting applications support it.</p>
</dd>
<dt>-sampling-factor 4:2:2</dt>
<dd><p>Select 4:2:2subsampling when saving an image in YCbCr
format. Subsampling is handled via a general-purpose image resize
algorithm (lanczos) rather than a dedicated filter so subsampling
is slow (but good).</p>
</dd>
<dt>-set reference-white <value></dt>
<dd><p>Set the 90% white card level (default 685) for Cineon Log.</p>
</dd>
<dt>-set reference-black <value></dt>
<dd><p>Set the 1% black card level (default 95) for Cineon Log.</p>
</dd>
<dt>-set display-gamma <value></dt>
<dd><p>Set the display gamma (default 1.7) for Cineon Log.</p>
</dd>
<dt>-set film-gamma <value></dt>
<dd><p>Set the film gamma (default 0.6) for Cineon Log.</p>
</dd>
<dt>-set soft-clip-offset <value></dt>
<dd><p>Set the soft clip offset (default 0) when converting to <em>computer</em> RGB from
Cineon Log.</p>
</dd>
</dl>
</div>
<div class="section" id="dpx-attributes">
<h2><a class="toc-backref" href="#id20">DPX Attributes</a></h2>
<p>GraphicsMagick provides almost full access to DPX header
attributes. DPX header attributes are shown in the output of 'gm
identify -verbose' and may be set using the -define syntax
(e.g. '-define dpx:mp.frame.position=2000') on the command line in
order to add a value, or override an existing value. The attributes in
the list below may be viewed or updated. The names are similar to the
attribute descriptions from the DPX standard.</p>
<pre class="literal-block">dpx:file.copyright
dpx:file.creation.datetime
dpx:file.creator
dpx:file.encryption.key
dpx:file.filename
dpx:file.project.name
dpx:file.version
dpx:image.orientation
dpx:mp.count
dpx:mp.film.manufacturer.id
dpx:mp.film.type
dpx:mp.format
dpx:mp.frame.id
dpx:mp.frame.position
dpx:mp.frame.rate
dpx:mp.held.count
dpx:mp.perfs.offset
dpx:mp.prefix
dpx:mp.sequence.length
dpx:mp.shutter.angle
dpx:mp.slate.info
dpx:source.aspect.ratio.horizontal
dpx:source.aspect.ratio.vertical
dpx:source.border.validity.bottom
dpx:source.border.validity.left
dpx:source.border.validity.right
dpx:source.border.validity.top
dpx:source.creation.datetime
dpx:source.device.name
dpx:source.device.serialnumber
dpx:source.filename
dpx:source.scanned.size.x
dpx:source.scanned.size.y
dpx:source.x-center
dpx:source.x-offset
dpx:source.x-original-size
dpx:source.y-center
dpx:source.y-offset
dpx:source.y-original-size
dpx:tv.black.gain
dpx:tv.black.level
dpx:tv.breakpoint
dpx:tv.field.number
dpx:tv.gama
dpx:tv.horizontal.sampling.rate
dpx:tv.integration.time
dpx:tv.interlace
dpx:tv.sync.time
dpx:tv.temporal.sampling.rate
dpx:tv.time.code
dpx:tv.user.bits
dpx:tv.video.signal
dpx:tv.white.level
dpx:user.data.id</pre>
<p>Specific header values from a DPX file may be displayed quickly using a command
similar to:</p>
<pre class="literal-block">gm identify -format '%[DPX:tv.time.code]' foo.dpx</pre>
<p>Use</p>
<pre class="literal-block">gm identify -format '%[dpx:*]' foo.dpx</pre>
<p>to list all DPX header attributes.</p>
</div>
</div>
</div>
<hr class="docutils">
<div class="document">
<p><a href="Copyright.html">Copyright</a> © GraphicsMagick Group 2002 - 2023<!--SPONSOR_LOGO--></p>
</div>
</div>
</body>
</html>
|