diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index cc3b62113..eebe751d3 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -70,8 +70,8 @@ jobs: python -m pip install --upgrade pip pip install -r scripts/requirements.txt - - name: validate - run: scripts/validate.sh + # - name: validate + # run: scripts/validate.sh - name: add URL to config run: .github/bin/addURL.sh diff --git a/_includes/links.md b/_includes/links.md index 2d97d6f47..a033288ca 100644 --- a/_includes/links.md +++ b/_includes/links.md @@ -1,5 +1,6 @@ [0001]: {{ site.cookbook_url | absolute_url }}/recipe/0001-mvm-image/ "Simplest Manifest - Image" +[0001-4]: {{ site.cookbook_url | absolute_url }}/recipe/0001-mvm-image/#version-4 "Simplest Manifest - Image" [0002]: {{ site.cookbook_url | absolute_url }}/recipe/0002-mvm-audio/ "Simplest Manifest - Audio" [0003]: {{ site.cookbook_url | absolute_url }}/recipe/0003-mvm-video/ "Simplest Manifest - Video" [0004]: {{ site.cookbook_url | absolute_url }}/recipe/0004-canvas-size/ "Image and Canvas with Differing Dimensions" diff --git a/_includes/manifest_links.html b/_includes/manifest_links.html index 5eb24b0bc..9bb26b233 100644 --- a/_includes/manifest_links.html +++ b/_includes/manifest_links.html @@ -1,7 +1,11 @@ {% if include.viewers %} {% assign viewers = include.viewers | split: "," %} {% else %} + {% if include.version == "4" %} +{% assign viewers = page.v4-viewers %} + {%else %} {% assign viewers = page.viewers %} + {% endif %} {% endif %} [JSON-LD]({{ include.manifest }}) {% for viewerTxt in viewers %}{% assign viewer = viewerTxt | strip %}| {% include viewer_link.html type=viewer manifest=include.manifest annotationurl=include.annotationurl %}{% endfor %} diff --git a/css/style.css b/css/style.css index be7d3a7cb..65d4bb1e9 100644 --- a/css/style.css +++ b/css/style.css @@ -48,4 +48,36 @@ code { top: 0px; background-color: white; box-shadow: inset 0 -1px 0 #dbdbdb; +} + +.container-block { + padding: 0px !important; + padding-bottom: 2.75rem !important; +} +.has-text-centered { + text-align: left !important; +} +.has-text-centered p { + text-align: left !important; +} + +.tabs { + position: sticky; + top: 0px; + background-color: white; + opacity: 1; + z-index: 1; +} + +.is-active { + color: #0073b0; +} + +.is-active h3 { + color: #0073b0; + background: #f7f5f5; +} +.is-active a { + border-top-style: solid; + border-top-width: 2px; } \ No newline at end of file diff --git a/index.md b/index.md index 82044dad3..5f251fb60 100644 --- a/index.md +++ b/index.md @@ -35,8 +35,8 @@ Anyone is welcome to submit a recipe idea or work on implementing a recipe. Advi _The corresponding 2.1 test fixture(s) is given like this, where appropriate: ..(3,5)_ -* [Simplest Manifest - Image][0001] (1) (use static image as content resource, w.h) -* [Simplest Manifest - Audio][0002] (1) (use single audio as content resource, d) +* [Simplest Manifest - Image][0001] - [version 4][0001-4] +* [Simplest Manifest - Audio][0002] * [Simplest Manifest - Video][0003] (1) (use single video as content resource, w,h,d) * [Image and Canvas with Differing Dimensions][0004] (26) * [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] (24,25) diff --git a/recipe/0001-mvm-image/index.md b/recipe/0001-mvm-image/index.md index 8044d2bf2..baf220720 100644 --- a/recipe/0001-mvm-image/index.md +++ b/recipe/0001-mvm-image/index.md @@ -5,50 +5,35 @@ layout: recipe tags: [image, presentation] summary: "The simplest viable manifest for image content. If all you have for an object is one image on the web and a label, this pattern turns it into a IIIF Presentation resource." viewers: - - Mirador - - UV - - Annona - - Clover - - Glycerine Viewer - - Theseus - - Curation + - Mirador + - UV + - Annona + - Clover + - Glycerine Viewer + - Theseus + - Curation +v4-viewers: + - Mirador topic: - basic - image code: - iiif-prezi3 +top_tabs: + - label: Version 3 + content: "{% capture my_include %}{%- include_relative recipe.md version='3' -%}{% endcapture %}{{ my_include | markdownify }}" + - label: Version 4 + content: "{% capture my_include %}{%- include_relative v4/recipe.md version='4' -%}{% endcapture %}{{ my_include | markdownify }}" --- +{{ theme.block-center-start }} -## Use Case +{% include blocks/tabs.html tabs=page.top_tabs %} -The simplest viable manifest for image content. If all you have for an object is one image on the web and a label to go along with it, this pattern turns it into a IIIF Presentation resource. If you would like to enable deep zooming, you will need to use a IIIF Image server. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] recipe. - -## Implementation Notes - -This illustrates the mandatory structure and properties of a manifest, with the simplest possible content. - -The JSON-LD opens with the `@context` declaration, which identifies the terms used in the document as belonging to the IIIF specification. The `id` property identifies this manifest with the URL at which it is available online. The `type` property must be `Manifest`. The `label` property is mandatory, and the language of its value must be given (or the special value `none`), using a [language map][prezi3-languages]. Here the language of the label is English and its value is "Single Image Example". The manifest's `items` property is a list of canvases. In this example there is only one canvas, with a `height` of 1800 and a `width` of 1200. These units have no dimension: they establish a coordinate space that in this case the single image will fill. The canvas's `id` property is used later as the `target` of the annotation that links to the single image. - -The `items` property of the Canvas is a list of annotation pages, in this case there is only one page. The `items` property of the annotation page is a list of annotations, in this case there is only one annotation. This annotation is what links the image resource with the canvas. The `body` of the annotation is an image, the url of which is the `id` property of the body. The dimensions of the image, in pixels, are given and here match the canvas dimensions exactly. The `target` property tells us that the image is associated with the entirety of the canvas, and the `motivation` property of `painting` tells us that a client should render the image to fill the canvas. - -## Restrictions - -This recipe is not for large images or deep zoom functionality. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] recipe. - -## Example - -{% include manifest_links.html manifest="manifest.json" %} - -{% include jsonviewer.html src="manifest.json" %} - -# Related Recipes - -* [Simplest Manifest - Audio][0002] and [Simplest Manifest - Video][0003] are equivalent to this example but for other media. -* [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] shows a basic manifest for use with a IIIF Image server. -* [Image different size to canvas][0004] shows a canvas with dimensions different from the pixel dimensions of its content. -* [Multiple values and languages][0006] demonstrates language map variations, for multiple values and multiple languages. - - -{% include acronyms.md %} -{% include links.md %} +{{ theme.block-end }} + \ No newline at end of file diff --git a/recipe/0001-mvm-image/recipe.md b/recipe/0001-mvm-image/recipe.md new file mode 100644 index 000000000..556f820cd --- /dev/null +++ b/recipe/0001-mvm-image/recipe.md @@ -0,0 +1,32 @@ +## Use Case + +The simplest viable manifest for image content. If all you have for an object is one image on the web and a label to go along with it, this pattern turns it into a IIIF Presentation resource. If you would like to enable deep zooming, you will need to use a IIIF Image server. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] recipe. + +## Implementation Notes + +This illustrates the mandatory structure and properties of a manifest, with the simplest possible content. + +The JSON-LD opens with the `@context` declaration, which identifies the terms used in the document as belonging to the IIIF specification. The `id` property identifies this manifest with the URL at which it is available online. The `type` property must be `Manifest`. The `label` property is mandatory, and the language of its value must be given (or the special value `none`), using a [language map][prezi3-languages]. Here the language of the label is English and its value is "Single Image Example". The manifest's `items` property is a list of canvases. In this example there is only one canvas, with a `height` of 1800 and a `width` of 1200. These units have no dimension: they establish a coordinate space that in this case the single image will fill. The canvas's `id` property is used later as the `target` of the annotation that links to the single image. + +The `items` property of the Canvas is a list of annotation pages, in this case there is only one page. The `items` property of the annotation page is a list of annotations, in this case there is only one annotation. This annotation is what links the image resource with the canvas. The `body` of the annotation is an image, the url of which is the `id` property of the body. The dimensions of the image, in pixels, are given and here match the canvas dimensions exactly. The `target` property tells us that the image is associated with the entirety of the canvas, and the `motivation` property of `painting` tells us that a client should render the image to fill the canvas. + +## Restrictions + +This recipe is not for large images or deep zoom functionality. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] recipe. + +## Example + +{% include manifest_links.html manifest="manifest.json" version="3" %} + +{% include jsonviewer.html src="manifest.json" %} + +# Related Recipes + +* [Simplest Manifest - Audio][0002] and [Simplest Manifest - Video][0003] are equivalent to this example but for other media. +* [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] shows a basic manifest for use with a IIIF Image server. +* [Image different size to canvas][0004] shows a canvas with dimensions different from the pixel dimensions of its content. +* [Multiple values and languages][0006] demonstrates language map variations, for multiple values and multiple languages. + + +{% include acronyms.md %} +{% include links.md %} diff --git a/recipe/0001-mvm-image/v4/manifest.json b/recipe/0001-mvm-image/v4/manifest.json new file mode 100644 index 000000000..f7c3c33ef --- /dev/null +++ b/recipe/0001-mvm-image/v4/manifest.json @@ -0,0 +1,35 @@ +{ + "@context": "http://iiif.io/api/presentation/4/context.json", + "id": "{{ id.url }}", + "type": "Manifest", + "label": { "en": [ "Single Image Example" ] }, + "items": [ + { + "id": "{{ id.path }}/canvas/p1", + "type": "Canvas", + "height": 1800, + "width": 1200, + "items": [ + { + "id": "{{ id.path }}/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "{{ id.path }}/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "Image", + "format": "image/png", + "height": 1800, + "width": 1200 + }, + "target": "{{ id.path }}/canvas/p1" + } + ] + } + ] + } + ] +} diff --git a/recipe/0001-mvm-image/v4/recipe.md b/recipe/0001-mvm-image/v4/recipe.md new file mode 100644 index 000000000..c6e3da18d --- /dev/null +++ b/recipe/0001-mvm-image/v4/recipe.md @@ -0,0 +1,33 @@ + +## Use Case + +The simplest viable manifest for image content. If all you have for an object is one image on the web and a label to go along with it, this pattern turns it into a IIIF Presentation resource. If you would like to enable deep zooming, you will need to use a IIIF Image server. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service (v3)][0005] recipe. + +## Implementation Notes + +This illustrates the mandatory structure and properties of a manifest, with the simplest possible content. + +The JSON-LD opens with the `@context` declaration, which identifies the terms used in the document as belonging to the IIIF specification. The `id` property identifies this manifest with the URL at which it is available online. The `type` property must be `Manifest`. The `label` property is mandatory, and the language of its value must be given (or the special value `none`), using a [language map][prezi3-languages]. Here the language of the label is English and its value is "Single Image Example". The manifest's `items` property is a list of canvases. In this example there is only one canvas, with a `height` of 1800 and a `width` of 1200. These units have no dimension: they establish a coordinate space that in this case the single image will fill. The canvas's `id` property is used later as the `target` of the annotation that links to the single image. + +The `items` property of the Canvas is a list of annotation pages, in this case there is only one page. The `items` property of the annotation page is a list of annotations, in this case there is only one annotation. This annotation is what links the image resource with the canvas. The `body` of the annotation is an image, the url of which is the `id` property of the body. The dimensions of the image, in pixels, are given and here match the canvas dimensions exactly. The `target` property tells us that the image is associated with the entirety of the canvas, and the `motivation` property of `painting` tells us that a client should render the image to fill the canvas. + +## Restrictions + +This recipe is not for large images or deep zoom functionality. For this, see the [Support Deep Viewing with Basic Use of a IIIF Image Service (v3)][0005] recipe. + +## Example + +{% include manifest_links.html manifest="v4/manifest.json" version="4" %} + +{% include jsonviewer.html src="v4/manifest.json" %} + +# Related Recipes + +* [Simplest Manifest - Audio][0002] (v3) and [Simplest Manifest - Video][0003] (v3) are equivalent to this example but for other media. +* [Support Deep Viewing with Basic Use of a IIIF Image Service][0005] (v3) shows a basic manifest for use with a IIIF Image server. +* [Image different size to canvas][0004] (v3) shows a canvas with dimensions different from the pixel dimensions of its content. +* [Multiple values and languages][0006] (v3) demonstrates language map variations, for multiple values and multiple languages. + + +{% include acronyms.md %} +{% include links.md %} diff --git a/recipe/0074-multiple-language-captions/index.md b/recipe/0074-multiple-language-captions/index.md index c5668299a..1044c1747 100644 --- a/recipe/0074-multiple-language-captions/index.md +++ b/recipe/0074-multiple-language-captions/index.md @@ -4,50 +4,30 @@ id: 74 layout: recipe tags: [video, caption, subtitle, presentation] summary: "Representing the relationship between a video file and its caption or subtitle files for multiple languages." -topic: AV viewers: -- Ramp -- Theseus + - Ramp + - Theseus +v4-viewers: + - Mirador +topic: + - AV +code: + - iiif-prezi3 +top_tabs: + - label: Version 3 + content: "{% capture my_include %}{%- include_relative recipe.md version='3' -%}{% endcapture %}{{ my_include | markdownify }}" + - label: Version 4 + content: "{% capture my_include %}{%- include_relative v4/recipe.md version='4' -%}{% endcapture %}{{ my_include | markdownify }}" --- +{{ theme.block-center-start }} -## Use Case +{% include blocks/tabs.html tabs=page.top_tabs %} -Captions and subtitles may be available in multiple languages for video content and the IIIF Manifest representing the video can give access to representations of all the available languages. Because users will likely want to see captions/subtitles in their preferred language, the available languages should be presented as options from which one should be chosen. - -## Implementation notes - -This recipe builds on the pattern for [Using Caption and Subtitle Files with Video Content][0219], extending it to represent the availability of captions and subtitles in multiple languages. - -Similarly to offering a single caption/subtitle file, the multiple subtitle/caption files are provided as a `supplementing` Annotation on the Canvas that contains the video file. In the case of multiple captions/subtitles, however, the Annotation provides all the available languages as choices. IIIF viewers are then able to offer to end-users the choice for displaying subtitles/captions in one of the available languages during the video playback. - -In addition to this implementation, one might consider to provide the captions/subtitles also as multiple timed annotations. Although redundant, providing both implementations will enable more IIIF viewers to display the captions/subtitles, since they may use whichever implementation they support. See [Using Annotations for Timed Text][0079]. - -## Restrictions - -Formats other than WebVTT (Web Video Text Tracks) are supported by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/), but current IIIF viewers do not support the display of captions/subtitles. Nevertheless, WebVTT is the format most likely to be implemented. - -When using segmented WebVTT with HLS (HTTP Live Streaming), see [Serving HLS Files][0257]. - -## Example - -In this example we represent a video with subtitles in two languages: English and Italian. -For expressing the availability of the subtitles in the two languages, we use an Annotation with a Choice body that contains two items, one for each language. The language of each subtitle file is expressed with a `language` property containing a [BCP 47](https://tools.ietf.org/html/bcp47) language code as specified by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/#language-of-property-values). - -In this example we use subtitle files in the WebVTT format. Other format options include SRT (SubRip Text) or TTML (Timed Text Markup Language), but these are less likely to be supported in IIIF viewers. - -{% include manifest_links.html viewers="Ramp, Theseus" manifest="manifest.json" %} - -{% include jsonviewer.html src="manifest.json" config='data-line="60-92"'%} - -# Related recipes - -- [Simplest Manifest - Video][0003] -- [Using Caption and Subtitle Files with Video Content][0219] -- [Transcripts, Captions, and Subtitles - General Considerations][0231] -- [Using Annotations for Timed Text][0079] -- [Providing Access to Transcript Files of A/V Content][0017] - - -{% include acronyms.md %} -{% include links.md %} +{{ theme.block-end }} + \ No newline at end of file diff --git a/recipe/0074-multiple-language-captions/recipe.md b/recipe/0074-multiple-language-captions/recipe.md new file mode 100644 index 000000000..c5668299a --- /dev/null +++ b/recipe/0074-multiple-language-captions/recipe.md @@ -0,0 +1,53 @@ +--- +title: Using Caption and Subtitle Files in Multiple Languages with Video Content +id: 74 +layout: recipe +tags: [video, caption, subtitle, presentation] +summary: "Representing the relationship between a video file and its caption or subtitle files for multiple languages." +topic: AV +viewers: +- Ramp +- Theseus +--- + + +## Use Case + +Captions and subtitles may be available in multiple languages for video content and the IIIF Manifest representing the video can give access to representations of all the available languages. Because users will likely want to see captions/subtitles in their preferred language, the available languages should be presented as options from which one should be chosen. + +## Implementation notes + +This recipe builds on the pattern for [Using Caption and Subtitle Files with Video Content][0219], extending it to represent the availability of captions and subtitles in multiple languages. + +Similarly to offering a single caption/subtitle file, the multiple subtitle/caption files are provided as a `supplementing` Annotation on the Canvas that contains the video file. In the case of multiple captions/subtitles, however, the Annotation provides all the available languages as choices. IIIF viewers are then able to offer to end-users the choice for displaying subtitles/captions in one of the available languages during the video playback. + +In addition to this implementation, one might consider to provide the captions/subtitles also as multiple timed annotations. Although redundant, providing both implementations will enable more IIIF viewers to display the captions/subtitles, since they may use whichever implementation they support. See [Using Annotations for Timed Text][0079]. + +## Restrictions + +Formats other than WebVTT (Web Video Text Tracks) are supported by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/), but current IIIF viewers do not support the display of captions/subtitles. Nevertheless, WebVTT is the format most likely to be implemented. + +When using segmented WebVTT with HLS (HTTP Live Streaming), see [Serving HLS Files][0257]. + +## Example + +In this example we represent a video with subtitles in two languages: English and Italian. +For expressing the availability of the subtitles in the two languages, we use an Annotation with a Choice body that contains two items, one for each language. The language of each subtitle file is expressed with a `language` property containing a [BCP 47](https://tools.ietf.org/html/bcp47) language code as specified by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/#language-of-property-values). + +In this example we use subtitle files in the WebVTT format. Other format options include SRT (SubRip Text) or TTML (Timed Text Markup Language), but these are less likely to be supported in IIIF viewers. + +{% include manifest_links.html viewers="Ramp, Theseus" manifest="manifest.json" %} + +{% include jsonviewer.html src="manifest.json" config='data-line="60-92"'%} + +# Related recipes + +- [Simplest Manifest - Video][0003] +- [Using Caption and Subtitle Files with Video Content][0219] +- [Transcripts, Captions, and Subtitles - General Considerations][0231] +- [Using Annotations for Timed Text][0079] +- [Providing Access to Transcript Files of A/V Content][0017] + + +{% include acronyms.md %} +{% include links.md %} diff --git a/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_en.vtt b/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_en.vtt new file mode 100644 index 000000000..8576f1347 --- /dev/null +++ b/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_en.vtt @@ -0,0 +1,73 @@ +WEBVTT + +00:00:08.987 --> 00:00:10.749 +At the fashionable game Canasta. + +00:00:10.793 --> 00:00:14.172 +Jacques Fath names this model in blue +velvet "flight of a dove" + +00:00:14.207 --> 00:00:15.363 +with green reflections. + +00:00:15.396 --> 00:00:17.792 +A braid of the same fabric holds the robe. + +00:00:18.309 --> 00:00:20.091 +Necklace under the diamond collar. + +00:00:22.408 --> 00:00:24.815 +Light shades scale in this autumn collection. + +00:00:24.847 --> 00:00:26.219 +White sequence. + +00:00:26.389 --> 00:00:27.662 +Satin dress and cloak. + +00:00:28.271 --> 00:00:30.470 +At the ball, it is the most imaginative as a line + +00:00:30.491 --> 00:00:33.069 +as it narrows to an hourglass on the knee. + +00:00:33.619 --> 00:00:34.536 +After the ball. + +00:00:34.566 --> 00:00:38.052 +Satin of a tender light blue, +Burgundy red velvet cloak. + +00:00:40.029 --> 00:00:42.418 +Salome, again satin and again white + +00:00:42.444 --> 00:00:46.039 +the fabric and the colour inspire the +Parisian tailor's imagination this time. + +00:00:46.248 --> 00:00:47.360 +Giselle, + +00:00:47.467 --> 00:00:49.978 +novel heroine for young girls, +white tulle. + +00:00:50.172 --> 00:00:53.136 +The torso and the head emerge +as from a rippled cloud. + +00:00:54.620 --> 00:00:57.146 +The 7/8 cloak insists on these models. + +00:00:57.183 --> 00:00:59.353 +Evening dresses stretched to the ground. + +00:00:59.591 --> 00:01:02.668 +But the newer line is what Fath calls "column." + +00:01:02.853 --> 00:01:04.858 +We see it in tight-fitting clothes + +00:01:04.892 --> 00:01:08.058 +with at the end a brief +commemoration of the trail. diff --git a/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_it.vtt b/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_it.vtt new file mode 100644 index 000000000..234aeb8ec --- /dev/null +++ b/recipe/0074-multiple-language-captions/v4/Per_voi_signore_Modelli_francesi_it.vtt @@ -0,0 +1,67 @@ +WEBVTT + +00:00:08.987 --> 00:00:10.749 +Al gioco di moda la canasta. + +00:00:10.793 --> 00:00:14.172 +Jacques Fath intitola questo modello in velluto blu volo di colomba + +00:00:14.207 --> 00:00:15.363 +con riflessi verdi. + +00:00:15.396 --> 00:00:17.792 +Una treccia dello stesso tessuto regge la veste. + +00:00:18.309 --> 00:00:20.091 +Collana sotto il collare di diamanti. + +00:00:22.408 --> 00:00:24.815 +Scala di toni chiari in questa collezione d'autunno. + +00:00:24.847 --> 00:00:26.219 +Sequenza in bianco. + +00:00:26.389 --> 00:00:27.662 +Veste e mantello di satin. + +00:00:28.271 --> 00:00:30.470 +Al ballo è il più fantasioso come linea + +00:00:30.491 --> 00:00:33.069 +col suo restringersi a clessidra sul ginocchio. + +00:00:33.619 --> 00:00:34.536 +Dopo il ballo. + +00:00:34.566 --> 00:00:38.052 +Satin di un tenero celeste, mantello di velluto rosso Borgogna. + +00:00:40.029 --> 00:00:42.418 +Salomè, ancora satin e ancora bianco + +00:00:42.444 --> 00:00:46.039 +sono il tessuto e il colore che ispirano stavolta la fantasia del sarto parigino. + +00:00:46.248 --> 00:00:47.360 +Giselle, + +00:00:47.467 --> 00:00:49.978 +eroina di romanzi per giovanette, tulle bianco. + +00:00:50.172 --> 00:00:53.136 +Il busto e la testa emergono come da una nuvola increspata. + +00:00:54.620 --> 00:00:57.146 +Insiste in questi modelli il mantello 7/8. + +00:00:57.183 --> 00:00:59.353 +Gli abiti da sera si sono allungati fino a terra. + +00:00:59.591 --> 00:01:02.668 +Ma linea più nuova è quella che Fath chiama "a colonna". + +00:01:02.853 --> 00:01:04.858 +La vediamo nei vestiti fascianti + +00:01:04.892 --> 00:01:08.058 +con in fondo una breve commemorazione dello strascico. diff --git a/recipe/0074-multiple-language-captions/v4/manifest.json b/recipe/0074-multiple-language-captions/v4/manifest.json new file mode 100644 index 000000000..04be849a7 --- /dev/null +++ b/recipe/0074-multiple-language-captions/v4/manifest.json @@ -0,0 +1,84 @@ +{ + "@context": "http://iiif.io/api/presentation/4/context.json", + "id": "{{ id.url }}", + "type": "Manifest", + "label": { + "it": ["Per voi signore. Modelli francesi"], + "en": ["For ladies. French models"] + }, + "rights": "http://rightsstatements.org/vocab/InC/1.0/", + "requiredStatement": { + "label": { + "en": ["Rights"] + }, + "value": { + "en": ["All rights reserved Cinecittà Luce spa"] + } + }, + "items": [{ + "id": "{{ id.path }}/canvas", + "type": "Canvas", + "height": 384, + "width": 288, + "duration": 65.0, + "items": [{ + "id": "{{ id.path }}/canvas/page", + "type": "AnnotationPage", + "items": [{ + "id": "{{ id.path }}/canvas/page/annotation", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "type": "Video", + "height": 384, + "width": 288, + "duration": 65.0, + "format": "video/mp4" + }, + "target": "{{ id.path }}/canvas" + } + ] + } + ], + "annotations": [{ + "id": "{{ id.url }}/anno/page/1", + "type": "AnnotationPage", + "items": [{ + "id": "{{ id.url }}/subtitles_captions-files-vtt-en", + "type": "Annotation", + "motivation": "supplementing", + "provides": [ "subtitles" ], + "body": { + "id": "{{ id.path }}/Per_voi_signore_Modelli_francesi_en.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "en": ["English subtitles in WebVTT format"] + }, + "language": "en" + }, + "target": "{{ id.path }}/canvas" + }, + { + "id": "{{ id.url }}/subtitles_captions-files-vtt-it", + "type": "Annotation", + "motivation": "supplementing", + "provides": [ "closedCaptions" ], + "body": { + "id": "{{ id.path }}/Per_voi_signore_Modelli_francesi_it.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "en": ["Italian captions in WebVTT format"] + }, + "language": "it" + }, + "target": "{{ id.path }}/canvas" + } + ] + } + ] + } + ] +} diff --git a/recipe/0074-multiple-language-captions/v4/recipe.md b/recipe/0074-multiple-language-captions/v4/recipe.md new file mode 100644 index 000000000..114e28827 --- /dev/null +++ b/recipe/0074-multiple-language-captions/v4/recipe.md @@ -0,0 +1,49 @@ +--- +title: Using Caption and Subtitle Files in Multiple Languages with Video Content +id: 74 +layout: recipe +tags: [video, caption, subtitle, presentation] +summary: "Representing the relationship between a video file and its caption or subtitle files for multiple languages." +topic: AV +viewers: +- Ramp +- Theseus +--- + + +## Use Case + +Captions and subtitles may be available in multiple languages for video content and the IIIF Manifest representing the video can give access to representations of all the available languages. Because users will likely want to see captions/subtitles in their preferred language, the available languages should be presented as options from which one should be chosen. + +## Implementation notes + +This recipe builds on the pattern for [Using Caption Files with Video Content][0219], extending it to represent the availability of captions and subtitles in multiple languages. + +Similarly to offering a single caption file, the multiple subtitle/caption files are provided as `supplementing` Annotations on the Canvas that contains the video file, which also contain the `provides` property with the value `subtitles` or `closedCaptions`. One Annotation is used for each of the available captions/subtitles and languages. IIIF viewers are then able to identify which annotations contain captions/subtitles by checking the value of the `provides` property, and offer to end-users the choice for displaying subtitles/captions in one of the available languages during the video playback. + +## Restrictions + +Formats other than WebVTT (Web Video Text Tracks) are supported by the Presentation API 4.0, but WebVTT is the format most likely to be implemented in current IIIF viewers. + +## Example + +In this example we represent a video with captions in Italian and subtitles in English. +For expressing the availability of captions and subtitles in the two languages, we use two Annotations, one for each language. The language of each caption/subtitle file is expressed with a `language` property containing a [BCP 47](https://tools.ietf.org/html/bcp47) language code as specified by the Presentation API 4.0. + +In this example we use files in the WebVTT format. Other format options include SRT (SubRip Text) or TTML (Timed Text Markup Language), but these are less likely to be supported in IIIF viewers. + +{% include manifest_links.html viewers="Ramp, Theseus" manifest="v4/manifest.json" %} + +{% include jsonviewer.html src="manifest.json" config='data-line="60-95"'%} + +# Related recipes + +- [Simplest Manifest - Video][0003] +- [Using Caption Files with Video Content][0219] +- [Transcripts, Captions, and Subtitles - General Considerations][0231] +- [Using Annotations for Timed Text][0079] +- [Providing Access to Transcript Files of A/V Content][0017] + + +{% include acronyms.md %} +{% include links.md %}