From 76afbfd7327f89fa5d6bf9a3a1d452a8f736b3a5 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Thu, 10 Dec 2020 21:37:55 +1100 Subject: [PATCH 001/101] Propagate FFmpegError through FFmpegException on FFprobe failures --- src/main/java/net/bramp/ffmpeg/FFcommon.java | 16 +++++++++++++++ .../net/bramp/ffmpeg/FFmpegException.java | 20 +++++++++++++++++++ src/main/java/net/bramp/ffmpeg/FFprobe.java | 2 +- .../java/net/bramp/ffmpeg/FFprobeTest.java | 16 +++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/bramp/ffmpeg/FFmpegException.java diff --git a/src/main/java/net/bramp/ffmpeg/FFcommon.java b/src/main/java/net/bramp/ffmpeg/FFcommon.java index 9f8abcc2..dd17e81e 100644 --- a/src/main/java/net/bramp/ffmpeg/FFcommon.java +++ b/src/main/java/net/bramp/ffmpeg/FFcommon.java @@ -5,6 +5,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.io.CharStreams; import net.bramp.ffmpeg.io.ProcessUtils; +import net.bramp.ffmpeg.probe.FFmpegError; +import net.bramp.ffmpeg.probe.FFmpegProbeResult; import javax.annotation.Nonnull; import java.io.BufferedReader; @@ -55,6 +57,20 @@ protected void throwOnError(Process p) throws IOException { } } + protected void throwOnError(Process p, FFmpegProbeResult result) throws IOException { + try { + // TODO In java 8 use waitFor(long timeout, TimeUnit unit) + if (ProcessUtils.waitForWithTimeout(p, 1, TimeUnit.SECONDS) != 0) { + // TODO Parse the error + final FFmpegError ffmpegError = null == result ? null : result.getError(); + throw new FFmpegException( + path + " returned non-zero exit status. Check stdout.", ffmpegError); + } + } catch (TimeoutException e) { + throw new IOException("Timed out waiting for " + path + " to finish."); + } + } + /** * Returns the version string for this binary. * diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegException.java b/src/main/java/net/bramp/ffmpeg/FFmpegException.java new file mode 100644 index 00000000..a6b5cb36 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/FFmpegException.java @@ -0,0 +1,20 @@ +package net.bramp.ffmpeg; + +import net.bramp.ffmpeg.probe.FFmpegError; + +import java.io.IOException; + +public class FFmpegException extends IOException { + + private static final long serialVersionUID = 3048288225568984942L; + private FFmpegError error; + + public FFmpegException(String message, FFmpegError error) { + super(message); + this.error = error; + } + + public FFmpegError getError() { + return error; + } +} diff --git a/src/main/java/net/bramp/ffmpeg/FFprobe.java b/src/main/java/net/bramp/ffmpeg/FFprobe.java index 4bc7a2cc..c3a8edce 100644 --- a/src/main/java/net/bramp/ffmpeg/FFprobe.java +++ b/src/main/java/net/bramp/ffmpeg/FFprobe.java @@ -110,7 +110,7 @@ public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent) thr FFmpegProbeResult result = gson.fromJson(reader, FFmpegProbeResult.class); - throwOnError(p); + throwOnError(p, result); if (result == null) { throw new IllegalStateException("Gson returned null, which shouldn't happen :("); diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 1f8a38ae..f9acbd02 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -4,6 +4,7 @@ import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.lang.NewProcessAnswer; import net.bramp.ffmpeg.probe.FFmpegChapter; +import net.bramp.ffmpeg.probe.FFmpegError; import net.bramp.ffmpeg.probe.FFmpegProbeResult; import net.bramp.ffmpeg.probe.FFmpegStream; import org.apache.commons.lang3.math.Fraction; @@ -11,6 +12,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; @@ -25,6 +27,7 @@ public class FFprobeTest { @Mock ProcessFunction runFunc; + @Mock Process mockProcess; FFprobe ffprobe; @@ -143,4 +146,17 @@ public void testProbeDivideByZero() throws IOException { // System.out.println(FFmpegUtils.getGson().toJson(info)); } + + @Test + public void shouldThrowOnErrorWithFFmpegProbeResult() throws IOException, InterruptedException { + Mockito.when(mockProcess.waitFor()).thenReturn(-1); + final FFmpegError error = new FFmpegError(); + final FFmpegProbeResult result = new FFmpegProbeResult(); + result.error = error; + try { + ffprobe.throwOnError(mockProcess, result); + } catch (FFmpegException e) { + assertEquals(error, e.getError()); + } + } } From 08f59b6feb311246276c7bf41b7ee9beb422d935 Mon Sep 17 00:00:00 2001 From: MadMark Date: Tue, 30 Mar 2021 16:39:13 +0200 Subject: [PATCH 002/101] Fix typo in Strict enum (#230) --- src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index faaeb193..8867a366 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -29,7 +29,7 @@ public enum Strict { VERY, // strictly conform to a older more strict version of the specifications or reference software STRICT, // strictly conform to all the things in the specificiations no matter what consequences NORMAL, // normal - UNOFFICAL, // allow unofficial extensions + UNOFFICIAL, // allow unofficial extensions EXPERIMENTAL; // ffmpeg command line requires these options in lower case From dc8c39c76b4efa30d801fece080ccae06b7ce8aa Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 13:33:42 -0700 Subject: [PATCH 003/101] Add an example test (that I added a really long time ago, and never committed). --- .../java/net/bramp/ffmpeg/ExamplesTest.java | 87 ++++++++++++++----- .../ffmpeg/builder/FFmpegBuilderTest.java | 27 +++--- 2 files changed, 79 insertions(+), 35 deletions(-) diff --git a/src/test/java/net/bramp/ffmpeg/ExamplesTest.java b/src/test/java/net/bramp/ffmpeg/ExamplesTest.java index 64ac4634..b8eadade 100644 --- a/src/test/java/net/bramp/ffmpeg/ExamplesTest.java +++ b/src/test/java/net/bramp/ffmpeg/ExamplesTest.java @@ -1,6 +1,14 @@ package net.bramp.ffmpeg; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + import com.google.common.base.Joiner; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.builder.FFmpegOutputBuilder; import net.bramp.ffmpeg.lang.NewProcessAnswer; @@ -11,13 +19,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; -import java.util.ArrayList; - -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - /** * Ensures the examples in the Examples on github continue to work. * https://github.com/bramp/ffmpeg-cli-wrapper/wiki/Random-Examples @@ -264,16 +265,17 @@ public void testExample9() throws IOException { // A test with videos added in a loop. @Test public void testExample10() throws IOException { - String expected = "ffmpeg -y -v error" - + " -f webm_dash_manifest" - + " -i audio.webm" - + " -i video_1.webm" - + " -i video_2.webm" - + " -i video_3.webm" - + " -vcodec copy -acodec copy" - + " -map 0 -map 1 -map 2 -map 3" - + " -adaptation_sets \"id=0,streams=0 id=1,streams=1,2,3\"" - + " output.mpd"; + String expected = + "ffmpeg -y -v error" + + " -f webm_dash_manifest" + + " -i audio.webm" + + " -i video_1.webm" + + " -i video_2.webm" + + " -i video_3.webm" + + " -vcodec copy -acodec copy" + + " -map 0 -map 1 -map 2 -map 3" + + " -adaptation_sets \"id=0,streams=0 id=1,streams=1,2,3\"" + + " output.mpd"; ArrayList streams = new ArrayList<>(); FFmpegBuilder builder = new FFmpegBuilder(); @@ -285,19 +287,60 @@ public void testExample10() throws IOException { streams.add(String.format("%d", i)); } - FFmpegOutputBuilder out = builder.addOutput("output.mpd") - .setVideoCodec("copy").setAudioCodec("copy") // TODO Add a new setCodec(..) method. - .addExtraArgs("-map", "0"); + FFmpegOutputBuilder out = + builder + .addOutput("output.mpd") + .setVideoCodec("copy") + .setAudioCodec("copy") // TODO Add a new setCodec(..) method. + .addExtraArgs("-map", "0"); for (String stream : streams) { out.addExtraArgs("-map", stream); } - out.addExtraArgs("-adaptation_sets", - String.format("\"id=0,streams=0 id=1,streams=%s\"", Joiner.on(",").join(streams))) + out.addExtraArgs( + "-adaptation_sets", + String.format("\"id=0,streams=0 id=1,streams=%s\"", Joiner.on(",").join(streams))) .done(); String actual = Joiner.on(" ").join(ffmpeg.path(builder.build())); assertEquals(expected, actual); } + + // Directly use a Process instead of a FFmpegJob + @Test + @Ignore("because this test will invoke /path/to/ffmpeg.") + public void testExample11() throws IOException, InterruptedException { + FFmpegBuilder builder = new FFmpegBuilder().setInput("input").addOutput("output.mp4").done(); + + List args = new ArrayList<>(); + args.add("/path/to/ffmpeg"); + args.addAll(builder.build()); + + ProcessBuilder processBuilder = new ProcessBuilder(args); + processBuilder.redirectErrorStream(true); + + Process p = processBuilder.start(); + + Thread.sleep(1000); + + p.destroy(); + } + + @Test + public void testExampleExample() throws IOException { + FFmpegBuilder builder = + new FFmpegBuilder() + .setInput("input.mp4") + .setStartOffset(1, TimeUnit.MINUTES) + .addOutput("output.mp4") + .setDuration(1, TimeUnit.MINUTES) + .setVideoCodec("copy") + .setAudioCodec("copy") + .done(); + + String expected = "ffmpeg -y -v error -ss 00:01:00 -i input.mp4 -t 00:01:00 -c copy output.mp4"; + String actual = Joiner.on(" ").join(ffmpeg.path(builder.build())); + assertEquals(expected, actual); + } } diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index 51b115db..fffba0c2 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -1,17 +1,5 @@ package net.bramp.ffmpeg.builder; -import com.google.common.collect.ImmutableList; -import net.bramp.ffmpeg.options.AudioEncodingOptions; -import net.bramp.ffmpeg.options.EncodingOptions; -import net.bramp.ffmpeg.options.MainEncodingOptions; -import net.bramp.ffmpeg.options.VideoEncodingOptions; -import org.junit.Test; - -import java.io.IOException; -import java.net.URI; -import java.util.List; -import java.util.concurrent.TimeUnit; - import static com.nitorcreations.Matchers.reflectEquals; import static net.bramp.ffmpeg.FFmpeg.AUDIO_FORMAT_S16; import static net.bramp.ffmpeg.FFmpeg.AUDIO_SAMPLE_48000; @@ -24,7 +12,20 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -/** @author bramp */ +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import java.net.URI; +import java.util.List; +import java.util.concurrent.TimeUnit; +import net.bramp.ffmpeg.options.AudioEncodingOptions; +import net.bramp.ffmpeg.options.EncodingOptions; +import net.bramp.ffmpeg.options.MainEncodingOptions; +import net.bramp.ffmpeg.options.VideoEncodingOptions; +import org.junit.Test; + +/** + * @author bramp + */ public class FFmpegBuilderTest { public FFmpegBuilderTest() throws IOException {} From c13c4906ea392e2ffbf1aea5238baf524156aed2 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 14:31:05 -0700 Subject: [PATCH 004/101] Bump min java version to 1.8 and updated all the maven plugins. --- README.md | 18 +++++-- pom.xml | 152 ++++++++++++++++++++++-------------------------------- 2 files changed, 77 insertions(+), 93 deletions(-) diff --git a/README.md b/README.md index 48f4ffc5..7f31e327 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2014,2016 A fluent interface to running FFmpeg from Java. -![Java](https://img.shields.io/badge/Java-7+-brightgreen.svg) +![Java](https://img.shields.io/badge/Java-8+-brightgreen.svg) [![Build Status](https://img.shields.io/travis/bramp/ffmpeg-cli-wrapper/master.svg)](https://travis-ci.org/bramp/ffmpeg-cli-wrapper) [![Coverage Status](https://img.shields.io/coveralls/bramp/ffmpeg-cli-wrapper.svg)](https://coveralls.io/github/bramp/ffmpeg-cli-wrapper) [![Maven](https://img.shields.io/maven-central/v/net.bramp.ffmpeg/ffmpeg.svg)](http://mvnrepository.com/artifact/net.bramp.ffmpeg/ffmpeg) @@ -143,6 +143,18 @@ git checkout ffmpeg-0.x mvn clean javadoc:aggregate scm-publish:publish-scm ``` +Bumpings Deps +----- + +```bash +# Update Maven Plugins +mvn versions:display-plugin-updates + +# Library Dependencies +mvn versions:display-dependency-updates + +``` + Install FFmpeg on Ubuntu ----------------- @@ -150,7 +162,7 @@ We only the support the original FFmpeg, not the libav version. Before Ubuntu 12 and later the original FFmpeg is shipped. If you have to run on a version with libav, you can install FFmpeg from a PPA, or using the static build. More information [here](http://askubuntu.com/q/373322/34845) -Get invovled! +Get involved! ------------- We welcome contributions. Please check the [issue tracker](https://github.com/bramp/ffmpeg-cli-wrapper/issues). @@ -162,7 +174,7 @@ on a volunteer basis, thus we can be slow to reply. Licence (Simplified BSD License) -------------------------------- ``` -Copyright (c) 2016, Andrew Brampton +Copyright (c) 2016-2022, Andrew Brampton All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/pom.xml b/pom.xml index cc288961..d114b3e5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,10 +4,6 @@ ffmpeg 0.6.3-SNAPSHOT - - 3.0.5 - - FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface https://github.com/bramp/ffmpeg-cli-wrapper @@ -43,14 +39,12 @@ + 1.8 + 1.5.2 UTF-8 UTF-8 - - 1.7 - ${java.version} - ${java.version} @@ -217,32 +211,32 @@ org.apache.maven.plugins maven-clean-plugin - 3.0.0 + 3.2.0 org.apache.maven.plugins maven-install-plugin - 2.5.2 + 3.0.0-M1 org.apache.maven.plugins maven-resources-plugin - 3.0.1 + 3.2.0 org.apache.maven.plugins maven-site-plugin - 3.5.1 + 3.11.0 org.apache.maven.plugins maven-surefire-plugin - 2.19.1 + 3.0.0-M6 org.codehaus.mojo animal-sniffer-maven-plugin - 1.15 + 1.21 org.codehaus.mojo @@ -252,12 +246,12 @@ org.eluder.coveralls coveralls-maven-plugin - 4.2.0 + 4.3.0 org.apache.maven.plugins maven-compiler-plugin - 3.5.1 + 3.10.1 net.revelc.code @@ -267,52 +261,52 @@ org.apache.maven.plugins maven-source-plugin - 3.0.1 + 3.2.1 org.apache.maven.plugins maven-jar-plugin - 3.0.2 + 3.2.2 org.apache.maven.plugins maven-javadoc-plugin - 3.0.0-M1 + 3.3.2 org.apache.maven.plugins maven-scm-publish-plugin - 1.1 + 3.1.0 org.apache.maven.plugins maven-deploy-plugin - 2.8.2 + 3.0.0-M2 org.apache.maven.plugins maven-gpg-plugin - 1.6 + 3.0.1 org.apache.maven.plugins maven-release-plugin - 2.5.3 + 3.0.0-M5 org.sonatype.plugins nexus-staging-maven-plugin - 1.6.7 + 1.6.12 com.coveo fmt-maven-plugin - 1.5.0 + 2.13 org.apache.maven.plugins maven-enforcer-plugin - 1.4.1 + 3.0.0 @@ -321,14 +315,30 @@ org.apache.maven.plugins maven-compiler-plugin + ${base.java.version} + ${base.java.version} + javac-with-errorprone + true true -Xlint:all - + + + org.codehaus.plexus + plexus-compiler-javac-errorprone + 2.11.1 + + + + com.google.errorprone + error_prone_core + 2.12.1 + + - org.apache.maven.plugins maven-source-plugin @@ -470,6 +480,9 @@ enforce + + 3.2.5 + - java18 - - 1.8 - - - - - - com.coveo - fmt-maven-plugin - - - - format - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - javac-with-errorprone - true - true - - -Xlint:all - - - - - org.codehaus.plexus - plexus-compiler-javac-errorprone - 2.8.1 - - - - com.google.errorprone - error_prone_core - 2.0.19 - - - - - - - - org.apache.maven.plugins maven-project-info-reports-plugin - 2.9 + 3.2.2 org.codehaus.mojo versions-maven-plugin - 2.2 + 2.10.0 org.codehaus.mojo taglist-maven-plugin - 2.4 + 3.0.0 true @@ -645,7 +617,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.6 + 3.16.0 true @@ -686,13 +658,13 @@ org.codehaus.mojo findbugs-maven-plugin - 3.0.3 + 3.0.5 org.apache.maven.plugins maven-changes-plugin - 2.12 + 2.12.1 true @@ -718,7 +690,7 @@ org.apache.maven.plugins maven-jxr-plugin - 2.5 + 3.2.0 true @@ -727,7 +699,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 2.17 + 3.1.2 google_checks.xml @@ -736,7 +708,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 2.19.1 + 3.0.0-M6 ${project.reporting.outputDirectory}/testresults From fe13fdaa52f40bf745805bdfeec8f98ef49bd294 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 14:46:08 -0700 Subject: [PATCH 005/101] Bumped the version of the all the dependencies. --- pom.xml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index d114b3e5..a43f53dd 100644 --- a/pom.xml +++ b/pom.xml @@ -52,60 +52,60 @@ org.slf4j slf4j-api - 1.7.25 + 2.0.0-alpha7 - com.google.code.findbugs - annotations - 3.0.1u2 + com.github.spotbugs + spotbugs-annotations + 4.6.0 com.google.errorprone error_prone_annotations - 2.0.19 + 2.12.1 com.google.guava guava - 20.0 + 31.1-jre commons-io commons-io - 2.5 + 2.11.0 org.apache.commons commons-lang3 - 3.5 + 3.12.0 com.google.code.gson gson - 2.8.0 + 2.9.0 org.modelmapper modelmapper - 0.7.7 + 3.1.0 ch.qos.logback logback-classic - 1.2.2 + 1.3.0-alpha14 junit junit - 4.12 + 4.13.2 org.mockito mockito-core - 2.7.19 + 4.4.0 org.hamcrest @@ -120,7 +120,7 @@ org.glassfish.grizzly grizzly-http-server - 2.3.30 + 3.0.1 @@ -131,8 +131,8 @@ slf4j-api - com.google.code.findbugs - annotations + com.github.spotbugs + spotbugs-annotations provided @@ -467,12 +467,12 @@ org.codehaus.mojo extra-enforcer-rules - 1.0-beta-4 + 1.5.1 org.codehaus.mojo animal-sniffer-enforcer-rule - 1.15 + 1.21 From fa855f3f41bac260fd6289b41647e6e33c801563 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:02:19 -0700 Subject: [PATCH 006/101] Fixed a unit test (due to change in behaviour with ModelMapper. --- src/test/java/net/bramp/ffmpeg/modelmapper/MapperTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/net/bramp/ffmpeg/modelmapper/MapperTest.java b/src/test/java/net/bramp/ffmpeg/modelmapper/MapperTest.java index d55621df..f418b917 100644 --- a/src/test/java/net/bramp/ffmpeg/modelmapper/MapperTest.java +++ b/src/test/java/net/bramp/ffmpeg/modelmapper/MapperTest.java @@ -15,7 +15,7 @@ public void testMapping() { AudioEncodingOptions audio = new AudioEncodingOptions(false, null, 0, 0, null, 0, 0.0); VideoEncodingOptions video = new VideoEncodingOptions( - true, null, null, 320, 0, 0, null, "scale='320:trunc(ow/a/2)*2'", null); + true, null, null, 320, 240, 1000, null, "scale='320:trunc(ow/a/2)*2'", null); EncodingOptions options = new EncodingOptions(main, audio, video); From df4da9a49b291ee3540b0d68ce62aecbe6b97d97 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:16:33 -0700 Subject: [PATCH 007/101] Reformatted the code (per the latest standards) and fixed up a couple of deprecated method usages. --- pom.xml | 10 +++++ .../lang3/math/gson/FractionAdapter.java | 3 +- src/main/java/net/bramp/ffmpeg/FFcommon.java | 9 ++--- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 27 +++++++------ .../java/net/bramp/ffmpeg/FFmpegExecutor.java | 7 ++-- .../java/net/bramp/ffmpeg/FFmpegUtils.java | 15 ++++--- src/main/java/net/bramp/ffmpeg/FFprobe.java | 11 +++--- .../java/net/bramp/ffmpeg/Preconditions.java | 9 ++--- .../net/bramp/ffmpeg/RunProcessFunction.java | 6 +-- .../builder/AbstractFFmpegStreamBuilder.java | 16 +++----- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 18 ++++----- .../ffmpeg/builder/FFmpegOutputBuilder.java | 15 ++++--- .../ffmpeg/builder/MetadataSpecifier.java | 4 +- .../gson/LowercaseEnumTypeAdapterFactory.java | 9 ++--- .../bramp/ffmpeg/gson/NamedBitsetAdapter.java | 5 +-- .../bramp/ffmpeg/io/LoggingFilterReader.java | 3 +- .../net/bramp/ffmpeg/io/ProcessUtils.java | 4 +- .../java/net/bramp/ffmpeg/job/FFmpegJob.java | 11 +++--- .../bramp/ffmpeg/job/SinglePassFFmpegJob.java | 10 ++--- .../bramp/ffmpeg/job/TwoPassFFmpegJob.java | 13 +++---- .../net/bramp/ffmpeg/modelmapper/Mapper.java | 4 +- src/main/java/net/bramp/ffmpeg/nut/Frame.java | 3 +- .../bramp/ffmpeg/nut/MainHeaderPacket.java | 3 +- .../bramp/ffmpeg/nut/NutDataInputStream.java | 7 ++-- .../java/net/bramp/ffmpeg/nut/NutReader.java | 7 ++-- .../java/net/bramp/ffmpeg/nut/Packet.java | 3 +- .../net/bramp/ffmpeg/nut/PacketFooter.java | 1 - .../net/bramp/ffmpeg/nut/PacketHeader.java | 1 - .../java/net/bramp/ffmpeg/nut/RawHandler.java | 13 +++---- .../java/net/bramp/ffmpeg/nut/Stream.java | 3 +- .../bramp/ffmpeg/nut/StreamHeaderPacket.java | 3 +- .../bramp/ffmpeg/options/EncodingOptions.java | 4 +- .../ffmpeg/options/MainEncodingOptions.java | 4 +- .../ffmpeg/options/VideoEncodingOptions.java | 3 +- .../net/bramp/ffmpeg/probe/FFmpegChapter.java | 6 +-- .../bramp/ffmpeg/probe/FFmpegChapterTag.java | 6 +-- .../bramp/ffmpeg/probe/FFmpegDisposition.java | 5 +-- .../net/bramp/ffmpeg/probe/FFmpegError.java | 5 +-- .../net/bramp/ffmpeg/probe/FFmpegFormat.java | 6 +-- .../bramp/ffmpeg/probe/FFmpegProbeResult.java | 6 +-- .../net/bramp/ffmpeg/probe/FFmpegStream.java | 8 ++-- .../AbstractSocketProgressParser.java | 7 ++-- .../net/bramp/ffmpeg/progress/Progress.java | 11 +++--- .../ffmpeg/progress/StreamProgressParser.java | 5 +-- .../progress/TcpProgressParserRunnable.java | 4 +- .../ffmpeg/progress/UdpProgressParser.java | 4 +- .../progress/UdpProgressParserRunnable.java | 4 +- .../lang3/math/gson/FractionAdapterTest.java | 9 ++--- .../java/net/bramp/ffmpeg/ExamplesTest.java | 3 +- .../java/net/bramp/ffmpeg/FFmpegAvTest.java | 13 +++---- .../net/bramp/ffmpeg/FFmpegExecutorTest.java | 39 +++++++++---------- .../java/net/bramp/ffmpeg/FFmpegTest.java | 15 ++++--- .../net/bramp/ffmpeg/FFmpegUtilsTest.java | 7 ++-- .../java/net/bramp/ffmpeg/FFprobeAvTest.java | 11 +++--- .../java/net/bramp/ffmpeg/FFprobeTest.java | 16 ++++---- src/test/java/net/bramp/ffmpeg/Helper.java | 9 ++--- ...PreconditionsCheckInvalidNotEmptyTest.java | 5 +-- .../PreconditionsCheckInvalidStreamTest.java | 7 ++-- .../PreconditionsCheckValidNotEmptyTest.java | 5 +-- .../PreconditionsCheckValidStreamTest.java | 7 ++-- .../java/net/bramp/ffmpeg/ReadmeTest.java | 16 ++++---- .../ffmpeg/builder/FFmpegBuilderTest.java | 2 +- .../builder/FormatDecimalIntegerTest.java | 11 +++--- .../ffmpeg/builder/MetadataSpecTest.java | 6 +-- .../bramp/ffmpeg/builder/StreamSpecTest.java | 6 +-- .../net/bramp/ffmpeg/fixtures/Codecs.java | 2 - .../net/bramp/ffmpeg/fixtures/Formats.java | 3 -- .../net/bramp/ffmpeg/fixtures/Progresses.java | 2 - .../ffmpeg/gson/NamedBitsetAdapterTest.java | 8 ++-- .../net/bramp/ffmpeg/io/HexOutputStream.java | 1 - .../bramp/ffmpeg/io/LoggerOutputStream.java | 5 +-- .../net/bramp/ffmpeg/nut/NutReaderTest.java | 29 +++++++------- .../RawHandlerStreamToAudioFormatTest.java | 17 ++++---- .../progress/AbstractProgressParserTest.java | 11 +++--- .../progress/RecordingProgressListener.java | 1 - .../progress/StreamProgressParserTest.java | 11 +++--- .../progress/TcpProgressParserTest.java | 17 ++++---- .../progress/UdpProgressParserTest.java | 13 +++---- 78 files changed, 295 insertions(+), 353 deletions(-) diff --git a/pom.xml b/pom.xml index a43f53dd..2bf59254 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,11 @@ hamcrest-integration 1.3 + + org.hamcrest + hamcrest + 2.2 + com.nitorcreations matchers @@ -177,6 +182,11 @@ mockito-core test + + org.hamcrest + hamcrest + test + org.hamcrest hamcrest-integration diff --git a/src/main/java/net/bramp/commons/lang3/math/gson/FractionAdapter.java b/src/main/java/net/bramp/commons/lang3/math/gson/FractionAdapter.java index 4015668d..4eb9e734 100644 --- a/src/main/java/net/bramp/commons/lang3/math/gson/FractionAdapter.java +++ b/src/main/java/net/bramp/commons/lang3/math/gson/FractionAdapter.java @@ -5,9 +5,8 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; -import org.apache.commons.lang3.math.Fraction; - import java.io.IOException; +import org.apache.commons.lang3.math.Fraction; /** * GSON TypeAdapter for Apache Commons Math Fraction Object diff --git a/src/main/java/net/bramp/ffmpeg/FFcommon.java b/src/main/java/net/bramp/ffmpeg/FFcommon.java index 9f8abcc2..b5746102 100644 --- a/src/main/java/net/bramp/ffmpeg/FFcommon.java +++ b/src/main/java/net/bramp/ffmpeg/FFcommon.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.io.CharStreams; -import net.bramp.ffmpeg.io.ProcessUtils; - -import javax.annotation.Nonnull; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -14,8 +13,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; - -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nonnull; +import net.bramp.ffmpeg.io.ProcessUtils; /** Private class to contain common methods for both FFmpeg and FFprobe. */ abstract class FFcommon { diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index d6981843..65dcc246 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -1,17 +1,9 @@ package net.bramp.ffmpeg; -import com.google.common.collect.ImmutableList; -import net.bramp.ffmpeg.builder.FFmpegBuilder; -import net.bramp.ffmpeg.info.Codec; -import net.bramp.ffmpeg.info.Format; -import net.bramp.ffmpeg.progress.ProgressListener; -import net.bramp.ffmpeg.progress.ProgressParser; -import net.bramp.ffmpeg.progress.TcpProgressParser; -import org.apache.commons.lang3.math.Fraction; +import static com.google.common.base.MoreObjects.firstNonNull; +import static com.google.common.base.Preconditions.checkNotNull; -import javax.annotation.CheckReturnValue; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import com.google.common.collect.ImmutableList; import java.io.BufferedReader; import java.io.IOException; import java.net.URISyntaxException; @@ -19,9 +11,16 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; - -import static com.google.common.base.MoreObjects.firstNonNull; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import net.bramp.ffmpeg.builder.FFmpegBuilder; +import net.bramp.ffmpeg.info.Codec; +import net.bramp.ffmpeg.info.Format; +import net.bramp.ffmpeg.progress.ProgressListener; +import net.bramp.ffmpeg.progress.ProgressParser; +import net.bramp.ffmpeg.progress.TcpProgressParser; +import org.apache.commons.lang3.math.Fraction; /** * Wrapper around FFmpeg diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java b/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java index 3ea652a9..41de3f77 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.io.IOException; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.job.FFmpegJob; import net.bramp.ffmpeg.job.SinglePassFFmpegJob; import net.bramp.ffmpeg.job.TwoPassFFmpegJob; import net.bramp.ffmpeg.progress.ProgressListener; -import java.io.IOException; - -import static com.google.common.base.Preconditions.checkNotNull; - public class FFmpegExecutor { final FFmpeg ffmpeg; diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java index e7be1637..6c778313 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java @@ -1,22 +1,21 @@ package net.bramp.ffmpeg; +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.concurrent.TimeUnit.*; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; + import com.google.common.base.CharMatcher; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.bramp.commons.lang3.math.gson.FractionAdapter; import net.bramp.ffmpeg.gson.LowercaseEnumTypeAdapterFactory; import net.bramp.ffmpeg.gson.NamedBitsetAdapter; import net.bramp.ffmpeg.probe.FFmpegDisposition; import org.apache.commons.lang3.math.Fraction; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.google.common.base.Preconditions.checkArgument; -import static java.util.concurrent.TimeUnit.*; -import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; - /** Helper class with commonly used methods */ public final class FFmpegUtils { diff --git a/src/main/java/net/bramp/ffmpeg/FFprobe.java b/src/main/java/net/bramp/ffmpeg/FFprobe.java index 4bc7a2cc..a353bf07 100644 --- a/src/main/java/net/bramp/ffmpeg/FFprobe.java +++ b/src/main/java/net/bramp/ffmpeg/FFprobe.java @@ -3,17 +3,16 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; import com.google.gson.Gson; +import java.io.IOException; +import java.io.Reader; +import java.util.List; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import net.bramp.ffmpeg.io.LoggingFilterReader; import net.bramp.ffmpeg.probe.FFmpegProbeResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.io.IOException; -import java.io.Reader; -import java.util.List; - /** * Wrapper around FFprobe * diff --git a/src/main/java/net/bramp/ffmpeg/Preconditions.java b/src/main/java/net/bramp/ffmpeg/Preconditions.java index 6b46fe71..b7910f99 100644 --- a/src/main/java/net/bramp/ffmpeg/Preconditions.java +++ b/src/main/java/net/bramp/ffmpeg/Preconditions.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.base.CharMatcher; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; - -import javax.annotation.Nullable; import java.net.URI; import java.util.List; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; public final class Preconditions { diff --git a/src/main/java/net/bramp/ffmpeg/RunProcessFunction.java b/src/main/java/net/bramp/ffmpeg/RunProcessFunction.java index 622702d5..aaae5471 100644 --- a/src/main/java/net/bramp/ffmpeg/RunProcessFunction.java +++ b/src/main/java/net/bramp/ffmpeg/RunProcessFunction.java @@ -2,13 +2,11 @@ import com.google.common.base.Joiner; import com.google.common.base.Preconditions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.annotation.CheckReturnValue; import java.io.File; import java.io.IOException; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Simple function that creates a Process with the arguments, and returns a BufferedReader reading diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index a1eb0547..ba6ef462 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -3,13 +3,17 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static net.bramp.ffmpeg.FFmpegUtils.toTimecode; -import static net.bramp.ffmpeg.builder.MetadataSpecifier.checkValidKey; -import static net.bramp.ffmpeg.Preconditions.checkValidStream; import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; +import static net.bramp.ffmpeg.Preconditions.checkValidStream; +import static net.bramp.ffmpeg.builder.MetadataSpecifier.checkValidKey; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.modelmapper.Mapper; import net.bramp.ffmpeg.options.AudioEncodingOptions; import net.bramp.ffmpeg.options.EncodingOptions; @@ -18,11 +22,6 @@ import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.math.Fraction; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - /** * This abstract class holds flags that are both applicable to input and output streams in the * ffmpeg command, while flags that apply to a particular direction (input/output) are located in @@ -39,20 +38,17 @@ * -codec[:stream_specifier] codec (input/output,per-stream) *
  • (global): -filter_threads nb_threads (global) * - * *
  • FFmpegInputBuilder *
      *
    • (input): -muxdelay seconds (input) *
    • (input,per-stream): -guess_layout_max channels (input,per-stream) *
    - * *
  • FFmpegOutputBuilder *
      *
    • (output): -atag fourcc/tag (output) *
    • (output,per-stream): * -bsf[:stream_specifier] bitstream_filters (output,per-stream) *
    - * * * * @param A concrete class that extends from the AbstractFFmpegStreamBuilder diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index 8867a366..4ddf48d1 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -1,22 +1,21 @@ package net.bramp.ffmpeg.builder; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; + import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; -import net.bramp.ffmpeg.FFmpegUtils; -import net.bramp.ffmpeg.probe.FFmpegProbeResult; - -import javax.annotation.CheckReturnValue; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.TimeUnit; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; +import javax.annotation.CheckReturnValue; +import net.bramp.ffmpeg.FFmpegUtils; +import net.bramp.ffmpeg.probe.FFmpegProbeResult; /** * Builds a ffmpeg command line @@ -26,7 +25,8 @@ public class FFmpegBuilder { public enum Strict { - VERY, // strictly conform to a older more strict version of the specifications or reference software + VERY, // strictly conform to a older more strict version of the specifications or reference + // software STRICT, // strictly conform to all the things in the specificiations no matter what consequences NORMAL, // normal UNOFFICIAL, // allow unofficial extensions diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java index 406780da..2765f796 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java @@ -1,22 +1,21 @@ package net.bramp.ffmpeg.builder; +import static com.google.common.base.Preconditions.*; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; + import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; +import java.net.URI; +import java.util.List; +import java.util.regex.Pattern; +import javax.annotation.CheckReturnValue; import net.bramp.ffmpeg.options.AudioEncodingOptions; import net.bramp.ffmpeg.options.EncodingOptions; import net.bramp.ffmpeg.options.MainEncodingOptions; import net.bramp.ffmpeg.options.VideoEncodingOptions; import net.bramp.ffmpeg.probe.FFmpegProbeResult; -import javax.annotation.CheckReturnValue; -import java.net.URI; -import java.util.List; -import java.util.regex.Pattern; - -import static com.google.common.base.Preconditions.*; -import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; - /** Builds a representation of a single output/encoding setting */ public class FFmpegOutputBuilder extends AbstractFFmpegStreamBuilder { diff --git a/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java b/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java index 4e84220c..b9906f58 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java +++ b/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java @@ -7,11 +7,11 @@ // p:program_index // index is meant to be zero based, by negitive is allowed as dummy values -import com.google.errorprone.annotations.Immutable; - import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.errorprone.annotations.Immutable; + /** * Metadata spec, as described in the "map_metadata" section of * https://www.ffmpeg.org/ffmpeg-all.html#Main-options diff --git a/src/main/java/net/bramp/ffmpeg/gson/LowercaseEnumTypeAdapterFactory.java b/src/main/java/net/bramp/ffmpeg/gson/LowercaseEnumTypeAdapterFactory.java index 10d017f2..4bb71a80 100644 --- a/src/main/java/net/bramp/ffmpeg/gson/LowercaseEnumTypeAdapterFactory.java +++ b/src/main/java/net/bramp/ffmpeg/gson/LowercaseEnumTypeAdapterFactory.java @@ -1,5 +1,7 @@ package net.bramp.ffmpeg.gson; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.collect.ImmutableMap; import com.google.errorprone.annotations.Immutable; import com.google.gson.Gson; @@ -9,15 +11,12 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; - -import javax.annotation.CheckReturnValue; -import javax.annotation.Nonnull; import java.io.IOException; import java.util.HashMap; import java.util.Locale; import java.util.Map; - -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nonnull; /** * Maps Enums to lowercase strings. diff --git a/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java b/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java index 17542784..2435b225 100644 --- a/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java +++ b/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java @@ -1,17 +1,16 @@ package net.bramp.ffmpeg.gson; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.base.Optional; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; - import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Converts a json object which represents a set of booleans. For example: * diff --git a/src/main/java/net/bramp/ffmpeg/io/LoggingFilterReader.java b/src/main/java/net/bramp/ffmpeg/io/LoggingFilterReader.java index 9866aa7a..69262fdc 100644 --- a/src/main/java/net/bramp/ffmpeg/io/LoggingFilterReader.java +++ b/src/main/java/net/bramp/ffmpeg/io/LoggingFilterReader.java @@ -1,10 +1,9 @@ package net.bramp.ffmpeg.io; -import org.slf4j.Logger; - import java.io.FilterReader; import java.io.IOException; import java.io.Reader; +import org.slf4j.Logger; /** * Wraps a Reader, and logs full lines of input as it is read. diff --git a/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java b/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java index a13b56e1..2869cb57 100644 --- a/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java +++ b/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java @@ -3,7 +3,9 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -/** @author bramp */ +/** + * @author bramp + */ public final class ProcessUtils { private ProcessUtils() { diff --git a/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java index 3b453f6d..14404233 100644 --- a/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java @@ -1,13 +1,14 @@ package net.bramp.ffmpeg.job; -import net.bramp.ffmpeg.FFmpeg; -import net.bramp.ffmpeg.progress.ProgressListener; +import static com.google.common.base.Preconditions.checkNotNull; import javax.annotation.Nullable; +import net.bramp.ffmpeg.FFmpeg; +import net.bramp.ffmpeg.progress.ProgressListener; -import static com.google.common.base.Preconditions.checkNotNull; - -/** @author bramp */ +/** + * @author bramp + */ public abstract class FFmpegJob implements Runnable { public enum State { diff --git a/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java index 4daa6696..13662d2c 100644 --- a/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java @@ -1,16 +1,14 @@ package net.bramp.ffmpeg.job; +import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.base.Throwables; +import java.util.List; +import javax.annotation.Nullable; import net.bramp.ffmpeg.FFmpeg; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.progress.ProgressListener; -import javax.annotation.Nullable; - -import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; - public class SinglePassFFmpegJob extends FFmpegJob { public final FFmpegBuilder builder; diff --git a/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java index 0189c909..8a03ad54 100644 --- a/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java @@ -1,11 +1,8 @@ package net.bramp.ffmpeg.job; -import com.google.common.base.Throwables; -import net.bramp.ffmpeg.FFmpeg; -import net.bramp.ffmpeg.builder.FFmpegBuilder; -import net.bramp.ffmpeg.progress.ProgressListener; +import static com.google.common.base.Preconditions.checkNotNull; -import javax.annotation.Nullable; +import com.google.common.base.Throwables; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; @@ -13,8 +10,10 @@ import java.nio.file.Paths; import java.util.List; import java.util.UUID; - -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.Nullable; +import net.bramp.ffmpeg.FFmpeg; +import net.bramp.ffmpeg.builder.FFmpegBuilder; +import net.bramp.ffmpeg.progress.ProgressListener; public class TwoPassFFmpegJob extends FFmpegJob { diff --git a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java index 1c84184e..f9d77336 100644 --- a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java +++ b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java @@ -1,5 +1,7 @@ package net.bramp.ffmpeg.modelmapper; +import static net.bramp.ffmpeg.modelmapper.NotDefaultCondition.notDefault; + import net.bramp.ffmpeg.builder.AbstractFFmpegStreamBuilder; import net.bramp.ffmpeg.builder.FFmpegOutputBuilder; import net.bramp.ffmpeg.options.AudioEncodingOptions; @@ -11,8 +13,6 @@ import org.modelmapper.config.Configuration; import org.modelmapper.convention.NameTokenizers; -import static net.bramp.ffmpeg.modelmapper.NotDefaultCondition.notDefault; - /** * Copies values from one type of object to another * diff --git a/src/main/java/net/bramp/ffmpeg/nut/Frame.java b/src/main/java/net/bramp/ffmpeg/nut/Frame.java index b2db4ea7..b423f851 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/Frame.java +++ b/src/main/java/net/bramp/ffmpeg/nut/Frame.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; -import org.apache.commons.lang3.math.Fraction; - import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.TreeMap; +import org.apache.commons.lang3.math.Fraction; /** A video or audio frame */ public class Frame { diff --git a/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java b/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java index 2241626a..16c6c47a 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java +++ b/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java @@ -1,11 +1,10 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; -import org.apache.commons.lang3.math.Fraction; - import java.io.IOException; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.math.Fraction; public class MainHeaderPacket extends Packet { diff --git a/src/main/java/net/bramp/ffmpeg/nut/NutDataInputStream.java b/src/main/java/net/bramp/ffmpeg/nut/NutDataInputStream.java index d8a356dd..404adb9c 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/NutDataInputStream.java +++ b/src/main/java/net/bramp/ffmpeg/nut/NutDataInputStream.java @@ -1,14 +1,13 @@ package net.bramp.ffmpeg.nut; -import com.google.common.io.CountingInputStream; -import net.bramp.ffmpeg.io.CRC32InputStream; +import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.io.CountingInputStream; import java.io.DataInput; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; - -import static com.google.common.base.Preconditions.checkNotNull; +import net.bramp.ffmpeg.io.CRC32InputStream; /** A DataInputStream that implements a couple of custom FFmpeg Nut datatypes. */ public class NutDataInputStream implements DataInput { diff --git a/src/main/java/net/bramp/ffmpeg/nut/NutReader.java b/src/main/java/net/bramp/ffmpeg/nut/NutReader.java index 165c329b..a0108e99 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/NutReader.java +++ b/src/main/java/net/bramp/ffmpeg/nut/NutReader.java @@ -1,16 +1,15 @@ package net.bramp.ffmpeg.nut; -import com.google.common.base.Charsets; +import static com.google.common.base.Preconditions.checkNotNull; +import static net.bramp.ffmpeg.nut.Packet.Startcode; +import com.google.common.base.Charsets; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static com.google.common.base.Preconditions.checkNotNull; -import static net.bramp.ffmpeg.nut.Packet.Startcode; - /** * Demuxer for the FFmpeg Nut file format. * diff --git a/src/main/java/net/bramp/ffmpeg/nut/Packet.java b/src/main/java/net/bramp/ffmpeg/nut/Packet.java index c751d035..1fc05112 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/Packet.java +++ b/src/main/java/net/bramp/ffmpeg/nut/Packet.java @@ -1,11 +1,10 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; +import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - public class Packet { static final Logger LOG = LoggerFactory.getLogger(Packet.class); diff --git a/src/main/java/net/bramp/ffmpeg/nut/PacketFooter.java b/src/main/java/net/bramp/ffmpeg/nut/PacketFooter.java index d80cb243..d4b8fd28 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/PacketFooter.java +++ b/src/main/java/net/bramp/ffmpeg/nut/PacketFooter.java @@ -1,7 +1,6 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; - import java.io.IOException; public class PacketFooter { diff --git a/src/main/java/net/bramp/ffmpeg/nut/PacketHeader.java b/src/main/java/net/bramp/ffmpeg/nut/PacketHeader.java index c6109e32..10d72c0c 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/PacketHeader.java +++ b/src/main/java/net/bramp/ffmpeg/nut/PacketHeader.java @@ -1,7 +1,6 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; - import java.io.IOException; public class PacketHeader { diff --git a/src/main/java/net/bramp/ffmpeg/nut/RawHandler.java b/src/main/java/net/bramp/ffmpeg/nut/RawHandler.java index 85fb535e..8a0dccc0 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/RawHandler.java +++ b/src/main/java/net/bramp/ffmpeg/nut/RawHandler.java @@ -1,19 +1,18 @@ package net.bramp.ffmpeg.nut; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioInputStream; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static net.bramp.ffmpeg.nut.StreamHeaderPacket.fourccToString; + import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; -import java.nio.charset.StandardCharsets; import java.util.Arrays; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static net.bramp.ffmpeg.nut.StreamHeaderPacket.fourccToString; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; public class RawHandler { diff --git a/src/main/java/net/bramp/ffmpeg/nut/Stream.java b/src/main/java/net/bramp/ffmpeg/nut/Stream.java index 687ba970..1e88422d 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/Stream.java +++ b/src/main/java/net/bramp/ffmpeg/nut/Stream.java @@ -1,8 +1,7 @@ package net.bramp.ffmpeg.nut; -import org.apache.commons.lang3.math.Fraction; - import java.io.IOException; +import org.apache.commons.lang3.math.Fraction; public class Stream { final StreamHeaderPacket header; diff --git a/src/main/java/net/bramp/ffmpeg/nut/StreamHeaderPacket.java b/src/main/java/net/bramp/ffmpeg/nut/StreamHeaderPacket.java index e046b680..f61184dc 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/StreamHeaderPacket.java +++ b/src/main/java/net/bramp/ffmpeg/nut/StreamHeaderPacket.java @@ -1,10 +1,9 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; -import org.apache.commons.lang3.math.Fraction; - import java.io.IOException; import java.nio.charset.StandardCharsets; +import org.apache.commons.lang3.math.Fraction; public class StreamHeaderPacket extends Packet { diff --git a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java index 6eac5da0..bb2528ad 100644 --- a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java @@ -2,7 +2,9 @@ import java.beans.ConstructorProperties; -/** @author bramp */ +/** + * @author bramp + */ public class EncodingOptions { public final MainEncodingOptions main; diff --git a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java index e49d4bb4..8be785d6 100644 --- a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java @@ -2,7 +2,9 @@ import java.beans.ConstructorProperties; -/** @author bramp */ +/** + * @author bramp + */ public class MainEncodingOptions { public final String format; public final Long startOffset; diff --git a/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java index 156feca1..2176104e 100644 --- a/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java @@ -1,8 +1,7 @@ package net.bramp.ffmpeg.options; -import org.apache.commons.lang3.math.Fraction; - import java.beans.ConstructorProperties; +import org.apache.commons.lang3.math.Fraction; /** * Encoding options for video diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java index 79e9addf..f5d33e6e 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java @@ -1,12 +1,10 @@ - package net.bramp.ffmpeg.probe; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegChapter { public int id; diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java index 7acd7e48..3da69970 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java @@ -1,12 +1,10 @@ - package net.bramp.ffmpeg.probe; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegChapterTag { public String title; } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java index 307d1e4e..215668e4 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java @@ -4,9 +4,8 @@ /** Represents the AV_DISPOSITION_* fields */ @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegDisposition { public boolean _default; public boolean dub; diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java index 77ccd195..a20cce83 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java @@ -3,9 +3,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegError { public int code; public String string; diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java index 39cd6ae6..0cdc0bb3 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java @@ -1,13 +1,11 @@ package net.bramp.ffmpeg.probe; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; - import java.util.Map; @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD", "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD", "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegFormat { public String filename; public int nb_streams; diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java index 42409290..71ee3052 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java @@ -2,15 +2,13 @@ import com.google.common.collect.ImmutableList; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; - import java.util.Collections; import java.util.List; /** TODO Make this immutable */ @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegProbeResult { public FFmpegError error; public FFmpegFormat format; diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index c5a8a3ac..92a23639 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -1,14 +1,12 @@ package net.bramp.ffmpeg.probe; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.lang3.math.Fraction; - import java.util.Map; +import org.apache.commons.lang3.math.Fraction; @SuppressFBWarnings( - value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, - justification = "POJO objects where the fields are populated by gson" -) + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") public class FFmpegStream { // TODO Add more CodecTypes diff --git a/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java b/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java index 83654084..bf174416 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java +++ b/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg.progress; -import com.google.common.net.InetAddresses; +import static com.google.common.base.Preconditions.checkNotNull; -import javax.annotation.CheckReturnValue; +import com.google.common.net.InetAddresses; import java.io.IOException; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.util.concurrent.CountDownLatch; - -import static com.google.common.base.Preconditions.checkNotNull; +import javax.annotation.CheckReturnValue; public abstract class AbstractSocketProgressParser implements ProgressParser { diff --git a/src/main/java/net/bramp/ffmpeg/progress/Progress.java b/src/main/java/net/bramp/ffmpeg/progress/Progress.java index 82e92df5..e7f440b8 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/Progress.java +++ b/src/main/java/net/bramp/ffmpeg/progress/Progress.java @@ -1,17 +1,16 @@ package net.bramp.ffmpeg.progress; +import static com.google.common.base.Preconditions.checkNotNull; +import static net.bramp.ffmpeg.FFmpegUtils.fromTimecode; + import com.google.common.base.MoreObjects; +import java.util.Objects; +import javax.annotation.CheckReturnValue; import net.bramp.ffmpeg.FFmpegUtils; import org.apache.commons.lang3.math.Fraction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.CheckReturnValue; -import java.util.Objects; - -import static com.google.common.base.Preconditions.checkNotNull; -import static net.bramp.ffmpeg.FFmpegUtils.fromTimecode; - // TODO Change to be immutable public class Progress { diff --git a/src/main/java/net/bramp/ffmpeg/progress/StreamProgressParser.java b/src/main/java/net/bramp/ffmpeg/progress/StreamProgressParser.java index 18e691c9..d5e90043 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/StreamProgressParser.java +++ b/src/main/java/net/bramp/ffmpeg/progress/StreamProgressParser.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg.progress; -import com.google.common.base.Charsets; +import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.base.Charsets; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; -import static com.google.common.base.Preconditions.checkNotNull; - public class StreamProgressParser { final ProgressListener listener; diff --git a/src/main/java/net/bramp/ffmpeg/progress/TcpProgressParserRunnable.java b/src/main/java/net/bramp/ffmpeg/progress/TcpProgressParserRunnable.java index 33a34875..50a7feeb 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/TcpProgressParserRunnable.java +++ b/src/main/java/net/bramp/ffmpeg/progress/TcpProgressParserRunnable.java @@ -1,5 +1,7 @@ package net.bramp.ffmpeg.progress; +import static com.google.common.base.Preconditions.checkNotNull; + import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; @@ -7,8 +9,6 @@ import java.net.SocketException; import java.util.concurrent.CountDownLatch; -import static com.google.common.base.Preconditions.checkNotNull; - class TcpProgressParserRunnable implements Runnable { final StreamProgressParser parser; diff --git a/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParser.java b/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParser.java index 4c4014b6..70b01aed 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParser.java +++ b/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParser.java @@ -1,5 +1,7 @@ package net.bramp.ffmpeg.progress; +import static com.google.common.base.Preconditions.checkNotNull; + import java.io.IOException; import java.net.DatagramSocket; import java.net.InetAddress; @@ -8,8 +10,6 @@ import java.net.URISyntaxException; import java.util.concurrent.CountDownLatch; -import static com.google.common.base.Preconditions.checkNotNull; - public class UdpProgressParser extends AbstractSocketProgressParser { final DatagramSocket socket; diff --git a/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParserRunnable.java b/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParserRunnable.java index d2a5b3e2..002860fd 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParserRunnable.java +++ b/src/main/java/net/bramp/ffmpeg/progress/UdpProgressParserRunnable.java @@ -1,5 +1,7 @@ package net.bramp.ffmpeg.progress; +import static com.google.common.base.Preconditions.checkNotNull; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.DatagramPacket; @@ -7,8 +9,6 @@ import java.net.SocketException; import java.util.concurrent.CountDownLatch; -import static com.google.common.base.Preconditions.checkNotNull; - class UdpProgressParserRunnable implements Runnable { static final int MAX_PACKET_SIZE = 1500; diff --git a/src/test/java/net/bramp/commons/lang3/math/gson/FractionAdapterTest.java b/src/test/java/net/bramp/commons/lang3/math/gson/FractionAdapterTest.java index 39700d12..afe1aa3b 100644 --- a/src/test/java/net/bramp/commons/lang3/math/gson/FractionAdapterTest.java +++ b/src/test/java/net/bramp/commons/lang3/math/gson/FractionAdapterTest.java @@ -1,17 +1,16 @@ package net.bramp.commons.lang3.math.gson; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + import com.google.common.collect.ImmutableList; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.List; import org.apache.commons.lang3.math.Fraction; import org.junit.BeforeClass; import org.junit.Test; -import java.util.List; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.junit.Assert.assertThat; - public class FractionAdapterTest { static Gson gson; diff --git a/src/test/java/net/bramp/ffmpeg/ExamplesTest.java b/src/test/java/net/bramp/ffmpeg/ExamplesTest.java index b8eadade..c6fe44e1 100644 --- a/src/test/java/net/bramp/ffmpeg/ExamplesTest.java +++ b/src/test/java/net/bramp/ffmpeg/ExamplesTest.java @@ -339,7 +339,8 @@ public void testExampleExample() throws IOException { .setAudioCodec("copy") .done(); - String expected = "ffmpeg -y -v error -ss 00:01:00 -i input.mp4 -t 00:01:00 -c copy output.mp4"; + String expected = + "ffmpeg -y -v error -ss 00:01:00 -i input.mp4 -t 00:01:00 -vcodec copy -acodec copy output.mp4"; String actual = Joiner.on(" ").join(ffmpeg.path(builder.build())); assertEquals(expected, actual); } diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java index e617b1e9..b287ecf0 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java @@ -1,5 +1,11 @@ package net.bramp.ffmpeg; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.Collections; import net.bramp.ffmpeg.lang.NewProcessAnswer; import org.junit.Before; import org.junit.Test; @@ -7,13 +13,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; -import java.util.Collections; - -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - /** Tests what happens when using avconv */ @RunWith(MockitoJUnitRunner.class) public class FFmpegAvTest { diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java index 1a00c9b0..72519222 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java @@ -1,9 +1,23 @@ package net.bramp.ffmpeg; +import static net.bramp.ffmpeg.FFmpeg.FPS_30; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import com.google.common.collect.ImmutableList; import com.google.common.io.ByteStreams; import com.google.common.io.CountingOutputStream; import com.google.common.net.HostAndPort; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.job.FFmpegJob; @@ -22,21 +36,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -import static net.bramp.ffmpeg.FFmpeg.FPS_30; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - /** Tests actually shelling out ffmpeg and ffprobe. Could be flakey if ffmpeg or ffprobe change. */ public class FFmpegExecutorTest { @@ -86,7 +85,7 @@ public void testNormal() throws InterruptedException, ExecutionException, IOExce "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36") .setInput(getWebserverRoot() + Samples.base_big_buck_bunny_720p_1mb) .addExtraArgs("-probesize", "1000000") - //.setStartOffset(1500, TimeUnit.MILLISECONDS) + // .setStartOffset(1500, TimeUnit.MILLISECONDS) .overrideOutputFiles(true) .addOutput(Samples.output_mp4) .setFrames(100) @@ -101,9 +100,9 @@ public void testNormal() throws InterruptedException, ExecutionException, IOExce .setVideoCodec("libx264") .setVideoFrameRate(FPS_30) .setVideoResolution(320, 240) - //.setVideoFilter("scale=320:trunc(ow/a/2)*2") - //.setVideoPixelFormat("yuv420p") - //.setVideoBitStreamFilter("noise") + // .setVideoFilter("scale=320:trunc(ow/a/2)*2") + // .setVideoPixelFormat("yuv420p") + // .setVideoBitStreamFilter("noise") .setVideoQuality(2) .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) .done(); @@ -251,7 +250,7 @@ public void testIssue112() throws IOException { .overrideOutputFiles(true) .addOutput(Samples.output_mp4) .setFormat("mp4") - //.setDuration(30, TimeUnit.SECONDS) + // .setDuration(30, TimeUnit.SECONDS) .addExtraArgs("-shortest") .setAudioCodec("aac") .setAudioSampleRate(48_000) diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index e5f68936..eabceca0 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -1,5 +1,12 @@ package net.bramp.ffmpeg; +import static org.hamcrest.Matchers.hasItem; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.*; +import static org.mockito.hamcrest.MockitoHamcrest.argThat; + +import java.io.IOException; +import java.util.List; import net.bramp.ffmpeg.fixtures.Codecs; import net.bramp.ffmpeg.fixtures.Formats; import net.bramp.ffmpeg.lang.NewProcessAnswer; @@ -9,14 +16,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; -import java.util.List; - -import static org.hamcrest.Matchers.hasItem; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.*; -import static org.mockito.hamcrest.MockitoHamcrest.argThat; - @RunWith(MockitoJUnitRunner.class) public class FFmpegTest { diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java index c8e95a7a..b13a0474 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg; -import org.junit.Test; - -import java.util.concurrent.TimeUnit; - import static net.bramp.ffmpeg.FFmpegUtils.*; import static org.junit.Assert.assertEquals; +import java.util.concurrent.TimeUnit; +import org.junit.Test; + public class FFmpegUtilsTest { @Test(expected = AssertionError.class) diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeAvTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeAvTest.java index 640d7464..8a0f1328 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeAvTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeAvTest.java @@ -1,6 +1,11 @@ package net.bramp.ffmpeg; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + import com.google.gson.Gson; +import java.io.IOException; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.lang.NewProcessAnswer; import org.junit.Before; @@ -9,12 +14,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; - -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - /** Tests what happens when using avprobe */ @RunWith(MockitoJUnitRunner.class) public class FFprobeAvTest { diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 1f8a38ae..46ad8935 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -1,6 +1,14 @@ package net.bramp.ffmpeg; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + import com.google.gson.Gson; +import java.io.IOException; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.lang.NewProcessAnswer; import net.bramp.ffmpeg.probe.FFmpegChapter; @@ -13,14 +21,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; - -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - @RunWith(MockitoJUnitRunner.class) public class FFprobeTest { diff --git a/src/test/java/net/bramp/ffmpeg/Helper.java b/src/test/java/net/bramp/ffmpeg/Helper.java index 8b2fa691..a1ba24ba 100644 --- a/src/test/java/net/bramp/ffmpeg/Helper.java +++ b/src/test/java/net/bramp/ffmpeg/Helper.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.Iterators.asEnumeration; + import com.google.common.base.Function; import com.google.common.collect.Iterables; - -import javax.annotation.Nullable; import java.io.InputStream; import java.io.SequenceInputStream; import java.util.List; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterators.asEnumeration; +import javax.annotation.Nullable; /** Random test helper methods. */ public class Helper { diff --git a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidNotEmptyTest.java b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidNotEmptyTest.java index 12f481e7..29c74f12 100644 --- a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidNotEmptyTest.java +++ b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidNotEmptyTest.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg; +import java.util.Arrays; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import java.util.Arrays; -import java.util.List; - @RunWith(Parameterized.class) public class PreconditionsCheckInvalidNotEmptyTest { @Parameterized.Parameters(name = "{0}") diff --git a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidStreamTest.java b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidStreamTest.java index 39c17015..df6dafb2 100644 --- a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidStreamTest.java +++ b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckInvalidStreamTest.java @@ -1,14 +1,13 @@ package net.bramp.ffmpeg; +import java.net.URI; +import java.util.Arrays; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import java.net.URI; -import java.util.Arrays; -import java.util.List; - @RunWith(Parameterized.class) public class PreconditionsCheckInvalidStreamTest { diff --git a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidNotEmptyTest.java b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidNotEmptyTest.java index 1ea94f36..be03e05c 100644 --- a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidNotEmptyTest.java +++ b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidNotEmptyTest.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg; +import java.util.Arrays; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import java.util.Arrays; -import java.util.List; - @RunWith(Parameterized.class) public class PreconditionsCheckValidNotEmptyTest { @Parameterized.Parameters(name = "{0}") diff --git a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidStreamTest.java b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidStreamTest.java index 66886af5..85353f22 100644 --- a/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidStreamTest.java +++ b/src/test/java/net/bramp/ffmpeg/PreconditionsCheckValidStreamTest.java @@ -1,14 +1,13 @@ package net.bramp.ffmpeg; +import java.net.URI; +import java.util.Arrays; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import java.net.URI; -import java.util.Arrays; -import java.util.List; - @RunWith(Parameterized.class) public class PreconditionsCheckValidStreamTest { diff --git a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java index 0bf1c85c..53c81b4f 100644 --- a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java +++ b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java @@ -1,6 +1,12 @@ package net.bramp.ffmpeg; -import com.google.common.base.MoreObjects; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.Locale; +import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.job.FFmpegJob; @@ -11,14 +17,6 @@ import net.bramp.ffmpeg.progress.ProgressListener; import org.junit.Test; -import java.io.IOException; -import java.util.Locale; -import java.util.concurrent.TimeUnit; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - /** Ensures the examples in the README continue to work. */ public class ReadmeTest { diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index fffba0c2..55e468cf 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -9,8 +9,8 @@ import static net.bramp.ffmpeg.builder.StreamSpecifier.tag; import static net.bramp.ffmpeg.builder.StreamSpecifier.usable; import static net.bramp.ffmpeg.builder.StreamSpecifierType.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; import com.google.common.collect.ImmutableList; import java.io.IOException; diff --git a/src/test/java/net/bramp/ffmpeg/builder/FormatDecimalIntegerTest.java b/src/test/java/net/bramp/ffmpeg/builder/FormatDecimalIntegerTest.java index f2ba686c..46f97c3f 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FormatDecimalIntegerTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FormatDecimalIntegerTest.java @@ -1,14 +1,13 @@ package net.bramp.ffmpeg.builder; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; import java.util.Arrays; import java.util.List; - -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.*; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class FormatDecimalIntegerTest { diff --git a/src/test/java/net/bramp/ffmpeg/builder/MetadataSpecTest.java b/src/test/java/net/bramp/ffmpeg/builder/MetadataSpecTest.java index 61cd2a61..c83db451 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/MetadataSpecTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/MetadataSpecTest.java @@ -1,11 +1,11 @@ package net.bramp.ffmpeg.builder; -import org.junit.Test; - import static net.bramp.ffmpeg.builder.MetadataSpecifier.*; import static net.bramp.ffmpeg.builder.StreamSpecifier.id; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; + +import org.junit.Test; public class MetadataSpecTest { diff --git a/src/test/java/net/bramp/ffmpeg/builder/StreamSpecTest.java b/src/test/java/net/bramp/ffmpeg/builder/StreamSpecTest.java index babcd2c6..77340d7f 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/StreamSpecTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/StreamSpecTest.java @@ -1,11 +1,11 @@ package net.bramp.ffmpeg.builder; -import org.junit.Test; - import static net.bramp.ffmpeg.builder.StreamSpecifier.*; import static net.bramp.ffmpeg.builder.StreamSpecifierType.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; + +import org.junit.Test; public class StreamSpecTest { diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java index d663bf7b..5901c292 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java @@ -3,8 +3,6 @@ import com.google.common.collect.ImmutableList; import net.bramp.ffmpeg.info.Codec; -import java.util.List; - /** * Class that contains all codecs as defined in the unit tests This should not be used as a concise * list of available codecs, as every install of ffmpeg is different. Call ffmpeg.codec() to diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Formats.java b/src/test/java/net/bramp/ffmpeg/fixtures/Formats.java index 17168ab7..656bdd93 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Formats.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Formats.java @@ -1,11 +1,8 @@ package net.bramp.ffmpeg.fixtures; import com.google.common.collect.ImmutableList; -import com.google.errorprone.annotations.DoNotCall; import net.bramp.ffmpeg.info.Format; -import java.util.List; - /** * Class that contains all formats as defined in the unit tests This should not be used to test if a * format is available, because every install of ffmpeg is different. Call ffmpeg.formats() to diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java b/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java index 7beddf42..7aaf4866 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java @@ -3,8 +3,6 @@ import com.google.common.collect.ImmutableList; import net.bramp.ffmpeg.progress.Progress; -import java.util.List; - public final class Progresses { private Progresses() { diff --git a/src/test/java/net/bramp/ffmpeg/gson/NamedBitsetAdapterTest.java b/src/test/java/net/bramp/ffmpeg/gson/NamedBitsetAdapterTest.java index 0fb8e966..94e7ca9d 100644 --- a/src/test/java/net/bramp/ffmpeg/gson/NamedBitsetAdapterTest.java +++ b/src/test/java/net/bramp/ffmpeg/gson/NamedBitsetAdapterTest.java @@ -1,14 +1,14 @@ package net.bramp.ffmpeg.gson; +import static com.nitorcreations.Matchers.reflectEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.junit.BeforeClass; import org.junit.Test; -import static com.nitorcreations.Matchers.reflectEquals; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; - public class NamedBitsetAdapterTest { static class Set { diff --git a/src/test/java/net/bramp/ffmpeg/io/HexOutputStream.java b/src/test/java/net/bramp/ffmpeg/io/HexOutputStream.java index 7366d7dc..2d02daa2 100644 --- a/src/test/java/net/bramp/ffmpeg/io/HexOutputStream.java +++ b/src/test/java/net/bramp/ffmpeg/io/HexOutputStream.java @@ -1,7 +1,6 @@ package net.bramp.ffmpeg.io; import com.google.common.base.Charsets; - import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; diff --git a/src/test/java/net/bramp/ffmpeg/io/LoggerOutputStream.java b/src/test/java/net/bramp/ffmpeg/io/LoggerOutputStream.java index 20682eaf..91d76780 100644 --- a/src/test/java/net/bramp/ffmpeg/io/LoggerOutputStream.java +++ b/src/test/java/net/bramp/ffmpeg/io/LoggerOutputStream.java @@ -1,12 +1,11 @@ package net.bramp.ffmpeg.io; -import org.slf4j.Logger; -import org.slf4j.event.Level; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import org.slf4j.Logger; +import org.slf4j.event.Level; public class LoggerOutputStream extends OutputStream { diff --git a/src/test/java/net/bramp/ffmpeg/nut/NutReaderTest.java b/src/test/java/net/bramp/ffmpeg/nut/NutReaderTest.java index 160df043..8943067f 100644 --- a/src/test/java/net/bramp/ffmpeg/nut/NutReaderTest.java +++ b/src/test/java/net/bramp/ffmpeg/nut/NutReaderTest.java @@ -1,6 +1,19 @@ package net.bramp.ffmpeg.nut; +import static org.junit.Assert.assertEquals; + import com.google.common.collect.ImmutableList; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import javax.imageio.ImageIO; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.SourceDataLine; import net.bramp.ffmpeg.FFmpeg; import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.fixtures.Samples; @@ -10,20 +23,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.imageio.ImageIO; -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.SourceDataLine; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertEquals; - // TODO fix "invalid packet checksum" when running test public class NutReaderTest { @@ -44,7 +43,7 @@ public void testNutReader() .addStdoutOutput() .setFormat("nut") .setVideoCodec("rawvideo") - //.setVideoPixelFormat("rgb24") // TODO make 24bit / channel work + // .setVideoPixelFormat("rgb24") // TODO make 24bit / channel work .setVideoPixelFormat("argb") // 8 bits per channel .setAudioCodec("pcm_s32le") .done() diff --git a/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java b/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java index 3ee108c1..2975f02b 100644 --- a/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java +++ b/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java @@ -1,18 +1,17 @@ package net.bramp.ffmpeg.nut; -import org.apache.commons.lang3.math.Fraction; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import static javax.sound.sampled.AudioFormat.Encoding.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; -import javax.sound.sampled.AudioFormat; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; - -import static javax.sound.sampled.AudioFormat.Encoding.*; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; +import javax.sound.sampled.AudioFormat; +import org.apache.commons.lang3.math.Fraction; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class RawHandlerStreamToAudioFormatTest { diff --git a/src/test/java/net/bramp/ffmpeg/progress/AbstractProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/AbstractProgressParserTest.java index c8147c37..4e03c71d 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/AbstractProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/AbstractProgressParserTest.java @@ -1,9 +1,6 @@ package net.bramp.ffmpeg.progress; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.Timeout; +import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.URI; @@ -12,8 +9,10 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertTrue; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; public abstract class AbstractProgressParserTest { diff --git a/src/test/java/net/bramp/ffmpeg/progress/RecordingProgressListener.java b/src/test/java/net/bramp/ffmpeg/progress/RecordingProgressListener.java index f85be22f..05a3d918 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/RecordingProgressListener.java +++ b/src/test/java/net/bramp/ffmpeg/progress/RecordingProgressListener.java @@ -1,7 +1,6 @@ package net.bramp.ffmpeg.progress; import com.google.common.collect.Lists; - import java.util.List; /** Test class to keep a record of all progresses. */ diff --git a/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java index 59bac712..18f41993 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java @@ -1,15 +1,14 @@ package net.bramp.ffmpeg.progress; -import net.bramp.ffmpeg.fixtures.Progresses; -import org.junit.Test; +import static net.bramp.ffmpeg.Helper.combineResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; import java.io.IOException; import java.io.InputStream; import java.util.List; - -import static net.bramp.ffmpeg.Helper.combineResource; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; +import net.bramp.ffmpeg.fixtures.Progresses; +import org.junit.Test; public class StreamProgressParserTest { diff --git a/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java index 0ddd201e..4a7de8dc 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java @@ -1,21 +1,20 @@ package net.bramp.ffmpeg.progress; -import com.google.common.io.ByteStreams; -import net.bramp.ffmpeg.fixtures.Progresses; -import org.junit.Test; +import static net.bramp.ffmpeg.Helper.combineResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.assertTrue; +import com.google.common.io.ByteStreams; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.URISyntaxException; import java.util.List; - -import static net.bramp.ffmpeg.Helper.combineResource; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +import net.bramp.ffmpeg.fixtures.Progresses; +import org.junit.Test; public class TcpProgressParserTest extends AbstractProgressParserTest { diff --git a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java index 8e20ed0e..7f9ccf43 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java @@ -1,9 +1,10 @@ package net.bramp.ffmpeg.progress; -import com.google.common.io.ByteStreams; -import net.bramp.ffmpeg.fixtures.Progresses; -import org.junit.Test; +import static net.bramp.ffmpeg.Helper.loadResource; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; +import com.google.common.io.ByteStreams; import java.io.IOException; import java.io.InputStream; import java.net.DatagramPacket; @@ -11,10 +12,8 @@ import java.net.InetAddress; import java.net.URISyntaxException; import java.util.List; - -import static net.bramp.ffmpeg.Helper.loadResource; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.junit.Assert.assertThat; +import net.bramp.ffmpeg.fixtures.Progresses; +import org.junit.Test; public class UdpProgressParserTest extends AbstractProgressParserTest { From 9853c1a606b24bcbc9f9c26baa05447ac0775335 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:24:48 -0700 Subject: [PATCH 008/101] Reverted two logging deps to stable versions (I accidently bumped them to alphas). --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2bf59254..c3178891 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ org.slf4j slf4j-api - 2.0.0-alpha7 + 1.7.36 com.github.spotbugs @@ -94,7 +94,7 @@ ch.qos.logback logback-classic - 1.3.0-alpha14 + 1.2.11 From 577a8daa7d18735f7ada321d3f40bf984426332e Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:39:25 -0700 Subject: [PATCH 009/101] [maven-release-plugin] prepare release ffmpeg-0.7.0 --- pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index c3178891..f738608c 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.6.3-SNAPSHOT + 0.7.0 FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface @@ -11,7 +11,7 @@ https://github.com/bramp/ffmpeg-cli-wrapper scm:git:git@github.com:bramp/ffmpeg-cli-wrapper.git - HEAD + ffmpeg-0.7.0 @@ -384,8 +384,9 @@ apidocs true true + 8 - https://google.github.io/gson/apidocs/ + https://javadoc.io/doc/com.google.code.gson/gson/ https://commons.apache.org/proper/commons-lang/javadocs/api-release/ http://modelmapper.org/javadoc/ http://findbugs.sourceforge.net/api/ From 6af838db6015483cd46ac600692bc199e34a66e0 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:39:30 -0700 Subject: [PATCH 010/101] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f738608c..29c5d4cb 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.7.0 + 0.7.1-SNAPSHOT FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface From 2b5cb9da651904d5d0957b67b1fecf2b2e558eb3 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Apr 2022 15:57:22 -0700 Subject: [PATCH 011/101] Update README to use 0.7.0. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f31e327..d16fd1ac 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Maven: net.bramp.ffmpeg ffmpeg - 0.6.2 + 0.7.0 ``` From 9a5507cf39f52f8d2766d3e122caeab2ecfc043b Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Sun, 9 Oct 2022 14:15:24 +0200 Subject: [PATCH 012/101] Fix #260: FFmpeg.codecs() returns empty list --- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 3 +- .../java/net/bramp/ffmpeg/info/Codec.java | 14 +- .../net/bramp/ffmpeg/fixtures/Codecs.java | 788 ++++++++++-------- .../net/bramp/ffmpeg/fixtures/ffmpeg-codecs | 785 ++++++++++------- 4 files changed, 935 insertions(+), 655 deletions(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index 65dcc246..aabc2c46 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -62,8 +62,7 @@ public class FFmpeg extends FFcommon { public static final int AUDIO_SAMPLE_48000 = 48000; public static final int AUDIO_SAMPLE_96000 = 96000; - static final Pattern CODECS_REGEX = - Pattern.compile("^ ([ D][ E][VAS][ S][ D][ T]) (\\S+)\\s+(.*)$"); + static final Pattern CODECS_REGEX = Pattern.compile("^ ([.D][.E][VASD][.I][.L][.S]) (\\S{2,})\\s+(.*)$"); static final Pattern FORMATS_REGEX = Pattern.compile("^ ([ D][ E]) (\\S+)\\s+(.*)$"); /** Supported codecs */ diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index a58aaacf..d33aa5e2 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -16,7 +16,8 @@ public class Codec { enum Type { VIDEO, AUDIO, - SUBTITLE + SUBTITLE, + DATA } final String name; @@ -41,9 +42,9 @@ enum Type { * ..V... = Video codec * ..A... = Audio codec * ..S... = Subtitle codec - * ...S.. = Supports draw_horiz_band - * ....D. = Supports direct rendering method 1 - * .....T = Supports weird frame truncation + * ...I.. = Intra frame-only codec + * ....L. = Lossy compression + * .....S = Lossless compression * */ public Codec(String name, String longName, String flags) { @@ -65,8 +66,11 @@ public Codec(String name, String longName, String flags) { case 'S': this.type = Type.SUBTITLE; break; + case 'D': + this.type = Type.DATA; + break; default: - throw new IllegalArgumentException("Invalid codec type '" + flags.charAt(3) + "'"); + throw new IllegalArgumentException("Invalid codec type '" + flags.charAt(2) + "'"); } // TODO There are more flags to parse diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java index 5901c292..e8074d93 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java @@ -17,330 +17,466 @@ private Codecs() { } public static final ImmutableList CODECS = - new ImmutableList.Builder() - .add( - new Codec("4xm", "4X Movie", "D V D "), - new Codec("8bps", "QuickTime 8BPS video", "D V D "), - new Codec("8svx_exp", "8SVX exponential", "D A D "), - new Codec("8svx_fib", "8SVX fibonacci", "D A D "), - new Codec("a64multi", "Multicolor charset for Commodore 64", " EV "), - new Codec("aac", "Advanced Audio Coding", "DEA D "), - new Codec("aac_latm", "AAC LATM (Advanced Audio Codec LATM syntax)", "D A D "), - new Codec("aasc", "Autodesk RLE", "D V D "), - new Codec("ac3", "ATSC A/52A (AC-3)", "DEA D "), - new Codec("ac3_fixed", "ATSC A/52A (AC-3)", " EA "), - new Codec("adpcm_4xm", "ADPCM 4X Movie", "D A D "), - new Codec("adpcm_adx", "SEGA CRI ADX ADPCM", "DEA D "), - new Codec("adpcm_ct", "ADPCM Creative Technology", "D A D "), - new Codec("adpcm_ea", "ADPCM Electronic Arts", "D A D "), - new Codec("adpcm_ea_maxis_xa", "ADPCM Electronic Arts Maxis CDROM XA", "D A D "), - new Codec("adpcm_ea_r1", "ADPCM Electronic Arts R1", "D A D "), - new Codec("adpcm_ea_r2", "ADPCM Electronic Arts R2", "D A D "), - new Codec("adpcm_ea_r3", "ADPCM Electronic Arts R3", "D A D "), - new Codec("adpcm_ea_xas", "ADPCM Electronic Arts XAS", "D A D "), - new Codec("adpcm_ima_amv", "ADPCM IMA AMV", "D A D "), - new Codec("adpcm_ima_apc", "ADPCM IMA CRYO APC", "D A D "), - new Codec("adpcm_ima_dk3", "ADPCM IMA Duck DK3", "D A D "), - new Codec("adpcm_ima_dk4", "ADPCM IMA Duck DK4", "D A D "), - new Codec("adpcm_ima_ea_eacs", "ADPCM IMA Electronic Arts EACS", "D A D "), - new Codec("adpcm_ima_ea_sead", "ADPCM IMA Electronic Arts SEAD", "D A D "), - new Codec("adpcm_ima_iss", "ADPCM IMA Funcom ISS", "D A D "), - new Codec("adpcm_ima_qt", "ADPCM IMA QuickTime", "DEA D "), - new Codec("adpcm_ima_smjpeg", "ADPCM IMA Loki SDL MJPEG", "D A D "), - new Codec("adpcm_ima_wav", "ADPCM IMA WAV", "DEA D "), - new Codec("adpcm_ima_ws", "ADPCM IMA Westwood", "D A D "), - new Codec("adpcm_ms", "ADPCM Microsoft", "DEA D "), - new Codec("adpcm_sbpro_2", "ADPCM Sound Blaster Pro 2-bit", "D A D "), - new Codec("adpcm_sbpro_3", "ADPCM Sound Blaster Pro 2.6-bit", "D A D "), - new Codec("adpcm_sbpro_4", "ADPCM Sound Blaster Pro 4-bit", "D A D "), - new Codec("adpcm_swf", "ADPCM Shockwave Flash", "DEA D "), - new Codec("adpcm_thp", "ADPCM Nintendo Gamecube THP", "D A D "), - new Codec("adpcm_xa", "ADPCM CDROM XA", "D A D "), - new Codec("adpcm_yamaha", "ADPCM Yamaha", "DEA D "), - new Codec("alac", "ALAC (Apple Lossless Audio Codec)", "DEA D "), - new Codec("als", "MPEG-4 Audio Lossless Coding (ALS)", "D A D "), - new Codec("amrnb", "Adaptive Multi-Rate NarrowBand", "D A D "), - new Codec("amrwb", "Adaptive Multi-Rate WideBand", "D A D "), - new Codec("amv", "AMV Video", "DEV "), - new Codec("anm", "Deluxe Paint Animation", "D V D "), - new Codec("ansi", "ASCII/ANSI art", "D V D "), - new Codec("ape", "Monkey's Audio", "D A D "), - new Codec("ass", "Advanced SubStation Alpha subtitle", "DES "), - new Codec("asv1", "ASUS V1", "DEV D "), - new Codec("asv2", "ASUS V2", "DEV D "), - new Codec("atrac1", "Atrac 1 (Adaptive TRansform Acoustic Coding)", "D A D "), - new Codec("atrac3", "Atrac 3 (Adaptive TRansform Acoustic Coding 3)", "D A D "), - new Codec("aura", "Auravision AURA", "D V D "), - new Codec("aura2", "Auravision Aura 2", "D V D "), - new Codec("avrp", "Avid 1:1 10-bit RGB Packer", "DEV D "), - new Codec("avs", "AVS (Audio Video Standard) video", "D V D "), - new Codec("bethsoftvid", "Bethesda VID video", "D V D "), - new Codec("bfi", "Brute Force & Ignorance", "D V D "), - new Codec("binkaudio_dct", "Bink Audio (DCT)", "D A D "), - new Codec("binkaudio_rdft", "Bink Audio (RDFT)", "D A D "), - new Codec("binkvideo", "Bink video", "D V "), - new Codec("bintext", "Binary text", "D V D "), - new Codec("bmp", "BMP image", "DEV D "), - new Codec("bmv_audio", "Discworld II BMV audio", "D A D "), - new Codec("bmv_video", "Discworld II BMV video", "D V "), - new Codec("c93", "Interplay C93", "D V D "), - new Codec("camstudio", "CamStudio", "D V D "), - new Codec("camtasia", "TechSmith Screen Capture Codec", "D V D "), - new Codec("cavs", "Chinese AVS video (AVS1-P2, JiZhun profile)", "D V D "), - new Codec("cdgraphics", "CD Graphics video", "D V D "), - new Codec("cinepak", "Cinepak", "D V D "), - new Codec("cljr", "Cirrus Logic AccuPak", "DEV D "), - new Codec("cook", "COOK", "D A D "), - new Codec("cyuv", "Creative YUV (CYUV)", "D V D "), - new Codec("dca", "DCA (DTS Coherent Acoustics)", "DEA D "), - new Codec("dfa", "Chronomaster DFA", "D V D "), - new Codec("dirac", "BBC Dirac VC-2", "D V "), - new Codec("dnxhd", "VC3/DNxHD", "DEV D "), - new Codec("dpx", "DPX image", "DEV "), - new Codec("dsicinaudio", "Delphine Software International CIN audio", "D A D "), - new Codec("dsicinvideo", "Delphine Software International CIN video", "D V D "), - new Codec("dvbsub", "DVB subtitles", "DES "), - new Codec("dvdsub", "DVD subtitles", "DES "), - new Codec("dvvideo", "DV (Digital Video)", "DEV D "), - new Codec("dxa", "Feeble Files/ScummVM DXA", "D V D "), - new Codec("dxtory", "Dxtory", "D V D "), - new Codec("eac3", "ATSC A/52 E-AC-3", "DEA D "), - new Codec("eacmv", "Electronic Arts CMV video", "D V D "), - new Codec("eamad", "Electronic Arts Madcow Video", "D V D "), - new Codec("eatgq", "Electronic Arts TGQ video", "D V D "), - new Codec("eatgv", "Electronic Arts TGV video", "D V "), - new Codec("eatqi", "Electronic Arts TQI Video", "D V D "), - new Codec("escape124", "Escape 124", "D V D "), - new Codec("escape130", "Escape 130", "D V D "), - new Codec("ffv1", "FFmpeg video codec #1", "DEV D "), - new Codec("ffvhuff", "Huffyuv FFmpeg variant", "DEVSD "), - new Codec("flac", "FLAC (Free Lossless Audio Codec)", "DEA D "), - new Codec("flashsv", "Flash Screen Video", "DEV D "), - new Codec("flashsv2", "Flash Screen Video Version 2", "DEV D "), - new Codec("flic", "Autodesk Animator Flic video", "D V D "), - new Codec("flv", "Flash Video (FLV) / Sorenson Spark / Sorenson H.263", "DEVSD "), - new Codec("fraps", "Fraps", "D V D "), - new Codec("frwu", "Forward Uncompressed", "D V D "), - new Codec("g722", "G.722 ADPCM", "DEA D "), - new Codec("g723_1", "G.723.1", "DEA "), - new Codec("g726", "G.726 ADPCM", "DEA D "), - new Codec("g729", "G.729", "D A D "), - new Codec("gif", "GIF (Graphics Interchange Format)", "DEV D "), - new Codec("gsm", "GSM", "D A D "), - new Codec("gsm_ms", "GSM Microsoft variant", "D A D "), - new Codec("h261", "H.261", "DEV D "), - new Codec("h263", "H.263 / H.263-1996", "DEVSDT"), - new Codec("h263i", "Intel H.263", "D VSD "), - new Codec("h263p", "H.263+ / H.263-1998 / H.263 version 2", " EV "), - new Codec("h264", "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", "D V D "), - new Codec("huffyuv", "Huffyuv / HuffYUV", "DEVSD "), - new Codec("idcinvideo", "id Quake II CIN video", "D V D "), - new Codec("idf", "iCEDraw text", "D V D "), - new Codec("iff_byterun1", "IFF ByteRun1", "D V D "), - new Codec("iff_ilbm", "IFF ILBM", "D V D "), - new Codec("imc", "IMC (Intel Music Coder)", "D A D "), - new Codec("indeo2", "Intel Indeo 2", "D V D "), - new Codec("indeo3", "Intel Indeo 3", "D V "), - new Codec("indeo4", "Intel Indeo Video Interactive 4", "D V "), - new Codec("indeo5", "Intel Indeo Video Interactive 5", "D V "), - new Codec("interplay_dpcm", "DPCM Interplay", "D A D "), - new Codec("interplayvideo", "Interplay MVE video", "D V D "), - new Codec("j2k", "JPEG 2000", "DEV "), - new Codec("jpegls", "JPEG-LS", "DEV D "), - new Codec("jv", "Bitmap Brothers JV video", "D V D "), - new Codec("kgv1", "Kega Game Video", "D V "), - new Codec("kmvc", "Karl Morton's video codec", "D V D "), - new Codec("lagarith", "Lagarith lossless", "D V D "), - new Codec("libgsm", "libgsm GSM", "DEA D "), - new Codec("libgsm_ms", "libgsm GSM Microsoft variant", "DEA D "), - new Codec("libmp3lame", "libmp3lame MP3 (MPEG audio layer 3)", " EA "), - new Codec("libopenjpeg", "OpenJPEG based JPEG 2000 encoder", "DEV D "), - new Codec("libschroedinger", "libschroedinger Dirac 2.2", "DEV "), - new Codec("libspeex", "libspeex Speex", "DEA D "), - new Codec("libtheora", "libtheora Theora", " EV "), - new Codec("libvorbis", "libvorbis Vorbis", " EA "), - new Codec("libvpx", "libvpx VP8", "DEV "), - new Codec("libx264", "libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", " EV "), - new Codec( - "libx264rgb", "libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB", " EV "), - new Codec("ljpeg", "Lossless JPEG", " EV "), - new Codec("loco", "LOCO", "D V D "), - new Codec("mace3", "MACE (Macintosh Audio Compression/Expansion) 3:1", "D A D "), - new Codec("mace6", "MACE (Macintosh Audio Compression/Expansion) 6:1", "D A D "), - new Codec("mdec", "Sony PlayStation MDEC (Motion DECoder)", "D V D "), - new Codec("mimic", "Mimic", "D V D "), - new Codec("mjpeg", "MJPEG (Motion JPEG)", "DEV D "), - new Codec("mjpegb", "Apple MJPEG-B", "D V D "), - new Codec("mlp", "MLP (Meridian Lossless Packing)", "D A D "), - new Codec("mmvideo", "American Laser Games MM Video", "D V D "), - new Codec("motionpixels", "Motion Pixels video", "D V D "), - new Codec("mp1", "MP1 (MPEG audio layer 1)", "D A D "), - new Codec("mp1float", "MP1 (MPEG audio layer 1)", "D A D "), - new Codec("mp2", "MP2 (MPEG audio layer 2)", "DEA D "), - new Codec("mp2float", "MP2 (MPEG audio layer 2)", "D A D "), - new Codec("mp3", "MP3 (MPEG audio layer 3)", "D A D "), - new Codec("mp3adu", "ADU (Application Data Unit) MP3 (MPEG audio layer 3)", "D A D "), - new Codec( - "mp3adufloat", "ADU (Application Data Unit) MP3 (MPEG audio layer 3)", "D A D "), - new Codec("mp3float", "MP3 (MPEG audio layer 3)", "D A D "), - new Codec("mp3on4", "MP3onMP4", "D A D "), - new Codec("mp3on4float", "MP3onMP4", "D A D "), - new Codec("mpc7", "Musepack SV7", "D A D "), - new Codec("mpc8", "Musepack SV8", "D A D "), - new Codec("mpeg1video", "MPEG-1 video", "DEVSDT"), - new Codec("mpeg1video_vdpau", "MPEG-1 video (VDPAU acceleration)", "D V DT"), - new Codec("mpeg2video", "MPEG-2 video", "DEVSDT"), - new Codec("mpeg4", "MPEG-4 part 2", "DEVSDT"), - new Codec("mpeg4_vdpau", "MPEG-4 part 2 (VDPAU)", "D V DT"), - new Codec("mpegvideo", "MPEG-1 video", "D VSDT"), - new Codec("mpegvideo_vdpau", "MPEG-1/2 video (VDPAU acceleration)", "D V DT"), - new Codec( - "mpegvideo_xvmc", "MPEG-1/2 video XvMC (X-Video Motion Compensation)", "D VSDT"), - new Codec("msmpeg4", "MPEG-4 part 2 Microsoft variant version 3", "DEVSD "), - new Codec("msmpeg4v1", "MPEG-4 part 2 Microsoft variant version 1", "D VSD "), - new Codec("msmpeg4v2", "MPEG-4 part 2 Microsoft variant version 2", "DEVSD "), - new Codec("msrle", "Microsoft RLE", "D V D "), - new Codec("msvideo1", "Microsoft Video-1", "DEV D "), - new Codec("mszh", "LCL (LossLess Codec Library) MSZH", "D V D "), - new Codec("mxpeg", "Mobotix MxPEG video", "D V D "), - new Codec("nellymoser", "Nellymoser Asao", "DEA D "), - new Codec("nuv", "NuppelVideo/RTJPEG", "D V D "), - new Codec("pam", "PAM (Portable AnyMap) image", "DEV D "), - new Codec("pbm", "PBM (Portable BitMap) image", "DEV D "), - new Codec("pcm_alaw", "PCM A-law", "DEA D "), - new Codec( - "pcm_bluray", "PCM signed 16|20|24-bit big-endian for Blu-ray media", "D A D "), - new Codec("pcm_dvd", "PCM signed 20|24-bit big-endian", "D A D "), - new Codec("pcm_f32be", "PCM 32-bit floating point big-endian", "DEA D "), - new Codec("pcm_f32le", "PCM 32-bit floating point little-endian", "DEA D "), - new Codec("pcm_f64be", "PCM 64-bit floating point big-endian", "DEA D "), - new Codec("pcm_f64le", "PCM 64-bit floating point little-endian", "DEA D "), - new Codec("pcm_lxf", "PCM signed 20-bit little-endian planar", "D A D "), - new Codec("pcm_mulaw", "PCM mu-law", "DEA D "), - new Codec("pcm_s16be", "PCM signed 16-bit big-endian", "DEA D "), - new Codec("pcm_s16le", "PCM signed 16-bit little-endian", "DEA D "), - new Codec("pcm_s16le_planar", "PCM 16-bit little-endian planar", "D A D "), - new Codec("pcm_s24be", "PCM signed 24-bit big-endian", "DEA D "), - new Codec("pcm_s24daud", "PCM D-Cinema audio signed 24-bit", "DEA D "), - new Codec("pcm_s24le", "PCM signed 24-bit little-endian", "DEA D "), - new Codec("pcm_s32be", "PCM signed 32-bit big-endian", "DEA D "), - new Codec("pcm_s32le", "PCM signed 32-bit little-endian", "DEA D "), - new Codec("pcm_s8", "PCM signed 8-bit", "DEA D "), - new Codec("pcm_s8_planar", "PCM signed 8-bit planar", "D A D "), - new Codec("pcm_u16be", "PCM unsigned 16-bit big-endian", "DEA D "), - new Codec("pcm_u16le", "PCM unsigned 16-bit little-endian", "DEA D "), - new Codec("pcm_u24be", "PCM unsigned 24-bit big-endian", "DEA D "), - new Codec("pcm_u24le", "PCM unsigned 24-bit little-endian", "DEA D "), - new Codec("pcm_u32be", "PCM unsigned 32-bit big-endian", "DEA D "), - new Codec("pcm_u32le", "PCM unsigned 32-bit little-endian", "DEA D "), - new Codec("pcm_u8", "PCM unsigned 8-bit", "DEA D "), - new Codec("pcm_zork", "PCM Zork", "D A D "), - new Codec("pcx", "PC Paintbrush PCX image", "DEV D "), - new Codec("pgm", "PGM (Portable GrayMap) image", "DEV D "), - new Codec("pgmyuv", "PGMYUV (Portable GrayMap YUV) image", "DEV D "), - new Codec("pgssub", "HDMV Presentation Graphic Stream subtitles", "D S "), - new Codec("pictor", "Pictor/PC Paint", "D V D "), - new Codec("png", "PNG image", "DEV D "), - new Codec("ppm", "PPM (Portable PixelMap) image", "DEV D "), - new Codec("prores", "Apple ProRes", "DEV D "), - new Codec("prores_lgpl", "Apple ProRes (iCodec Pro)", "D V D "), - new Codec("ptx", "V.Flash PTX image", "D V D "), - new Codec("qcelp", "QCELP / PureVoice", "D A D "), - new Codec("qdm2", "QDesign Music Codec 2", "D A D "), - new Codec("qdraw", "Apple QuickDraw", "D V D "), - new Codec("qpeg", "Q-team QPEG", "D V D "), - new Codec("qtrle", "QuickTime Animation (RLE) video", "DEV D "), - new Codec("r10k", "AJA Kona 10-bit RGB Codec", "DEV D "), - new Codec("r210", "Uncompressed RGB 10-bit", "DEV D "), - new Codec("rawvideo", "raw video", "DEV "), - new Codec("real_144", "RealAudio 1.0 (14.4K) encoder", "DEA D "), - new Codec("real_288", "RealAudio 2.0 (28.8K)", "D A D "), - new Codec("rl2", "RL2 video", "D V D "), - new Codec("roq_dpcm", "id RoQ DPCM", "DEA D "), - new Codec("roqvideo", "id RoQ video", "DEV D "), - new Codec("rpza", "QuickTime video (RPZA)", "D V D "), - new Codec("rv10", "RealVideo 1.0", "DEV D "), - new Codec("rv20", "RealVideo 2.0", "DEV D "), - new Codec("rv30", "RealVideo 3.0", "D V D "), - new Codec("rv40", "RealVideo 4.0", "D V D "), - new Codec("s302m", "SMPTE 302M", "D A D "), - new Codec("sgi", "SGI image", "DEV "), - new Codec("shorten", "Shorten", "D A D "), - new Codec("sipr", "RealAudio SIPR / ACELP.NET", "D A D "), - new Codec("smackaud", "Smacker audio", "D A D "), - new Codec("smackvid", "Smacker video", "D V D "), - new Codec("smc", "QuickTime Graphics (SMC)", "D V D "), - new Codec("snow", "Snow", "DEV D "), - new Codec("sol_dpcm", "DPCM Sol", "D A D "), - new Codec("sonic", "Sonic", "DEA D "), - new Codec("sonicls", "Sonic lossless", " EA "), - new Codec("sp5x", "Sunplus JPEG (SP5X)", "D V D "), - new Codec("srt", "SubRip subtitle", "DES "), - new Codec("sunrast", "Sun Rasterfile image", "D V D "), - new Codec("svq1", "Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1", "DEV D "), - new Codec("svq3", "Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3", "D VSD "), - new Codec("targa", "Truevision Targa image", "DEV D "), - new Codec("theora", "Theora", "D VSD "), - new Codec("thp", "Nintendo Gamecube THP video", "D V D "), - new Codec("tiertexseqvideo", "Tiertex Limited SEQ video", "D V D "), - new Codec("tiff", "TIFF image", "DEV D "), - new Codec("tmv", "8088flex TMV", "D V D "), - new Codec("truehd", "TrueHD", "D A D "), - new Codec("truemotion1", "Duck TrueMotion 1.0", "D V D "), - new Codec("truemotion2", "Duck TrueMotion 2.0", "D V D "), - new Codec("truespeech", "DSP Group TrueSpeech", "D A D "), - new Codec("tta", "True Audio (TTA)", "D A D "), - new Codec("twinvq", "VQF TwinVQ", "D A D "), - new Codec("txd", "Renderware TXD (TeXture Dictionary) image", "D V D "), - new Codec("ultimotion", "IBM UltiMotion", "D V D "), - new Codec("utvideo", "Ut Video", "D V D "), - new Codec("v210", "Uncompressed 4:2:2 10-bit", "DEV D "), - new Codec("v210x", "Uncompressed 4:2:2 10-bit", "D V D "), - new Codec("v308", "Uncompressed packed 4:4:4", "DEV D "), - new Codec("v410", "Uncompressed 4:4:4 10-bit", "DEV D "), - new Codec("vb", "Beam Software VB", "D V "), - new Codec("vble", "VBLE Lossless Codec", "D V D "), - new Codec("vc1", "SMPTE VC-1", "D V D "), - new Codec("vc1_vdpau", "SMPTE VC-1 VDPAU", "D V D "), - new Codec("vc1image", "Windows Media Video 9 Image v2", "D V D "), - new Codec("vcr1", "ATI VCR1", "D V D "), - new Codec("vmdaudio", "Sierra VMD audio", "D A D "), - new Codec("vmdvideo", "Sierra VMD video", "D V D "), - new Codec("vmnc", "VMware Screen Codec / VMware Video", "D V D "), - new Codec("vorbis", "Vorbis", "DEA D "), - new Codec("vp3", "On2 VP3", "D VSD "), - new Codec("vp5", "On2 VP5", "D V D "), - new Codec("vp6", "On2 VP6", "D V D "), - new Codec("vp6a", "On2 VP6 (Flash version, with alpha channel)", "D V D "), - new Codec("vp6f", "On2 VP6 (Flash version)", "D V D "), - new Codec("vp8", "On2 VP8", "D V D "), - new Codec( - "vqavideo", "Westwood Studios VQA (Vector Quantized Animation) video", "D V D "), - new Codec("wavesynth", "Wave synthesis pseudo-codec", "D A D "), - new Codec("wavpack", "WavPack", "D A D "), - new Codec("wmalossless", "Windows Media Audio 9 Lossless", "D A "), - new Codec("wmapro", "Windows Media Audio 9 Professional", "D A D "), - new Codec("wmav1", "Windows Media Audio 1", "DEA D "), - new Codec("wmav2", "Windows Media Audio 2", "DEA D "), - new Codec("wmavoice", "Windows Media Audio Voice", "D A D "), - new Codec("wmv1", "Windows Media Video 7", "DEVSD "), - new Codec("wmv2", "Windows Media Video 8", "DEVSD "), - new Codec("wmv3", "Windows Media Video 9", "D V D "), - new Codec("wmv3_vdpau", "Windows Media Video 9 VDPAU", "D V D "), - new Codec("wmv3image", "Windows Media Video 9 Image", "D V D "), - new Codec("wnv1", "Winnov WNV1", "D V D "), - new Codec("ws_snd1", "Westwood Audio (SND1)", "D A D "), - new Codec("xan_dpcm", "DPCM Xan", "D A D "), - new Codec("xan_wc3", "Wing Commander III / Xan", "D V D "), - new Codec("xan_wc4", "Wing Commander IV / Xxan", "D V D "), - new Codec("xbin", "eXtended BINary text", "D V D "), - new Codec("xl", "Miro VideoXL", "D V D "), - new Codec("xsub", "DivX subtitles (XSUB)", "DES "), - new Codec("xwd", "XWD (X Window Dump) image", "DEV D "), - new Codec("y41p", "Uncompressed YUV 4:1:1 12-bit", "DEV D "), - new Codec("yop", "Psygnosis YOP Video", "D V "), - new Codec("yuv4", "Uncompressed packed 4:2:0", "DEV D "), - new Codec("zlib", "LCL (LossLess Codec Library) ZLIB", "DEV D "), - new Codec("zmbv", "Zip Motion Blocks Video", "DEV D ")) - .build(); + new ImmutableList.Builder() + .add( + new Codec("012v", "Uncompressed 4:2:2 10-bit", "D.VI.S"), + new Codec("4xm", "4X Movie", "D.V.L."), + new Codec("8bps", "QuickTime 8BPS video", "D.VI.S"), + new Codec("a64_multi", "Multicolor charset for Commodore 64 (encoders: a64multi )", ".EVIL."), + new Codec("a64_multi5", "Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )", ".EVIL."), + new Codec("aasc", "Autodesk RLE", "D.V..S"), + new Codec("agm", "Amuse Graphics Movie", "D.V.L."), + new Codec("aic", "Apple Intermediate Codec", "D.VIL."), + new Codec("alias_pix", "Alias/Wavefront PIX image", "DEVI.S"), + new Codec("amv", "AMV Video", "DEVIL."), + new Codec("anm", "Deluxe Paint Animation", "D.V.L."), + new Codec("ansi", "ASCII/ANSI art", "D.V.L."), + new Codec("apng", "APNG (Animated Portable Network Graphics) image", "DEV..S"), + new Codec("arbc", "Gryphon's Anim Compressor", "D.V.L."), + new Codec("asv1", "ASUS V1", "DEVIL."), + new Codec("asv2", "ASUS V2", "DEVIL."), + new Codec("aura", "Auravision AURA", "D.VIL."), + new Codec("aura2", "Auravision Aura 2", "D.VIL."), + new Codec("av1", "Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 ) (encoders: libaom-av1 )", "DEV.L."), + new Codec("avrn", "Avid AVI Codec", "D.V..."), + new Codec("avrp", "Avid 1:1 10-bit RGB Packer", "DEVI.S"), + new Codec("avs", "AVS (Audio Video Standard) video", "D.V.L."), + new Codec("avs2", "AVS2-P2/IEEE1857.4", "..V.L."), + new Codec("avui", "Avid Meridien Uncompressed", "DEVI.S"), + new Codec("ayuv", "Uncompressed packed MS 4:4:4:4", "DEVI.S"), + new Codec("bethsoftvid", "Bethesda VID video", "D.V.L."), + new Codec("bfi", "Brute Force & Ignorance", "D.V.L."), + new Codec("binkvideo", "Bink video", "D.V.L."), + new Codec("bintext", "Binary text", "D.VI.."), + new Codec("bitpacked", "Bitpacked", "D.VI.S"), + new Codec("bmp", "BMP (Windows and OS/2 bitmap)", "DEVI.S"), + new Codec("bmv_video", "Discworld II BMV video", "D.V..S"), + new Codec("brender_pix", "BRender PIX image", "D.VI.S"), + new Codec("c93", "Interplay C93", "D.V.L."), + new Codec("cavs", "Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)", "D.V.L."), + new Codec("cdgraphics", "CD Graphics video", "D.V.L."), + new Codec("cdxl", "Commodore CDXL video", "D.VIL."), + new Codec("cfhd", "Cineform HD", "D.V.L."), + new Codec("cinepak", "Cinepak", "DEV.L."), + new Codec("clearvideo", "Iterated Systems ClearVideo", "D.V.L."), + new Codec("cljr", "Cirrus Logic AccuPak", "DEVIL."), + new Codec("cllc", "Canopus Lossless Codec", "D.VI.S"), + new Codec("cmv", "Electronic Arts CMV video (decoders: eacmv )", "D.V.L."), + new Codec("cpia", "CPiA video format", "D.V..."), + new Codec("cscd", "CamStudio (decoders: camstudio )", "D.V..S"), + new Codec("cyuv", "Creative YUV (CYUV)", "D.VIL."), + new Codec("daala", "Daala", "..V.LS"), + new Codec("dds", "DirectDraw Surface image decoder", "D.VILS"), + new Codec("dfa", "Chronomaster DFA", "D.V.L."), + new Codec("dirac", "Dirac (encoders: vc2 )", "DEV.LS"), + new Codec("dnxhd", "VC3/DNxHD", "DEVIL."), + new Codec("dpx", "DPX (Digital Picture Exchange) image", "DEVI.S"), + new Codec("dsicinvideo", "Delphine Software International CIN video", "D.V.L."), + new Codec("dvvideo", "DV (Digital Video)", "DEVIL."), + new Codec("dxa", "Feeble Files/ScummVM DXA", "D.V..S"), + new Codec("dxtory", "Dxtory", "D.VI.S"), + new Codec("dxv", "Resolume DXV", "D.VIL."), + new Codec("escape124", "Escape 124", "D.V.L."), + new Codec("escape130", "Escape 130", "D.V.L."), + new Codec("exr", "OpenEXR image", "D.VILS"), + new Codec("ffv1", "FFmpeg video codec #1", "DEV..S"), + new Codec("ffvhuff", "Huffyuv FFmpeg variant", "DEVI.S"), + new Codec("fic", "Mirillis FIC", "D.V.L."), + new Codec("fits", "FITS (Flexible Image Transport System)", "DEVI.S"), + new Codec("flashsv", "Flash Screen Video v1", "DEV..S"), + new Codec("flashsv2", "Flash Screen Video v2", "DEV.L."), + new Codec("flic", "Autodesk Animator Flic video", "D.V..S"), + new Codec("flv1", "FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )", "DEV.L."), + new Codec("fmvc", "FM Screen Capture Codec", "D.V..S"), + new Codec("fraps", "Fraps", "D.VI.S"), + new Codec("frwu", "Forward Uncompressed", "D.VI.S"), + new Codec("g2m", "Go2Meeting", "D.V.L."), + new Codec("gdv", "Gremlin Digital Video", "D.V.L."), + new Codec("gif", "CompuServe GIF (Graphics Interchange Format)", "DEV..S"), + new Codec("h261", "H.261", "DEV.L."), + new Codec("h263", "H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), + new Codec("h263i", "Intel H.263", "D.V.L."), + new Codec("h263p", "H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), + new Codec("h264", "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_nvenc h264_qsv nvenc nvenc_h264 )", "DEV.LS"), + new Codec("hap", "Vidvox Hap", "DEVIL."), + new Codec("hevc", "H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )", "DEV.L."), + new Codec("hnm4video", "HNM 4 video", "D.V.L."), + new Codec("hq_hqa", "Canopus HQ/HQA", "D.VIL."), + new Codec("hqx", "Canopus HQX", "D.VIL."), + new Codec("huffyuv", "HuffYUV", "DEVI.S"), + new Codec("hymt", "HuffYUV MT", "D.VI.S"), + new Codec("idcin", "id Quake II CIN video (decoders: idcinvideo )", "D.V.L."), + new Codec("idf", "iCEDraw text", "D.VI.."), + new Codec("iff_ilbm", "IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (decoders: iff )", "D.V.L."), + new Codec("imm4", "Infinity IMM4", "D.V.L."), + new Codec("imm5", "Infinity IMM5", "D.V.L."), + new Codec("indeo2", "Intel Indeo 2", "D.V.L."), + new Codec("indeo3", "Intel Indeo 3", "D.V.L."), + new Codec("indeo4", "Intel Indeo Video Interactive 4", "D.V.L."), + new Codec("indeo5", "Intel Indeo Video Interactive 5", "D.V.L."), + new Codec("interplayvideo", "Interplay MVE video", "D.V.L."), + new Codec("jpeg2000", "JPEG 2000 (decoders: jpeg2000 libopenjpeg ) (encoders: jpeg2000 libopenjpeg )", "DEVILS"), + new Codec("jpegls", "JPEG-LS", "DEVILS"), + new Codec("jv", "Bitmap Brothers JV video", "D.VIL."), + new Codec("kgv1", "Kega Game Video", "D.V.L."), + new Codec("kmvc", "Karl Morton's video codec", "D.V.L."), + new Codec("lagarith", "Lagarith lossless", "D.VI.S"), + new Codec("ljpeg", "Lossless JPEG", ".EVI.S"), + new Codec("loco", "LOCO", "D.VI.S"), + new Codec("lscr", "LEAD Screen Capture", "D.V.L."), + new Codec("m101", "Matrox Uncompressed SD", "D.VI.S"), + new Codec("mad", "Electronic Arts Madcow Video (decoders: eamad )", "D.V.L."), + new Codec("magicyuv", "MagicYUV video", "DEVI.S"), + new Codec("mdec", "Sony PlayStation MDEC (Motion DECoder)", "D.VIL."), + new Codec("mimic", "Mimic", "D.V.L."), + new Codec("mjpeg", "Motion JPEG (decoders: mjpeg mjpeg_cuvid mjpeg_qsv ) (encoders: mjpeg mjpeg_qsv )", "DEVIL."), + new Codec("mjpegb", "Apple MJPEG-B", "D.VIL."), + new Codec("mmvideo", "American Laser Games MM Video", "D.V.L."), + new Codec("motionpixels", "Motion Pixels video", "D.V.L."), + new Codec("mpeg1video", "MPEG-1 video (decoders: mpeg1video mpeg1_cuvid )", "DEV.L."), + new Codec("mpeg2video", "MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv mpeg2_cuvid ) (encoders: mpeg2video mpeg2_qsv )", "DEV.L."), + new Codec("mpeg4", "MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid ) (encoders: mpeg4 libxvid )", "DEV.L."), + new Codec("msa1", "MS ATC Screen", "D.V.L."), + new Codec("mscc", "Mandsoft Screen Capture Codec", "D.VI.S"), + new Codec("msmpeg4v1", "MPEG-4 part 2 Microsoft variant version 1", "D.V.L."), + new Codec("msmpeg4v2", "MPEG-4 part 2 Microsoft variant version 2", "DEV.L."), + new Codec("msmpeg4v3", "MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 )", "DEV.L."), + new Codec("msrle", "Microsoft RLE", "D.V..S"), + new Codec("mss1", "MS Screen 1", "D.V.L."), + new Codec("mss2", "MS Windows Media Video V9 Screen", "D.VIL."), + new Codec("msvideo1", "Microsoft Video 1", "DEV.L."), + new Codec("mszh", "LCL (LossLess Codec Library) MSZH", "D.VI.S"), + new Codec("mts2", "MS Expression Encoder Screen", "D.V.L."), + new Codec("mvc1", "Silicon Graphics Motion Video Compressor 1", "D.VIL."), + new Codec("mvc2", "Silicon Graphics Motion Video Compressor 2", "D.VIL."), + new Codec("mvdv", "MidiVid VQ", "D.V.L."), + new Codec("mvha", "MidiVid Archive Codec", "D.VIL."), + new Codec("mwsc", "MatchWare Screen Capture Codec", "D.V..S"), + new Codec("mxpeg", "Mobotix MxPEG video", "D.V.L."), + new Codec("nuv", "NuppelVideo/RTJPEG", "D.V.L."), + new Codec("paf_video", "Amazing Studio Packed Animation File Video", "D.V.L."), + new Codec("pam", "PAM (Portable AnyMap) image", "DEVI.S"), + new Codec("pbm", "PBM (Portable BitMap) image", "DEVI.S"), + new Codec("pcx", "PC Paintbrush PCX image", "DEVI.S"), + new Codec("pgm", "PGM (Portable GrayMap) image", "DEVI.S"), + new Codec("pgmyuv", "PGMYUV (Portable GrayMap YUV) image", "DEVI.S"), + new Codec("pictor", "Pictor/PC Paint", "D.VIL."), + new Codec("pixlet", "Apple Pixlet", "D.VIL."), + new Codec("png", "PNG (Portable Network Graphics) image", "DEV..S"), + new Codec("ppm", "PPM (Portable PixelMap) image", "DEVI.S"), + new Codec("prores", "Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks )", "DEVIL."), + new Codec("prosumer", "Brooktree ProSumer Video", "D.VIL."), + new Codec("psd", "Photoshop PSD file", "D.VI.S"), + new Codec("ptx", "V.Flash PTX image", "D.VIL."), + new Codec("qdraw", "Apple QuickDraw", "D.VI.S"), + new Codec("qpeg", "Q-team QPEG", "D.V.L."), + new Codec("qtrle", "QuickTime Animation (RLE) video", "DEV..S"), + new Codec("r10k", "AJA Kona 10-bit RGB Codec", "DEVI.S"), + new Codec("r210", "Uncompressed RGB 10-bit", "DEVI.S"), + new Codec("rasc", "RemotelyAnywhere Screen Capture", "D.V.L."), + new Codec("rawvideo", "raw video", "DEVI.S"), + new Codec("rl2", "RL2 video", "D.VIL."), + new Codec("roq", "id RoQ video (decoders: roqvideo ) (encoders: roqvideo )", "DEV.L."), + new Codec("rpza", "QuickTime video (RPZA)", "D.V.L."), + new Codec("rscc", "innoHeim/Rsupport Screen Capture Codec", "D.V..S"), + new Codec("rv10", "RealVideo 1.0", "DEV.L."), + new Codec("rv20", "RealVideo 2.0", "DEV.L."), + new Codec("rv30", "RealVideo 3.0", "D.V.L."), + new Codec("rv40", "RealVideo 4.0", "D.V.L."), + new Codec("sanm", "LucasArts SANM/SMUSH video", "D.V.L."), + new Codec("scpr", "ScreenPressor", "D.V.LS"), + new Codec("screenpresso", "Screenpresso", "D.V..S"), + new Codec("sgi", "SGI image", "DEVI.S"), + new Codec("sgirle", "SGI RLE 8-bit", "D.VI.S"), + new Codec("sheervideo", "BitJazz SheerVideo", "D.VI.S"), + new Codec("smackvideo", "Smacker video (decoders: smackvid )", "D.V.L."), + new Codec("smc", "QuickTime Graphics (SMC)", "D.V.L."), + new Codec("smvjpeg", "Sigmatel Motion Video", "D.V..."), + new Codec("snow", "Snow", "DEV.LS"), + new Codec("sp5x", "Sunplus JPEG (SP5X)", "D.VIL."), + new Codec("speedhq", "NewTek SpeedHQ", "D.VIL."), + new Codec("srgc", "Screen Recorder Gold Codec", "D.VI.S"), + new Codec("sunrast", "Sun Rasterfile image", "DEVI.S"), + new Codec("svg", "Scalable Vector Graphics", "..V..S"), + new Codec("svq1", "Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1", "DEV.L."), + new Codec("svq3", "Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3", "D.V.L."), + new Codec("targa", "Truevision Targa image", "DEVI.S"), + new Codec("targa_y216", "Pinnacle TARGA CineWave YUV16", "D.VI.S"), + new Codec("tdsc", "TDSC", "D.V.L."), + new Codec("tgq", "Electronic Arts TGQ video (decoders: eatgq )", "D.V.L."), + new Codec("tgv", "Electronic Arts TGV video (decoders: eatgv )", "D.V.L."), + new Codec("theora", "Theora (encoders: libtheora )", "DEV.L."), + new Codec("thp", "Nintendo Gamecube THP video", "D.VIL."), + new Codec("tiertexseqvideo", "Tiertex Limited SEQ video", "D.V.L."), + new Codec("tiff", "TIFF image", "DEVI.S"), + new Codec("tmv", "8088flex TMV", "D.VIL."), + new Codec("tqi", "Electronic Arts TQI video (decoders: eatqi )", "D.V.L."), + new Codec("truemotion1", "Duck TrueMotion 1.0", "D.V.L."), + new Codec("truemotion2", "Duck TrueMotion 2.0", "D.V.L."), + new Codec("truemotion2rt", "Duck TrueMotion 2.0 Real Time", "D.VIL."), + new Codec("tscc", "TechSmith Screen Capture Codec (decoders: camtasia )", "D.V..S"), + new Codec("tscc2", "TechSmith Screen Codec 2", "D.V.L."), + new Codec("txd", "Renderware TXD (TeXture Dictionary) image", "D.VIL."), + new Codec("ulti", "IBM UltiMotion (decoders: ultimotion )", "D.V.L."), + new Codec("utvideo", "Ut Video", "DEVI.S"), + new Codec("v210", "Uncompressed 4:2:2 10-bit", "DEVI.S"), + new Codec("v210x", "Uncompressed 4:2:2 10-bit", "D.VI.S"), + new Codec("v308", "Uncompressed packed 4:4:4", "DEVI.S"), + new Codec("v408", "Uncompressed packed QT 4:4:4:4", "DEVI.S"), + new Codec("v410", "Uncompressed 4:4:4 10-bit", "DEVI.S"), + new Codec("vb", "Beam Software VB", "D.V.L."), + new Codec("vble", "VBLE Lossless Codec", "D.VI.S"), + new Codec("vc1", "SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_cuvid )", "D.V.L."), + new Codec("vc1image", "Windows Media Video 9 Image v2", "D.V.L."), + new Codec("vcr1", "ATI VCR1", "D.VIL."), + new Codec("vixl", "Miro VideoXL (decoders: xl )", "D.VIL."), + new Codec("vmdvideo", "Sierra VMD video", "D.V.L."), + new Codec("vmnc", "VMware Screen Codec / VMware Video", "D.V..S"), + new Codec("vp3", "On2 VP3", "D.V.L."), + new Codec("vp4", "On2 VP4", "D.V.L."), + new Codec("vp5", "On2 VP5", "D.V.L."), + new Codec("vp6", "On2 VP6", "D.V.L."), + new Codec("vp6a", "On2 VP6 (Flash version, with alpha channel)", "D.V.L."), + new Codec("vp6f", "On2 VP6 (Flash version)", "D.V.L."), + new Codec("vp7", "On2 VP7", "D.V.L."), + new Codec("vp8", "On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv ) (encoders: libvpx )", "DEV.L."), + new Codec("vp9", "Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid vp9_qsv ) (encoders: libvpx-vp9 vp9_qsv )", "DEV.L."), + new Codec("wcmv", "WinCAM Motion Video", "D.V..S"), + new Codec("webp", "WebP (encoders: libwebp_anim libwebp )", "DEVILS"), + new Codec("wmv1", "Windows Media Video 7", "DEV.L."), + new Codec("wmv2", "Windows Media Video 8", "DEV.L."), + new Codec("wmv3", "Windows Media Video 9", "D.V.L."), + new Codec("wmv3image", "Windows Media Video 9 Image", "D.V.L."), + new Codec("wnv1", "Winnov WNV1", "D.VIL."), + new Codec("wrapped_avframe", "AVFrame to AVPacket passthrough", "DEV..S"), + new Codec("ws_vqa", "Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo )", "D.V.L."), + new Codec("xan_wc3", "Wing Commander III / Xan", "D.V.L."), + new Codec("xan_wc4", "Wing Commander IV / Xxan", "D.V.L."), + new Codec("xbin", "eXtended BINary text", "D.VI.."), + new Codec("xbm", "XBM (X BitMap) image", "DEVI.S"), + new Codec("xface", "X-face image", "DEVIL."), + new Codec("xpm", "XPM (X PixMap) image", "D.VI.S"), + new Codec("xwd", "XWD (X Window Dump) image", "DEVI.S"), + new Codec("y41p", "Uncompressed YUV 4:1:1 12-bit", "DEVI.S"), + new Codec("ylc", "YUY2 Lossless Codec", "D.VI.S"), + new Codec("yop", "Psygnosis YOP Video", "D.V.L."), + new Codec("yuv4", "Uncompressed packed 4:2:0", "DEVI.S"), + new Codec("zerocodec", "ZeroCodec Lossless Video", "D.V..S"), + new Codec("zlib", "LCL (LossLess Codec Library) ZLIB", "DEVI.S"), + new Codec("zmbv", "Zip Motion Blocks Video", "DEV..S"), + new Codec("4gv", "4GV (Fourth Generation Vocoder)", "..AIL."), + new Codec("8svx_exp", "8SVX exponential", "D.AIL."), + new Codec("8svx_fib", "8SVX fibonacci", "D.AIL."), + new Codec("aac", "AAC (Advanced Audio Coding) (decoders: aac aac_fixed )", "DEAIL."), + new Codec("aac_latm", "AAC LATM (Advanced Audio Coding LATM syntax)", "D.AIL."), + new Codec("ac3", "ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed ) (encoders: ac3 ac3_fixed )", "DEAIL."), + new Codec("acelp.kelvin", "Sipro ACELP.KELVIN", "D.AIL."), + new Codec("adpcm_4xm", "ADPCM 4X Movie", "D.AIL."), + new Codec("adpcm_adx", "SEGA CRI ADX ADPCM", "DEAIL."), + new Codec("adpcm_afc", "ADPCM Nintendo Gamecube AFC", "D.AIL."), + new Codec("adpcm_agm", "ADPCM AmuseGraphics Movie AGM", "D.AIL."), + new Codec("adpcm_aica", "ADPCM Yamaha AICA", "D.AIL."), + new Codec("adpcm_ct", "ADPCM Creative Technology", "D.AIL."), + new Codec("adpcm_dtk", "ADPCM Nintendo Gamecube DTK", "D.AIL."), + new Codec("adpcm_ea", "ADPCM Electronic Arts", "D.AIL."), + new Codec("adpcm_ea_maxis_xa", "ADPCM Electronic Arts Maxis CDROM XA", "D.AIL."), + new Codec("adpcm_ea_r1", "ADPCM Electronic Arts R1", "D.AIL."), + new Codec("adpcm_ea_r2", "ADPCM Electronic Arts R2", "D.AIL."), + new Codec("adpcm_ea_r3", "ADPCM Electronic Arts R3", "D.AIL."), + new Codec("adpcm_ea_xas", "ADPCM Electronic Arts XAS", "D.AIL."), + new Codec("adpcm_g722", "G.722 ADPCM (decoders: g722 ) (encoders: g722 )", "DEAIL."), + new Codec("adpcm_g726", "G.726 ADPCM (decoders: g726 ) (encoders: g726 )", "DEAIL."), + new Codec("adpcm_g726le", "G.726 ADPCM little-endian (decoders: g726le ) (encoders: g726le )", "DEAIL."), + new Codec("adpcm_ima_amv", "ADPCM IMA AMV", "D.AIL."), + new Codec("adpcm_ima_apc", "ADPCM IMA CRYO APC", "D.AIL."), + new Codec("adpcm_ima_dat4", "ADPCM IMA Eurocom DAT4", "D.AIL."), + new Codec("adpcm_ima_dk3", "ADPCM IMA Duck DK3", "D.AIL."), + new Codec("adpcm_ima_dk4", "ADPCM IMA Duck DK4", "D.AIL."), + new Codec("adpcm_ima_ea_eacs", "ADPCM IMA Electronic Arts EACS", "D.AIL."), + new Codec("adpcm_ima_ea_sead", "ADPCM IMA Electronic Arts SEAD", "D.AIL."), + new Codec("adpcm_ima_iss", "ADPCM IMA Funcom ISS", "D.AIL."), + new Codec("adpcm_ima_oki", "ADPCM IMA Dialogic OKI", "D.AIL."), + new Codec("adpcm_ima_qt", "ADPCM IMA QuickTime", "DEAIL."), + new Codec("adpcm_ima_rad", "ADPCM IMA Radical", "D.AIL."), + new Codec("adpcm_ima_smjpeg", "ADPCM IMA Loki SDL MJPEG", "D.AIL."), + new Codec("adpcm_ima_wav", "ADPCM IMA WAV", "DEAIL."), + new Codec("adpcm_ima_ws", "ADPCM IMA Westwood", "D.AIL."), + new Codec("adpcm_ms", "ADPCM Microsoft", "DEAIL."), + new Codec("adpcm_mtaf", "ADPCM MTAF", "D.AIL."), + new Codec("adpcm_psx", "ADPCM Playstation", "D.AIL."), + new Codec("adpcm_sbpro_2", "ADPCM Sound Blaster Pro 2-bit", "D.AIL."), + new Codec("adpcm_sbpro_3", "ADPCM Sound Blaster Pro 2.6-bit", "D.AIL."), + new Codec("adpcm_sbpro_4", "ADPCM Sound Blaster Pro 4-bit", "D.AIL."), + new Codec("adpcm_swf", "ADPCM Shockwave Flash", "DEAIL."), + new Codec("adpcm_thp", "ADPCM Nintendo THP", "D.AIL."), + new Codec("adpcm_thp_le", "ADPCM Nintendo THP (Little-Endian)", "D.AIL."), + new Codec("adpcm_vima", "LucasArts VIMA audio", "D.AIL."), + new Codec("adpcm_xa", "ADPCM CDROM XA", "D.AIL."), + new Codec("adpcm_yamaha", "ADPCM Yamaha", "DEAIL."), + new Codec("alac", "ALAC (Apple Lossless Audio Codec)", "DEAI.S"), + new Codec("amr_nb", "AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )", "DEAIL."), + new Codec("amr_wb", "AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc )", "DEAIL."), + new Codec("ape", "Monkey's Audio", "D.AI.S"), + new Codec("aptx", "aptX (Audio Processing Technology for Bluetooth)", "DEAIL."), + new Codec("aptx_hd", "aptX HD (Audio Processing Technology for Bluetooth)", "DEAIL."), + new Codec("atrac1", "ATRAC1 (Adaptive TRansform Acoustic Coding)", "D.AIL."), + new Codec("atrac3", "ATRAC3 (Adaptive TRansform Acoustic Coding 3)", "D.AIL."), + new Codec("atrac3al", "ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless)", "D.AI.S"), + new Codec("atrac3p", "ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus )", "D.AIL."), + new Codec("atrac3pal", "ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless) (decoders: atrac3plusal )", "D.AI.S"), + new Codec("atrac9", "ATRAC9 (Adaptive TRansform Acoustic Coding 9)", "D.AIL."), + new Codec("avc", "On2 Audio for Video Codec (decoders: on2avc )", "D.AIL."), + new Codec("binkaudio_dct", "Bink Audio (DCT)", "D.AIL."), + new Codec("binkaudio_rdft", "Bink Audio (RDFT)", "D.AIL."), + new Codec("bmv_audio", "Discworld II BMV audio", "D.AIL."), + new Codec("celt", "Constrained Energy Lapped Transform (CELT)", "..AIL."), + new Codec("codec2", "codec2 (very low bitrate speech codec)", "..AIL."), + new Codec("comfortnoise", "RFC 3389 Comfort Noise", "DEAIL."), + new Codec("cook", "Cook / Cooker / Gecko (RealAudio G2)", "D.AIL."), + new Codec("dolby_e", "Dolby E", "D.AIL."), + new Codec("dsd_lsbf", "DSD (Direct Stream Digital), least significant bit first", "D.AIL."), + new Codec("dsd_lsbf_planar", "DSD (Direct Stream Digital), least significant bit first, planar", "D.AIL."), + new Codec("dsd_msbf", "DSD (Direct Stream Digital), most significant bit first", "D.AIL."), + new Codec("dsd_msbf_planar", "DSD (Direct Stream Digital), most significant bit first, planar", "D.AIL."), + new Codec("dsicinaudio", "Delphine Software International CIN audio", "D.AIL."), + new Codec("dss_sp", "Digital Speech Standard - Standard Play mode (DSS SP)", "D.AIL."), + new Codec("dst", "DST (Direct Stream Transfer)", "D.AI.S"), + new Codec("dts", "DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca )", "DEAILS"), + new Codec("dvaudio", "DV audio", "D.AIL."), + new Codec("eac3", "ATSC A/52B (AC-3, E-AC-3)", "DEAIL."), + new Codec("evrc", "EVRC (Enhanced Variable Rate Codec)", "D.AIL."), + new Codec("flac", "FLAC (Free Lossless Audio Codec)", "DEAI.S"), + new Codec("g723_1", "G.723.1", "DEAIL."), + new Codec("g729", "G.729", "D.AIL."), + new Codec("gremlin_dpcm", "DPCM Gremlin", "D.AIL."), + new Codec("gsm", "GSM", "D.AIL."), + new Codec("gsm_ms", "GSM Microsoft variant", "D.AIL."), + new Codec("hcom", "HCOM Audio", "D.AIL."), + new Codec("iac", "IAC (Indeo Audio Coder)", "D.AIL."), + new Codec("ilbc", "iLBC (Internet Low Bitrate Codec)", "D.AIL."), + new Codec("imc", "IMC (Intel Music Coder)", "D.AIL."), + new Codec("interplay_dpcm", "DPCM Interplay", "D.AIL."), + new Codec("interplayacm", "Interplay ACM", "D.AIL."), + new Codec("mace3", "MACE (Macintosh Audio Compression/Expansion) 3:1", "D.AIL."), + new Codec("mace6", "MACE (Macintosh Audio Compression/Expansion) 6:1", "D.AIL."), + new Codec("metasound", "Voxware MetaSound", "D.AIL."), + new Codec("mlp", "MLP (Meridian Lossless Packing)", "DEAI.S"), + new Codec("mp1", "MP1 (MPEG audio layer 1) (decoders: mp1 mp1float )", "D.AIL."), + new Codec("mp2", "MP2 (MPEG audio layer 2) (decoders: mp2 mp2float ) (encoders: mp2 mp2fixed libtwolame )", "DEAIL."), + new Codec("mp3", "MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame libshine )", "DEAIL."), + new Codec("mp3adu", "ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu )", "D.AIL."), + new Codec("mp3on4", "MP3onMP4 (decoders: mp3on4float mp3on4 )", "D.AIL."), + new Codec("mp4als", "MPEG-4 Audio Lossless Coding (ALS) (decoders: als )", "D.AI.S"), + new Codec("mpegh_3d_audio", "MPEG-H 3D Audio", "..A.L."), + new Codec("musepack7", "Musepack SV7 (decoders: mpc7 )", "D.AIL."), + new Codec("musepack8", "Musepack SV8 (decoders: mpc8 )", "D.AIL."), + new Codec("nellymoser", "Nellymoser Asao", "DEAIL."), + new Codec("opus", "Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: opus libopus )", "DEAIL."), + new Codec("paf_audio", "Amazing Studio Packed Animation File Audio", "D.AIL."), + new Codec("pcm_alaw", "PCM A-law / G.711 A-law", "DEAIL."), + new Codec("pcm_bluray", "PCM signed 16|20|24-bit big-endian for Blu-ray media", "D.AI.S"), + new Codec("pcm_dvd", "PCM signed 20|24-bit big-endian", "DEAI.S"), + new Codec("pcm_f16le", "PCM 16.8 floating point little-endian", "D.AI.S"), + new Codec("pcm_f24le", "PCM 24.0 floating point little-endian", "D.AI.S"), + new Codec("pcm_f32be", "PCM 32-bit floating point big-endian", "DEAI.S"), + new Codec("pcm_f32le", "PCM 32-bit floating point little-endian", "DEAI.S"), + new Codec("pcm_f64be", "PCM 64-bit floating point big-endian", "DEAI.S"), + new Codec("pcm_f64le", "PCM 64-bit floating point little-endian", "DEAI.S"), + new Codec("pcm_lxf", "PCM signed 20-bit little-endian planar", "D.AI.S"), + new Codec("pcm_mulaw", "PCM mu-law / G.711 mu-law", "DEAIL."), + new Codec("pcm_s16be", "PCM signed 16-bit big-endian", "DEAI.S"), + new Codec("pcm_s16be_planar", "PCM signed 16-bit big-endian planar", "DEAI.S"), + new Codec("pcm_s16le", "PCM signed 16-bit little-endian", "DEAI.S"), + new Codec("pcm_s16le_planar", "PCM signed 16-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s24be", "PCM signed 24-bit big-endian", "DEAI.S"), + new Codec("pcm_s24daud", "PCM D-Cinema audio signed 24-bit", "DEAI.S"), + new Codec("pcm_s24le", "PCM signed 24-bit little-endian", "DEAI.S"), + new Codec("pcm_s24le_planar", "PCM signed 24-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s32be", "PCM signed 32-bit big-endian", "DEAI.S"), + new Codec("pcm_s32le", "PCM signed 32-bit little-endian", "DEAI.S"), + new Codec("pcm_s32le_planar", "PCM signed 32-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s64be", "PCM signed 64-bit big-endian", "DEAI.S"), + new Codec("pcm_s64le", "PCM signed 64-bit little-endian", "DEAI.S"), + new Codec("pcm_s8", "PCM signed 8-bit", "DEAI.S"), + new Codec("pcm_s8_planar", "PCM signed 8-bit planar", "DEAI.S"), + new Codec("pcm_u16be", "PCM unsigned 16-bit big-endian", "DEAI.S"), + new Codec("pcm_u16le", "PCM unsigned 16-bit little-endian", "DEAI.S"), + new Codec("pcm_u24be", "PCM unsigned 24-bit big-endian", "DEAI.S"), + new Codec("pcm_u24le", "PCM unsigned 24-bit little-endian", "DEAI.S"), + new Codec("pcm_u32be", "PCM unsigned 32-bit big-endian", "DEAI.S"), + new Codec("pcm_u32le", "PCM unsigned 32-bit little-endian", "DEAI.S"), + new Codec("pcm_u8", "PCM unsigned 8-bit", "DEAI.S"), + new Codec("pcm_vidc", "PCM Archimedes VIDC", "DEAIL."), + new Codec("pcm_zork", "PCM Zork", "D.AIL."), + new Codec("qcelp", "QCELP / PureVoice", "D.AIL."), + new Codec("qdm2", "QDesign Music Codec 2", "D.AIL."), + new Codec("qdmc", "QDesign Music", "D.AIL."), + new Codec("ra_144", "RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 )", "DEAIL."), + new Codec("ra_288", "RealAudio 2.0 (28.8K) (decoders: real_288 )", "D.AIL."), + new Codec("ralf", "RealAudio Lossless", "D.AI.S"), + new Codec("roq_dpcm", "DPCM id RoQ", "DEAIL."), + new Codec("s302m", "SMPTE 302M", "DEAI.S"), + new Codec("sbc", "SBC (low-complexity subband codec)", "DEAIL."), + new Codec("sdx2_dpcm", "DPCM Squareroot-Delta-Exact", "D.AIL."), + new Codec("shorten", "Shorten", "D.AI.S"), + new Codec("sipr", "RealAudio SIPR / ACELP.NET", "D.AIL."), + new Codec("smackaudio", "Smacker audio (decoders: smackaud )", "D.AIL."), + new Codec("smv", "SMV (Selectable Mode Vocoder)", "..AIL."), + new Codec("sol_dpcm", "DPCM Sol", "D.AIL."), + new Codec("sonic", "Sonic", "DEAI.."), + new Codec("sonicls", "Sonic lossless", ".EAI.."), + new Codec("speex", "Speex (decoders: libspeex ) (encoders: libspeex )", "DEAIL."), + new Codec("tak", "TAK (Tom's lossless Audio Kompressor)", "D.AI.S"), + new Codec("truehd", "TrueHD", "DEA..S"), + new Codec("truespeech", "DSP Group TrueSpeech", "D.AIL."), + new Codec("tta", "TTA (True Audio)", "DEAI.S"), + new Codec("twinvq", "VQF TwinVQ", "D.AIL."), + new Codec("vmdaudio", "Sierra VMD audio", "D.AIL."), + new Codec("vorbis", "Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis )", "DEAIL."), + new Codec("wavesynth", "Wave synthesis pseudo-codec", "D.AI.."), + new Codec("wavpack", "WavPack (encoders: wavpack libwavpack )", "DEAILS"), + new Codec("westwood_snd1", "Westwood Audio (SND1) (decoders: ws_snd1 )", "D.AIL."), + new Codec("wmalossless", "Windows Media Audio Lossless", "D.AI.S"), + new Codec("wmapro", "Windows Media Audio 9 Professional", "D.AIL."), + new Codec("wmav1", "Windows Media Audio 1", "DEAIL."), + new Codec("wmav2", "Windows Media Audio 2", "DEAIL."), + new Codec("wmavoice", "Windows Media Audio Voice", "D.AIL."), + new Codec("xan_dpcm", "DPCM Xan", "D.AIL."), + new Codec("xma1", "Xbox Media Audio 1", "D.AIL."), + new Codec("xma2", "Xbox Media Audio 2", "D.AIL."), + new Codec("bin_data", "binary data", "..D..."), + new Codec("dvd_nav_packet", "DVD Nav packet", "..D..."), + new Codec("epg", "Electronic Program Guide", "..D..."), + new Codec("klv", "SMPTE 336M Key-Length-Value (KLV) metadata", "..D..."), + new Codec("otf", "OpenType font", "..D..."), + new Codec("scte_35", "SCTE 35 Message Queue", "..D..."), + new Codec("timed_id3", "timed ID3 metadata", "..D..."), + new Codec("ttf", "TrueType font", "..D..."), + new Codec("arib_caption", "ARIB STD-B24 caption", "..S..."), + new Codec("ass", "ASS (Advanced SSA) subtitle (decoders: ssa ass ) (encoders: ssa ass )", "DES..."), + new Codec("dvb_subtitle", "DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )", "DES..."), + new Codec("dvb_teletext", "DVB teletext", "..S..."), + new Codec("dvd_subtitle", "DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )", "DES..."), + new Codec("eia_608", "EIA-608 closed captions (decoders: cc_dec )", "D.S..."), + new Codec("hdmv_pgs_subtitle", "HDMV Presentation Graphic Stream subtitles (decoders: pgssub )", "D.S..."), + new Codec("hdmv_text_subtitle", "HDMV Text subtitle", "..S..."), + new Codec("jacosub", "JACOsub subtitle", "D.S..."), + new Codec("microdvd", "MicroDVD subtitle", "D.S..."), + new Codec("mov_text", "MOV text", "DES..."), + new Codec("mpl2", "MPL2 subtitle", "D.S..."), + new Codec("pjs", "PJS (Phoenix Japanimation Society) subtitle", "D.S..."), + new Codec("realtext", "RealText subtitle", "D.S..."), + new Codec("sami", "SAMI subtitle", "D.S..."), + new Codec("srt", "SubRip subtitle with embedded timing", "..S..."), + new Codec("ssa", "SSA (SubStation Alpha) subtitle", "..S..."), + new Codec("stl", "Spruce subtitle format", "D.S..."), + new Codec("subrip", "SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip )", "DES..."), + new Codec("subviewer", "SubViewer subtitle", "D.S..."), + new Codec("subviewer1", "SubViewer v1 subtitle", "D.S..."), + new Codec("text", "raw UTF-8 text", "DES..."), + new Codec("ttml", "Timed Text Markup Language", "..S..."), + new Codec("vplayer", "VPlayer subtitle", "D.S..."), + new Codec("webvtt", "WebVTT subtitle", "DES..."), + new Codec("xsub", "XSUB", "DES...")) + .build(); } diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-codecs b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-codecs index bd0bff32..bffca34f 100644 --- a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-codecs +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-codecs @@ -4,328 +4,469 @@ Codecs: ..V... = Video codec ..A... = Audio codec ..S... = Subtitle codec - ...S.. = Supports draw_horiz_band - ....D. = Supports direct rendering method 1 - .....T = Supports weird frame truncation - ------ - D V D 4xm 4X Movie - D V D 8bps QuickTime 8BPS video - D A D 8svx_exp 8SVX exponential - D A D 8svx_fib 8SVX fibonacci - EV a64multi Multicolor charset for Commodore 64 - DEA D aac Advanced Audio Coding - D A D aac_latm AAC LATM (Advanced Audio Codec LATM syntax) - D V D aasc Autodesk RLE - DEA D ac3 ATSC A/52A (AC-3) - EA ac3_fixed ATSC A/52A (AC-3) - D A D adpcm_4xm ADPCM 4X Movie - DEA D adpcm_adx SEGA CRI ADX ADPCM - D A D adpcm_ct ADPCM Creative Technology - D A D adpcm_ea ADPCM Electronic Arts - D A D adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA - D A D adpcm_ea_r1 ADPCM Electronic Arts R1 - D A D adpcm_ea_r2 ADPCM Electronic Arts R2 - D A D adpcm_ea_r3 ADPCM Electronic Arts R3 - D A D adpcm_ea_xas ADPCM Electronic Arts XAS - D A D adpcm_ima_amv ADPCM IMA AMV - D A D adpcm_ima_apc ADPCM IMA CRYO APC - D A D adpcm_ima_dk3 ADPCM IMA Duck DK3 - D A D adpcm_ima_dk4 ADPCM IMA Duck DK4 - D A D adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS - D A D adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD - D A D adpcm_ima_iss ADPCM IMA Funcom ISS - DEA D adpcm_ima_qt ADPCM IMA QuickTime - D A D adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG - DEA D adpcm_ima_wav ADPCM IMA WAV - D A D adpcm_ima_ws ADPCM IMA Westwood - DEA D adpcm_ms ADPCM Microsoft - D A D adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit - D A D adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit - D A D adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit - DEA D adpcm_swf ADPCM Shockwave Flash - D A D adpcm_thp ADPCM Nintendo Gamecube THP - D A D adpcm_xa ADPCM CDROM XA - DEA D adpcm_yamaha ADPCM Yamaha - DEA D alac ALAC (Apple Lossless Audio Codec) - D A D als MPEG-4 Audio Lossless Coding (ALS) - D A D amrnb Adaptive Multi-Rate NarrowBand - D A D amrwb Adaptive Multi-Rate WideBand - DEV amv AMV Video - D V D anm Deluxe Paint Animation - D V D ansi ASCII/ANSI art - D A D ape Monkey's Audio - DES ass Advanced SubStation Alpha subtitle - DEV D asv1 ASUS V1 - DEV D asv2 ASUS V2 - D A D atrac1 Atrac 1 (Adaptive TRansform Acoustic Coding) - D A D atrac3 Atrac 3 (Adaptive TRansform Acoustic Coding 3) - D V D aura Auravision AURA - D V D aura2 Auravision Aura 2 - DEV D avrp Avid 1:1 10-bit RGB Packer - D V D avs AVS (Audio Video Standard) video - D V D bethsoftvid Bethesda VID video - D V D bfi Brute Force & Ignorance - D A D binkaudio_dct Bink Audio (DCT) - D A D binkaudio_rdft Bink Audio (RDFT) - D V binkvideo Bink video - D V D bintext Binary text - DEV D bmp BMP image - D A D bmv_audio Discworld II BMV audio - D V bmv_video Discworld II BMV video - D V D c93 Interplay C93 - D V D camstudio CamStudio - D V D camtasia TechSmith Screen Capture Codec - D V D cavs Chinese AVS video (AVS1-P2, JiZhun profile) - D V D cdgraphics CD Graphics video - D V D cinepak Cinepak - DEV D cljr Cirrus Logic AccuPak - D A D cook COOK - D V D cyuv Creative YUV (CYUV) - DEA D dca DCA (DTS Coherent Acoustics) - D V D dfa Chronomaster DFA - D V dirac BBC Dirac VC-2 - DEV D dnxhd VC3/DNxHD - DEV dpx DPX image - D A D dsicinaudio Delphine Software International CIN audio - D V D dsicinvideo Delphine Software International CIN video - DES dvbsub DVB subtitles - DES dvdsub DVD subtitles - DEV D dvvideo DV (Digital Video) - D V D dxa Feeble Files/ScummVM DXA - D V D dxtory Dxtory - DEA D eac3 ATSC A/52 E-AC-3 - D V D eacmv Electronic Arts CMV video - D V D eamad Electronic Arts Madcow Video - D V D eatgq Electronic Arts TGQ video - D V eatgv Electronic Arts TGV video - D V D eatqi Electronic Arts TQI Video - D V D escape124 Escape 124 - D V D escape130 Escape 130 - DEV D ffv1 FFmpeg video codec #1 - DEVSD ffvhuff Huffyuv FFmpeg variant - DEA D flac FLAC (Free Lossless Audio Codec) - DEV D flashsv Flash Screen Video - DEV D flashsv2 Flash Screen Video Version 2 - D V D flic Autodesk Animator Flic video - DEVSD flv Flash Video (FLV) / Sorenson Spark / Sorenson H.263 - D V D fraps Fraps - D V D frwu Forward Uncompressed - DEA D g722 G.722 ADPCM - DEA g723_1 G.723.1 - DEA D g726 G.726 ADPCM - D A D g729 G.729 - DEV D gif GIF (Graphics Interchange Format) - D A D gsm GSM - D A D gsm_ms GSM Microsoft variant - DEV D h261 H.261 - DEVSDT h263 H.263 / H.263-1996 - D VSD h263i Intel H.263 - EV h263p H.263+ / H.263-1998 / H.263 version 2 - D V D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 - DEVSD huffyuv Huffyuv / HuffYUV - D V D idcinvideo id Quake II CIN video - D V D idf iCEDraw text - D V D iff_byterun1 IFF ByteRun1 - D V D iff_ilbm IFF ILBM - D A D imc IMC (Intel Music Coder) - D V D indeo2 Intel Indeo 2 - D V indeo3 Intel Indeo 3 - D V indeo4 Intel Indeo Video Interactive 4 - D V indeo5 Intel Indeo Video Interactive 5 - D A D interplay_dpcm DPCM Interplay - D V D interplayvideo Interplay MVE video - DEV j2k JPEG 2000 - DEV D jpegls JPEG-LS - D V D jv Bitmap Brothers JV video - D V kgv1 Kega Game Video - D V D kmvc Karl Morton's video codec - D V D lagarith Lagarith lossless - DEA D libgsm libgsm GSM - DEA D libgsm_ms libgsm GSM Microsoft variant - EA libmp3lame libmp3lame MP3 (MPEG audio layer 3) - DEV D libopenjpeg OpenJPEG based JPEG 2000 encoder - DEV libschroedinger libschroedinger Dirac 2.2 - DEA D libspeex libspeex Speex - EV libtheora libtheora Theora - EA libvorbis libvorbis Vorbis - DEV libvpx libvpx VP8 - EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 - EV libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB - EV ljpeg Lossless JPEG - D V D loco LOCO - D A D mace3 MACE (Macintosh Audio Compression/Expansion) 3:1 - D A D mace6 MACE (Macintosh Audio Compression/Expansion) 6:1 - D V D mdec Sony PlayStation MDEC (Motion DECoder) - D V D mimic Mimic - DEV D mjpeg MJPEG (Motion JPEG) - D V D mjpegb Apple MJPEG-B - D A D mlp MLP (Meridian Lossless Packing) - D V D mmvideo American Laser Games MM Video - D V D motionpixels Motion Pixels video - D A D mp1 MP1 (MPEG audio layer 1) - D A D mp1float MP1 (MPEG audio layer 1) - DEA D mp2 MP2 (MPEG audio layer 2) - D A D mp2float MP2 (MPEG audio layer 2) - D A D mp3 MP3 (MPEG audio layer 3) - D A D mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3) - D A D mp3adufloat ADU (Application Data Unit) MP3 (MPEG audio layer 3) - D A D mp3float MP3 (MPEG audio layer 3) - D A D mp3on4 MP3onMP4 - D A D mp3on4float MP3onMP4 - D A D mpc7 Musepack SV7 - D A D mpc8 Musepack SV8 - DEVSDT mpeg1video MPEG-1 video - D V DT mpeg1video_vdpau MPEG-1 video (VDPAU acceleration) - DEVSDT mpeg2video MPEG-2 video - DEVSDT mpeg4 MPEG-4 part 2 - D V DT mpeg4_vdpau MPEG-4 part 2 (VDPAU) - D VSDT mpegvideo MPEG-1 video - D V DT mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration) - D VSDT mpegvideo_xvmc MPEG-1/2 video XvMC (X-Video Motion Compensation) - DEVSD msmpeg4 MPEG-4 part 2 Microsoft variant version 3 - D VSD msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1 - DEVSD msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2 - D V D msrle Microsoft RLE - DEV D msvideo1 Microsoft Video-1 - D V D mszh LCL (LossLess Codec Library) MSZH - D V D mxpeg Mobotix MxPEG video - DEA D nellymoser Nellymoser Asao - D V D nuv NuppelVideo/RTJPEG - DEV D pam PAM (Portable AnyMap) image - DEV D pbm PBM (Portable BitMap) image - DEA D pcm_alaw PCM A-law - D A D pcm_bluray PCM signed 16|20|24-bit big-endian for Blu-ray media - D A D pcm_dvd PCM signed 20|24-bit big-endian - DEA D pcm_f32be PCM 32-bit floating point big-endian - DEA D pcm_f32le PCM 32-bit floating point little-endian - DEA D pcm_f64be PCM 64-bit floating point big-endian - DEA D pcm_f64le PCM 64-bit floating point little-endian - D A D pcm_lxf PCM signed 20-bit little-endian planar - DEA D pcm_mulaw PCM mu-law - DEA D pcm_s16be PCM signed 16-bit big-endian - DEA D pcm_s16le PCM signed 16-bit little-endian - D A D pcm_s16le_planar PCM 16-bit little-endian planar - DEA D pcm_s24be PCM signed 24-bit big-endian - DEA D pcm_s24daud PCM D-Cinema audio signed 24-bit - DEA D pcm_s24le PCM signed 24-bit little-endian - DEA D pcm_s32be PCM signed 32-bit big-endian - DEA D pcm_s32le PCM signed 32-bit little-endian - DEA D pcm_s8 PCM signed 8-bit - D A D pcm_s8_planar PCM signed 8-bit planar - DEA D pcm_u16be PCM unsigned 16-bit big-endian - DEA D pcm_u16le PCM unsigned 16-bit little-endian - DEA D pcm_u24be PCM unsigned 24-bit big-endian - DEA D pcm_u24le PCM unsigned 24-bit little-endian - DEA D pcm_u32be PCM unsigned 32-bit big-endian - DEA D pcm_u32le PCM unsigned 32-bit little-endian - DEA D pcm_u8 PCM unsigned 8-bit - D A D pcm_zork PCM Zork - DEV D pcx PC Paintbrush PCX image - DEV D pgm PGM (Portable GrayMap) image - DEV D pgmyuv PGMYUV (Portable GrayMap YUV) image - D S pgssub HDMV Presentation Graphic Stream subtitles - D V D pictor Pictor/PC Paint - DEV D png PNG image - DEV D ppm PPM (Portable PixelMap) image - DEV D prores Apple ProRes - D V D prores_lgpl Apple ProRes (iCodec Pro) - D V D ptx V.Flash PTX image - D A D qcelp QCELP / PureVoice - D A D qdm2 QDesign Music Codec 2 - D V D qdraw Apple QuickDraw - D V D qpeg Q-team QPEG - DEV D qtrle QuickTime Animation (RLE) video - DEV D r10k AJA Kona 10-bit RGB Codec - DEV D r210 Uncompressed RGB 10-bit - DEV rawvideo raw video - DEA D real_144 RealAudio 1.0 (14.4K) encoder - D A D real_288 RealAudio 2.0 (28.8K) - D V D rl2 RL2 video - DEA D roq_dpcm id RoQ DPCM - DEV D roqvideo id RoQ video - D V D rpza QuickTime video (RPZA) - DEV D rv10 RealVideo 1.0 - DEV D rv20 RealVideo 2.0 - D V D rv30 RealVideo 3.0 - D V D rv40 RealVideo 4.0 - D A D s302m SMPTE 302M - DEV sgi SGI image - D A D shorten Shorten - D A D sipr RealAudio SIPR / ACELP.NET - D A D smackaud Smacker audio - D V D smackvid Smacker video - D V D smc QuickTime Graphics (SMC) - DEV D snow Snow - D A D sol_dpcm DPCM Sol - DEA D sonic Sonic - EA sonicls Sonic lossless - D V D sp5x Sunplus JPEG (SP5X) - DES srt SubRip subtitle - D V D sunrast Sun Rasterfile image - DEV D svq1 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1 - D VSD svq3 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3 - DEV D targa Truevision Targa image - D VSD theora Theora - D V D thp Nintendo Gamecube THP video - D V D tiertexseqvideo Tiertex Limited SEQ video - DEV D tiff TIFF image - D V D tmv 8088flex TMV - D A D truehd TrueHD - D V D truemotion1 Duck TrueMotion 1.0 - D V D truemotion2 Duck TrueMotion 2.0 - D A D truespeech DSP Group TrueSpeech - D A D tta True Audio (TTA) - D A D twinvq VQF TwinVQ - D V D txd Renderware TXD (TeXture Dictionary) image - D V D ultimotion IBM UltiMotion - D V D utvideo Ut Video - DEV D v210 Uncompressed 4:2:2 10-bit - D V D v210x Uncompressed 4:2:2 10-bit - DEV D v308 Uncompressed packed 4:4:4 - DEV D v410 Uncompressed 4:4:4 10-bit - D V vb Beam Software VB - D V D vble VBLE Lossless Codec - D V D vc1 SMPTE VC-1 - D V D vc1_vdpau SMPTE VC-1 VDPAU - D V D vc1image Windows Media Video 9 Image v2 - D V D vcr1 ATI VCR1 - D A D vmdaudio Sierra VMD audio - D V D vmdvideo Sierra VMD video - D V D vmnc VMware Screen Codec / VMware Video - DEA D vorbis Vorbis - D VSD vp3 On2 VP3 - D V D vp5 On2 VP5 - D V D vp6 On2 VP6 - D V D vp6a On2 VP6 (Flash version, with alpha channel) - D V D vp6f On2 VP6 (Flash version) - D V D vp8 On2 VP8 - D V D vqavideo Westwood Studios VQA (Vector Quantized Animation) video - D A D wavesynth Wave synthesis pseudo-codec - D A D wavpack WavPack - D A wmalossless Windows Media Audio 9 Lossless - D A D wmapro Windows Media Audio 9 Professional - DEA D wmav1 Windows Media Audio 1 - DEA D wmav2 Windows Media Audio 2 - D A D wmavoice Windows Media Audio Voice - DEVSD wmv1 Windows Media Video 7 - DEVSD wmv2 Windows Media Video 8 - D V D wmv3 Windows Media Video 9 - D V D wmv3_vdpau Windows Media Video 9 VDPAU - D V D wmv3image Windows Media Video 9 Image - D V D wnv1 Winnov WNV1 - D A D ws_snd1 Westwood Audio (SND1) - D A D xan_dpcm DPCM Xan - D V D xan_wc3 Wing Commander III / Xan - D V D xan_wc4 Wing Commander IV / Xxan - D V D xbin eXtended BINary text - D V D xl Miro VideoXL - DES xsub DivX subtitles (XSUB) - DEV D xwd XWD (X Window Dump) image - DEV D y41p Uncompressed YUV 4:1:1 12-bit - D V yop Psygnosis YOP Video - DEV D yuv4 Uncompressed packed 4:2:0 - DEV D zlib LCL (LossLess Codec Library) ZLIB - DEV D zmbv Zip Motion Blocks Video + ...I.. = Intra frame-only codec + ....L. = Lossy compression + .....S = Lossless compression + ------- + D.VI.S 012v Uncompressed 4:2:2 10-bit + D.V.L. 4xm 4X Movie + D.VI.S 8bps QuickTime 8BPS video + .EVIL. a64_multi Multicolor charset for Commodore 64 (encoders: a64multi ) + .EVIL. a64_multi5 Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 ) + D.V..S aasc Autodesk RLE + D.V.L. agm Amuse Graphics Movie + D.VIL. aic Apple Intermediate Codec + DEVI.S alias_pix Alias/Wavefront PIX image + DEVIL. amv AMV Video + D.V.L. anm Deluxe Paint Animation + D.V.L. ansi ASCII/ANSI art + DEV..S apng APNG (Animated Portable Network Graphics) image + D.V.L. arbc Gryphon's Anim Compressor + DEVIL. asv1 ASUS V1 + DEVIL. asv2 ASUS V2 + D.VIL. aura Auravision AURA + D.VIL. aura2 Auravision Aura 2 + DEV.L. av1 Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 ) (encoders: libaom-av1 ) + D.V... avrn Avid AVI Codec + DEVI.S avrp Avid 1:1 10-bit RGB Packer + D.V.L. avs AVS (Audio Video Standard) video + ..V.L. avs2 AVS2-P2/IEEE1857.4 + DEVI.S avui Avid Meridien Uncompressed + DEVI.S ayuv Uncompressed packed MS 4:4:4:4 + D.V.L. bethsoftvid Bethesda VID video + D.V.L. bfi Brute Force & Ignorance + D.V.L. binkvideo Bink video + D.VI.. bintext Binary text + D.VI.S bitpacked Bitpacked + DEVI.S bmp BMP (Windows and OS/2 bitmap) + D.V..S bmv_video Discworld II BMV video + D.VI.S brender_pix BRender PIX image + D.V.L. c93 Interplay C93 + D.V.L. cavs Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile) + D.V.L. cdgraphics CD Graphics video + D.VIL. cdxl Commodore CDXL video + D.V.L. cfhd Cineform HD + DEV.L. cinepak Cinepak + D.V.L. clearvideo Iterated Systems ClearVideo + DEVIL. cljr Cirrus Logic AccuPak + D.VI.S cllc Canopus Lossless Codec + D.V.L. cmv Electronic Arts CMV video (decoders: eacmv ) + D.V... cpia CPiA video format + D.V..S cscd CamStudio (decoders: camstudio ) + D.VIL. cyuv Creative YUV (CYUV) + ..V.LS daala Daala + D.VILS dds DirectDraw Surface image decoder + D.V.L. dfa Chronomaster DFA + DEV.LS dirac Dirac (encoders: vc2 ) + DEVIL. dnxhd VC3/DNxHD + DEVI.S dpx DPX (Digital Picture Exchange) image + D.V.L. dsicinvideo Delphine Software International CIN video + DEVIL. dvvideo DV (Digital Video) + D.V..S dxa Feeble Files/ScummVM DXA + D.VI.S dxtory Dxtory + D.VIL. dxv Resolume DXV + D.V.L. escape124 Escape 124 + D.V.L. escape130 Escape 130 + D.VILS exr OpenEXR image + DEV..S ffv1 FFmpeg video codec #1 + DEVI.S ffvhuff Huffyuv FFmpeg variant + D.V.L. fic Mirillis FIC + DEVI.S fits FITS (Flexible Image Transport System) + DEV..S flashsv Flash Screen Video v1 + DEV.L. flashsv2 Flash Screen Video v2 + D.V..S flic Autodesk Animator Flic video + DEV.L. flv1 FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv ) + D.V..S fmvc FM Screen Capture Codec + D.VI.S fraps Fraps + D.VI.S frwu Forward Uncompressed + D.V.L. g2m Go2Meeting + D.V.L. gdv Gremlin Digital Video + DEV..S gif CompuServe GIF (Graphics Interchange Format) + DEV.L. h261 H.261 + DEV.L. h263 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 + D.V.L. h263i Intel H.263 + DEV.L. h263p H.263+ / H.263-1998 / H.263 version 2 + DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_nvenc h264_qsv nvenc nvenc_h264 ) + DEVIL. hap Vidvox Hap + DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv ) + D.V.L. hnm4video HNM 4 video + D.VIL. hq_hqa Canopus HQ/HQA + D.VIL. hqx Canopus HQX + DEVI.S huffyuv HuffYUV + D.VI.S hymt HuffYUV MT + D.V.L. idcin id Quake II CIN video (decoders: idcinvideo ) + D.VI.. idf iCEDraw text + D.V.L. iff_ilbm IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (decoders: iff ) + D.V.L. imm4 Infinity IMM4 + D.V.L. imm5 Infinity IMM5 + D.V.L. indeo2 Intel Indeo 2 + D.V.L. indeo3 Intel Indeo 3 + D.V.L. indeo4 Intel Indeo Video Interactive 4 + D.V.L. indeo5 Intel Indeo Video Interactive 5 + D.V.L. interplayvideo Interplay MVE video + DEVILS jpeg2000 JPEG 2000 (decoders: jpeg2000 libopenjpeg ) (encoders: jpeg2000 libopenjpeg ) + DEVILS jpegls JPEG-LS + D.VIL. jv Bitmap Brothers JV video + D.V.L. kgv1 Kega Game Video + D.V.L. kmvc Karl Morton's video codec + D.VI.S lagarith Lagarith lossless + .EVI.S ljpeg Lossless JPEG + D.VI.S loco LOCO + D.V.L. lscr LEAD Screen Capture + D.VI.S m101 Matrox Uncompressed SD + D.V.L. mad Electronic Arts Madcow Video (decoders: eamad ) + DEVI.S magicyuv MagicYUV video + D.VIL. mdec Sony PlayStation MDEC (Motion DECoder) + D.V.L. mimic Mimic + DEVIL. mjpeg Motion JPEG (decoders: mjpeg mjpeg_cuvid mjpeg_qsv ) (encoders: mjpeg mjpeg_qsv ) + D.VIL. mjpegb Apple MJPEG-B + D.V.L. mmvideo American Laser Games MM Video + D.V.L. motionpixels Motion Pixels video + DEV.L. mpeg1video MPEG-1 video (decoders: mpeg1video mpeg1_cuvid ) + DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv mpeg2_cuvid ) (encoders: mpeg2video mpeg2_qsv ) + DEV.L. mpeg4 MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid ) (encoders: mpeg4 libxvid ) + D.V.L. msa1 MS ATC Screen + D.VI.S mscc Mandsoft Screen Capture Codec + D.V.L. msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1 + DEV.L. msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2 + DEV.L. msmpeg4v3 MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 ) + D.V..S msrle Microsoft RLE + D.V.L. mss1 MS Screen 1 + D.VIL. mss2 MS Windows Media Video V9 Screen + DEV.L. msvideo1 Microsoft Video 1 + D.VI.S mszh LCL (LossLess Codec Library) MSZH + D.V.L. mts2 MS Expression Encoder Screen + D.VIL. mvc1 Silicon Graphics Motion Video Compressor 1 + D.VIL. mvc2 Silicon Graphics Motion Video Compressor 2 + D.V.L. mvdv MidiVid VQ + D.VIL. mvha MidiVid Archive Codec + D.V..S mwsc MatchWare Screen Capture Codec + D.V.L. mxpeg Mobotix MxPEG video + D.V.L. nuv NuppelVideo/RTJPEG + D.V.L. paf_video Amazing Studio Packed Animation File Video + DEVI.S pam PAM (Portable AnyMap) image + DEVI.S pbm PBM (Portable BitMap) image + DEVI.S pcx PC Paintbrush PCX image + DEVI.S pgm PGM (Portable GrayMap) image + DEVI.S pgmyuv PGMYUV (Portable GrayMap YUV) image + D.VIL. pictor Pictor/PC Paint + D.VIL. pixlet Apple Pixlet + DEV..S png PNG (Portable Network Graphics) image + DEVI.S ppm PPM (Portable PixelMap) image + DEVIL. prores Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks ) + D.VIL. prosumer Brooktree ProSumer Video + D.VI.S psd Photoshop PSD file + D.VIL. ptx V.Flash PTX image + D.VI.S qdraw Apple QuickDraw + D.V.L. qpeg Q-team QPEG + DEV..S qtrle QuickTime Animation (RLE) video + DEVI.S r10k AJA Kona 10-bit RGB Codec + DEVI.S r210 Uncompressed RGB 10-bit + D.V.L. rasc RemotelyAnywhere Screen Capture + DEVI.S rawvideo raw video + D.VIL. rl2 RL2 video + DEV.L. roq id RoQ video (decoders: roqvideo ) (encoders: roqvideo ) + D.V.L. rpza QuickTime video (RPZA) + D.V..S rscc innoHeim/Rsupport Screen Capture Codec + DEV.L. rv10 RealVideo 1.0 + DEV.L. rv20 RealVideo 2.0 + D.V.L. rv30 RealVideo 3.0 + D.V.L. rv40 RealVideo 4.0 + D.V.L. sanm LucasArts SANM/SMUSH video + D.V.LS scpr ScreenPressor + D.V..S screenpresso Screenpresso + DEVI.S sgi SGI image + D.VI.S sgirle SGI RLE 8-bit + D.VI.S sheervideo BitJazz SheerVideo + D.V.L. smackvideo Smacker video (decoders: smackvid ) + D.V.L. smc QuickTime Graphics (SMC) + D.V... smvjpeg Sigmatel Motion Video + DEV.LS snow Snow + D.VIL. sp5x Sunplus JPEG (SP5X) + D.VIL. speedhq NewTek SpeedHQ + D.VI.S srgc Screen Recorder Gold Codec + DEVI.S sunrast Sun Rasterfile image + ..V..S svg Scalable Vector Graphics + DEV.L. svq1 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1 + D.V.L. svq3 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3 + DEVI.S targa Truevision Targa image + D.VI.S targa_y216 Pinnacle TARGA CineWave YUV16 + D.V.L. tdsc TDSC + D.V.L. tgq Electronic Arts TGQ video (decoders: eatgq ) + D.V.L. tgv Electronic Arts TGV video (decoders: eatgv ) + DEV.L. theora Theora (encoders: libtheora ) + D.VIL. thp Nintendo Gamecube THP video + D.V.L. tiertexseqvideo Tiertex Limited SEQ video + DEVI.S tiff TIFF image + D.VIL. tmv 8088flex TMV + D.V.L. tqi Electronic Arts TQI video (decoders: eatqi ) + D.V.L. truemotion1 Duck TrueMotion 1.0 + D.V.L. truemotion2 Duck TrueMotion 2.0 + D.VIL. truemotion2rt Duck TrueMotion 2.0 Real Time + D.V..S tscc TechSmith Screen Capture Codec (decoders: camtasia ) + D.V.L. tscc2 TechSmith Screen Codec 2 + D.VIL. txd Renderware TXD (TeXture Dictionary) image + D.V.L. ulti IBM UltiMotion (decoders: ultimotion ) + DEVI.S utvideo Ut Video + DEVI.S v210 Uncompressed 4:2:2 10-bit + D.VI.S v210x Uncompressed 4:2:2 10-bit + DEVI.S v308 Uncompressed packed 4:4:4 + DEVI.S v408 Uncompressed packed QT 4:4:4:4 + DEVI.S v410 Uncompressed 4:4:4 10-bit + D.V.L. vb Beam Software VB + D.VI.S vble VBLE Lossless Codec + D.V.L. vc1 SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_cuvid ) + D.V.L. vc1image Windows Media Video 9 Image v2 + D.VIL. vcr1 ATI VCR1 + D.VIL. vixl Miro VideoXL (decoders: xl ) + D.V.L. vmdvideo Sierra VMD video + D.V..S vmnc VMware Screen Codec / VMware Video + D.V.L. vp3 On2 VP3 + D.V.L. vp4 On2 VP4 + D.V.L. vp5 On2 VP5 + D.V.L. vp6 On2 VP6 + D.V.L. vp6a On2 VP6 (Flash version, with alpha channel) + D.V.L. vp6f On2 VP6 (Flash version) + D.V.L. vp7 On2 VP7 + DEV.L. vp8 On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv ) (encoders: libvpx ) + DEV.L. vp9 Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid vp9_qsv ) (encoders: libvpx-vp9 vp9_qsv ) + D.V..S wcmv WinCAM Motion Video + DEVILS webp WebP (encoders: libwebp_anim libwebp ) + DEV.L. wmv1 Windows Media Video 7 + DEV.L. wmv2 Windows Media Video 8 + D.V.L. wmv3 Windows Media Video 9 + D.V.L. wmv3image Windows Media Video 9 Image + D.VIL. wnv1 Winnov WNV1 + DEV..S wrapped_avframe AVFrame to AVPacket passthrough + D.V.L. ws_vqa Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo ) + D.V.L. xan_wc3 Wing Commander III / Xan + D.V.L. xan_wc4 Wing Commander IV / Xxan + D.VI.. xbin eXtended BINary text + DEVI.S xbm XBM (X BitMap) image + DEVIL. xface X-face image + D.VI.S xpm XPM (X PixMap) image + DEVI.S xwd XWD (X Window Dump) image + DEVI.S y41p Uncompressed YUV 4:1:1 12-bit + D.VI.S ylc YUY2 Lossless Codec + D.V.L. yop Psygnosis YOP Video + DEVI.S yuv4 Uncompressed packed 4:2:0 + D.V..S zerocodec ZeroCodec Lossless Video + DEVI.S zlib LCL (LossLess Codec Library) ZLIB + DEV..S zmbv Zip Motion Blocks Video + ..AIL. 4gv 4GV (Fourth Generation Vocoder) + D.AIL. 8svx_exp 8SVX exponential + D.AIL. 8svx_fib 8SVX fibonacci + DEAIL. aac AAC (Advanced Audio Coding) (decoders: aac aac_fixed ) + D.AIL. aac_latm AAC LATM (Advanced Audio Coding LATM syntax) + DEAIL. ac3 ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed ) (encoders: ac3 ac3_fixed ) + D.AIL. acelp.kelvin Sipro ACELP.KELVIN + D.AIL. adpcm_4xm ADPCM 4X Movie + DEAIL. adpcm_adx SEGA CRI ADX ADPCM + D.AIL. adpcm_afc ADPCM Nintendo Gamecube AFC + D.AIL. adpcm_agm ADPCM AmuseGraphics Movie AGM + D.AIL. adpcm_aica ADPCM Yamaha AICA + D.AIL. adpcm_ct ADPCM Creative Technology + D.AIL. adpcm_dtk ADPCM Nintendo Gamecube DTK + D.AIL. adpcm_ea ADPCM Electronic Arts + D.AIL. adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA + D.AIL. adpcm_ea_r1 ADPCM Electronic Arts R1 + D.AIL. adpcm_ea_r2 ADPCM Electronic Arts R2 + D.AIL. adpcm_ea_r3 ADPCM Electronic Arts R3 + D.AIL. adpcm_ea_xas ADPCM Electronic Arts XAS + DEAIL. adpcm_g722 G.722 ADPCM (decoders: g722 ) (encoders: g722 ) + DEAIL. adpcm_g726 G.726 ADPCM (decoders: g726 ) (encoders: g726 ) + DEAIL. adpcm_g726le G.726 ADPCM little-endian (decoders: g726le ) (encoders: g726le ) + D.AIL. adpcm_ima_amv ADPCM IMA AMV + D.AIL. adpcm_ima_apc ADPCM IMA CRYO APC + D.AIL. adpcm_ima_dat4 ADPCM IMA Eurocom DAT4 + D.AIL. adpcm_ima_dk3 ADPCM IMA Duck DK3 + D.AIL. adpcm_ima_dk4 ADPCM IMA Duck DK4 + D.AIL. adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS + D.AIL. adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD + D.AIL. adpcm_ima_iss ADPCM IMA Funcom ISS + D.AIL. adpcm_ima_oki ADPCM IMA Dialogic OKI + DEAIL. adpcm_ima_qt ADPCM IMA QuickTime + D.AIL. adpcm_ima_rad ADPCM IMA Radical + D.AIL. adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG + DEAIL. adpcm_ima_wav ADPCM IMA WAV + D.AIL. adpcm_ima_ws ADPCM IMA Westwood + DEAIL. adpcm_ms ADPCM Microsoft + D.AIL. adpcm_mtaf ADPCM MTAF + D.AIL. adpcm_psx ADPCM Playstation + D.AIL. adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit + D.AIL. adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit + D.AIL. adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit + DEAIL. adpcm_swf ADPCM Shockwave Flash + D.AIL. adpcm_thp ADPCM Nintendo THP + D.AIL. adpcm_thp_le ADPCM Nintendo THP (Little-Endian) + D.AIL. adpcm_vima LucasArts VIMA audio + D.AIL. adpcm_xa ADPCM CDROM XA + DEAIL. adpcm_yamaha ADPCM Yamaha + DEAI.S alac ALAC (Apple Lossless Audio Codec) + DEAIL. amr_nb AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb ) + DEAIL. amr_wb AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc ) + D.AI.S ape Monkey's Audio + DEAIL. aptx aptX (Audio Processing Technology for Bluetooth) + DEAIL. aptx_hd aptX HD (Audio Processing Technology for Bluetooth) + D.AIL. atrac1 ATRAC1 (Adaptive TRansform Acoustic Coding) + D.AIL. atrac3 ATRAC3 (Adaptive TRansform Acoustic Coding 3) + D.AI.S atrac3al ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless) + D.AIL. atrac3p ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus ) + D.AI.S atrac3pal ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless) (decoders: atrac3plusal ) + D.AIL. atrac9 ATRAC9 (Adaptive TRansform Acoustic Coding 9) + D.AIL. avc On2 Audio for Video Codec (decoders: on2avc ) + D.AIL. binkaudio_dct Bink Audio (DCT) + D.AIL. binkaudio_rdft Bink Audio (RDFT) + D.AIL. bmv_audio Discworld II BMV audio + ..AIL. celt Constrained Energy Lapped Transform (CELT) + ..AIL. codec2 codec2 (very low bitrate speech codec) + DEAIL. comfortnoise RFC 3389 Comfort Noise + D.AIL. cook Cook / Cooker / Gecko (RealAudio G2) + D.AIL. dolby_e Dolby E + D.AIL. dsd_lsbf DSD (Direct Stream Digital), least significant bit first + D.AIL. dsd_lsbf_planar DSD (Direct Stream Digital), least significant bit first, planar + D.AIL. dsd_msbf DSD (Direct Stream Digital), most significant bit first + D.AIL. dsd_msbf_planar DSD (Direct Stream Digital), most significant bit first, planar + D.AIL. dsicinaudio Delphine Software International CIN audio + D.AIL. dss_sp Digital Speech Standard - Standard Play mode (DSS SP) + D.AI.S dst DST (Direct Stream Transfer) + DEAILS dts DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca ) + D.AIL. dvaudio DV audio + DEAIL. eac3 ATSC A/52B (AC-3, E-AC-3) + D.AIL. evrc EVRC (Enhanced Variable Rate Codec) + DEAI.S flac FLAC (Free Lossless Audio Codec) + DEAIL. g723_1 G.723.1 + D.AIL. g729 G.729 + D.AIL. gremlin_dpcm DPCM Gremlin + D.AIL. gsm GSM + D.AIL. gsm_ms GSM Microsoft variant + D.AIL. hcom HCOM Audio + D.AIL. iac IAC (Indeo Audio Coder) + D.AIL. ilbc iLBC (Internet Low Bitrate Codec) + D.AIL. imc IMC (Intel Music Coder) + D.AIL. interplay_dpcm DPCM Interplay + D.AIL. interplayacm Interplay ACM + D.AIL. mace3 MACE (Macintosh Audio Compression/Expansion) 3:1 + D.AIL. mace6 MACE (Macintosh Audio Compression/Expansion) 6:1 + D.AIL. metasound Voxware MetaSound + DEAI.S mlp MLP (Meridian Lossless Packing) + D.AIL. mp1 MP1 (MPEG audio layer 1) (decoders: mp1 mp1float ) + DEAIL. mp2 MP2 (MPEG audio layer 2) (decoders: mp2 mp2float ) (encoders: mp2 mp2fixed libtwolame ) + DEAIL. mp3 MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame libshine ) + D.AIL. mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu ) + D.AIL. mp3on4 MP3onMP4 (decoders: mp3on4float mp3on4 ) + D.AI.S mp4als MPEG-4 Audio Lossless Coding (ALS) (decoders: als ) + ..A.L. mpegh_3d_audio MPEG-H 3D Audio + D.AIL. musepack7 Musepack SV7 (decoders: mpc7 ) + D.AIL. musepack8 Musepack SV8 (decoders: mpc8 ) + DEAIL. nellymoser Nellymoser Asao + DEAIL. opus Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: opus libopus ) + D.AIL. paf_audio Amazing Studio Packed Animation File Audio + DEAIL. pcm_alaw PCM A-law / G.711 A-law + D.AI.S pcm_bluray PCM signed 16|20|24-bit big-endian for Blu-ray media + DEAI.S pcm_dvd PCM signed 20|24-bit big-endian + D.AI.S pcm_f16le PCM 16.8 floating point little-endian + D.AI.S pcm_f24le PCM 24.0 floating point little-endian + DEAI.S pcm_f32be PCM 32-bit floating point big-endian + DEAI.S pcm_f32le PCM 32-bit floating point little-endian + DEAI.S pcm_f64be PCM 64-bit floating point big-endian + DEAI.S pcm_f64le PCM 64-bit floating point little-endian + D.AI.S pcm_lxf PCM signed 20-bit little-endian planar + DEAIL. pcm_mulaw PCM mu-law / G.711 mu-law + DEAI.S pcm_s16be PCM signed 16-bit big-endian + DEAI.S pcm_s16be_planar PCM signed 16-bit big-endian planar + DEAI.S pcm_s16le PCM signed 16-bit little-endian + DEAI.S pcm_s16le_planar PCM signed 16-bit little-endian planar + DEAI.S pcm_s24be PCM signed 24-bit big-endian + DEAI.S pcm_s24daud PCM D-Cinema audio signed 24-bit + DEAI.S pcm_s24le PCM signed 24-bit little-endian + DEAI.S pcm_s24le_planar PCM signed 24-bit little-endian planar + DEAI.S pcm_s32be PCM signed 32-bit big-endian + DEAI.S pcm_s32le PCM signed 32-bit little-endian + DEAI.S pcm_s32le_planar PCM signed 32-bit little-endian planar + DEAI.S pcm_s64be PCM signed 64-bit big-endian + DEAI.S pcm_s64le PCM signed 64-bit little-endian + DEAI.S pcm_s8 PCM signed 8-bit + DEAI.S pcm_s8_planar PCM signed 8-bit planar + DEAI.S pcm_u16be PCM unsigned 16-bit big-endian + DEAI.S pcm_u16le PCM unsigned 16-bit little-endian + DEAI.S pcm_u24be PCM unsigned 24-bit big-endian + DEAI.S pcm_u24le PCM unsigned 24-bit little-endian + DEAI.S pcm_u32be PCM unsigned 32-bit big-endian + DEAI.S pcm_u32le PCM unsigned 32-bit little-endian + DEAI.S pcm_u8 PCM unsigned 8-bit + DEAIL. pcm_vidc PCM Archimedes VIDC + D.AIL. pcm_zork PCM Zork + D.AIL. qcelp QCELP / PureVoice + D.AIL. qdm2 QDesign Music Codec 2 + D.AIL. qdmc QDesign Music + DEAIL. ra_144 RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 ) + D.AIL. ra_288 RealAudio 2.0 (28.8K) (decoders: real_288 ) + D.AI.S ralf RealAudio Lossless + DEAIL. roq_dpcm DPCM id RoQ + DEAI.S s302m SMPTE 302M + DEAIL. sbc SBC (low-complexity subband codec) + D.AIL. sdx2_dpcm DPCM Squareroot-Delta-Exact + D.AI.S shorten Shorten + D.AIL. sipr RealAudio SIPR / ACELP.NET + D.AIL. smackaudio Smacker audio (decoders: smackaud ) + ..AIL. smv SMV (Selectable Mode Vocoder) + D.AIL. sol_dpcm DPCM Sol + DEAI.. sonic Sonic + .EAI.. sonicls Sonic lossless + DEAIL. speex Speex (decoders: libspeex ) (encoders: libspeex ) + D.AI.S tak TAK (Tom's lossless Audio Kompressor) + DEA..S truehd TrueHD + D.AIL. truespeech DSP Group TrueSpeech + DEAI.S tta TTA (True Audio) + D.AIL. twinvq VQF TwinVQ + D.AIL. vmdaudio Sierra VMD audio + DEAIL. vorbis Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis ) + D.AI.. wavesynth Wave synthesis pseudo-codec + DEAILS wavpack WavPack (encoders: wavpack libwavpack ) + D.AIL. westwood_snd1 Westwood Audio (SND1) (decoders: ws_snd1 ) + D.AI.S wmalossless Windows Media Audio Lossless + D.AIL. wmapro Windows Media Audio 9 Professional + DEAIL. wmav1 Windows Media Audio 1 + DEAIL. wmav2 Windows Media Audio 2 + D.AIL. wmavoice Windows Media Audio Voice + D.AIL. xan_dpcm DPCM Xan + D.AIL. xma1 Xbox Media Audio 1 + D.AIL. xma2 Xbox Media Audio 2 + ..D... bin_data binary data + ..D... dvd_nav_packet DVD Nav packet + ..D... epg Electronic Program Guide + ..D... klv SMPTE 336M Key-Length-Value (KLV) metadata + ..D... otf OpenType font + ..D... scte_35 SCTE 35 Message Queue + ..D... timed_id3 timed ID3 metadata + ..D... ttf TrueType font + ..S... arib_caption ARIB STD-B24 caption + DES... ass ASS (Advanced SSA) subtitle (decoders: ssa ass ) (encoders: ssa ass ) + DES... dvb_subtitle DVB subtitles (decoders: dvbsub ) (encoders: dvbsub ) + ..S... dvb_teletext DVB teletext + DES... dvd_subtitle DVD subtitles (decoders: dvdsub ) (encoders: dvdsub ) + D.S... eia_608 EIA-608 closed captions (decoders: cc_dec ) + D.S... hdmv_pgs_subtitle HDMV Presentation Graphic Stream subtitles (decoders: pgssub ) + ..S... hdmv_text_subtitle HDMV Text subtitle + D.S... jacosub JACOsub subtitle + D.S... microdvd MicroDVD subtitle + DES... mov_text MOV text + D.S... mpl2 MPL2 subtitle + D.S... pjs PJS (Phoenix Japanimation Society) subtitle + D.S... realtext RealText subtitle + D.S... sami SAMI subtitle + ..S... srt SubRip subtitle with embedded timing + ..S... ssa SSA (SubStation Alpha) subtitle + D.S... stl Spruce subtitle format + DES... subrip SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip ) + D.S... subviewer SubViewer subtitle + D.S... subviewer1 SubViewer v1 subtitle + DES... text raw UTF-8 text + ..S... ttml Timed Text Markup Language + D.S... vplayer VPlayer subtitle + DES... webvtt WebVTT subtitle + DES... xsub XSUB Note, the names of encoders and decoders do not always match, so there are several cases where the above table shows encoder only or decoder only entries From 2e19872b7f2181fbf455a25e4cb20c208ac4ed81 Mon Sep 17 00:00:00 2001 From: xmg333 <1318834675@qq.com> Date: Sat, 6 Aug 2022 04:56:09 +0800 Subject: [PATCH 013/101] public the Enum Codec.Type --- .../java/net/bramp/ffmpeg/info/Codec.java | 2 +- .../bramp/ffmpeg/info/FFmpegGetInfoTest.java | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index d33aa5e2..130bdbf5 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -13,7 +13,7 @@ @Immutable public class Codec { - enum Type { + public enum Type { VIDEO, AUDIO, SUBTITLE, diff --git a/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java new file mode 100644 index 00000000..325f9341 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java @@ -0,0 +1,42 @@ +package net.bramp.ffmpeg.info; + + +import net.bramp.ffmpeg.FFmpeg; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class FFmpegGetInfoTest { + + private List videoCodecs = new ArrayList<>(); + private List audioCodecs = new ArrayList<>(); + private List subtitleCodecs = new ArrayList<>(); + + @Test + public void getFFmpegCodecSupportTest() throws IOException { + FFmpeg ffmpeg = new FFmpeg("D:\\Downloads\\ffmpeg\\bin\\ffmpeg.exe"); + ffmpeg.codecs(); + + for (Codec codec : ffmpeg.codecs()) { + switch (codec.getType()){ + case VIDEO: + videoCodecs.add(codec); + case AUDIO: + audioCodecs.add(codec); + case SUBTITLE: + subtitleCodecs.add(codec); + + } + } + + System.out.println("Video codecs: " + Arrays.toString(videoCodecs.toArray())); + System.out.println("Audio codecs: " + Arrays.toString(audioCodecs.toArray())); + System.out.println("Subtitle codecs: " + Arrays.toString(subtitleCodecs.toArray())); + } +} From 220248b72ae05ba3e2391e03498904afdaa2f186 Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Sun, 9 Oct 2022 19:27:51 +0200 Subject: [PATCH 014/101] Fix #209 -user-agent tag is not supported --- src/main/java/net/bramp/ffmpeg/FFprobe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFprobe.java b/src/main/java/net/bramp/ffmpeg/FFprobe.java index a353bf07..afecaa3d 100644 --- a/src/main/java/net/bramp/ffmpeg/FFprobe.java +++ b/src/main/java/net/bramp/ffmpeg/FFprobe.java @@ -90,7 +90,7 @@ public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent) thr args.add(path).add("-v", "quiet"); if (userAgent != null) { - args.add("-user-agent", userAgent); + args.add("-user_agent", userAgent); } args.add("-print_format", "json") From ec5fabc3213f154baeed7a5b0d9caeb9ce8bfbbf Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 9 Oct 2022 21:17:38 +0200 Subject: [PATCH 015/101] Fix #264: Add additional CodecTypes to FFmpegStream (#265) Fix #264: Add additional CodecTypes to FFmpegStream --- src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index 92a23639..646be6c4 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -9,10 +9,12 @@ justification = "POJO objects where the fields are populated by gson") public class FFmpegStream { - // TODO Add more CodecTypes public enum CodecType { VIDEO, AUDIO, + SUBTITLE, + DATA, + ATTACHMENT } public int index; From 355006441b8647968825b8ad77eef22188f54537 Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 9 Oct 2022 21:47:26 +0200 Subject: [PATCH 016/101] Fix #262: Add method to load pixel formats (#263) Fix #262: Add method to load pixel formats --- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 38 +++ .../net/bramp/ffmpeg/info/PixelFormat.java | 75 ++++++ .../java/net/bramp/ffmpeg/FFmpegTest.java | 11 + .../bramp/ffmpeg/fixtures/PixelFormats.java | 216 ++++++++++++++++++ .../net/bramp/ffmpeg/fixtures/ffmpeg-pix_fmts | 201 ++++++++++++++++ 5 files changed, 541 insertions(+) create mode 100644 src/main/java/net/bramp/ffmpeg/info/PixelFormat.java create mode 100644 src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-pix_fmts diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index aabc2c46..c3d9f24d 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -17,6 +17,7 @@ import net.bramp.ffmpeg.builder.FFmpegBuilder; import net.bramp.ffmpeg.info.Codec; import net.bramp.ffmpeg.info.Format; +import net.bramp.ffmpeg.info.PixelFormat; import net.bramp.ffmpeg.progress.ProgressListener; import net.bramp.ffmpeg.progress.ProgressParser; import net.bramp.ffmpeg.progress.TcpProgressParser; @@ -64,6 +65,7 @@ public class FFmpeg extends FFcommon { static final Pattern CODECS_REGEX = Pattern.compile("^ ([.D][.E][VASD][.I][.L][.S]) (\\S{2,})\\s+(.*)$"); static final Pattern FORMATS_REGEX = Pattern.compile("^ ([ D][ E]) (\\S+)\\s+(.*)$"); + static final Pattern PIXEL_FORMATS_REGEX = Pattern.compile("^([.I][.O][.H][.P][.B]) (\\S{2,})\\s+(\\d+)\\s+(\\d+)$"); /** Supported codecs */ List codecs = null; @@ -71,6 +73,9 @@ public class FFmpeg extends FFcommon { /** Supported formats */ List formats = null; + /** Supported pixel formats */ + private List pixelFormats = null; + public FFmpeg() throws IOException { this(DEFAULT_PATH, new RunProcessFunction()); } @@ -165,6 +170,39 @@ private void checkIfFFmpeg() throws IllegalArgumentException, IOException { return formats; } + public synchronized List pixelFormats() throws IOException { + checkIfFFmpeg(); + + if (this.pixelFormats == null) { + pixelFormats = new ArrayList<>(); + + Process p = runFunc.run(ImmutableList.of(path, "-pix_fmts")); + try { + BufferedReader r = wrapInReader(p); + String line; + while ((line = r.readLine()) != null) { + Matcher m = PIXEL_FORMATS_REGEX.matcher(line); + if (!m.matches()) + continue; + String flags = m.group(1); + + pixelFormats.add(new PixelFormat( + m.group(2), + Integer.parseInt(m.group(3)), + Integer.parseInt(m.group(4)), + flags)); + } + + throwOnError(p); + this.pixelFormats = ImmutableList.copyOf(pixelFormats); + } finally { + p.destroy(); + } + } + + return pixelFormats; + } + protected ProgressParser createProgressParser(ProgressListener listener) throws IOException { // TODO In future create the best kind for this OS, unix socket, named pipe, or TCP. try { diff --git a/src/main/java/net/bramp/ffmpeg/info/PixelFormat.java b/src/main/java/net/bramp/ffmpeg/info/PixelFormat.java new file mode 100644 index 00000000..c7c09aec --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/PixelFormat.java @@ -0,0 +1,75 @@ +package net.bramp.ffmpeg.info; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class PixelFormat { + private final String name; + private final int numberOfComponents; + private final int bitsPerPixel; + + private final boolean canDecode; + private final boolean canEncode; + private final boolean hardwareAccelerated; + private final boolean palettedFormat; + private final boolean bitstreamFormat; + + public PixelFormat(String name, int numberOfComponents, int bitsPerPixel, String flags) { + this.name = name; + this.numberOfComponents = numberOfComponents; + this.bitsPerPixel = bitsPerPixel; + + this.canDecode = flags.charAt(0) == 'I'; + this.canEncode = flags.charAt(1) == 'O'; + this.hardwareAccelerated = flags.charAt(2) == 'H'; + this.palettedFormat = flags.charAt(3) == 'P'; + this.bitstreamFormat = flags.charAt(4) == 'B'; + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } + + public String getName() { + return name; + } + + public int getBitsPerPixel() { + return bitsPerPixel; + } + + public int getNumberOfComponents() { + return numberOfComponents; + } + + public boolean canEncode() { + return canEncode; + } + + public boolean canDecode() { + return canDecode; + } + + public boolean isHardwareAccelerated() { + return hardwareAccelerated; + } + + public boolean isPalettedFormat() { + return palettedFormat; + } + + public boolean isBitstreamFormat() { + return bitstreamFormat; + } +} diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index eabceca0..f60c3173 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -9,6 +9,7 @@ import java.util.List; import net.bramp.ffmpeg.fixtures.Codecs; import net.bramp.ffmpeg.fixtures.Formats; +import net.bramp.ffmpeg.fixtures.PixelFormats; import net.bramp.ffmpeg.lang.NewProcessAnswer; import org.junit.Before; import org.junit.Test; @@ -30,6 +31,7 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem("-formats"))) .thenAnswer(new NewProcessAnswer("ffmpeg-formats")); when(runFunc.run(argThatHasItem("-codecs"))).thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); + when(runFunc.run(argThatHasItem("-pix_fmts"))).thenAnswer(new NewProcessAnswer("ffmpeg-pix_fmts")); ffmpeg = new FFmpeg(runFunc); } @@ -64,4 +66,13 @@ public void testFormats() throws IOException { verify(runFunc, times(1)).run(argThatHasItem("-formats")); } + + @Test + public void testPixelFormat() throws IOException { + // Run twice, the second should be cached + assertEquals(PixelFormats.PIXEL_FORMATS, ffmpeg.pixelFormats()); + assertEquals(PixelFormats.PIXEL_FORMATS, ffmpeg.pixelFormats()); + + verify(runFunc, times(1)).run(argThatHasItem("-pix_fmts")); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java b/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java new file mode 100644 index 00000000..dc5fb9ac --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java @@ -0,0 +1,216 @@ +package net.bramp.ffmpeg.fixtures; + +import com.google.common.collect.ImmutableList; +import net.bramp.ffmpeg.info.PixelFormat; + +/** + * Class that contains all pixel formats as defined in the unit tests This should not be used as a concise + * list of available pixel formats, as every install of ffmpeg is different. Call ffmpeg.pixelFormats() to + * discover. + */ +public final class PixelFormats +{ + + private PixelFormats() { + throw new AssertionError("No instances for you!"); + } + + public static final ImmutableList PIXEL_FORMATS = + new ImmutableList.Builder() + .add( + new PixelFormat("yuv420p", 3, 12, "IO..."), + new PixelFormat("yuyv422", 3, 16, "IO..."), + new PixelFormat("rgb24", 3, 24, "IO..."), + new PixelFormat("bgr24", 3, 24, "IO..."), + new PixelFormat("yuv422p", 3, 16, "IO..."), + new PixelFormat("yuv444p", 3, 24, "IO..."), + new PixelFormat("yuv410p", 3, 9, "IO..."), + new PixelFormat("yuv411p", 3, 12, "IO..."), + new PixelFormat("gray", 1, 8, "IO..."), + new PixelFormat("monow", 1, 1, "IO..B"), + new PixelFormat("monob", 1, 1, "IO..B"), + new PixelFormat("pal8", 1, 8, "I..P."), + new PixelFormat("yuvj420p", 3, 12, "IO..."), + new PixelFormat("yuvj422p", 3, 16, "IO..."), + new PixelFormat("yuvj444p", 3, 24, "IO..."), + new PixelFormat("uyvy422", 3, 16, "IO..."), + new PixelFormat("uyyvyy411", 3, 12, "....."), + new PixelFormat("bgr8", 3, 8, "IO..."), + new PixelFormat("bgr4", 3, 4, ".O..B"), + new PixelFormat("bgr4_byte", 3, 4, "IO..."), + new PixelFormat("rgb8", 3, 8, "IO..."), + new PixelFormat("rgb4", 3, 4, ".O..B"), + new PixelFormat("rgb4_byte", 3, 4, "IO..."), + new PixelFormat("nv12", 3, 12, "IO..."), + new PixelFormat("nv21", 3, 12, "IO..."), + new PixelFormat("argb", 4, 32, "IO..."), + new PixelFormat("rgba", 4, 32, "IO..."), + new PixelFormat("abgr", 4, 32, "IO..."), + new PixelFormat("bgra", 4, 32, "IO..."), + new PixelFormat("gray16be", 1, 16, "IO..."), + new PixelFormat("gray16le", 1, 16, "IO..."), + new PixelFormat("yuv440p", 3, 16, "IO..."), + new PixelFormat("yuvj440p", 3, 16, "IO..."), + new PixelFormat("yuva420p", 4, 20, "IO..."), + new PixelFormat("rgb48be", 3, 48, "IO..."), + new PixelFormat("rgb48le", 3, 48, "IO..."), + new PixelFormat("rgb565be", 3, 16, "IO..."), + new PixelFormat("rgb565le", 3, 16, "IO..."), + new PixelFormat("rgb555be", 3, 15, "IO..."), + new PixelFormat("rgb555le", 3, 15, "IO..."), + new PixelFormat("bgr565be", 3, 16, "IO..."), + new PixelFormat("bgr565le", 3, 16, "IO..."), + new PixelFormat("bgr555be", 3, 15, "IO..."), + new PixelFormat("bgr555le", 3, 15, "IO..."), + new PixelFormat("vaapi_moco", 0, 0, "..H.."), + new PixelFormat("vaapi_idct", 0, 0, "..H.."), + new PixelFormat("vaapi_vld", 0, 0, "..H.."), + new PixelFormat("yuv420p16le", 3, 24, "IO..."), + new PixelFormat("yuv420p16be", 3, 24, "IO..."), + new PixelFormat("yuv422p16le", 3, 32, "IO..."), + new PixelFormat("yuv422p16be", 3, 32, "IO..."), + new PixelFormat("yuv444p16le", 3, 48, "IO..."), + new PixelFormat("yuv444p16be", 3, 48, "IO..."), + new PixelFormat("dxva2_vld", 0, 0, "..H.."), + new PixelFormat("rgb444le", 3, 12, "IO..."), + new PixelFormat("rgb444be", 3, 12, "IO..."), + new PixelFormat("bgr444le", 3, 12, "IO..."), + new PixelFormat("bgr444be", 3, 12, "IO..."), + new PixelFormat("ya8", 2, 16, "IO..."), + new PixelFormat("bgr48be", 3, 48, "IO..."), + new PixelFormat("bgr48le", 3, 48, "IO..."), + new PixelFormat("yuv420p9be", 3, 13, "IO..."), + new PixelFormat("yuv420p9le", 3, 13, "IO..."), + new PixelFormat("yuv420p10be", 3, 15, "IO..."), + new PixelFormat("yuv420p10le", 3, 15, "IO..."), + new PixelFormat("yuv422p10be", 3, 20, "IO..."), + new PixelFormat("yuv422p10le", 3, 20, "IO..."), + new PixelFormat("yuv444p9be", 3, 27, "IO..."), + new PixelFormat("yuv444p9le", 3, 27, "IO..."), + new PixelFormat("yuv444p10be", 3, 30, "IO..."), + new PixelFormat("yuv444p10le", 3, 30, "IO..."), + new PixelFormat("yuv422p9be", 3, 18, "IO..."), + new PixelFormat("yuv422p9le", 3, 18, "IO..."), + new PixelFormat("gbrp", 3, 24, "IO..."), + new PixelFormat("gbrp9be", 3, 27, "IO..."), + new PixelFormat("gbrp9le", 3, 27, "IO..."), + new PixelFormat("gbrp10be", 3, 30, "IO..."), + new PixelFormat("gbrp10le", 3, 30, "IO..."), + new PixelFormat("gbrp16be", 3, 48, "IO..."), + new PixelFormat("gbrp16le", 3, 48, "IO..."), + new PixelFormat("yuva422p", 4, 24, "IO..."), + new PixelFormat("yuva444p", 4, 32, "IO..."), + new PixelFormat("yuva420p9be", 4, 22, "IO..."), + new PixelFormat("yuva420p9le", 4, 22, "IO..."), + new PixelFormat("yuva422p9be", 4, 27, "IO..."), + new PixelFormat("yuva422p9le", 4, 27, "IO..."), + new PixelFormat("yuva444p9be", 4, 36, "IO..."), + new PixelFormat("yuva444p9le", 4, 36, "IO..."), + new PixelFormat("yuva420p10be", 4, 25, "IO..."), + new PixelFormat("yuva420p10le", 4, 25, "IO..."), + new PixelFormat("yuva422p10be", 4, 30, "IO..."), + new PixelFormat("yuva422p10le", 4, 30, "IO..."), + new PixelFormat("yuva444p10be", 4, 40, "IO..."), + new PixelFormat("yuva444p10le", 4, 40, "IO..."), + new PixelFormat("yuva420p16be", 4, 40, "IO..."), + new PixelFormat("yuva420p16le", 4, 40, "IO..."), + new PixelFormat("yuva422p16be", 4, 48, "IO..."), + new PixelFormat("yuva422p16le", 4, 48, "IO..."), + new PixelFormat("yuva444p16be", 4, 64, "IO..."), + new PixelFormat("yuva444p16le", 4, 64, "IO..."), + new PixelFormat("vdpau", 0, 0, "..H.."), + new PixelFormat("xyz12le", 3, 36, "IO..."), + new PixelFormat("xyz12be", 3, 36, "IO..."), + new PixelFormat("nv16", 3, 16, "....."), + new PixelFormat("nv20le", 3, 20, "....."), + new PixelFormat("nv20be", 3, 20, "....."), + new PixelFormat("rgba64be", 4, 64, "IO..."), + new PixelFormat("rgba64le", 4, 64, "IO..."), + new PixelFormat("bgra64be", 4, 64, "IO..."), + new PixelFormat("bgra64le", 4, 64, "IO..."), + new PixelFormat("yvyu422", 3, 16, "IO..."), + new PixelFormat("ya16be", 2, 32, "IO..."), + new PixelFormat("ya16le", 2, 32, "IO..."), + new PixelFormat("gbrap", 4, 32, "IO..."), + new PixelFormat("gbrap16be", 4, 64, "IO..."), + new PixelFormat("gbrap16le", 4, 64, "IO..."), + new PixelFormat("qsv", 0, 0, "..H.."), + new PixelFormat("mmal", 0, 0, "..H.."), + new PixelFormat("d3d11va_vld", 0, 0, "..H.."), + new PixelFormat("cuda", 0, 0, "..H.."), + new PixelFormat("0rgb", 3, 24, "IO..."), + new PixelFormat("rgb0", 3, 24, "IO..."), + new PixelFormat("0bgr", 3, 24, "IO..."), + new PixelFormat("bgr0", 3, 24, "IO..."), + new PixelFormat("yuv420p12be", 3, 18, "IO..."), + new PixelFormat("yuv420p12le", 3, 18, "IO..."), + new PixelFormat("yuv420p14be", 3, 21, "IO..."), + new PixelFormat("yuv420p14le", 3, 21, "IO..."), + new PixelFormat("yuv422p12be", 3, 24, "IO..."), + new PixelFormat("yuv422p12le", 3, 24, "IO..."), + new PixelFormat("yuv422p14be", 3, 28, "IO..."), + new PixelFormat("yuv422p14le", 3, 28, "IO..."), + new PixelFormat("yuv444p12be", 3, 36, "IO..."), + new PixelFormat("yuv444p12le", 3, 36, "IO..."), + new PixelFormat("yuv444p14be", 3, 42, "IO..."), + new PixelFormat("yuv444p14le", 3, 42, "IO..."), + new PixelFormat("gbrp12be", 3, 36, "IO..."), + new PixelFormat("gbrp12le", 3, 36, "IO..."), + new PixelFormat("gbrp14be", 3, 42, "IO..."), + new PixelFormat("gbrp14le", 3, 42, "IO..."), + new PixelFormat("yuvj411p", 3, 12, "IO..."), + new PixelFormat("bayer_bggr8", 3, 8, "I...."), + new PixelFormat("bayer_rggb8", 3, 8, "I...."), + new PixelFormat("bayer_gbrg8", 3, 8, "I...."), + new PixelFormat("bayer_grbg8", 3, 8, "I...."), + new PixelFormat("bayer_bggr16le", 3, 16, "I...."), + new PixelFormat("bayer_bggr16be", 3, 16, "I...."), + new PixelFormat("bayer_rggb16le", 3, 16, "I...."), + new PixelFormat("bayer_rggb16be", 3, 16, "I...."), + new PixelFormat("bayer_gbrg16le", 3, 16, "I...."), + new PixelFormat("bayer_gbrg16be", 3, 16, "I...."), + new PixelFormat("bayer_grbg16le", 3, 16, "I...."), + new PixelFormat("bayer_grbg16be", 3, 16, "I...."), + new PixelFormat("xvmc", 0, 0, "..H.."), + new PixelFormat("yuv440p10le", 3, 20, "IO..."), + new PixelFormat("yuv440p10be", 3, 20, "IO..."), + new PixelFormat("yuv440p12le", 3, 24, "IO..."), + new PixelFormat("yuv440p12be", 3, 24, "IO..."), + new PixelFormat("ayuv64le", 4, 64, "IO..."), + new PixelFormat("ayuv64be", 4, 64, "....."), + new PixelFormat("videotoolbox_vld", 0, 0, "..H.."), + new PixelFormat("p010le", 3, 15, "IO..."), + new PixelFormat("p010be", 3, 15, "IO..."), + new PixelFormat("gbrap12be", 4, 48, "IO..."), + new PixelFormat("gbrap12le", 4, 48, "IO..."), + new PixelFormat("gbrap10be", 4, 40, "IO..."), + new PixelFormat("gbrap10le", 4, 40, "IO..."), + new PixelFormat("mediacodec", 0, 0, "..H.."), + new PixelFormat("gray12be", 1, 12, "IO..."), + new PixelFormat("gray12le", 1, 12, "IO..."), + new PixelFormat("gray10be", 1, 10, "IO..."), + new PixelFormat("gray10le", 1, 10, "IO..."), + new PixelFormat("p016le", 3, 24, "IO..."), + new PixelFormat("p016be", 3, 24, "IO..."), + new PixelFormat("d3d11", 0, 0, "..H.."), + new PixelFormat("gray9be", 1, 9, "IO..."), + new PixelFormat("gray9le", 1, 9, "IO..."), + new PixelFormat("gbrpf32be", 3, 96, "....."), + new PixelFormat("gbrpf32le", 3, 96, "....."), + new PixelFormat("gbrapf32be", 4, 128, "....."), + new PixelFormat("gbrapf32le", 4, 128, "....."), + new PixelFormat("drm_prime", 0, 0, "..H.."), + new PixelFormat("opencl", 0, 0, "..H.."), + new PixelFormat("gray14be", 1, 14, "IO..."), + new PixelFormat("gray14le", 1, 14, "IO..."), + new PixelFormat("grayf32be", 1, 32, "IO..."), + new PixelFormat("grayf32le", 1, 32, "IO..."), + new PixelFormat("yuva422p12be", 4, 36, "IO..."), + new PixelFormat("yuva422p12le", 4, 36, "IO..."), + new PixelFormat("yuva444p12be", 4, 48, "IO..."), + new PixelFormat("yuva444p12le", 4, 48, "IO..."), + new PixelFormat("nv24", 3, 24, "IO..."), + new PixelFormat("nv42", 3, 24, "IO...") + ) + .build(); +} diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-pix_fmts b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-pix_fmts new file mode 100644 index 00000000..1f508293 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-pix_fmts @@ -0,0 +1,201 @@ +Pixel formats: +I.... = Supported Input format for conversion +.O... = Supported Output format for conversion +..H.. = Hardware accelerated format +...P. = Paletted format +....B = Bitstream format +FLAGS NAME NB_COMPONENTS BITS_PER_PIXEL +----- +IO... yuv420p 3 12 +IO... yuyv422 3 16 +IO... rgb24 3 24 +IO... bgr24 3 24 +IO... yuv422p 3 16 +IO... yuv444p 3 24 +IO... yuv410p 3 9 +IO... yuv411p 3 12 +IO... gray 1 8 +IO..B monow 1 1 +IO..B monob 1 1 +I..P. pal8 1 8 +IO... yuvj420p 3 12 +IO... yuvj422p 3 16 +IO... yuvj444p 3 24 +IO... uyvy422 3 16 +..... uyyvyy411 3 12 +IO... bgr8 3 8 +.O..B bgr4 3 4 +IO... bgr4_byte 3 4 +IO... rgb8 3 8 +.O..B rgb4 3 4 +IO... rgb4_byte 3 4 +IO... nv12 3 12 +IO... nv21 3 12 +IO... argb 4 32 +IO... rgba 4 32 +IO... abgr 4 32 +IO... bgra 4 32 +IO... gray16be 1 16 +IO... gray16le 1 16 +IO... yuv440p 3 16 +IO... yuvj440p 3 16 +IO... yuva420p 4 20 +IO... rgb48be 3 48 +IO... rgb48le 3 48 +IO... rgb565be 3 16 +IO... rgb565le 3 16 +IO... rgb555be 3 15 +IO... rgb555le 3 15 +IO... bgr565be 3 16 +IO... bgr565le 3 16 +IO... bgr555be 3 15 +IO... bgr555le 3 15 +..H.. vaapi_moco 0 0 +..H.. vaapi_idct 0 0 +..H.. vaapi_vld 0 0 +IO... yuv420p16le 3 24 +IO... yuv420p16be 3 24 +IO... yuv422p16le 3 32 +IO... yuv422p16be 3 32 +IO... yuv444p16le 3 48 +IO... yuv444p16be 3 48 +..H.. dxva2_vld 0 0 +IO... rgb444le 3 12 +IO... rgb444be 3 12 +IO... bgr444le 3 12 +IO... bgr444be 3 12 +IO... ya8 2 16 +IO... bgr48be 3 48 +IO... bgr48le 3 48 +IO... yuv420p9be 3 13 +IO... yuv420p9le 3 13 +IO... yuv420p10be 3 15 +IO... yuv420p10le 3 15 +IO... yuv422p10be 3 20 +IO... yuv422p10le 3 20 +IO... yuv444p9be 3 27 +IO... yuv444p9le 3 27 +IO... yuv444p10be 3 30 +IO... yuv444p10le 3 30 +IO... yuv422p9be 3 18 +IO... yuv422p9le 3 18 +IO... gbrp 3 24 +IO... gbrp9be 3 27 +IO... gbrp9le 3 27 +IO... gbrp10be 3 30 +IO... gbrp10le 3 30 +IO... gbrp16be 3 48 +IO... gbrp16le 3 48 +IO... yuva422p 4 24 +IO... yuva444p 4 32 +IO... yuva420p9be 4 22 +IO... yuva420p9le 4 22 +IO... yuva422p9be 4 27 +IO... yuva422p9le 4 27 +IO... yuva444p9be 4 36 +IO... yuva444p9le 4 36 +IO... yuva420p10be 4 25 +IO... yuva420p10le 4 25 +IO... yuva422p10be 4 30 +IO... yuva422p10le 4 30 +IO... yuva444p10be 4 40 +IO... yuva444p10le 4 40 +IO... yuva420p16be 4 40 +IO... yuva420p16le 4 40 +IO... yuva422p16be 4 48 +IO... yuva422p16le 4 48 +IO... yuva444p16be 4 64 +IO... yuva444p16le 4 64 +..H.. vdpau 0 0 +IO... xyz12le 3 36 +IO... xyz12be 3 36 +..... nv16 3 16 +..... nv20le 3 20 +..... nv20be 3 20 +IO... rgba64be 4 64 +IO... rgba64le 4 64 +IO... bgra64be 4 64 +IO... bgra64le 4 64 +IO... yvyu422 3 16 +IO... ya16be 2 32 +IO... ya16le 2 32 +IO... gbrap 4 32 +IO... gbrap16be 4 64 +IO... gbrap16le 4 64 +..H.. qsv 0 0 +..H.. mmal 0 0 +..H.. d3d11va_vld 0 0 +..H.. cuda 0 0 +IO... 0rgb 3 24 +IO... rgb0 3 24 +IO... 0bgr 3 24 +IO... bgr0 3 24 +IO... yuv420p12be 3 18 +IO... yuv420p12le 3 18 +IO... yuv420p14be 3 21 +IO... yuv420p14le 3 21 +IO... yuv422p12be 3 24 +IO... yuv422p12le 3 24 +IO... yuv422p14be 3 28 +IO... yuv422p14le 3 28 +IO... yuv444p12be 3 36 +IO... yuv444p12le 3 36 +IO... yuv444p14be 3 42 +IO... yuv444p14le 3 42 +IO... gbrp12be 3 36 +IO... gbrp12le 3 36 +IO... gbrp14be 3 42 +IO... gbrp14le 3 42 +IO... yuvj411p 3 12 +I.... bayer_bggr8 3 8 +I.... bayer_rggb8 3 8 +I.... bayer_gbrg8 3 8 +I.... bayer_grbg8 3 8 +I.... bayer_bggr16le 3 16 +I.... bayer_bggr16be 3 16 +I.... bayer_rggb16le 3 16 +I.... bayer_rggb16be 3 16 +I.... bayer_gbrg16le 3 16 +I.... bayer_gbrg16be 3 16 +I.... bayer_grbg16le 3 16 +I.... bayer_grbg16be 3 16 +..H.. xvmc 0 0 +IO... yuv440p10le 3 20 +IO... yuv440p10be 3 20 +IO... yuv440p12le 3 24 +IO... yuv440p12be 3 24 +IO... ayuv64le 4 64 +..... ayuv64be 4 64 +..H.. videotoolbox_vld 0 0 +IO... p010le 3 15 +IO... p010be 3 15 +IO... gbrap12be 4 48 +IO... gbrap12le 4 48 +IO... gbrap10be 4 40 +IO... gbrap10le 4 40 +..H.. mediacodec 0 0 +IO... gray12be 1 12 +IO... gray12le 1 12 +IO... gray10be 1 10 +IO... gray10le 1 10 +IO... p016le 3 24 +IO... p016be 3 24 +..H.. d3d11 0 0 +IO... gray9be 1 9 +IO... gray9le 1 9 +..... gbrpf32be 3 96 +..... gbrpf32le 3 96 +..... gbrapf32be 4 128 +..... gbrapf32le 4 128 +..H.. drm_prime 0 0 +..H.. opencl 0 0 +IO... gray14be 1 14 +IO... gray14le 1 14 +IO... grayf32be 1 32 +IO... grayf32le 1 32 +IO... yuva422p12be 4 36 +IO... yuva422p12le 4 36 +IO... yuva444p12be 4 48 +IO... yuva444p12le 4 48 +IO... nv24 3 24 +IO... nv42 3 24 From 2b1f65cd3535742411dbea93270a53f195f20075 Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Sun, 9 Oct 2022 22:46:40 +0200 Subject: [PATCH 017/101] Mock runFunc and add assertions to FFmpegGetInfoTest --- .../bramp/ffmpeg/info/FFmpegGetInfoTest.java | 86 +++++++++++++------ 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java index 325f9341..95a2fef8 100644 --- a/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java +++ b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java @@ -2,41 +2,77 @@ import net.bramp.ffmpeg.FFmpeg; +import net.bramp.ffmpeg.ProcessFunction; +import net.bramp.ffmpeg.lang.NewProcessAnswer; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.mockito.Mockito.when; + @RunWith(MockitoJUnitRunner.class) public class FFmpegGetInfoTest { + @Mock + ProcessFunction runFunc; + + @Before + public void before() throws IOException { + when(runFunc.run(argThatHasItem("-version"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-version")); + + when(runFunc.run(argThatHasItem("-codecs"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); + } + + @Test + public void getFFmpegCodecSupportTest() throws IOException { + List videoCodecs = new ArrayList<>(); + List audioCodecs = new ArrayList<>(); + List subtitleCodecs = new ArrayList<>(); + List dataCodecs = new ArrayList<>(); + List otherCodecs = new ArrayList<>(); - private List videoCodecs = new ArrayList<>(); - private List audioCodecs = new ArrayList<>(); - private List subtitleCodecs = new ArrayList<>(); - - @Test - public void getFFmpegCodecSupportTest() throws IOException { - FFmpeg ffmpeg = new FFmpeg("D:\\Downloads\\ffmpeg\\bin\\ffmpeg.exe"); - ffmpeg.codecs(); - - for (Codec codec : ffmpeg.codecs()) { - switch (codec.getType()){ - case VIDEO: - videoCodecs.add(codec); - case AUDIO: - audioCodecs.add(codec); - case SUBTITLE: - subtitleCodecs.add(codec); - - } - } - - System.out.println("Video codecs: " + Arrays.toString(videoCodecs.toArray())); - System.out.println("Audio codecs: " + Arrays.toString(audioCodecs.toArray())); - System.out.println("Subtitle codecs: " + Arrays.toString(subtitleCodecs.toArray())); + FFmpeg ffmpeg = new FFmpeg("ffmpeg", runFunc); + ffmpeg.codecs(); + + for (Codec codec : ffmpeg.codecs()) { + switch (codec.getType()) { + case VIDEO: + videoCodecs.add(codec); + break; + case AUDIO: + audioCodecs.add(codec); + break; + case SUBTITLE: + subtitleCodecs.add(codec); + break; + case DATA: + dataCodecs.add(codec); + break; + default: + otherCodecs.add(codec); + + } } + + assertThat(videoCodecs, hasSize(245)); + assertThat(audioCodecs, hasSize(180)); + assertThat(subtitleCodecs, hasSize(26)); + assertThat(dataCodecs, hasSize(8)); + assertThat(otherCodecs, hasSize(0)); + + assertThat(videoCodecs, hasItem(hasProperty("name", equalTo("h264")))); + assertThat(audioCodecs, hasItem(hasProperty("name", equalTo("aac")))); + assertThat(subtitleCodecs, hasItem(hasProperty("name", equalTo("ssa")))); + assertThat(dataCodecs, hasItem(hasProperty("name", equalTo("bin_data")))); + } } From 4bfc88b1716d51d3d918c8a7b08a73d8592f2384 Mon Sep 17 00:00:00 2001 From: Euklios Date: Mon, 10 Oct 2022 00:27:02 +0200 Subject: [PATCH 018/101] Fix #266: Add option to specify subtitle codec (#267) Fix #266: Add option to specify subtitle codec --- .../ffmpeg/builder/AbstractFFmpegStreamBuilder.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index ba6ef462..e7fbb3d3 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -90,6 +90,7 @@ public abstract class AbstractFFmpegStreamBuilder build(FFmpegBuilder parent, int pass) { } if (subtitle_enabled) { + if (!Strings.isNullOrEmpty(subtitle_codec)) { + args.add("-scodec", subtitle_codec); + } if (!Strings.isNullOrEmpty(subtitle_preset)) { args.add("-spre", subtitle_preset); } From 59c5a565e617b853f49b2af5fc97042c07857105 Mon Sep 17 00:00:00 2001 From: Jinuk <74256905+jinukix@users.noreply.github.com> Date: Tue, 17 Jan 2023 06:49:14 +0900 Subject: [PATCH 019/101] Add video side_data_list property (#278) Authored-by: jinukix --- .../net/bramp/ffmpeg/probe/FFmpegStream.java | 8 + .../java/net/bramp/ffmpeg/FFprobeTest.java | 17 +++ .../net/bramp/ffmpeg/fixtures/Samples.java | 2 + .../ffmpeg/fixtures/ffprobe-side_data_list | 141 ++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-side_data_list diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index 646be6c4..bd517856 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -65,4 +65,12 @@ public enum CodecType { public FFmpegDisposition disposition; public Map tags; + public SideData[] side_data_list; + + public static class SideData { + + public String side_data_type; + public String displaymatrix; + public int rotation; + } } diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 46ad8935..41075cec 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -50,6 +50,9 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem(Samples.book_with_chapters))) .thenAnswer(new NewProcessAnswer("book_with_chapters.m4b")); + when(runFunc.run(argThatHasItem(Samples.side_data_list))) + .thenAnswer(new NewProcessAnswer("ffprobe-side_data_list")); + ffprobe = new FFprobe(runFunc); } @@ -143,4 +146,18 @@ public void testProbeDivideByZero() throws IOException { // System.out.println(FFmpegUtils.getGson().toJson(info)); } + + @Test + public void testProbeSideDataList() throws IOException { + FFmpegProbeResult info = ffprobe.probe(Samples.side_data_list); + + // Check edge case with a time larger than an integer + assertThat(info.getStreams().get(0).side_data_list.length, is(1)); + assertThat(info.getStreams().get(0).side_data_list[0].side_data_type, is("Display Matrix")); + assertThat( + info.getStreams().get(0).side_data_list[0].displaymatrix, + is( + "\n00000000: 0 -65536 0\n00000001: 65536 0 0\n00000002: 0 0 1073741824\n")); + assertThat(info.getStreams().get(0).side_data_list[0].rotation, is(90)); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java index 1064f244..374d0e68 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java @@ -18,6 +18,8 @@ private Samples() { private static final String book_m4b = "book_with_chapters.m4b"; public static final String book_with_chapters = TEST_PREFIX + book_m4b; + private static final String base_side_data_list = "side_data_list"; + public static final String side_data_list = TEST_PREFIX + base_side_data_list; // We don't have the following files public static final String FAKE_PREFIX = "fake/"; diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-side_data_list b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-side_data_list new file mode 100644 index 00000000..6dd91909 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-side_data_list @@ -0,0 +1,141 @@ +{ + "streams": [ + { + "index": 0, + "codec_name": "h264", + "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", + "profile": "Baseline", + "codec_type": "video", + "codec_tag_string": "avc1", + "codec_tag": "0x31637661", + "width": 1280, + "height": 720, + "coded_width": 1280, + "coded_height": 720, + "closed_captions": 0, + "film_grain": 0, + "has_b_frames": 0, + "pix_fmt": "yuv420p", + "level": 41, + "color_range": "tv", + "color_space": "bt709", + "color_transfer": "bt709", + "color_primaries": "bt709", + "chroma_location": "left", + "field_order": "progressive", + "refs": 1, + "is_avc": "true", + "nal_length_size": "4", + "id": "0x1", + "r_frame_rate": "25/1", + "avg_frame_rate": "25/1", + "time_base": "1/19200", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 100608, + "duration": "5.240000", + "bit_rate": "2228155", + "bits_per_raw_sample": "8", + "nb_frames": "131", + "extradata_size": 29, + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0, + "timed_thumbnails": 0, + "captions": 0, + "descriptions": 0, + "metadata": 0, + "dependent": 0, + "still_image": 0 + }, + "tags": { + "language": "und", + "handler_name": "Core Media Video", + "vendor_id": "[0][0][0][0]" + }, + "side_data_list": [ + { + "side_data_type": "Display Matrix", + "displaymatrix": "\n00000000: 0 -65536 0\n00000001: 65536 0 0\n00000002: 0 0 1073741824\n", + "rotation": 90 + } + ] + }, + { + "index": 1, + "codec_name": "aac", + "codec_long_name": "AAC (Advanced Audio Coding)", + "profile": "LC", + "codec_type": "audio", + "codec_tag_string": "mp4a", + "codec_tag": "0x6134706d", + "sample_fmt": "fltp", + "sample_rate": "44100", + "channels": 2, + "channel_layout": "stereo", + "bits_per_sample": 0, + "id": "0x2", + "r_frame_rate": "0/0", + "avg_frame_rate": "0/0", + "time_base": "1/44100", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 232848, + "duration": "5.280000", + "bit_rate": "95113", + "nb_frames": "229", + "extradata_size": 5, + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0, + "timed_thumbnails": 0, + "captions": 0, + "descriptions": 0, + "metadata": 0, + "dependent": 0, + "still_image": 0 + }, + "tags": { + "language": "und", + "handler_name": "SoundHandler", + "vendor_id": "[0][0][0][0]" + } + } + ], + "format": { + "filename": "Desktop/side_data_list.mp4", + "nb_streams": 2, + "nb_programs": 0, + "format_name": "mov,mp4,m4a,3gp,3g2,mj2", + "format_long_name": "QuickTime / MOV", + "start_time": "0.000000", + "duration": "5.304000", + "size": "1527228", + "bit_rate": "2303511", + "probe_score": 100, + "tags": { + "major_brand": "isom", + "minor_version": "512", + "compatible_brands": "isomiso2avc1mp41", + "encoder": "Lavf58.45.100" + } + } +} From fb26c210a7e3b94dab0a8d3886f7192d79b21a0c Mon Sep 17 00:00:00 2001 From: Ort Date: Wed, 15 Mar 2023 20:24:23 +0300 Subject: [PATCH 020/101] Fix readme to remove a obsolete method (#283) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d16fd1ac..9934b8bd 100644 --- a/README.md +++ b/README.md @@ -54,8 +54,7 @@ FFmpegBuilder builder = new FFmpegBuilder() .setVideoFrameRate(24, 1) // at 24 frames per second .setVideoResolution(640, 480) // at 640x480 resolution - .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs - .done(); + .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL); // Allow FFmpeg to use experimental specs FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); From abcbacf53d942ff2f9223a1e4835f6315d53f852 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 25 Oct 2023 21:49:09 -0700 Subject: [PATCH 021/101] Bumped a bunch of plugin deps to get the project to build again. --- pom.xml | 71 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/pom.xml b/pom.xml index 29c5d4cb..adad636f 100644 --- a/pom.xml +++ b/pom.xml @@ -52,49 +52,49 @@ org.slf4j slf4j-api - 1.7.36 + 2.0.9 com.github.spotbugs spotbugs-annotations - 4.6.0 + 4.8.0 com.google.errorprone error_prone_annotations - 2.12.1 + 2.23.0 com.google.guava guava - 31.1-jre + 32.1.3-jre commons-io commons-io - 2.11.0 + 2.15.0 org.apache.commons commons-lang3 - 3.12.0 + 3.13.0 com.google.code.gson gson - 2.9.0 + 2.10.1 org.modelmapper modelmapper - 3.1.0 + 3.2.0 ch.qos.logback logback-classic - 1.2.11 + 1.4.11 @@ -105,7 +105,7 @@ org.mockito mockito-core - 4.4.0 + 5.6.0 org.hamcrest @@ -125,7 +125,7 @@ org.glassfish.grizzly grizzly-http-server - 3.0.1 + 4.0.0 @@ -221,32 +221,32 @@ org.apache.maven.plugins maven-clean-plugin - 3.2.0 + 3.3.1 org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 org.apache.maven.plugins maven-resources-plugin - 3.2.0 + 3.3.1 org.apache.maven.plugins maven-site-plugin - 3.11.0 + 3.12.1 org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M6 + 3.2.1 org.codehaus.mojo animal-sniffer-maven-plugin - 1.21 + 1.23 org.codehaus.mojo @@ -261,7 +261,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.11.0 net.revelc.code @@ -271,52 +271,52 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 + 3.3.0 org.apache.maven.plugins maven-jar-plugin - 3.2.2 + 3.3.0 org.apache.maven.plugins maven-javadoc-plugin - 3.3.2 + 3.6.0 org.apache.maven.plugins maven-scm-publish-plugin - 3.1.0 + 3.2.1 org.apache.maven.plugins maven-deploy-plugin - 3.0.0-M2 + 3.1.1 org.apache.maven.plugins maven-gpg-plugin - 3.0.1 + 3.1.0 org.apache.maven.plugins maven-release-plugin - 3.0.0-M5 + 3.0.1 org.sonatype.plugins nexus-staging-maven-plugin - 1.6.12 + 1.6.13 - com.coveo + com.spotify.fmt fmt-maven-plugin - 2.13 + 2.21.1 org.apache.maven.plugins maven-enforcer-plugin - 3.0.0 + 3.4.1 @@ -558,7 +558,6 @@ com.spotify.fmt fmt-maven-plugin - 2.18 @@ -577,13 +576,13 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.2.2 + 3.4.5 org.codehaus.mojo versions-maven-plugin - 2.10.0 + 2.16.1 @@ -628,7 +627,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.16.0 + 3.21.0 true @@ -701,7 +700,7 @@ org.apache.maven.plugins maven-jxr-plugin - 3.2.0 + 3.3.1 true @@ -710,7 +709,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.1.2 + 3.3.1 google_checks.xml @@ -719,7 +718,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 3.0.0-M6 + 3.2.1 ${project.reporting.outputDirectory}/testresults From a218f33adde0f361347a5e1129de1d4192888746 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 25 Oct 2023 21:50:30 -0700 Subject: [PATCH 022/101] Reformatted some code per the latest fmt plugin. --- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 17 +- .../java/net/bramp/ffmpeg/FFmpegTest.java | 3 +- .../net/bramp/ffmpeg/fixtures/Codecs.java | 1040 +++++++++-------- .../bramp/ffmpeg/fixtures/PixelFormats.java | 12 +- .../bramp/ffmpeg/info/FFmpegGetInfoTest.java | 23 +- 5 files changed, 602 insertions(+), 493 deletions(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index c3d9f24d..ad7c26e0 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -63,9 +63,11 @@ public class FFmpeg extends FFcommon { public static final int AUDIO_SAMPLE_48000 = 48000; public static final int AUDIO_SAMPLE_96000 = 96000; - static final Pattern CODECS_REGEX = Pattern.compile("^ ([.D][.E][VASD][.I][.L][.S]) (\\S{2,})\\s+(.*)$"); + static final Pattern CODECS_REGEX = + Pattern.compile("^ ([.D][.E][VASD][.I][.L][.S]) (\\S{2,})\\s+(.*)$"); static final Pattern FORMATS_REGEX = Pattern.compile("^ ([ D][ E]) (\\S+)\\s+(.*)$"); - static final Pattern PIXEL_FORMATS_REGEX = Pattern.compile("^([.I][.O][.H][.P][.B]) (\\S{2,})\\s+(\\d+)\\s+(\\d+)$"); + static final Pattern PIXEL_FORMATS_REGEX = + Pattern.compile("^([.I][.O][.H][.P][.B]) (\\S{2,})\\s+(\\d+)\\s+(\\d+)$"); /** Supported codecs */ List codecs = null; @@ -182,15 +184,12 @@ public synchronized List pixelFormats() throws IOException { String line; while ((line = r.readLine()) != null) { Matcher m = PIXEL_FORMATS_REGEX.matcher(line); - if (!m.matches()) - continue; + if (!m.matches()) continue; String flags = m.group(1); - pixelFormats.add(new PixelFormat( - m.group(2), - Integer.parseInt(m.group(3)), - Integer.parseInt(m.group(4)), - flags)); + pixelFormats.add( + new PixelFormat( + m.group(2), Integer.parseInt(m.group(3)), Integer.parseInt(m.group(4)), flags)); } throwOnError(p); diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index f60c3173..87d71d86 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -31,7 +31,8 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem("-formats"))) .thenAnswer(new NewProcessAnswer("ffmpeg-formats")); when(runFunc.run(argThatHasItem("-codecs"))).thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); - when(runFunc.run(argThatHasItem("-pix_fmts"))).thenAnswer(new NewProcessAnswer("ffmpeg-pix_fmts")); + when(runFunc.run(argThatHasItem("-pix_fmts"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-pix_fmts")); ffmpeg = new FFmpeg(runFunc); } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java index e8074d93..7c721c3b 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Codecs.java @@ -17,466 +17,582 @@ private Codecs() { } public static final ImmutableList CODECS = - new ImmutableList.Builder() - .add( - new Codec("012v", "Uncompressed 4:2:2 10-bit", "D.VI.S"), - new Codec("4xm", "4X Movie", "D.V.L."), - new Codec("8bps", "QuickTime 8BPS video", "D.VI.S"), - new Codec("a64_multi", "Multicolor charset for Commodore 64 (encoders: a64multi )", ".EVIL."), - new Codec("a64_multi5", "Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )", ".EVIL."), - new Codec("aasc", "Autodesk RLE", "D.V..S"), - new Codec("agm", "Amuse Graphics Movie", "D.V.L."), - new Codec("aic", "Apple Intermediate Codec", "D.VIL."), - new Codec("alias_pix", "Alias/Wavefront PIX image", "DEVI.S"), - new Codec("amv", "AMV Video", "DEVIL."), - new Codec("anm", "Deluxe Paint Animation", "D.V.L."), - new Codec("ansi", "ASCII/ANSI art", "D.V.L."), - new Codec("apng", "APNG (Animated Portable Network Graphics) image", "DEV..S"), - new Codec("arbc", "Gryphon's Anim Compressor", "D.V.L."), - new Codec("asv1", "ASUS V1", "DEVIL."), - new Codec("asv2", "ASUS V2", "DEVIL."), - new Codec("aura", "Auravision AURA", "D.VIL."), - new Codec("aura2", "Auravision Aura 2", "D.VIL."), - new Codec("av1", "Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 ) (encoders: libaom-av1 )", "DEV.L."), - new Codec("avrn", "Avid AVI Codec", "D.V..."), - new Codec("avrp", "Avid 1:1 10-bit RGB Packer", "DEVI.S"), - new Codec("avs", "AVS (Audio Video Standard) video", "D.V.L."), - new Codec("avs2", "AVS2-P2/IEEE1857.4", "..V.L."), - new Codec("avui", "Avid Meridien Uncompressed", "DEVI.S"), - new Codec("ayuv", "Uncompressed packed MS 4:4:4:4", "DEVI.S"), - new Codec("bethsoftvid", "Bethesda VID video", "D.V.L."), - new Codec("bfi", "Brute Force & Ignorance", "D.V.L."), - new Codec("binkvideo", "Bink video", "D.V.L."), - new Codec("bintext", "Binary text", "D.VI.."), - new Codec("bitpacked", "Bitpacked", "D.VI.S"), - new Codec("bmp", "BMP (Windows and OS/2 bitmap)", "DEVI.S"), - new Codec("bmv_video", "Discworld II BMV video", "D.V..S"), - new Codec("brender_pix", "BRender PIX image", "D.VI.S"), - new Codec("c93", "Interplay C93", "D.V.L."), - new Codec("cavs", "Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)", "D.V.L."), - new Codec("cdgraphics", "CD Graphics video", "D.V.L."), - new Codec("cdxl", "Commodore CDXL video", "D.VIL."), - new Codec("cfhd", "Cineform HD", "D.V.L."), - new Codec("cinepak", "Cinepak", "DEV.L."), - new Codec("clearvideo", "Iterated Systems ClearVideo", "D.V.L."), - new Codec("cljr", "Cirrus Logic AccuPak", "DEVIL."), - new Codec("cllc", "Canopus Lossless Codec", "D.VI.S"), - new Codec("cmv", "Electronic Arts CMV video (decoders: eacmv )", "D.V.L."), - new Codec("cpia", "CPiA video format", "D.V..."), - new Codec("cscd", "CamStudio (decoders: camstudio )", "D.V..S"), - new Codec("cyuv", "Creative YUV (CYUV)", "D.VIL."), - new Codec("daala", "Daala", "..V.LS"), - new Codec("dds", "DirectDraw Surface image decoder", "D.VILS"), - new Codec("dfa", "Chronomaster DFA", "D.V.L."), - new Codec("dirac", "Dirac (encoders: vc2 )", "DEV.LS"), - new Codec("dnxhd", "VC3/DNxHD", "DEVIL."), - new Codec("dpx", "DPX (Digital Picture Exchange) image", "DEVI.S"), - new Codec("dsicinvideo", "Delphine Software International CIN video", "D.V.L."), - new Codec("dvvideo", "DV (Digital Video)", "DEVIL."), - new Codec("dxa", "Feeble Files/ScummVM DXA", "D.V..S"), - new Codec("dxtory", "Dxtory", "D.VI.S"), - new Codec("dxv", "Resolume DXV", "D.VIL."), - new Codec("escape124", "Escape 124", "D.V.L."), - new Codec("escape130", "Escape 130", "D.V.L."), - new Codec("exr", "OpenEXR image", "D.VILS"), - new Codec("ffv1", "FFmpeg video codec #1", "DEV..S"), - new Codec("ffvhuff", "Huffyuv FFmpeg variant", "DEVI.S"), - new Codec("fic", "Mirillis FIC", "D.V.L."), - new Codec("fits", "FITS (Flexible Image Transport System)", "DEVI.S"), - new Codec("flashsv", "Flash Screen Video v1", "DEV..S"), - new Codec("flashsv2", "Flash Screen Video v2", "DEV.L."), - new Codec("flic", "Autodesk Animator Flic video", "D.V..S"), - new Codec("flv1", "FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )", "DEV.L."), - new Codec("fmvc", "FM Screen Capture Codec", "D.V..S"), - new Codec("fraps", "Fraps", "D.VI.S"), - new Codec("frwu", "Forward Uncompressed", "D.VI.S"), - new Codec("g2m", "Go2Meeting", "D.V.L."), - new Codec("gdv", "Gremlin Digital Video", "D.V.L."), - new Codec("gif", "CompuServe GIF (Graphics Interchange Format)", "DEV..S"), - new Codec("h261", "H.261", "DEV.L."), - new Codec("h263", "H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), - new Codec("h263i", "Intel H.263", "D.V.L."), - new Codec("h263p", "H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), - new Codec("h264", "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_nvenc h264_qsv nvenc nvenc_h264 )", "DEV.LS"), - new Codec("hap", "Vidvox Hap", "DEVIL."), - new Codec("hevc", "H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )", "DEV.L."), - new Codec("hnm4video", "HNM 4 video", "D.V.L."), - new Codec("hq_hqa", "Canopus HQ/HQA", "D.VIL."), - new Codec("hqx", "Canopus HQX", "D.VIL."), - new Codec("huffyuv", "HuffYUV", "DEVI.S"), - new Codec("hymt", "HuffYUV MT", "D.VI.S"), - new Codec("idcin", "id Quake II CIN video (decoders: idcinvideo )", "D.V.L."), - new Codec("idf", "iCEDraw text", "D.VI.."), - new Codec("iff_ilbm", "IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (decoders: iff )", "D.V.L."), - new Codec("imm4", "Infinity IMM4", "D.V.L."), - new Codec("imm5", "Infinity IMM5", "D.V.L."), - new Codec("indeo2", "Intel Indeo 2", "D.V.L."), - new Codec("indeo3", "Intel Indeo 3", "D.V.L."), - new Codec("indeo4", "Intel Indeo Video Interactive 4", "D.V.L."), - new Codec("indeo5", "Intel Indeo Video Interactive 5", "D.V.L."), - new Codec("interplayvideo", "Interplay MVE video", "D.V.L."), - new Codec("jpeg2000", "JPEG 2000 (decoders: jpeg2000 libopenjpeg ) (encoders: jpeg2000 libopenjpeg )", "DEVILS"), - new Codec("jpegls", "JPEG-LS", "DEVILS"), - new Codec("jv", "Bitmap Brothers JV video", "D.VIL."), - new Codec("kgv1", "Kega Game Video", "D.V.L."), - new Codec("kmvc", "Karl Morton's video codec", "D.V.L."), - new Codec("lagarith", "Lagarith lossless", "D.VI.S"), - new Codec("ljpeg", "Lossless JPEG", ".EVI.S"), - new Codec("loco", "LOCO", "D.VI.S"), - new Codec("lscr", "LEAD Screen Capture", "D.V.L."), - new Codec("m101", "Matrox Uncompressed SD", "D.VI.S"), - new Codec("mad", "Electronic Arts Madcow Video (decoders: eamad )", "D.V.L."), - new Codec("magicyuv", "MagicYUV video", "DEVI.S"), - new Codec("mdec", "Sony PlayStation MDEC (Motion DECoder)", "D.VIL."), - new Codec("mimic", "Mimic", "D.V.L."), - new Codec("mjpeg", "Motion JPEG (decoders: mjpeg mjpeg_cuvid mjpeg_qsv ) (encoders: mjpeg mjpeg_qsv )", "DEVIL."), - new Codec("mjpegb", "Apple MJPEG-B", "D.VIL."), - new Codec("mmvideo", "American Laser Games MM Video", "D.V.L."), - new Codec("motionpixels", "Motion Pixels video", "D.V.L."), - new Codec("mpeg1video", "MPEG-1 video (decoders: mpeg1video mpeg1_cuvid )", "DEV.L."), - new Codec("mpeg2video", "MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv mpeg2_cuvid ) (encoders: mpeg2video mpeg2_qsv )", "DEV.L."), - new Codec("mpeg4", "MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid ) (encoders: mpeg4 libxvid )", "DEV.L."), - new Codec("msa1", "MS ATC Screen", "D.V.L."), - new Codec("mscc", "Mandsoft Screen Capture Codec", "D.VI.S"), - new Codec("msmpeg4v1", "MPEG-4 part 2 Microsoft variant version 1", "D.V.L."), - new Codec("msmpeg4v2", "MPEG-4 part 2 Microsoft variant version 2", "DEV.L."), - new Codec("msmpeg4v3", "MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 )", "DEV.L."), - new Codec("msrle", "Microsoft RLE", "D.V..S"), - new Codec("mss1", "MS Screen 1", "D.V.L."), - new Codec("mss2", "MS Windows Media Video V9 Screen", "D.VIL."), - new Codec("msvideo1", "Microsoft Video 1", "DEV.L."), - new Codec("mszh", "LCL (LossLess Codec Library) MSZH", "D.VI.S"), - new Codec("mts2", "MS Expression Encoder Screen", "D.V.L."), - new Codec("mvc1", "Silicon Graphics Motion Video Compressor 1", "D.VIL."), - new Codec("mvc2", "Silicon Graphics Motion Video Compressor 2", "D.VIL."), - new Codec("mvdv", "MidiVid VQ", "D.V.L."), - new Codec("mvha", "MidiVid Archive Codec", "D.VIL."), - new Codec("mwsc", "MatchWare Screen Capture Codec", "D.V..S"), - new Codec("mxpeg", "Mobotix MxPEG video", "D.V.L."), - new Codec("nuv", "NuppelVideo/RTJPEG", "D.V.L."), - new Codec("paf_video", "Amazing Studio Packed Animation File Video", "D.V.L."), - new Codec("pam", "PAM (Portable AnyMap) image", "DEVI.S"), - new Codec("pbm", "PBM (Portable BitMap) image", "DEVI.S"), - new Codec("pcx", "PC Paintbrush PCX image", "DEVI.S"), - new Codec("pgm", "PGM (Portable GrayMap) image", "DEVI.S"), - new Codec("pgmyuv", "PGMYUV (Portable GrayMap YUV) image", "DEVI.S"), - new Codec("pictor", "Pictor/PC Paint", "D.VIL."), - new Codec("pixlet", "Apple Pixlet", "D.VIL."), - new Codec("png", "PNG (Portable Network Graphics) image", "DEV..S"), - new Codec("ppm", "PPM (Portable PixelMap) image", "DEVI.S"), - new Codec("prores", "Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks )", "DEVIL."), - new Codec("prosumer", "Brooktree ProSumer Video", "D.VIL."), - new Codec("psd", "Photoshop PSD file", "D.VI.S"), - new Codec("ptx", "V.Flash PTX image", "D.VIL."), - new Codec("qdraw", "Apple QuickDraw", "D.VI.S"), - new Codec("qpeg", "Q-team QPEG", "D.V.L."), - new Codec("qtrle", "QuickTime Animation (RLE) video", "DEV..S"), - new Codec("r10k", "AJA Kona 10-bit RGB Codec", "DEVI.S"), - new Codec("r210", "Uncompressed RGB 10-bit", "DEVI.S"), - new Codec("rasc", "RemotelyAnywhere Screen Capture", "D.V.L."), - new Codec("rawvideo", "raw video", "DEVI.S"), - new Codec("rl2", "RL2 video", "D.VIL."), - new Codec("roq", "id RoQ video (decoders: roqvideo ) (encoders: roqvideo )", "DEV.L."), - new Codec("rpza", "QuickTime video (RPZA)", "D.V.L."), - new Codec("rscc", "innoHeim/Rsupport Screen Capture Codec", "D.V..S"), - new Codec("rv10", "RealVideo 1.0", "DEV.L."), - new Codec("rv20", "RealVideo 2.0", "DEV.L."), - new Codec("rv30", "RealVideo 3.0", "D.V.L."), - new Codec("rv40", "RealVideo 4.0", "D.V.L."), - new Codec("sanm", "LucasArts SANM/SMUSH video", "D.V.L."), - new Codec("scpr", "ScreenPressor", "D.V.LS"), - new Codec("screenpresso", "Screenpresso", "D.V..S"), - new Codec("sgi", "SGI image", "DEVI.S"), - new Codec("sgirle", "SGI RLE 8-bit", "D.VI.S"), - new Codec("sheervideo", "BitJazz SheerVideo", "D.VI.S"), - new Codec("smackvideo", "Smacker video (decoders: smackvid )", "D.V.L."), - new Codec("smc", "QuickTime Graphics (SMC)", "D.V.L."), - new Codec("smvjpeg", "Sigmatel Motion Video", "D.V..."), - new Codec("snow", "Snow", "DEV.LS"), - new Codec("sp5x", "Sunplus JPEG (SP5X)", "D.VIL."), - new Codec("speedhq", "NewTek SpeedHQ", "D.VIL."), - new Codec("srgc", "Screen Recorder Gold Codec", "D.VI.S"), - new Codec("sunrast", "Sun Rasterfile image", "DEVI.S"), - new Codec("svg", "Scalable Vector Graphics", "..V..S"), - new Codec("svq1", "Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1", "DEV.L."), - new Codec("svq3", "Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3", "D.V.L."), - new Codec("targa", "Truevision Targa image", "DEVI.S"), - new Codec("targa_y216", "Pinnacle TARGA CineWave YUV16", "D.VI.S"), - new Codec("tdsc", "TDSC", "D.V.L."), - new Codec("tgq", "Electronic Arts TGQ video (decoders: eatgq )", "D.V.L."), - new Codec("tgv", "Electronic Arts TGV video (decoders: eatgv )", "D.V.L."), - new Codec("theora", "Theora (encoders: libtheora )", "DEV.L."), - new Codec("thp", "Nintendo Gamecube THP video", "D.VIL."), - new Codec("tiertexseqvideo", "Tiertex Limited SEQ video", "D.V.L."), - new Codec("tiff", "TIFF image", "DEVI.S"), - new Codec("tmv", "8088flex TMV", "D.VIL."), - new Codec("tqi", "Electronic Arts TQI video (decoders: eatqi )", "D.V.L."), - new Codec("truemotion1", "Duck TrueMotion 1.0", "D.V.L."), - new Codec("truemotion2", "Duck TrueMotion 2.0", "D.V.L."), - new Codec("truemotion2rt", "Duck TrueMotion 2.0 Real Time", "D.VIL."), - new Codec("tscc", "TechSmith Screen Capture Codec (decoders: camtasia )", "D.V..S"), - new Codec("tscc2", "TechSmith Screen Codec 2", "D.V.L."), - new Codec("txd", "Renderware TXD (TeXture Dictionary) image", "D.VIL."), - new Codec("ulti", "IBM UltiMotion (decoders: ultimotion )", "D.V.L."), - new Codec("utvideo", "Ut Video", "DEVI.S"), - new Codec("v210", "Uncompressed 4:2:2 10-bit", "DEVI.S"), - new Codec("v210x", "Uncompressed 4:2:2 10-bit", "D.VI.S"), - new Codec("v308", "Uncompressed packed 4:4:4", "DEVI.S"), - new Codec("v408", "Uncompressed packed QT 4:4:4:4", "DEVI.S"), - new Codec("v410", "Uncompressed 4:4:4 10-bit", "DEVI.S"), - new Codec("vb", "Beam Software VB", "D.V.L."), - new Codec("vble", "VBLE Lossless Codec", "D.VI.S"), - new Codec("vc1", "SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_cuvid )", "D.V.L."), - new Codec("vc1image", "Windows Media Video 9 Image v2", "D.V.L."), - new Codec("vcr1", "ATI VCR1", "D.VIL."), - new Codec("vixl", "Miro VideoXL (decoders: xl )", "D.VIL."), - new Codec("vmdvideo", "Sierra VMD video", "D.V.L."), - new Codec("vmnc", "VMware Screen Codec / VMware Video", "D.V..S"), - new Codec("vp3", "On2 VP3", "D.V.L."), - new Codec("vp4", "On2 VP4", "D.V.L."), - new Codec("vp5", "On2 VP5", "D.V.L."), - new Codec("vp6", "On2 VP6", "D.V.L."), - new Codec("vp6a", "On2 VP6 (Flash version, with alpha channel)", "D.V.L."), - new Codec("vp6f", "On2 VP6 (Flash version)", "D.V.L."), - new Codec("vp7", "On2 VP7", "D.V.L."), - new Codec("vp8", "On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv ) (encoders: libvpx )", "DEV.L."), - new Codec("vp9", "Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid vp9_qsv ) (encoders: libvpx-vp9 vp9_qsv )", "DEV.L."), - new Codec("wcmv", "WinCAM Motion Video", "D.V..S"), - new Codec("webp", "WebP (encoders: libwebp_anim libwebp )", "DEVILS"), - new Codec("wmv1", "Windows Media Video 7", "DEV.L."), - new Codec("wmv2", "Windows Media Video 8", "DEV.L."), - new Codec("wmv3", "Windows Media Video 9", "D.V.L."), - new Codec("wmv3image", "Windows Media Video 9 Image", "D.V.L."), - new Codec("wnv1", "Winnov WNV1", "D.VIL."), - new Codec("wrapped_avframe", "AVFrame to AVPacket passthrough", "DEV..S"), - new Codec("ws_vqa", "Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo )", "D.V.L."), - new Codec("xan_wc3", "Wing Commander III / Xan", "D.V.L."), - new Codec("xan_wc4", "Wing Commander IV / Xxan", "D.V.L."), - new Codec("xbin", "eXtended BINary text", "D.VI.."), - new Codec("xbm", "XBM (X BitMap) image", "DEVI.S"), - new Codec("xface", "X-face image", "DEVIL."), - new Codec("xpm", "XPM (X PixMap) image", "D.VI.S"), - new Codec("xwd", "XWD (X Window Dump) image", "DEVI.S"), - new Codec("y41p", "Uncompressed YUV 4:1:1 12-bit", "DEVI.S"), - new Codec("ylc", "YUY2 Lossless Codec", "D.VI.S"), - new Codec("yop", "Psygnosis YOP Video", "D.V.L."), - new Codec("yuv4", "Uncompressed packed 4:2:0", "DEVI.S"), - new Codec("zerocodec", "ZeroCodec Lossless Video", "D.V..S"), - new Codec("zlib", "LCL (LossLess Codec Library) ZLIB", "DEVI.S"), - new Codec("zmbv", "Zip Motion Blocks Video", "DEV..S"), - new Codec("4gv", "4GV (Fourth Generation Vocoder)", "..AIL."), - new Codec("8svx_exp", "8SVX exponential", "D.AIL."), - new Codec("8svx_fib", "8SVX fibonacci", "D.AIL."), - new Codec("aac", "AAC (Advanced Audio Coding) (decoders: aac aac_fixed )", "DEAIL."), - new Codec("aac_latm", "AAC LATM (Advanced Audio Coding LATM syntax)", "D.AIL."), - new Codec("ac3", "ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed ) (encoders: ac3 ac3_fixed )", "DEAIL."), - new Codec("acelp.kelvin", "Sipro ACELP.KELVIN", "D.AIL."), - new Codec("adpcm_4xm", "ADPCM 4X Movie", "D.AIL."), - new Codec("adpcm_adx", "SEGA CRI ADX ADPCM", "DEAIL."), - new Codec("adpcm_afc", "ADPCM Nintendo Gamecube AFC", "D.AIL."), - new Codec("adpcm_agm", "ADPCM AmuseGraphics Movie AGM", "D.AIL."), - new Codec("adpcm_aica", "ADPCM Yamaha AICA", "D.AIL."), - new Codec("adpcm_ct", "ADPCM Creative Technology", "D.AIL."), - new Codec("adpcm_dtk", "ADPCM Nintendo Gamecube DTK", "D.AIL."), - new Codec("adpcm_ea", "ADPCM Electronic Arts", "D.AIL."), - new Codec("adpcm_ea_maxis_xa", "ADPCM Electronic Arts Maxis CDROM XA", "D.AIL."), - new Codec("adpcm_ea_r1", "ADPCM Electronic Arts R1", "D.AIL."), - new Codec("adpcm_ea_r2", "ADPCM Electronic Arts R2", "D.AIL."), - new Codec("adpcm_ea_r3", "ADPCM Electronic Arts R3", "D.AIL."), - new Codec("adpcm_ea_xas", "ADPCM Electronic Arts XAS", "D.AIL."), - new Codec("adpcm_g722", "G.722 ADPCM (decoders: g722 ) (encoders: g722 )", "DEAIL."), - new Codec("adpcm_g726", "G.726 ADPCM (decoders: g726 ) (encoders: g726 )", "DEAIL."), - new Codec("adpcm_g726le", "G.726 ADPCM little-endian (decoders: g726le ) (encoders: g726le )", "DEAIL."), - new Codec("adpcm_ima_amv", "ADPCM IMA AMV", "D.AIL."), - new Codec("adpcm_ima_apc", "ADPCM IMA CRYO APC", "D.AIL."), - new Codec("adpcm_ima_dat4", "ADPCM IMA Eurocom DAT4", "D.AIL."), - new Codec("adpcm_ima_dk3", "ADPCM IMA Duck DK3", "D.AIL."), - new Codec("adpcm_ima_dk4", "ADPCM IMA Duck DK4", "D.AIL."), - new Codec("adpcm_ima_ea_eacs", "ADPCM IMA Electronic Arts EACS", "D.AIL."), - new Codec("adpcm_ima_ea_sead", "ADPCM IMA Electronic Arts SEAD", "D.AIL."), - new Codec("adpcm_ima_iss", "ADPCM IMA Funcom ISS", "D.AIL."), - new Codec("adpcm_ima_oki", "ADPCM IMA Dialogic OKI", "D.AIL."), - new Codec("adpcm_ima_qt", "ADPCM IMA QuickTime", "DEAIL."), - new Codec("adpcm_ima_rad", "ADPCM IMA Radical", "D.AIL."), - new Codec("adpcm_ima_smjpeg", "ADPCM IMA Loki SDL MJPEG", "D.AIL."), - new Codec("adpcm_ima_wav", "ADPCM IMA WAV", "DEAIL."), - new Codec("adpcm_ima_ws", "ADPCM IMA Westwood", "D.AIL."), - new Codec("adpcm_ms", "ADPCM Microsoft", "DEAIL."), - new Codec("adpcm_mtaf", "ADPCM MTAF", "D.AIL."), - new Codec("adpcm_psx", "ADPCM Playstation", "D.AIL."), - new Codec("adpcm_sbpro_2", "ADPCM Sound Blaster Pro 2-bit", "D.AIL."), - new Codec("adpcm_sbpro_3", "ADPCM Sound Blaster Pro 2.6-bit", "D.AIL."), - new Codec("adpcm_sbpro_4", "ADPCM Sound Blaster Pro 4-bit", "D.AIL."), - new Codec("adpcm_swf", "ADPCM Shockwave Flash", "DEAIL."), - new Codec("adpcm_thp", "ADPCM Nintendo THP", "D.AIL."), - new Codec("adpcm_thp_le", "ADPCM Nintendo THP (Little-Endian)", "D.AIL."), - new Codec("adpcm_vima", "LucasArts VIMA audio", "D.AIL."), - new Codec("adpcm_xa", "ADPCM CDROM XA", "D.AIL."), - new Codec("adpcm_yamaha", "ADPCM Yamaha", "DEAIL."), - new Codec("alac", "ALAC (Apple Lossless Audio Codec)", "DEAI.S"), - new Codec("amr_nb", "AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )", "DEAIL."), - new Codec("amr_wb", "AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc )", "DEAIL."), - new Codec("ape", "Monkey's Audio", "D.AI.S"), - new Codec("aptx", "aptX (Audio Processing Technology for Bluetooth)", "DEAIL."), - new Codec("aptx_hd", "aptX HD (Audio Processing Technology for Bluetooth)", "DEAIL."), - new Codec("atrac1", "ATRAC1 (Adaptive TRansform Acoustic Coding)", "D.AIL."), - new Codec("atrac3", "ATRAC3 (Adaptive TRansform Acoustic Coding 3)", "D.AIL."), - new Codec("atrac3al", "ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless)", "D.AI.S"), - new Codec("atrac3p", "ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus )", "D.AIL."), - new Codec("atrac3pal", "ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless) (decoders: atrac3plusal )", "D.AI.S"), - new Codec("atrac9", "ATRAC9 (Adaptive TRansform Acoustic Coding 9)", "D.AIL."), - new Codec("avc", "On2 Audio for Video Codec (decoders: on2avc )", "D.AIL."), - new Codec("binkaudio_dct", "Bink Audio (DCT)", "D.AIL."), - new Codec("binkaudio_rdft", "Bink Audio (RDFT)", "D.AIL."), - new Codec("bmv_audio", "Discworld II BMV audio", "D.AIL."), - new Codec("celt", "Constrained Energy Lapped Transform (CELT)", "..AIL."), - new Codec("codec2", "codec2 (very low bitrate speech codec)", "..AIL."), - new Codec("comfortnoise", "RFC 3389 Comfort Noise", "DEAIL."), - new Codec("cook", "Cook / Cooker / Gecko (RealAudio G2)", "D.AIL."), - new Codec("dolby_e", "Dolby E", "D.AIL."), - new Codec("dsd_lsbf", "DSD (Direct Stream Digital), least significant bit first", "D.AIL."), - new Codec("dsd_lsbf_planar", "DSD (Direct Stream Digital), least significant bit first, planar", "D.AIL."), - new Codec("dsd_msbf", "DSD (Direct Stream Digital), most significant bit first", "D.AIL."), - new Codec("dsd_msbf_planar", "DSD (Direct Stream Digital), most significant bit first, planar", "D.AIL."), - new Codec("dsicinaudio", "Delphine Software International CIN audio", "D.AIL."), - new Codec("dss_sp", "Digital Speech Standard - Standard Play mode (DSS SP)", "D.AIL."), - new Codec("dst", "DST (Direct Stream Transfer)", "D.AI.S"), - new Codec("dts", "DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca )", "DEAILS"), - new Codec("dvaudio", "DV audio", "D.AIL."), - new Codec("eac3", "ATSC A/52B (AC-3, E-AC-3)", "DEAIL."), - new Codec("evrc", "EVRC (Enhanced Variable Rate Codec)", "D.AIL."), - new Codec("flac", "FLAC (Free Lossless Audio Codec)", "DEAI.S"), - new Codec("g723_1", "G.723.1", "DEAIL."), - new Codec("g729", "G.729", "D.AIL."), - new Codec("gremlin_dpcm", "DPCM Gremlin", "D.AIL."), - new Codec("gsm", "GSM", "D.AIL."), - new Codec("gsm_ms", "GSM Microsoft variant", "D.AIL."), - new Codec("hcom", "HCOM Audio", "D.AIL."), - new Codec("iac", "IAC (Indeo Audio Coder)", "D.AIL."), - new Codec("ilbc", "iLBC (Internet Low Bitrate Codec)", "D.AIL."), - new Codec("imc", "IMC (Intel Music Coder)", "D.AIL."), - new Codec("interplay_dpcm", "DPCM Interplay", "D.AIL."), - new Codec("interplayacm", "Interplay ACM", "D.AIL."), - new Codec("mace3", "MACE (Macintosh Audio Compression/Expansion) 3:1", "D.AIL."), - new Codec("mace6", "MACE (Macintosh Audio Compression/Expansion) 6:1", "D.AIL."), - new Codec("metasound", "Voxware MetaSound", "D.AIL."), - new Codec("mlp", "MLP (Meridian Lossless Packing)", "DEAI.S"), - new Codec("mp1", "MP1 (MPEG audio layer 1) (decoders: mp1 mp1float )", "D.AIL."), - new Codec("mp2", "MP2 (MPEG audio layer 2) (decoders: mp2 mp2float ) (encoders: mp2 mp2fixed libtwolame )", "DEAIL."), - new Codec("mp3", "MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame libshine )", "DEAIL."), - new Codec("mp3adu", "ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu )", "D.AIL."), - new Codec("mp3on4", "MP3onMP4 (decoders: mp3on4float mp3on4 )", "D.AIL."), - new Codec("mp4als", "MPEG-4 Audio Lossless Coding (ALS) (decoders: als )", "D.AI.S"), - new Codec("mpegh_3d_audio", "MPEG-H 3D Audio", "..A.L."), - new Codec("musepack7", "Musepack SV7 (decoders: mpc7 )", "D.AIL."), - new Codec("musepack8", "Musepack SV8 (decoders: mpc8 )", "D.AIL."), - new Codec("nellymoser", "Nellymoser Asao", "DEAIL."), - new Codec("opus", "Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: opus libopus )", "DEAIL."), - new Codec("paf_audio", "Amazing Studio Packed Animation File Audio", "D.AIL."), - new Codec("pcm_alaw", "PCM A-law / G.711 A-law", "DEAIL."), - new Codec("pcm_bluray", "PCM signed 16|20|24-bit big-endian for Blu-ray media", "D.AI.S"), - new Codec("pcm_dvd", "PCM signed 20|24-bit big-endian", "DEAI.S"), - new Codec("pcm_f16le", "PCM 16.8 floating point little-endian", "D.AI.S"), - new Codec("pcm_f24le", "PCM 24.0 floating point little-endian", "D.AI.S"), - new Codec("pcm_f32be", "PCM 32-bit floating point big-endian", "DEAI.S"), - new Codec("pcm_f32le", "PCM 32-bit floating point little-endian", "DEAI.S"), - new Codec("pcm_f64be", "PCM 64-bit floating point big-endian", "DEAI.S"), - new Codec("pcm_f64le", "PCM 64-bit floating point little-endian", "DEAI.S"), - new Codec("pcm_lxf", "PCM signed 20-bit little-endian planar", "D.AI.S"), - new Codec("pcm_mulaw", "PCM mu-law / G.711 mu-law", "DEAIL."), - new Codec("pcm_s16be", "PCM signed 16-bit big-endian", "DEAI.S"), - new Codec("pcm_s16be_planar", "PCM signed 16-bit big-endian planar", "DEAI.S"), - new Codec("pcm_s16le", "PCM signed 16-bit little-endian", "DEAI.S"), - new Codec("pcm_s16le_planar", "PCM signed 16-bit little-endian planar", "DEAI.S"), - new Codec("pcm_s24be", "PCM signed 24-bit big-endian", "DEAI.S"), - new Codec("pcm_s24daud", "PCM D-Cinema audio signed 24-bit", "DEAI.S"), - new Codec("pcm_s24le", "PCM signed 24-bit little-endian", "DEAI.S"), - new Codec("pcm_s24le_planar", "PCM signed 24-bit little-endian planar", "DEAI.S"), - new Codec("pcm_s32be", "PCM signed 32-bit big-endian", "DEAI.S"), - new Codec("pcm_s32le", "PCM signed 32-bit little-endian", "DEAI.S"), - new Codec("pcm_s32le_planar", "PCM signed 32-bit little-endian planar", "DEAI.S"), - new Codec("pcm_s64be", "PCM signed 64-bit big-endian", "DEAI.S"), - new Codec("pcm_s64le", "PCM signed 64-bit little-endian", "DEAI.S"), - new Codec("pcm_s8", "PCM signed 8-bit", "DEAI.S"), - new Codec("pcm_s8_planar", "PCM signed 8-bit planar", "DEAI.S"), - new Codec("pcm_u16be", "PCM unsigned 16-bit big-endian", "DEAI.S"), - new Codec("pcm_u16le", "PCM unsigned 16-bit little-endian", "DEAI.S"), - new Codec("pcm_u24be", "PCM unsigned 24-bit big-endian", "DEAI.S"), - new Codec("pcm_u24le", "PCM unsigned 24-bit little-endian", "DEAI.S"), - new Codec("pcm_u32be", "PCM unsigned 32-bit big-endian", "DEAI.S"), - new Codec("pcm_u32le", "PCM unsigned 32-bit little-endian", "DEAI.S"), - new Codec("pcm_u8", "PCM unsigned 8-bit", "DEAI.S"), - new Codec("pcm_vidc", "PCM Archimedes VIDC", "DEAIL."), - new Codec("pcm_zork", "PCM Zork", "D.AIL."), - new Codec("qcelp", "QCELP / PureVoice", "D.AIL."), - new Codec("qdm2", "QDesign Music Codec 2", "D.AIL."), - new Codec("qdmc", "QDesign Music", "D.AIL."), - new Codec("ra_144", "RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 )", "DEAIL."), - new Codec("ra_288", "RealAudio 2.0 (28.8K) (decoders: real_288 )", "D.AIL."), - new Codec("ralf", "RealAudio Lossless", "D.AI.S"), - new Codec("roq_dpcm", "DPCM id RoQ", "DEAIL."), - new Codec("s302m", "SMPTE 302M", "DEAI.S"), - new Codec("sbc", "SBC (low-complexity subband codec)", "DEAIL."), - new Codec("sdx2_dpcm", "DPCM Squareroot-Delta-Exact", "D.AIL."), - new Codec("shorten", "Shorten", "D.AI.S"), - new Codec("sipr", "RealAudio SIPR / ACELP.NET", "D.AIL."), - new Codec("smackaudio", "Smacker audio (decoders: smackaud )", "D.AIL."), - new Codec("smv", "SMV (Selectable Mode Vocoder)", "..AIL."), - new Codec("sol_dpcm", "DPCM Sol", "D.AIL."), - new Codec("sonic", "Sonic", "DEAI.."), - new Codec("sonicls", "Sonic lossless", ".EAI.."), - new Codec("speex", "Speex (decoders: libspeex ) (encoders: libspeex )", "DEAIL."), - new Codec("tak", "TAK (Tom's lossless Audio Kompressor)", "D.AI.S"), - new Codec("truehd", "TrueHD", "DEA..S"), - new Codec("truespeech", "DSP Group TrueSpeech", "D.AIL."), - new Codec("tta", "TTA (True Audio)", "DEAI.S"), - new Codec("twinvq", "VQF TwinVQ", "D.AIL."), - new Codec("vmdaudio", "Sierra VMD audio", "D.AIL."), - new Codec("vorbis", "Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis )", "DEAIL."), - new Codec("wavesynth", "Wave synthesis pseudo-codec", "D.AI.."), - new Codec("wavpack", "WavPack (encoders: wavpack libwavpack )", "DEAILS"), - new Codec("westwood_snd1", "Westwood Audio (SND1) (decoders: ws_snd1 )", "D.AIL."), - new Codec("wmalossless", "Windows Media Audio Lossless", "D.AI.S"), - new Codec("wmapro", "Windows Media Audio 9 Professional", "D.AIL."), - new Codec("wmav1", "Windows Media Audio 1", "DEAIL."), - new Codec("wmav2", "Windows Media Audio 2", "DEAIL."), - new Codec("wmavoice", "Windows Media Audio Voice", "D.AIL."), - new Codec("xan_dpcm", "DPCM Xan", "D.AIL."), - new Codec("xma1", "Xbox Media Audio 1", "D.AIL."), - new Codec("xma2", "Xbox Media Audio 2", "D.AIL."), - new Codec("bin_data", "binary data", "..D..."), - new Codec("dvd_nav_packet", "DVD Nav packet", "..D..."), - new Codec("epg", "Electronic Program Guide", "..D..."), - new Codec("klv", "SMPTE 336M Key-Length-Value (KLV) metadata", "..D..."), - new Codec("otf", "OpenType font", "..D..."), - new Codec("scte_35", "SCTE 35 Message Queue", "..D..."), - new Codec("timed_id3", "timed ID3 metadata", "..D..."), - new Codec("ttf", "TrueType font", "..D..."), - new Codec("arib_caption", "ARIB STD-B24 caption", "..S..."), - new Codec("ass", "ASS (Advanced SSA) subtitle (decoders: ssa ass ) (encoders: ssa ass )", "DES..."), - new Codec("dvb_subtitle", "DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )", "DES..."), - new Codec("dvb_teletext", "DVB teletext", "..S..."), - new Codec("dvd_subtitle", "DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )", "DES..."), - new Codec("eia_608", "EIA-608 closed captions (decoders: cc_dec )", "D.S..."), - new Codec("hdmv_pgs_subtitle", "HDMV Presentation Graphic Stream subtitles (decoders: pgssub )", "D.S..."), - new Codec("hdmv_text_subtitle", "HDMV Text subtitle", "..S..."), - new Codec("jacosub", "JACOsub subtitle", "D.S..."), - new Codec("microdvd", "MicroDVD subtitle", "D.S..."), - new Codec("mov_text", "MOV text", "DES..."), - new Codec("mpl2", "MPL2 subtitle", "D.S..."), - new Codec("pjs", "PJS (Phoenix Japanimation Society) subtitle", "D.S..."), - new Codec("realtext", "RealText subtitle", "D.S..."), - new Codec("sami", "SAMI subtitle", "D.S..."), - new Codec("srt", "SubRip subtitle with embedded timing", "..S..."), - new Codec("ssa", "SSA (SubStation Alpha) subtitle", "..S..."), - new Codec("stl", "Spruce subtitle format", "D.S..."), - new Codec("subrip", "SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip )", "DES..."), - new Codec("subviewer", "SubViewer subtitle", "D.S..."), - new Codec("subviewer1", "SubViewer v1 subtitle", "D.S..."), - new Codec("text", "raw UTF-8 text", "DES..."), - new Codec("ttml", "Timed Text Markup Language", "..S..."), - new Codec("vplayer", "VPlayer subtitle", "D.S..."), - new Codec("webvtt", "WebVTT subtitle", "DES..."), - new Codec("xsub", "XSUB", "DES...")) - .build(); + new ImmutableList.Builder() + .add( + new Codec("012v", "Uncompressed 4:2:2 10-bit", "D.VI.S"), + new Codec("4xm", "4X Movie", "D.V.L."), + new Codec("8bps", "QuickTime 8BPS video", "D.VI.S"), + new Codec( + "a64_multi", + "Multicolor charset for Commodore 64 (encoders: a64multi )", + ".EVIL."), + new Codec( + "a64_multi5", + "Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )", + ".EVIL."), + new Codec("aasc", "Autodesk RLE", "D.V..S"), + new Codec("agm", "Amuse Graphics Movie", "D.V.L."), + new Codec("aic", "Apple Intermediate Codec", "D.VIL."), + new Codec("alias_pix", "Alias/Wavefront PIX image", "DEVI.S"), + new Codec("amv", "AMV Video", "DEVIL."), + new Codec("anm", "Deluxe Paint Animation", "D.V.L."), + new Codec("ansi", "ASCII/ANSI art", "D.V.L."), + new Codec("apng", "APNG (Animated Portable Network Graphics) image", "DEV..S"), + new Codec("arbc", "Gryphon's Anim Compressor", "D.V.L."), + new Codec("asv1", "ASUS V1", "DEVIL."), + new Codec("asv2", "ASUS V2", "DEVIL."), + new Codec("aura", "Auravision AURA", "D.VIL."), + new Codec("aura2", "Auravision Aura 2", "D.VIL."), + new Codec( + "av1", + "Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 ) (encoders: libaom-av1 )", + "DEV.L."), + new Codec("avrn", "Avid AVI Codec", "D.V..."), + new Codec("avrp", "Avid 1:1 10-bit RGB Packer", "DEVI.S"), + new Codec("avs", "AVS (Audio Video Standard) video", "D.V.L."), + new Codec("avs2", "AVS2-P2/IEEE1857.4", "..V.L."), + new Codec("avui", "Avid Meridien Uncompressed", "DEVI.S"), + new Codec("ayuv", "Uncompressed packed MS 4:4:4:4", "DEVI.S"), + new Codec("bethsoftvid", "Bethesda VID video", "D.V.L."), + new Codec("bfi", "Brute Force & Ignorance", "D.V.L."), + new Codec("binkvideo", "Bink video", "D.V.L."), + new Codec("bintext", "Binary text", "D.VI.."), + new Codec("bitpacked", "Bitpacked", "D.VI.S"), + new Codec("bmp", "BMP (Windows and OS/2 bitmap)", "DEVI.S"), + new Codec("bmv_video", "Discworld II BMV video", "D.V..S"), + new Codec("brender_pix", "BRender PIX image", "D.VI.S"), + new Codec("c93", "Interplay C93", "D.V.L."), + new Codec( + "cavs", "Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)", "D.V.L."), + new Codec("cdgraphics", "CD Graphics video", "D.V.L."), + new Codec("cdxl", "Commodore CDXL video", "D.VIL."), + new Codec("cfhd", "Cineform HD", "D.V.L."), + new Codec("cinepak", "Cinepak", "DEV.L."), + new Codec("clearvideo", "Iterated Systems ClearVideo", "D.V.L."), + new Codec("cljr", "Cirrus Logic AccuPak", "DEVIL."), + new Codec("cllc", "Canopus Lossless Codec", "D.VI.S"), + new Codec("cmv", "Electronic Arts CMV video (decoders: eacmv )", "D.V.L."), + new Codec("cpia", "CPiA video format", "D.V..."), + new Codec("cscd", "CamStudio (decoders: camstudio )", "D.V..S"), + new Codec("cyuv", "Creative YUV (CYUV)", "D.VIL."), + new Codec("daala", "Daala", "..V.LS"), + new Codec("dds", "DirectDraw Surface image decoder", "D.VILS"), + new Codec("dfa", "Chronomaster DFA", "D.V.L."), + new Codec("dirac", "Dirac (encoders: vc2 )", "DEV.LS"), + new Codec("dnxhd", "VC3/DNxHD", "DEVIL."), + new Codec("dpx", "DPX (Digital Picture Exchange) image", "DEVI.S"), + new Codec("dsicinvideo", "Delphine Software International CIN video", "D.V.L."), + new Codec("dvvideo", "DV (Digital Video)", "DEVIL."), + new Codec("dxa", "Feeble Files/ScummVM DXA", "D.V..S"), + new Codec("dxtory", "Dxtory", "D.VI.S"), + new Codec("dxv", "Resolume DXV", "D.VIL."), + new Codec("escape124", "Escape 124", "D.V.L."), + new Codec("escape130", "Escape 130", "D.V.L."), + new Codec("exr", "OpenEXR image", "D.VILS"), + new Codec("ffv1", "FFmpeg video codec #1", "DEV..S"), + new Codec("ffvhuff", "Huffyuv FFmpeg variant", "DEVI.S"), + new Codec("fic", "Mirillis FIC", "D.V.L."), + new Codec("fits", "FITS (Flexible Image Transport System)", "DEVI.S"), + new Codec("flashsv", "Flash Screen Video v1", "DEV..S"), + new Codec("flashsv2", "Flash Screen Video v2", "DEV.L."), + new Codec("flic", "Autodesk Animator Flic video", "D.V..S"), + new Codec( + "flv1", + "FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )", + "DEV.L."), + new Codec("fmvc", "FM Screen Capture Codec", "D.V..S"), + new Codec("fraps", "Fraps", "D.VI.S"), + new Codec("frwu", "Forward Uncompressed", "D.VI.S"), + new Codec("g2m", "Go2Meeting", "D.V.L."), + new Codec("gdv", "Gremlin Digital Video", "D.V.L."), + new Codec("gif", "CompuServe GIF (Graphics Interchange Format)", "DEV..S"), + new Codec("h261", "H.261", "DEV.L."), + new Codec( + "h263", "H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), + new Codec("h263i", "Intel H.263", "D.V.L."), + new Codec("h263p", "H.263+ / H.263-1998 / H.263 version 2", "DEV.L."), + new Codec( + "h264", + "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_nvenc h264_qsv nvenc nvenc_h264 )", + "DEV.LS"), + new Codec("hap", "Vidvox Hap", "DEVIL."), + new Codec( + "hevc", + "H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )", + "DEV.L."), + new Codec("hnm4video", "HNM 4 video", "D.V.L."), + new Codec("hq_hqa", "Canopus HQ/HQA", "D.VIL."), + new Codec("hqx", "Canopus HQX", "D.VIL."), + new Codec("huffyuv", "HuffYUV", "DEVI.S"), + new Codec("hymt", "HuffYUV MT", "D.VI.S"), + new Codec("idcin", "id Quake II CIN video (decoders: idcinvideo )", "D.V.L."), + new Codec("idf", "iCEDraw text", "D.VI.."), + new Codec( + "iff_ilbm", "IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (decoders: iff )", "D.V.L."), + new Codec("imm4", "Infinity IMM4", "D.V.L."), + new Codec("imm5", "Infinity IMM5", "D.V.L."), + new Codec("indeo2", "Intel Indeo 2", "D.V.L."), + new Codec("indeo3", "Intel Indeo 3", "D.V.L."), + new Codec("indeo4", "Intel Indeo Video Interactive 4", "D.V.L."), + new Codec("indeo5", "Intel Indeo Video Interactive 5", "D.V.L."), + new Codec("interplayvideo", "Interplay MVE video", "D.V.L."), + new Codec( + "jpeg2000", + "JPEG 2000 (decoders: jpeg2000 libopenjpeg ) (encoders: jpeg2000 libopenjpeg )", + "DEVILS"), + new Codec("jpegls", "JPEG-LS", "DEVILS"), + new Codec("jv", "Bitmap Brothers JV video", "D.VIL."), + new Codec("kgv1", "Kega Game Video", "D.V.L."), + new Codec("kmvc", "Karl Morton's video codec", "D.V.L."), + new Codec("lagarith", "Lagarith lossless", "D.VI.S"), + new Codec("ljpeg", "Lossless JPEG", ".EVI.S"), + new Codec("loco", "LOCO", "D.VI.S"), + new Codec("lscr", "LEAD Screen Capture", "D.V.L."), + new Codec("m101", "Matrox Uncompressed SD", "D.VI.S"), + new Codec("mad", "Electronic Arts Madcow Video (decoders: eamad )", "D.V.L."), + new Codec("magicyuv", "MagicYUV video", "DEVI.S"), + new Codec("mdec", "Sony PlayStation MDEC (Motion DECoder)", "D.VIL."), + new Codec("mimic", "Mimic", "D.V.L."), + new Codec( + "mjpeg", + "Motion JPEG (decoders: mjpeg mjpeg_cuvid mjpeg_qsv ) (encoders: mjpeg mjpeg_qsv )", + "DEVIL."), + new Codec("mjpegb", "Apple MJPEG-B", "D.VIL."), + new Codec("mmvideo", "American Laser Games MM Video", "D.V.L."), + new Codec("motionpixels", "Motion Pixels video", "D.V.L."), + new Codec("mpeg1video", "MPEG-1 video (decoders: mpeg1video mpeg1_cuvid )", "DEV.L."), + new Codec( + "mpeg2video", + "MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv mpeg2_cuvid ) (encoders: mpeg2video mpeg2_qsv )", + "DEV.L."), + new Codec( + "mpeg4", + "MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid ) (encoders: mpeg4 libxvid )", + "DEV.L."), + new Codec("msa1", "MS ATC Screen", "D.V.L."), + new Codec("mscc", "Mandsoft Screen Capture Codec", "D.VI.S"), + new Codec("msmpeg4v1", "MPEG-4 part 2 Microsoft variant version 1", "D.V.L."), + new Codec("msmpeg4v2", "MPEG-4 part 2 Microsoft variant version 2", "DEV.L."), + new Codec( + "msmpeg4v3", + "MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4 ) (encoders: msmpeg4 )", + "DEV.L."), + new Codec("msrle", "Microsoft RLE", "D.V..S"), + new Codec("mss1", "MS Screen 1", "D.V.L."), + new Codec("mss2", "MS Windows Media Video V9 Screen", "D.VIL."), + new Codec("msvideo1", "Microsoft Video 1", "DEV.L."), + new Codec("mszh", "LCL (LossLess Codec Library) MSZH", "D.VI.S"), + new Codec("mts2", "MS Expression Encoder Screen", "D.V.L."), + new Codec("mvc1", "Silicon Graphics Motion Video Compressor 1", "D.VIL."), + new Codec("mvc2", "Silicon Graphics Motion Video Compressor 2", "D.VIL."), + new Codec("mvdv", "MidiVid VQ", "D.V.L."), + new Codec("mvha", "MidiVid Archive Codec", "D.VIL."), + new Codec("mwsc", "MatchWare Screen Capture Codec", "D.V..S"), + new Codec("mxpeg", "Mobotix MxPEG video", "D.V.L."), + new Codec("nuv", "NuppelVideo/RTJPEG", "D.V.L."), + new Codec("paf_video", "Amazing Studio Packed Animation File Video", "D.V.L."), + new Codec("pam", "PAM (Portable AnyMap) image", "DEVI.S"), + new Codec("pbm", "PBM (Portable BitMap) image", "DEVI.S"), + new Codec("pcx", "PC Paintbrush PCX image", "DEVI.S"), + new Codec("pgm", "PGM (Portable GrayMap) image", "DEVI.S"), + new Codec("pgmyuv", "PGMYUV (Portable GrayMap YUV) image", "DEVI.S"), + new Codec("pictor", "Pictor/PC Paint", "D.VIL."), + new Codec("pixlet", "Apple Pixlet", "D.VIL."), + new Codec("png", "PNG (Portable Network Graphics) image", "DEV..S"), + new Codec("ppm", "PPM (Portable PixelMap) image", "DEVI.S"), + new Codec( + "prores", + "Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks )", + "DEVIL."), + new Codec("prosumer", "Brooktree ProSumer Video", "D.VIL."), + new Codec("psd", "Photoshop PSD file", "D.VI.S"), + new Codec("ptx", "V.Flash PTX image", "D.VIL."), + new Codec("qdraw", "Apple QuickDraw", "D.VI.S"), + new Codec("qpeg", "Q-team QPEG", "D.V.L."), + new Codec("qtrle", "QuickTime Animation (RLE) video", "DEV..S"), + new Codec("r10k", "AJA Kona 10-bit RGB Codec", "DEVI.S"), + new Codec("r210", "Uncompressed RGB 10-bit", "DEVI.S"), + new Codec("rasc", "RemotelyAnywhere Screen Capture", "D.V.L."), + new Codec("rawvideo", "raw video", "DEVI.S"), + new Codec("rl2", "RL2 video", "D.VIL."), + new Codec( + "roq", "id RoQ video (decoders: roqvideo ) (encoders: roqvideo )", "DEV.L."), + new Codec("rpza", "QuickTime video (RPZA)", "D.V.L."), + new Codec("rscc", "innoHeim/Rsupport Screen Capture Codec", "D.V..S"), + new Codec("rv10", "RealVideo 1.0", "DEV.L."), + new Codec("rv20", "RealVideo 2.0", "DEV.L."), + new Codec("rv30", "RealVideo 3.0", "D.V.L."), + new Codec("rv40", "RealVideo 4.0", "D.V.L."), + new Codec("sanm", "LucasArts SANM/SMUSH video", "D.V.L."), + new Codec("scpr", "ScreenPressor", "D.V.LS"), + new Codec("screenpresso", "Screenpresso", "D.V..S"), + new Codec("sgi", "SGI image", "DEVI.S"), + new Codec("sgirle", "SGI RLE 8-bit", "D.VI.S"), + new Codec("sheervideo", "BitJazz SheerVideo", "D.VI.S"), + new Codec("smackvideo", "Smacker video (decoders: smackvid )", "D.V.L."), + new Codec("smc", "QuickTime Graphics (SMC)", "D.V.L."), + new Codec("smvjpeg", "Sigmatel Motion Video", "D.V..."), + new Codec("snow", "Snow", "DEV.LS"), + new Codec("sp5x", "Sunplus JPEG (SP5X)", "D.VIL."), + new Codec("speedhq", "NewTek SpeedHQ", "D.VIL."), + new Codec("srgc", "Screen Recorder Gold Codec", "D.VI.S"), + new Codec("sunrast", "Sun Rasterfile image", "DEVI.S"), + new Codec("svg", "Scalable Vector Graphics", "..V..S"), + new Codec("svq1", "Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1", "DEV.L."), + new Codec("svq3", "Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3", "D.V.L."), + new Codec("targa", "Truevision Targa image", "DEVI.S"), + new Codec("targa_y216", "Pinnacle TARGA CineWave YUV16", "D.VI.S"), + new Codec("tdsc", "TDSC", "D.V.L."), + new Codec("tgq", "Electronic Arts TGQ video (decoders: eatgq )", "D.V.L."), + new Codec("tgv", "Electronic Arts TGV video (decoders: eatgv )", "D.V.L."), + new Codec("theora", "Theora (encoders: libtheora )", "DEV.L."), + new Codec("thp", "Nintendo Gamecube THP video", "D.VIL."), + new Codec("tiertexseqvideo", "Tiertex Limited SEQ video", "D.V.L."), + new Codec("tiff", "TIFF image", "DEVI.S"), + new Codec("tmv", "8088flex TMV", "D.VIL."), + new Codec("tqi", "Electronic Arts TQI video (decoders: eatqi )", "D.V.L."), + new Codec("truemotion1", "Duck TrueMotion 1.0", "D.V.L."), + new Codec("truemotion2", "Duck TrueMotion 2.0", "D.V.L."), + new Codec("truemotion2rt", "Duck TrueMotion 2.0 Real Time", "D.VIL."), + new Codec("tscc", "TechSmith Screen Capture Codec (decoders: camtasia )", "D.V..S"), + new Codec("tscc2", "TechSmith Screen Codec 2", "D.V.L."), + new Codec("txd", "Renderware TXD (TeXture Dictionary) image", "D.VIL."), + new Codec("ulti", "IBM UltiMotion (decoders: ultimotion )", "D.V.L."), + new Codec("utvideo", "Ut Video", "DEVI.S"), + new Codec("v210", "Uncompressed 4:2:2 10-bit", "DEVI.S"), + new Codec("v210x", "Uncompressed 4:2:2 10-bit", "D.VI.S"), + new Codec("v308", "Uncompressed packed 4:4:4", "DEVI.S"), + new Codec("v408", "Uncompressed packed QT 4:4:4:4", "DEVI.S"), + new Codec("v410", "Uncompressed 4:4:4 10-bit", "DEVI.S"), + new Codec("vb", "Beam Software VB", "D.V.L."), + new Codec("vble", "VBLE Lossless Codec", "D.VI.S"), + new Codec("vc1", "SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_cuvid )", "D.V.L."), + new Codec("vc1image", "Windows Media Video 9 Image v2", "D.V.L."), + new Codec("vcr1", "ATI VCR1", "D.VIL."), + new Codec("vixl", "Miro VideoXL (decoders: xl )", "D.VIL."), + new Codec("vmdvideo", "Sierra VMD video", "D.V.L."), + new Codec("vmnc", "VMware Screen Codec / VMware Video", "D.V..S"), + new Codec("vp3", "On2 VP3", "D.V.L."), + new Codec("vp4", "On2 VP4", "D.V.L."), + new Codec("vp5", "On2 VP5", "D.V.L."), + new Codec("vp6", "On2 VP6", "D.V.L."), + new Codec("vp6a", "On2 VP6 (Flash version, with alpha channel)", "D.V.L."), + new Codec("vp6f", "On2 VP6 (Flash version)", "D.V.L."), + new Codec("vp7", "On2 VP7", "D.V.L."), + new Codec( + "vp8", + "On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv ) (encoders: libvpx )", + "DEV.L."), + new Codec( + "vp9", + "Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid vp9_qsv ) (encoders: libvpx-vp9 vp9_qsv )", + "DEV.L."), + new Codec("wcmv", "WinCAM Motion Video", "D.V..S"), + new Codec("webp", "WebP (encoders: libwebp_anim libwebp )", "DEVILS"), + new Codec("wmv1", "Windows Media Video 7", "DEV.L."), + new Codec("wmv2", "Windows Media Video 8", "DEV.L."), + new Codec("wmv3", "Windows Media Video 9", "D.V.L."), + new Codec("wmv3image", "Windows Media Video 9 Image", "D.V.L."), + new Codec("wnv1", "Winnov WNV1", "D.VIL."), + new Codec("wrapped_avframe", "AVFrame to AVPacket passthrough", "DEV..S"), + new Codec( + "ws_vqa", + "Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo )", + "D.V.L."), + new Codec("xan_wc3", "Wing Commander III / Xan", "D.V.L."), + new Codec("xan_wc4", "Wing Commander IV / Xxan", "D.V.L."), + new Codec("xbin", "eXtended BINary text", "D.VI.."), + new Codec("xbm", "XBM (X BitMap) image", "DEVI.S"), + new Codec("xface", "X-face image", "DEVIL."), + new Codec("xpm", "XPM (X PixMap) image", "D.VI.S"), + new Codec("xwd", "XWD (X Window Dump) image", "DEVI.S"), + new Codec("y41p", "Uncompressed YUV 4:1:1 12-bit", "DEVI.S"), + new Codec("ylc", "YUY2 Lossless Codec", "D.VI.S"), + new Codec("yop", "Psygnosis YOP Video", "D.V.L."), + new Codec("yuv4", "Uncompressed packed 4:2:0", "DEVI.S"), + new Codec("zerocodec", "ZeroCodec Lossless Video", "D.V..S"), + new Codec("zlib", "LCL (LossLess Codec Library) ZLIB", "DEVI.S"), + new Codec("zmbv", "Zip Motion Blocks Video", "DEV..S"), + new Codec("4gv", "4GV (Fourth Generation Vocoder)", "..AIL."), + new Codec("8svx_exp", "8SVX exponential", "D.AIL."), + new Codec("8svx_fib", "8SVX fibonacci", "D.AIL."), + new Codec("aac", "AAC (Advanced Audio Coding) (decoders: aac aac_fixed )", "DEAIL."), + new Codec("aac_latm", "AAC LATM (Advanced Audio Coding LATM syntax)", "D.AIL."), + new Codec( + "ac3", + "ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed ) (encoders: ac3 ac3_fixed )", + "DEAIL."), + new Codec("acelp.kelvin", "Sipro ACELP.KELVIN", "D.AIL."), + new Codec("adpcm_4xm", "ADPCM 4X Movie", "D.AIL."), + new Codec("adpcm_adx", "SEGA CRI ADX ADPCM", "DEAIL."), + new Codec("adpcm_afc", "ADPCM Nintendo Gamecube AFC", "D.AIL."), + new Codec("adpcm_agm", "ADPCM AmuseGraphics Movie AGM", "D.AIL."), + new Codec("adpcm_aica", "ADPCM Yamaha AICA", "D.AIL."), + new Codec("adpcm_ct", "ADPCM Creative Technology", "D.AIL."), + new Codec("adpcm_dtk", "ADPCM Nintendo Gamecube DTK", "D.AIL."), + new Codec("adpcm_ea", "ADPCM Electronic Arts", "D.AIL."), + new Codec("adpcm_ea_maxis_xa", "ADPCM Electronic Arts Maxis CDROM XA", "D.AIL."), + new Codec("adpcm_ea_r1", "ADPCM Electronic Arts R1", "D.AIL."), + new Codec("adpcm_ea_r2", "ADPCM Electronic Arts R2", "D.AIL."), + new Codec("adpcm_ea_r3", "ADPCM Electronic Arts R3", "D.AIL."), + new Codec("adpcm_ea_xas", "ADPCM Electronic Arts XAS", "D.AIL."), + new Codec("adpcm_g722", "G.722 ADPCM (decoders: g722 ) (encoders: g722 )", "DEAIL."), + new Codec("adpcm_g726", "G.726 ADPCM (decoders: g726 ) (encoders: g726 )", "DEAIL."), + new Codec( + "adpcm_g726le", + "G.726 ADPCM little-endian (decoders: g726le ) (encoders: g726le )", + "DEAIL."), + new Codec("adpcm_ima_amv", "ADPCM IMA AMV", "D.AIL."), + new Codec("adpcm_ima_apc", "ADPCM IMA CRYO APC", "D.AIL."), + new Codec("adpcm_ima_dat4", "ADPCM IMA Eurocom DAT4", "D.AIL."), + new Codec("adpcm_ima_dk3", "ADPCM IMA Duck DK3", "D.AIL."), + new Codec("adpcm_ima_dk4", "ADPCM IMA Duck DK4", "D.AIL."), + new Codec("adpcm_ima_ea_eacs", "ADPCM IMA Electronic Arts EACS", "D.AIL."), + new Codec("adpcm_ima_ea_sead", "ADPCM IMA Electronic Arts SEAD", "D.AIL."), + new Codec("adpcm_ima_iss", "ADPCM IMA Funcom ISS", "D.AIL."), + new Codec("adpcm_ima_oki", "ADPCM IMA Dialogic OKI", "D.AIL."), + new Codec("adpcm_ima_qt", "ADPCM IMA QuickTime", "DEAIL."), + new Codec("adpcm_ima_rad", "ADPCM IMA Radical", "D.AIL."), + new Codec("adpcm_ima_smjpeg", "ADPCM IMA Loki SDL MJPEG", "D.AIL."), + new Codec("adpcm_ima_wav", "ADPCM IMA WAV", "DEAIL."), + new Codec("adpcm_ima_ws", "ADPCM IMA Westwood", "D.AIL."), + new Codec("adpcm_ms", "ADPCM Microsoft", "DEAIL."), + new Codec("adpcm_mtaf", "ADPCM MTAF", "D.AIL."), + new Codec("adpcm_psx", "ADPCM Playstation", "D.AIL."), + new Codec("adpcm_sbpro_2", "ADPCM Sound Blaster Pro 2-bit", "D.AIL."), + new Codec("adpcm_sbpro_3", "ADPCM Sound Blaster Pro 2.6-bit", "D.AIL."), + new Codec("adpcm_sbpro_4", "ADPCM Sound Blaster Pro 4-bit", "D.AIL."), + new Codec("adpcm_swf", "ADPCM Shockwave Flash", "DEAIL."), + new Codec("adpcm_thp", "ADPCM Nintendo THP", "D.AIL."), + new Codec("adpcm_thp_le", "ADPCM Nintendo THP (Little-Endian)", "D.AIL."), + new Codec("adpcm_vima", "LucasArts VIMA audio", "D.AIL."), + new Codec("adpcm_xa", "ADPCM CDROM XA", "D.AIL."), + new Codec("adpcm_yamaha", "ADPCM Yamaha", "DEAIL."), + new Codec("alac", "ALAC (Apple Lossless Audio Codec)", "DEAI.S"), + new Codec( + "amr_nb", + "AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )", + "DEAIL."), + new Codec( + "amr_wb", + "AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc )", + "DEAIL."), + new Codec("ape", "Monkey's Audio", "D.AI.S"), + new Codec("aptx", "aptX (Audio Processing Technology for Bluetooth)", "DEAIL."), + new Codec("aptx_hd", "aptX HD (Audio Processing Technology for Bluetooth)", "DEAIL."), + new Codec("atrac1", "ATRAC1 (Adaptive TRansform Acoustic Coding)", "D.AIL."), + new Codec("atrac3", "ATRAC3 (Adaptive TRansform Acoustic Coding 3)", "D.AIL."), + new Codec( + "atrac3al", + "ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless)", + "D.AI.S"), + new Codec( + "atrac3p", + "ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus )", + "D.AIL."), + new Codec( + "atrac3pal", + "ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless) (decoders: atrac3plusal )", + "D.AI.S"), + new Codec("atrac9", "ATRAC9 (Adaptive TRansform Acoustic Coding 9)", "D.AIL."), + new Codec("avc", "On2 Audio for Video Codec (decoders: on2avc )", "D.AIL."), + new Codec("binkaudio_dct", "Bink Audio (DCT)", "D.AIL."), + new Codec("binkaudio_rdft", "Bink Audio (RDFT)", "D.AIL."), + new Codec("bmv_audio", "Discworld II BMV audio", "D.AIL."), + new Codec("celt", "Constrained Energy Lapped Transform (CELT)", "..AIL."), + new Codec("codec2", "codec2 (very low bitrate speech codec)", "..AIL."), + new Codec("comfortnoise", "RFC 3389 Comfort Noise", "DEAIL."), + new Codec("cook", "Cook / Cooker / Gecko (RealAudio G2)", "D.AIL."), + new Codec("dolby_e", "Dolby E", "D.AIL."), + new Codec( + "dsd_lsbf", "DSD (Direct Stream Digital), least significant bit first", "D.AIL."), + new Codec( + "dsd_lsbf_planar", + "DSD (Direct Stream Digital), least significant bit first, planar", + "D.AIL."), + new Codec( + "dsd_msbf", "DSD (Direct Stream Digital), most significant bit first", "D.AIL."), + new Codec( + "dsd_msbf_planar", + "DSD (Direct Stream Digital), most significant bit first, planar", + "D.AIL."), + new Codec("dsicinaudio", "Delphine Software International CIN audio", "D.AIL."), + new Codec( + "dss_sp", "Digital Speech Standard - Standard Play mode (DSS SP)", "D.AIL."), + new Codec("dst", "DST (Direct Stream Transfer)", "D.AI.S"), + new Codec( + "dts", + "DCA (DTS Coherent Acoustics) (decoders: dca ) (encoders: dca )", + "DEAILS"), + new Codec("dvaudio", "DV audio", "D.AIL."), + new Codec("eac3", "ATSC A/52B (AC-3, E-AC-3)", "DEAIL."), + new Codec("evrc", "EVRC (Enhanced Variable Rate Codec)", "D.AIL."), + new Codec("flac", "FLAC (Free Lossless Audio Codec)", "DEAI.S"), + new Codec("g723_1", "G.723.1", "DEAIL."), + new Codec("g729", "G.729", "D.AIL."), + new Codec("gremlin_dpcm", "DPCM Gremlin", "D.AIL."), + new Codec("gsm", "GSM", "D.AIL."), + new Codec("gsm_ms", "GSM Microsoft variant", "D.AIL."), + new Codec("hcom", "HCOM Audio", "D.AIL."), + new Codec("iac", "IAC (Indeo Audio Coder)", "D.AIL."), + new Codec("ilbc", "iLBC (Internet Low Bitrate Codec)", "D.AIL."), + new Codec("imc", "IMC (Intel Music Coder)", "D.AIL."), + new Codec("interplay_dpcm", "DPCM Interplay", "D.AIL."), + new Codec("interplayacm", "Interplay ACM", "D.AIL."), + new Codec("mace3", "MACE (Macintosh Audio Compression/Expansion) 3:1", "D.AIL."), + new Codec("mace6", "MACE (Macintosh Audio Compression/Expansion) 6:1", "D.AIL."), + new Codec("metasound", "Voxware MetaSound", "D.AIL."), + new Codec("mlp", "MLP (Meridian Lossless Packing)", "DEAI.S"), + new Codec("mp1", "MP1 (MPEG audio layer 1) (decoders: mp1 mp1float )", "D.AIL."), + new Codec( + "mp2", + "MP2 (MPEG audio layer 2) (decoders: mp2 mp2float ) (encoders: mp2 mp2fixed libtwolame )", + "DEAIL."), + new Codec( + "mp3", + "MP3 (MPEG audio layer 3) (decoders: mp3float mp3 ) (encoders: libmp3lame libshine )", + "DEAIL."), + new Codec( + "mp3adu", + "ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu )", + "D.AIL."), + new Codec("mp3on4", "MP3onMP4 (decoders: mp3on4float mp3on4 )", "D.AIL."), + new Codec("mp4als", "MPEG-4 Audio Lossless Coding (ALS) (decoders: als )", "D.AI.S"), + new Codec("mpegh_3d_audio", "MPEG-H 3D Audio", "..A.L."), + new Codec("musepack7", "Musepack SV7 (decoders: mpc7 )", "D.AIL."), + new Codec("musepack8", "Musepack SV8 (decoders: mpc8 )", "D.AIL."), + new Codec("nellymoser", "Nellymoser Asao", "DEAIL."), + new Codec( + "opus", + "Opus (Opus Interactive Audio Codec) (decoders: opus libopus ) (encoders: opus libopus )", + "DEAIL."), + new Codec("paf_audio", "Amazing Studio Packed Animation File Audio", "D.AIL."), + new Codec("pcm_alaw", "PCM A-law / G.711 A-law", "DEAIL."), + new Codec( + "pcm_bluray", "PCM signed 16|20|24-bit big-endian for Blu-ray media", "D.AI.S"), + new Codec("pcm_dvd", "PCM signed 20|24-bit big-endian", "DEAI.S"), + new Codec("pcm_f16le", "PCM 16.8 floating point little-endian", "D.AI.S"), + new Codec("pcm_f24le", "PCM 24.0 floating point little-endian", "D.AI.S"), + new Codec("pcm_f32be", "PCM 32-bit floating point big-endian", "DEAI.S"), + new Codec("pcm_f32le", "PCM 32-bit floating point little-endian", "DEAI.S"), + new Codec("pcm_f64be", "PCM 64-bit floating point big-endian", "DEAI.S"), + new Codec("pcm_f64le", "PCM 64-bit floating point little-endian", "DEAI.S"), + new Codec("pcm_lxf", "PCM signed 20-bit little-endian planar", "D.AI.S"), + new Codec("pcm_mulaw", "PCM mu-law / G.711 mu-law", "DEAIL."), + new Codec("pcm_s16be", "PCM signed 16-bit big-endian", "DEAI.S"), + new Codec("pcm_s16be_planar", "PCM signed 16-bit big-endian planar", "DEAI.S"), + new Codec("pcm_s16le", "PCM signed 16-bit little-endian", "DEAI.S"), + new Codec("pcm_s16le_planar", "PCM signed 16-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s24be", "PCM signed 24-bit big-endian", "DEAI.S"), + new Codec("pcm_s24daud", "PCM D-Cinema audio signed 24-bit", "DEAI.S"), + new Codec("pcm_s24le", "PCM signed 24-bit little-endian", "DEAI.S"), + new Codec("pcm_s24le_planar", "PCM signed 24-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s32be", "PCM signed 32-bit big-endian", "DEAI.S"), + new Codec("pcm_s32le", "PCM signed 32-bit little-endian", "DEAI.S"), + new Codec("pcm_s32le_planar", "PCM signed 32-bit little-endian planar", "DEAI.S"), + new Codec("pcm_s64be", "PCM signed 64-bit big-endian", "DEAI.S"), + new Codec("pcm_s64le", "PCM signed 64-bit little-endian", "DEAI.S"), + new Codec("pcm_s8", "PCM signed 8-bit", "DEAI.S"), + new Codec("pcm_s8_planar", "PCM signed 8-bit planar", "DEAI.S"), + new Codec("pcm_u16be", "PCM unsigned 16-bit big-endian", "DEAI.S"), + new Codec("pcm_u16le", "PCM unsigned 16-bit little-endian", "DEAI.S"), + new Codec("pcm_u24be", "PCM unsigned 24-bit big-endian", "DEAI.S"), + new Codec("pcm_u24le", "PCM unsigned 24-bit little-endian", "DEAI.S"), + new Codec("pcm_u32be", "PCM unsigned 32-bit big-endian", "DEAI.S"), + new Codec("pcm_u32le", "PCM unsigned 32-bit little-endian", "DEAI.S"), + new Codec("pcm_u8", "PCM unsigned 8-bit", "DEAI.S"), + new Codec("pcm_vidc", "PCM Archimedes VIDC", "DEAIL."), + new Codec("pcm_zork", "PCM Zork", "D.AIL."), + new Codec("qcelp", "QCELP / PureVoice", "D.AIL."), + new Codec("qdm2", "QDesign Music Codec 2", "D.AIL."), + new Codec("qdmc", "QDesign Music", "D.AIL."), + new Codec( + "ra_144", + "RealAudio 1.0 (14.4K) (decoders: real_144 ) (encoders: real_144 )", + "DEAIL."), + new Codec("ra_288", "RealAudio 2.0 (28.8K) (decoders: real_288 )", "D.AIL."), + new Codec("ralf", "RealAudio Lossless", "D.AI.S"), + new Codec("roq_dpcm", "DPCM id RoQ", "DEAIL."), + new Codec("s302m", "SMPTE 302M", "DEAI.S"), + new Codec("sbc", "SBC (low-complexity subband codec)", "DEAIL."), + new Codec("sdx2_dpcm", "DPCM Squareroot-Delta-Exact", "D.AIL."), + new Codec("shorten", "Shorten", "D.AI.S"), + new Codec("sipr", "RealAudio SIPR / ACELP.NET", "D.AIL."), + new Codec("smackaudio", "Smacker audio (decoders: smackaud )", "D.AIL."), + new Codec("smv", "SMV (Selectable Mode Vocoder)", "..AIL."), + new Codec("sol_dpcm", "DPCM Sol", "D.AIL."), + new Codec("sonic", "Sonic", "DEAI.."), + new Codec("sonicls", "Sonic lossless", ".EAI.."), + new Codec("speex", "Speex (decoders: libspeex ) (encoders: libspeex )", "DEAIL."), + new Codec("tak", "TAK (Tom's lossless Audio Kompressor)", "D.AI.S"), + new Codec("truehd", "TrueHD", "DEA..S"), + new Codec("truespeech", "DSP Group TrueSpeech", "D.AIL."), + new Codec("tta", "TTA (True Audio)", "DEAI.S"), + new Codec("twinvq", "VQF TwinVQ", "D.AIL."), + new Codec("vmdaudio", "Sierra VMD audio", "D.AIL."), + new Codec( + "vorbis", + "Vorbis (decoders: vorbis libvorbis ) (encoders: vorbis libvorbis )", + "DEAIL."), + new Codec("wavesynth", "Wave synthesis pseudo-codec", "D.AI.."), + new Codec("wavpack", "WavPack (encoders: wavpack libwavpack )", "DEAILS"), + new Codec("westwood_snd1", "Westwood Audio (SND1) (decoders: ws_snd1 )", "D.AIL."), + new Codec("wmalossless", "Windows Media Audio Lossless", "D.AI.S"), + new Codec("wmapro", "Windows Media Audio 9 Professional", "D.AIL."), + new Codec("wmav1", "Windows Media Audio 1", "DEAIL."), + new Codec("wmav2", "Windows Media Audio 2", "DEAIL."), + new Codec("wmavoice", "Windows Media Audio Voice", "D.AIL."), + new Codec("xan_dpcm", "DPCM Xan", "D.AIL."), + new Codec("xma1", "Xbox Media Audio 1", "D.AIL."), + new Codec("xma2", "Xbox Media Audio 2", "D.AIL."), + new Codec("bin_data", "binary data", "..D..."), + new Codec("dvd_nav_packet", "DVD Nav packet", "..D..."), + new Codec("epg", "Electronic Program Guide", "..D..."), + new Codec("klv", "SMPTE 336M Key-Length-Value (KLV) metadata", "..D..."), + new Codec("otf", "OpenType font", "..D..."), + new Codec("scte_35", "SCTE 35 Message Queue", "..D..."), + new Codec("timed_id3", "timed ID3 metadata", "..D..."), + new Codec("ttf", "TrueType font", "..D..."), + new Codec("arib_caption", "ARIB STD-B24 caption", "..S..."), + new Codec( + "ass", + "ASS (Advanced SSA) subtitle (decoders: ssa ass ) (encoders: ssa ass )", + "DES..."), + new Codec( + "dvb_subtitle", + "DVB subtitles (decoders: dvbsub ) (encoders: dvbsub )", + "DES..."), + new Codec("dvb_teletext", "DVB teletext", "..S..."), + new Codec( + "dvd_subtitle", + "DVD subtitles (decoders: dvdsub ) (encoders: dvdsub )", + "DES..."), + new Codec("eia_608", "EIA-608 closed captions (decoders: cc_dec )", "D.S..."), + new Codec( + "hdmv_pgs_subtitle", + "HDMV Presentation Graphic Stream subtitles (decoders: pgssub )", + "D.S..."), + new Codec("hdmv_text_subtitle", "HDMV Text subtitle", "..S..."), + new Codec("jacosub", "JACOsub subtitle", "D.S..."), + new Codec("microdvd", "MicroDVD subtitle", "D.S..."), + new Codec("mov_text", "MOV text", "DES..."), + new Codec("mpl2", "MPL2 subtitle", "D.S..."), + new Codec("pjs", "PJS (Phoenix Japanimation Society) subtitle", "D.S..."), + new Codec("realtext", "RealText subtitle", "D.S..."), + new Codec("sami", "SAMI subtitle", "D.S..."), + new Codec("srt", "SubRip subtitle with embedded timing", "..S..."), + new Codec("ssa", "SSA (SubStation Alpha) subtitle", "..S..."), + new Codec("stl", "Spruce subtitle format", "D.S..."), + new Codec( + "subrip", + "SubRip subtitle (decoders: srt subrip ) (encoders: srt subrip )", + "DES..."), + new Codec("subviewer", "SubViewer subtitle", "D.S..."), + new Codec("subviewer1", "SubViewer v1 subtitle", "D.S..."), + new Codec("text", "raw UTF-8 text", "DES..."), + new Codec("ttml", "Timed Text Markup Language", "..S..."), + new Codec("vplayer", "VPlayer subtitle", "D.S..."), + new Codec("webvtt", "WebVTT subtitle", "DES..."), + new Codec("xsub", "XSUB", "DES...")) + .build(); } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java b/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java index dc5fb9ac..ea945415 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/PixelFormats.java @@ -4,12 +4,11 @@ import net.bramp.ffmpeg.info.PixelFormat; /** - * Class that contains all pixel formats as defined in the unit tests This should not be used as a concise - * list of available pixel formats, as every install of ffmpeg is different. Call ffmpeg.pixelFormats() to - * discover. + * Class that contains all pixel formats as defined in the unit tests This should not be used as a + * concise list of available pixel formats, as every install of ffmpeg is different. Call + * ffmpeg.pixelFormats() to discover. */ -public final class PixelFormats -{ +public final class PixelFormats { private PixelFormats() { throw new AssertionError("No instances for you!"); @@ -210,7 +209,6 @@ private PixelFormats() { new PixelFormat("yuva444p12be", 4, 48, "IO..."), new PixelFormat("yuva444p12le", 4, 48, "IO..."), new PixelFormat("nv24", 3, 24, "IO..."), - new PixelFormat("nv42", 3, 24, "IO...") - ) + new PixelFormat("nv42", 3, 24, "IO...")) .build(); } diff --git a/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java index 95a2fef8..71e08843 100644 --- a/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java +++ b/src/test/java/net/bramp/ffmpeg/info/FFmpegGetInfoTest.java @@ -1,6 +1,13 @@ package net.bramp.ffmpeg.info; +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.mockito.Mockito.when; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import net.bramp.ffmpeg.FFmpeg; import net.bramp.ffmpeg.ProcessFunction; import net.bramp.ffmpeg.lang.NewProcessAnswer; @@ -10,27 +17,16 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; -import static org.mockito.Mockito.when; - @RunWith(MockitoJUnitRunner.class) public class FFmpegGetInfoTest { - @Mock - ProcessFunction runFunc; + @Mock ProcessFunction runFunc; @Before public void before() throws IOException { when(runFunc.run(argThatHasItem("-version"))) .thenAnswer(new NewProcessAnswer("ffmpeg-version")); - when(runFunc.run(argThatHasItem("-codecs"))) - .thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); + when(runFunc.run(argThatHasItem("-codecs"))).thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); } @Test @@ -60,7 +56,6 @@ public void getFFmpegCodecSupportTest() throws IOException { break; default: otherCodecs.add(codec); - } } From 6e04b5f64b5ac26f9b27b795e359fa9f4345ce0f Mon Sep 17 00:00:00 2001 From: Sverker Abrahamsson Date: Thu, 26 Oct 2023 07:03:06 +0200 Subject: [PATCH 023/101] Fix #191: Ignore out_time_us field (#289) Co-authored-by: Sverker Abrahamsson --- src/main/java/net/bramp/ffmpeg/progress/Progress.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/bramp/ffmpeg/progress/Progress.java b/src/main/java/net/bramp/ffmpeg/progress/Progress.java index e7f440b8..f43bdc80 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/Progress.java +++ b/src/main/java/net/bramp/ffmpeg/progress/Progress.java @@ -157,6 +157,9 @@ protected boolean parseLine(String line) { // out_time_ns = Long.parseLong(value) * 1000; return false; + case "out_time_us": + return false; + case "out_time": out_time_ns = fromTimecode(value); return false; From 6f9561923f819b21d713f88c18ffe8cbde6158e2 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 25 Oct 2023 22:24:15 -0700 Subject: [PATCH 024/101] [maven-release-plugin] prepare release ffmpeg-0.8.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index adad636f..e7276397 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.7.1-SNAPSHOT + 0.8.0 FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface @@ -11,7 +11,7 @@ https://github.com/bramp/ffmpeg-cli-wrapper scm:git:git@github.com:bramp/ffmpeg-cli-wrapper.git - ffmpeg-0.7.0 + ffmpeg-0.8.0 From 1231b957b6589c3ba60afc73f335e043bca306d4 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 25 Oct 2023 22:24:19 -0700 Subject: [PATCH 025/101] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e7276397..6545e509 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.8.0 + 0.8.1-SNAPSHOT FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface @@ -11,7 +11,7 @@ https://github.com/bramp/ffmpeg-cli-wrapper scm:git:git@github.com:bramp/ffmpeg-cli-wrapper.git - ffmpeg-0.8.0 + ffmpeg-0.7.0 From e68f9b385b392b86bfd9b02460a2b7103e4f4af2 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 25 Oct 2023 23:02:56 -0700 Subject: [PATCH 026/101] Minor tweaks to the README. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9934b8bd..1508e7a3 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,13 @@ A fluent interface to running FFmpeg from Java. Install ------- -Maven: +We currently support Java 8 and above. Use Maven to install the dependency. + ```xml net.bramp.ffmpeg ffmpeg - 0.7.0 + 0.8.0 ``` @@ -134,6 +135,7 @@ mvn mvn test # To release (pushing jar to maven central) +# (don't forget to set up your ~/.m2/settings.xml) mvn release:prepare mvn release:perform @@ -151,7 +153,6 @@ mvn versions:display-plugin-updates # Library Dependencies mvn versions:display-dependency-updates - ``` Install FFmpeg on Ubuntu From b8e588ad17f410a63e1db48ed0cf7af3c8a0af73 Mon Sep 17 00:00:00 2001 From: Michael Sims Date: Wed, 25 Oct 2023 23:13:54 -0700 Subject: [PATCH 027/101] Added method for using two pass with progress to class FFmpegExecutor (#247) --- src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java b/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java index 41de3f77..7c1e1ebf 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegExecutor.java @@ -45,4 +45,8 @@ public FFmpegJob createJob(FFmpegBuilder builder, ProgressListener listener) { public FFmpegJob createTwoPassJob(FFmpegBuilder builder) { return new TwoPassFFmpegJob(ffmpeg, builder); } + + public FFmpegJob createTwoPassJob(FFmpegBuilder builder, ProgressListener listener) { + return new TwoPassFFmpegJob(ffmpeg, builder, listener); + } } From 205e253f878ce13d25ff5b4d8f9412598e155c2b Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 26 Oct 2023 08:20:58 +0200 Subject: [PATCH 028/101] add vbr encoding option (#177) * adds vbr encoding option. fixes #176 * properly check if quality is in range --- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 16 ++++++++ .../ffmpeg/builder/FFmpegBuilderTest.java | 38 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index 4ddf48d1..6852b529 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -64,6 +64,7 @@ public String toString() { Verbosity verbosity = Verbosity.ERROR; URI progress; String user_agent; + Integer qscale; // Input settings String format; @@ -201,6 +202,17 @@ public FFmpegBuilder setVideoFilter(String filter) { return this; } + /** + * Sets vbr quality when decoding mp3 output. + * @param quality the quality between 0 and 9. Where 0 is best. + * @return FFmpegBuilder + */ + public FFmpegBuilder setVBR(Integer quality) { + Preconditions.checkArgument(quality > 0 && quality < 9, "vbr must be between 0 and 9"); + this.qscale = quality; + return this; + } + /** * Add additional ouput arguments (for flags which aren't currently supported). * @@ -327,6 +339,10 @@ public List build() { args.add("-filter_complex", complexFilter); } + if (qscale != null) { + args.add("-qscale:a", qscale.toString()); + } + for (FFmpegOutputBuilder output : this.outputs) { args.addAll(output.build(this, pass)); } diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index 55e468cf..45afde1a 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -369,6 +369,44 @@ public void testExtraArgs() { "-y", "-v", "error", "-a", "b", "-i", "input", "-an", "-sn", "-c", "d", "output")); } + @Test + public void testVbr() { + List args = + new FFmpegBuilder() + .setInput("input") + .setVBR(2) + .addOutput("output") + .done() + .build(); + + assertEquals( + args, + ImmutableList.of( + "-y", "-v", "error", "-i", "input", "-qscale:a", "2", "output")); + } + + @Test(expected = IllegalArgumentException.class) + public void testVbrNegativeParam() { + List args = + new FFmpegBuilder() + .setInput("input") + .setVBR(-3) + .addOutput("output") + .done() + .build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testVbrQualityExceedsRange() { + List args = + new FFmpegBuilder() + .setInput("input") + .setVBR(10) + .addOutput("output") + .done() + .build(); + } + @Test(expected = IllegalArgumentException.class) public void testNothing() { List unused = new FFmpegBuilder().build(); From e47b3e9bd009c9aafd765610948b8dd1cd582cbc Mon Sep 17 00:00:00 2001 From: Luca Spinazzola Date: Thu, 26 Oct 2023 02:40:01 -0400 Subject: [PATCH 029/101] Allow extra arguments to FFprobe (#254) * Update FFprobe.java optional extra args --- src/main/java/net/bramp/ffmpeg/FFprobe.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFprobe.java b/src/main/java/net/bramp/ffmpeg/FFprobe.java index afecaa3d..ad75abaf 100644 --- a/src/main/java/net/bramp/ffmpeg/FFprobe.java +++ b/src/main/java/net/bramp/ffmpeg/FFprobe.java @@ -78,7 +78,7 @@ public void run(List args) throws IOException { } // TODO Add Probe Inputstream - public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent) throws IOException { + public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent, @Nullable String... extraArgs) throws IOException { checkIfFFprobe(); ImmutableList.Builder args = new ImmutableList.Builder(); @@ -92,6 +92,10 @@ public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent) thr if (userAgent != null) { args.add("-user_agent", userAgent); } + + if (extraArgs != null) { + args.add(extraArgs); + } args.add("-print_format", "json") .add("-show_error") From c01fc75d8678e1434c33882ffafce7258080789c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:46:56 +0000 Subject: [PATCH 030/101] Bump ch.qos.logback:logback-classic from 1.4.11 to 1.4.12 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.4.11 to 1.4.12. - [Commits](https://github.com/qos-ch/logback/compare/v_1.4.11...v_1.4.12) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6545e509..71515875 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ ch.qos.logback logback-classic - 1.4.11 + 1.4.12 From 78a927439fe0f52e9094f21c4855f607bcb79199 Mon Sep 17 00:00:00 2001 From: blakehawkins Date: Fri, 22 Dec 2023 18:19:21 +0200 Subject: [PATCH 031/101] Fix missing .done() on Builder --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1508e7a3..430ee71b 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,8 @@ FFmpegBuilder builder = new FFmpegBuilder() .setVideoFrameRate(24, 1) // at 24 frames per second .setVideoResolution(640, 480) // at 640x480 resolution - .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL); // Allow FFmpeg to use experimental specs + .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs + .done(); FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); From 45772979078d64ddacdec8d5dab0c2c0f6d61b15 Mon Sep 17 00:00:00 2001 From: Euklios Date: Tue, 20 Feb 2024 16:56:45 +0100 Subject: [PATCH 032/101] Add thread option (#303) * Add threads options with precondition of '> 0' --------- Co-authored-by: huangguanhao --- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 13 +++++++++- .../ffmpeg/builder/FFmpegBuilderTest.java | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index 6852b529..d3bf6bea 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -66,6 +66,7 @@ public String toString() { String user_agent; Integer qscale; + int threads; // Input settings String format; Long startOffset; // in millis @@ -151,7 +152,13 @@ public FFmpegBuilder setInput(String filename) { return addInput(filename); } - public FFmpegBuilder setFormat(String format) { + public FFmpegBuilder setThreads(int threads) { + checkArgument(threads > 0, "threads must be greater than zero"); + this.threads = threads; + return this; + } + + public FFmpegBuilder setFormat(String format) { this.format = checkNotNull(format); return this; } @@ -301,6 +308,10 @@ public List build() { args.add("-ss", FFmpegUtils.toTimecode(startOffset, TimeUnit.MILLISECONDS)); } + if (threads > 0) { + args.add("-threads", String.valueOf(threads)); + } + if (format != null) { args.add("-f", format); } diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index 45afde1a..a7a27669 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -470,5 +470,30 @@ public void testPresets() { ImmutableList.of( "-y", "-v", "error", "-i", "input", "-preset", "a", "-fpre", "b", "-vpre", "c", "-apre", "d", "-spre", "e", "output")); + } + + @Test + public void testThreads() { + List args = + new FFmpegBuilder() + .setThreads(2) + .addInput("input") + .addOutput("output") + .done() + .build(); + + assertEquals( + args, + ImmutableList.of("-y", "-v", "error", "-threads", "2", "-i", "input", "output")); + } + + @Test(expected = IllegalArgumentException.class) + public void testZeroThreads() { + new FFmpegBuilder().setThreads(0); + } + + @Test(expected = IllegalArgumentException.class) + public void testNegativeNumberOfThreads() { + new FFmpegBuilder().setThreads(-1); } } From ee8e3998e937c95dbe3d2786147aee5dcf3faf5c Mon Sep 17 00:00:00 2001 From: Euklios Date: Fri, 8 Mar 2024 18:19:07 +0100 Subject: [PATCH 033/101] Feature/test probe video2 failing (#307) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Tests failing on some systems due to filename * chore: Revert assertion We're still checking against the 'é' symbol. The resource filename has been renamed, as some systems can't deal with the symbol and therefore produce NPE. --- src/test/java/net/bramp/ffmpeg/FFprobeTest.java | 2 +- src/test/java/net/bramp/ffmpeg/fixtures/Samples.java | 2 +- .../ffprobe-Always On My Mind [Program Only] - Adelen.mp4 | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename "src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adel\303\251n.mp4" => src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adelen.mp4 (100%) diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 41075cec..7f039777 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -39,7 +39,7 @@ public void before() throws IOException { .thenAnswer(new NewProcessAnswer("ffprobe-big_buck_bunny_720p_1mb.mp4")); when(runFunc.run(argThatHasItem(Samples.always_on_my_mind))) - .thenAnswer(new NewProcessAnswer("ffprobe-Always On My Mind [Program Only] - Adelén.mp4")); + .thenAnswer(new NewProcessAnswer("ffprobe-Always On My Mind [Program Only] - Adelen.mp4")); when(runFunc.run(argThatHasItem(Samples.start_pts_test))) .thenAnswer(new NewProcessAnswer("ffprobe-start_pts_test")); diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java index 374d0e68..e73f2152 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java @@ -25,7 +25,7 @@ private Samples() { public static final String FAKE_PREFIX = "fake/"; public static final String always_on_my_mind = - FAKE_PREFIX + "Always On My Mind [Program Only] - Adelén.mp4"; + FAKE_PREFIX + "Always On My Mind [Program Only] - Adelen.mp4"; public static final String start_pts_test = FAKE_PREFIX + "start_pts_test_1mb.ts"; diff --git "a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adel\303\251n.mp4" b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adelen.mp4 similarity index 100% rename from "src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adel\303\251n.mp4" rename to src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-Always On My Mind [Program Only] - Adelen.mp4 From 0184306ef1ab865a04af26f587377958216003fb Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 10 Mar 2024 08:10:24 +0100 Subject: [PATCH 034/101] chore: Extract and merge CodecType (#306) --- .../java/net/bramp/ffmpeg/info/Codec.java | 23 ++++++++----------- .../net/bramp/ffmpeg/probe/FFmpegStream.java | 9 ++------ .../net/bramp/ffmpeg/shared/CodecType.java | 9 ++++++++ .../java/net/bramp/ffmpeg/FFprobeTest.java | 13 ++++------- 4 files changed, 25 insertions(+), 29 deletions(-) create mode 100644 src/main/java/net/bramp/ffmpeg/shared/CodecType.java diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index 130bdbf5..4a0e11a0 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -2,6 +2,7 @@ import com.google.common.base.Preconditions; import com.google.errorprone.annotations.Immutable; +import net.bramp.ffmpeg.shared.CodecType; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -12,14 +13,6 @@ */ @Immutable public class Codec { - - public enum Type { - VIDEO, - AUDIO, - SUBTITLE, - DATA - } - final String name; final String longName; @@ -30,7 +23,7 @@ public enum Type { final boolean canEncode; /** What type of codec is this */ - final Type type; + final CodecType type; /** * @param name short codec name @@ -58,17 +51,19 @@ public Codec(String name, String longName, String flags) { switch (flags.charAt(2)) { case 'V': - this.type = Type.VIDEO; + this.type = CodecType.VIDEO; break; case 'A': - this.type = Type.AUDIO; + this.type = CodecType.AUDIO; break; case 'S': - this.type = Type.SUBTITLE; + this.type = CodecType.SUBTITLE; break; case 'D': - this.type = Type.DATA; + this.type = CodecType.DATA; break; + case 'T': + this.type = CodecType.ATTACHMENT; default: throw new IllegalArgumentException("Invalid codec type '" + flags.charAt(2) + "'"); } @@ -107,7 +102,7 @@ public boolean getCanEncode() { return canEncode; } - public Type getType() { + public CodecType getType() { return type; } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index bd517856..84891842 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -2,6 +2,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Map; + +import net.bramp.ffmpeg.shared.CodecType; import org.apache.commons.lang3.math.Fraction; @SuppressFBWarnings( @@ -9,13 +11,6 @@ justification = "POJO objects where the fields are populated by gson") public class FFmpegStream { - public enum CodecType { - VIDEO, - AUDIO, - SUBTITLE, - DATA, - ATTACHMENT - } public int index; public String codec_name; diff --git a/src/main/java/net/bramp/ffmpeg/shared/CodecType.java b/src/main/java/net/bramp/ffmpeg/shared/CodecType.java new file mode 100644 index 00000000..3a29d6b6 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/shared/CodecType.java @@ -0,0 +1,9 @@ +package net.bramp.ffmpeg.shared; + +public enum CodecType { + VIDEO, + AUDIO, + SUBTITLE, + DATA, + ATTACHMENT +} diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 7f039777..c53929b5 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -7,13 +7,12 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; -import com.google.gson.Gson; import java.io.IOException; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.lang.NewProcessAnswer; import net.bramp.ffmpeg.probe.FFmpegChapter; import net.bramp.ffmpeg.probe.FFmpegProbeResult; -import net.bramp.ffmpeg.probe.FFmpegStream; +import net.bramp.ffmpeg.shared.CodecType; import org.apache.commons.lang3.math.Fraction; import org.junit.Before; import org.junit.Test; @@ -28,8 +27,6 @@ public class FFprobeTest { FFprobe ffprobe; - static final Gson gson = FFmpegUtils.getGson(); - @Before public void before() throws IOException { when(runFunc.run(argThatHasItem("-version"))) @@ -73,8 +70,8 @@ public void testProbeVideo() throws IOException { // Only a quick sanity check until we do something better assertThat(info.getStreams(), hasSize(2)); - assertThat(info.getStreams().get(0).codec_type, is(FFmpegStream.CodecType.VIDEO)); - assertThat(info.getStreams().get(1).codec_type, is(FFmpegStream.CodecType.AUDIO)); + assertThat(info.getStreams().get(0).codec_type, is(CodecType.VIDEO)); + assertThat(info.getStreams().get(1).codec_type, is(CodecType.AUDIO)); assertThat(info.getStreams().get(1).channels, is(6)); assertThat(info.getStreams().get(1).sample_rate, is(48_000)); @@ -113,8 +110,8 @@ public void testProbeVideo2() throws IOException { // Only a quick sanity check until we do something better assertThat(info.getStreams(), hasSize(2)); - assertThat(info.getStreams().get(0).codec_type, is(FFmpegStream.CodecType.VIDEO)); - assertThat(info.getStreams().get(1).codec_type, is(FFmpegStream.CodecType.AUDIO)); + assertThat(info.getStreams().get(0).codec_type, is(CodecType.VIDEO)); + assertThat(info.getStreams().get(1).codec_type, is(CodecType.AUDIO)); assertThat(info.getStreams().get(1).channels, is(2)); assertThat(info.getStreams().get(1).sample_rate, is(48_000)); From 314e3fd1e214dd9eb1ba087df1b983b0dc82ed5c Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 10 Mar 2024 08:24:29 +0100 Subject: [PATCH 035/101] chore: Add ffmpeg version to bug_report.md (#308) --- .github/ISSUE_TEMPLATE/bug_report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b67efe69..f50b4cb9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -18,6 +18,7 @@ A clear and concise description of what you expected to happen. **Version (if applicable):** - OS: [e.g. Linux] - Java Version [e.g. 8] + - FFmpeg version [e.g. 6.1.1] **Additional context** Add any other context about the problem here. From bb52097e600338a1a3ff3b264f0445fb85f1ed38 Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 10 Mar 2024 16:40:46 +0100 Subject: [PATCH 036/101] Change FFmpegChapter#id type to long (#310) --- .../net/bramp/ffmpeg/probe/FFmpegChapter.java | 2 +- .../java/net/bramp/ffmpeg/FFprobeTest.java | 11 ++ .../net/bramp/ffmpeg/fixtures/Samples.java | 2 + .../ffmpeg/fixtures/chapters_with_long_id.m4b | 134 ++++++++++++++++++ 4 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/chapters_with_long_id.m4b diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java index f5d33e6e..ba658616 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java @@ -7,7 +7,7 @@ justification = "POJO objects where the fields are populated by gson") public class FFmpegChapter { - public int id; + public long id; public String time_base; public long start; public String start_time; diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index c53929b5..114cc515 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -50,6 +50,9 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem(Samples.side_data_list))) .thenAnswer(new NewProcessAnswer("ffprobe-side_data_list")); + when(runFunc.run(argThatHasItem(Samples.chapters_with_long_id))) + .thenAnswer(new NewProcessAnswer("chapters_with_long_id.m4b")); + ffprobe = new FFprobe(runFunc); } @@ -157,4 +160,12 @@ public void testProbeSideDataList() throws IOException { "\n00000000: 0 -65536 0\n00000001: 65536 0 0\n00000002: 0 0 1073741824\n")); assertThat(info.getStreams().get(0).side_data_list[0].rotation, is(90)); } + + @Test + public void testChaptersWithLongIds() throws IOException { + FFmpegProbeResult info = ffprobe.probe(Samples.chapters_with_long_id); + + assertThat(info.getChapters().get(0).id, is(6613449456311024506L)); + assertThat(info.getChapters().get(1).id, is(-4433436293284298339L)); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java index e73f2152..1d4ebb6c 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java @@ -31,6 +31,8 @@ private Samples() { public static final String divide_by_zero = FAKE_PREFIX + "Divide By Zero.mp4"; + public static final String chapters_with_long_id = FAKE_PREFIX + "chapters_with_long_id.m4b"; + // TODO Change to a temp directory // TODO Generate random names, so we can run tests concurrently public static final String output_mp4 = "output.mp4"; diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/chapters_with_long_id.m4b b/src/test/resources/net/bramp/ffmpeg/fixtures/chapters_with_long_id.m4b new file mode 100644 index 00000000..601dd1d2 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/chapters_with_long_id.m4b @@ -0,0 +1,134 @@ +{ + "streams": [ + { + "index": 0, + "codec_name": "aac", + "codec_long_name": "AAC (Advanced Audio Coding)", + "profile": "LC", + "codec_type": "audio", + "codec_time_base": "1/44100", + "codec_tag_string": "mp4a", + "codec_tag": "0x6134706d", + "sample_fmt": "fltp", + "sample_rate": "44100", + "channels": 1, + "channel_layout": "mono", + "bits_per_sample": 0, + "r_frame_rate": "0/0", + "avg_frame_rate": "0/0", + "time_base": "1/44100", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 248628224, + "duration": "5637.828209", + "bit_rate": "62993", + "max_bit_rate": "75648", + "nb_frames": "242801", + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0, + "timed_thumbnails": 0 + }, + "tags": { + "creation_time": "2016-02-21T08:27:56.000000Z", + "language": "und" + } + }, + { + "index": 1, + "codec_name": "bin_data", + "codec_long_name": "binary data", + "codec_type": "data", + "codec_tag_string": "text", + "codec_tag": "0x74786574", + "r_frame_rate": "0/0", + "avg_frame_rate": "0/0", + "time_base": "1/44100", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 248628224, + "duration": "5637.828209", + "bit_rate": "1", + "nb_frames": "24", + "disposition": { + "default": 0, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0, + "timed_thumbnails": 0 + }, + "tags": { + "creation_time": "2016-02-21T08:28:13.000000Z", + "language": "und" + } + } + ], + "chapters": [ + { + "id": 6613449456311024506, + "time_base": "1/1000000000", + "start": 0, + "start_time": "0.000000", + "end": 435458000000, + "end_time": "435.458000", + "tags": { + "title": "Chapitre 01" + } + }, + { + "id": -4433436293284298339, + "time_base": "1/1000000000", + "start": 435458000000, + "start_time": "435.458000", + "end": 852333000000, + "end_time": "852.333000", + "tags": { + "title": "Chapitre 02" + } + } + ], + "format": { + "filename": "sammyjay_1602_librivox.m4b", + "nb_streams": 2, + "nb_programs": 0, + "format_name": "mov,mp4,m4a,3gp,3g2,mj2", + "format_long_name": "QuickTime / MOV", + "start_time": "0.000000", + "duration": "5637.828209", + "size": "45417172", + "bit_rate": "64446", + "probe_score": 100, + "tags": { + "major_brand": "M4A", + "minor_version": "0", + "compatible_brands": "3gp5isom", + "creation_time": "2016-02-21T08:27:56.000000Z", + "genre": "Audiobook", + "media_type": "2", + "encoder": "Chapter and Verse V 1.5", + "title": "The Adventures of Sammy Jay", + "artist": "Thornton W. Burgess", + "album": "The Adventures of Sammy Jay", + "comment": "https://archive.org/details/sammyjay_1602_librivox", + "copyright": "PD1.0", + "track": "1", + "Encoding Params": "vers" + } + } +} From 045cb820619697cafe705f62a9938b7e21a6e65d Mon Sep 17 00:00:00 2001 From: Euklios Date: Sun, 10 Mar 2024 17:45:05 +0100 Subject: [PATCH 037/101] Implement filters info (#309) * Implement filters info filter * Replace CodecType references --- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 45 +- .../java/net/bramp/ffmpeg/info/Filter.java | 80 +++ .../net/bramp/ffmpeg/info/FilterPattern.java | 75 +++ .../java/net/bramp/ffmpeg/FFmpegTest.java | 20 + .../net/bramp/ffmpeg/fixtures/Filters.java | 516 ++++++++++++++++++ .../net/bramp/ffmpeg/fixtures/ffmpeg-filters | 502 +++++++++++++++++ 6 files changed, 1235 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/bramp/ffmpeg/info/Filter.java create mode 100644 src/main/java/net/bramp/ffmpeg/info/FilterPattern.java create mode 100644 src/test/java/net/bramp/ffmpeg/fixtures/Filters.java create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-filters diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index ad7c26e0..45b01b49 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -15,9 +15,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import net.bramp.ffmpeg.builder.FFmpegBuilder; -import net.bramp.ffmpeg.info.Codec; -import net.bramp.ffmpeg.info.Format; -import net.bramp.ffmpeg.info.PixelFormat; +import net.bramp.ffmpeg.info.*; import net.bramp.ffmpeg.progress.ProgressListener; import net.bramp.ffmpeg.progress.ProgressParser; import net.bramp.ffmpeg.progress.TcpProgressParser; @@ -68,6 +66,7 @@ public class FFmpeg extends FFcommon { static final Pattern FORMATS_REGEX = Pattern.compile("^ ([ D][ E]) (\\S+)\\s+(.*)$"); static final Pattern PIXEL_FORMATS_REGEX = Pattern.compile("^([.I][.O][.H][.P][.B]) (\\S{2,})\\s+(\\d+)\\s+(\\d+)$"); + static final Pattern FILTERS_REGEX = Pattern.compile("^\\s*(?[T.])(?[S.])(?[C.])\\s(?[A-Za-z0-9_]+)\\s+(?[AVN|]+)->(?[AVN|]+)\\s+(?.*)$"); /** Supported codecs */ List codecs = null; @@ -78,6 +77,9 @@ public class FFmpeg extends FFcommon { /** Supported pixel formats */ private List pixelFormats = null; + /** Supported filters */ + private List filters = null; + public FFmpeg() throws IOException { this(DEFAULT_PATH, new RunProcessFunction()); } @@ -146,6 +148,43 @@ private void checkIfFFmpeg() throws IllegalArgumentException, IOException { return codecs; } + public synchronized @Nonnull List filters() throws IOException { + checkIfFFmpeg(); + + if (this.filters == null) { + filters = new ArrayList<>(); + + Process p = runFunc.run(ImmutableList.of(path, "-filters")); + try { + BufferedReader r = wrapInReader(p); + String line; + while ((line = r.readLine()) != null) { + Matcher m = FILTERS_REGEX.matcher(line); + if (!m.matches()) continue; + + // (?[AVN|]+)->(?[AVN|]+)\s+(?.*)$ + + filters.add(new Filter( + m.group("timelinesupport").equals("T"), + m.group("slicethreading").equals("S"), + m.group("commandsupport").equals("C"), + m.group("name"), + new FilterPattern(m.group("inputpattern")), + new FilterPattern(m.group("outputpattern")), + m.group("description") + )); + } + + throwOnError(p); + this.filters = ImmutableList.copyOf(filters); + } finally { + p.destroy(); + } + } + + return this.filters; + } + public synchronized @Nonnull List formats() throws IOException { checkIfFFmpeg(); diff --git a/src/main/java/net/bramp/ffmpeg/info/Filter.java b/src/main/java/net/bramp/ffmpeg/info/Filter.java new file mode 100644 index 00000000..264df466 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/Filter.java @@ -0,0 +1,80 @@ +package net.bramp.ffmpeg.info; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class Filter { + /** Is timeline editing supported */ + private final boolean timelineSupported; + + /** Is slice based multi-threading supported */ + private final boolean sliceThreading; + + /** Are there command line options */ + private final boolean commandSupport; + + /** The filters name */ + private final String name; + + /** The input filter pattern */ + private final FilterPattern inputPattern; + + /** The output filter pattern */ + private final FilterPattern outputPattern; + + /** A short description of the filter */ + private final String description; + + public Filter(boolean timelineSupported, boolean sliceThreading, boolean commandSupport, String name, FilterPattern inputPattern, FilterPattern outputPattern, String description) { + this.timelineSupported = timelineSupported; + this.sliceThreading = sliceThreading; + this.commandSupport = commandSupport; + this.name = name; + this.inputPattern = inputPattern; + this.outputPattern = outputPattern; + this.description = description; + } + + public boolean isTimelineSupported() { + return timelineSupported; + } + + public boolean isSliceThreading() { + return sliceThreading; + } + + public boolean isCommandSupport() { + return commandSupport; + } + + public String getName() { + return name; + } + + public FilterPattern getInputPattern() { + return inputPattern; + } + + public FilterPattern getOutputPattern() { + return outputPattern; + } + + public String getDescription() { + return description; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public String toString() { + return name; + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } +} diff --git a/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java b/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java new file mode 100644 index 00000000..049e04e9 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java @@ -0,0 +1,75 @@ +package net.bramp.ffmpeg.info; + +import net.bramp.ffmpeg.shared.CodecType; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +import java.util.*; + +public class FilterPattern { + /** Indicates whether this pattern represents a source or a sink and therefore has no other options */ + private final boolean sinkOrSource; + + /** Indicates whether this pattern accepts a variable number of streams */ + private final boolean variableStreams; + + /** Contains a pattern matching the stream types supported */ + private final List streams; + + public FilterPattern(String pattern) { + this.sinkOrSource = pattern.contains("|"); + this.variableStreams = pattern.contains("N"); + List streams = new ArrayList<>(); + + for (char c : pattern.toCharArray()) { + if (c == '|' || c == 'N') { + // These symbols are handled separately + continue; + } + if (c == 'A') { + streams.add(CodecType.AUDIO); + } else if (c == 'V') { + streams.add(CodecType.VIDEO); + } else { + throw new IllegalStateException("Unsupported character in filter pattern " + c); + } + } + + this.streams = Collections.unmodifiableList(streams); + } + + public boolean isSinkOrSource() { + return sinkOrSource; + } + + public boolean isVariableStreams() { + return variableStreams; + } + + public List getStreams() { + return streams; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public String toString() { + if (isSinkOrSource()) { + return "|"; + } + + if (isVariableStreams()) { + return "N"; + } + + return Arrays.toString(this.streams.toArray()); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } +} diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index 87d71d86..7a4902fe 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -8,8 +8,10 @@ import java.io.IOException; import java.util.List; import net.bramp.ffmpeg.fixtures.Codecs; +import net.bramp.ffmpeg.fixtures.Filters; import net.bramp.ffmpeg.fixtures.Formats; import net.bramp.ffmpeg.fixtures.PixelFormats; +import net.bramp.ffmpeg.info.Filter; import net.bramp.ffmpeg.lang.NewProcessAnswer; import org.junit.Before; import org.junit.Test; @@ -33,6 +35,8 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem("-codecs"))).thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); when(runFunc.run(argThatHasItem("-pix_fmts"))) .thenAnswer(new NewProcessAnswer("ffmpeg-pix_fmts")); + when(runFunc.run(argThatHasItem("-filters"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-filters")); ffmpeg = new FFmpeg(runFunc); } @@ -76,4 +80,20 @@ public void testPixelFormat() throws IOException { verify(runFunc, times(1)).run(argThatHasItem("-pix_fmts")); } + + @Test + public void testFilters() throws IOException { + // Run twice, the second should be cached + + List filters = ffmpeg.filters(); + + for (int i = 0; i < filters.size(); i++) { + assertEquals(Filters.FILTERS.get(i), filters.get(i)); + } + + assertEquals(Filters.FILTERS, ffmpeg.filters()); + assertEquals(Filters.FILTERS, ffmpeg.filters()); + + verify(runFunc, times(1)).run(argThatHasItem("-filters")); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Filters.java b/src/test/java/net/bramp/ffmpeg/fixtures/Filters.java new file mode 100644 index 00000000..6001dab7 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Filters.java @@ -0,0 +1,516 @@ +package net.bramp.ffmpeg.fixtures; + +import com.google.common.collect.ImmutableList; +import net.bramp.ffmpeg.info.Filter; +import net.bramp.ffmpeg.info.FilterPattern; + +/** + * Class that contains all pixel formats as defined in the unit tests This should not be used as a + * concise list of available pixel formattrue, as every install of ffmpeg is different. Call + * ffmpeg.pixelFormats() to discover. + */ +public final class Filters { + + private Filters() { + throw new AssertionError("No instances for you!"); + } + + public static final ImmutableList FILTERS = + new ImmutableList.Builder() + .add( + new Filter(false, false, false, "abench", new FilterPattern("A"), new FilterPattern("A"), "Benchmark part of a filtergraph."), + new Filter(false, false, true, "acompressor", new FilterPattern("A"), new FilterPattern("A"), "Audio compressor."), + new Filter(false, false, false, "acontrast", new FilterPattern("A"), new FilterPattern("A"), "Simple audio dynamic range compression/expansion filter."), + new Filter(false, false, false, "acopy", new FilterPattern("A"), new FilterPattern("A"), "Copy the input audio unchanged to the output."), + new Filter(false, false, false, "acue", new FilterPattern("A"), new FilterPattern("A"), "Delay filtering to match a cue."), + new Filter(false, false, false, "acrossfade", new FilterPattern("AA"), new FilterPattern("A"), "Cross fade two input audio streams."), + new Filter(false, true, false, "acrossover", new FilterPattern("A"), new FilterPattern("N"), "Split audio into per-bands streams."), + new Filter(true, false, true, "acrusher", new FilterPattern("A"), new FilterPattern("A"), "Reduce audio bit resolution."), + new Filter(true, true, false, "adeclick", new FilterPattern("A"), new FilterPattern("A"), "Remove impulsive noise from input audio."), + new Filter(true, true, false, "adeclip", new FilterPattern("A"), new FilterPattern("A"), "Remove clipping from input audio."), + new Filter(true, true, false, "adecorrelate", new FilterPattern("A"), new FilterPattern("A"), "Apply decorrelation to input audio."), + new Filter(true, false, true, "adelay", new FilterPattern("A"), new FilterPattern("A"), "Delay one or more audio channels."), + new Filter(true, true, true, "adenorm", new FilterPattern("A"), new FilterPattern("A"), "Remedy denormals by adding extremely low-level noise."), + new Filter(true, false, false, "aderivative", new FilterPattern("A"), new FilterPattern("A"), "Compute derivative of input audio."), + new Filter(true, true, true, "adrc", new FilterPattern("A"), new FilterPattern("A"), "Audio Spectral Dynamic Range Controller."), + new Filter(true, true, true, "adynamicequalizer", new FilterPattern("A"), new FilterPattern("A"), "Apply Dynamic Equalization of input audio."), + new Filter(true, false, true, "adynamicsmooth", new FilterPattern("A"), new FilterPattern("A"), "Apply Dynamic Smoothing of input audio."), + new Filter(false, false, false, "aecho", new FilterPattern("A"), new FilterPattern("A"), "Add echoing to the audio."), + new Filter(true, true, true, "aemphasis", new FilterPattern("A"), new FilterPattern("A"), "Audio emphasis."), + new Filter(true, false, false, "aeval", new FilterPattern("A"), new FilterPattern("A"), "Filter audio signal according to a specified expression."), + new Filter(true, false, true, "aexciter", new FilterPattern("A"), new FilterPattern("A"), "Enhance high frequency part of audio."), + new Filter(true, false, true, "afade", new FilterPattern("A"), new FilterPattern("A"), "Fade in/out input audio."), + new Filter(true, true, true, "afftdn", new FilterPattern("A"), new FilterPattern("A"), "Denoise audio samples using FFT."), + new Filter(true, true, false, "afftfilt", new FilterPattern("A"), new FilterPattern("A"), "Apply arbitrary expressions to samples in frequency domain."), + new Filter(false, true, true, "afir", new FilterPattern("N"), new FilterPattern("N"), "Apply Finite Impulse Response filter with supplied coefficients in additional stream(s)."), + new Filter(false, false, false, "aformat", new FilterPattern("A"), new FilterPattern("A"), "Convert the input audio to one of the specified formats."), + new Filter(true, true, true, "afreqshift", new FilterPattern("A"), new FilterPattern("A"), "Apply frequency shifting to input audio."), + new Filter(true, true, true, "afwtdn", new FilterPattern("A"), new FilterPattern("A"), "Denoise audio stream using Wavelets."), + new Filter(true, false, true, "agate", new FilterPattern("A"), new FilterPattern("A"), "Audio gate."), + new Filter(false, true, false, "aiir", new FilterPattern("A"), new FilterPattern("N"), "Apply Infinite Impulse Response filter with supplied coefficients."), + new Filter(true, false, false, "aintegral", new FilterPattern("A"), new FilterPattern("A"), "Compute integral of input audio."), + new Filter(false, false, false, "ainterleave", new FilterPattern("N"), new FilterPattern("A"), "Temporally interleave audio inputs."), + new Filter(true, false, false, "alatency", new FilterPattern("A"), new FilterPattern("A"), "Report audio filtering latency."), + new Filter(true, false, true, "alimiter", new FilterPattern("A"), new FilterPattern("A"), "Audio lookahead limiter."), + new Filter(true, true, true, "allpass", new FilterPattern("A"), new FilterPattern("A"), "Apply a two-pole all-pass filter."), + new Filter(false, false, false, "aloop", new FilterPattern("A"), new FilterPattern("A"), "Loop audio samples."), + new Filter(false, false, false, "amerge", new FilterPattern("N"), new FilterPattern("A"), "Merge two or more audio streams into a single multi-channel stream."), + new Filter(true, false, false, "ametadata", new FilterPattern("A"), new FilterPattern("A"), "Manipulate audio frame metadata."), + new Filter(false, false, true, "amix", new FilterPattern("N"), new FilterPattern("A"), "Audio mixing."), + new Filter(false, false, false, "amultiply", new FilterPattern("AA"), new FilterPattern("A"), "Multiply two audio streams."), + new Filter(true, true, true, "anequalizer", new FilterPattern("A"), new FilterPattern("N"), "Apply high-order audio parametric multi band equalizer."), + new Filter(true, true, true, "anlmdn", new FilterPattern("A"), new FilterPattern("A"), "Reduce broadband noise from stream using Non-Local Means."), + new Filter(true, true, true, "anlmf", new FilterPattern("AA"), new FilterPattern("A"), "Apply Normalized Least-Mean-Fourth algorithm to first audio stream."), + new Filter(true, true, true, "anlms", new FilterPattern("AA"), new FilterPattern("A"), "Apply Normalized Least-Mean-Squares algorithm to first audio stream."), + new Filter(false, false, false, "anull", new FilterPattern("A"), new FilterPattern("A"), "Pass the source unchanged to the output."), + new Filter(true, false, false, "apad", new FilterPattern("A"), new FilterPattern("A"), "Pad audio with silence."), + new Filter(true, false, true, "aperms", new FilterPattern("A"), new FilterPattern("A"), "Set permissions for the output audio frame."), + new Filter(false, false, false, "aphaser", new FilterPattern("A"), new FilterPattern("A"), "Add a phasing effect to the audio."), + new Filter(true, true, true, "aphaseshift", new FilterPattern("A"), new FilterPattern("A"), "Apply phase shifting to input audio."), + new Filter(true, true, false, "apsnr", new FilterPattern("AA"), new FilterPattern("A"), "Measure Audio Peak Signal-to-Noise Ratio."), + new Filter(true, true, true, "apsyclip", new FilterPattern("A"), new FilterPattern("A"), "Audio Psychoacoustic Clipper."), + new Filter(false, false, false, "apulsator", new FilterPattern("A"), new FilterPattern("A"), "Audio pulsator."), + new Filter(false, false, true, "arealtime", new FilterPattern("A"), new FilterPattern("A"), "Slow down filtering to match realtime."), + new Filter(false, false, false, "aresample", new FilterPattern("A"), new FilterPattern("A"), "Resample audio data."), + new Filter(false, false, false, "areverse", new FilterPattern("A"), new FilterPattern("A"), "Reverse an audio clip."), + new Filter(true, true, true, "arls", new FilterPattern("AA"), new FilterPattern("A"), "Apply Recursive Least Squares algorithm to first audio stream."), + new Filter(true, true, true, "arnndn", new FilterPattern("A"), new FilterPattern("A"), "Reduce noise from speech using Recurrent Neural Networks."), + new Filter(true, true, false, "asdr", new FilterPattern("AA"), new FilterPattern("A"), "Measure Audio Signal-to-Distortion Ratio."), + new Filter(false, false, false, "asegment", new FilterPattern("A"), new FilterPattern("N"), "Segment audio stream."), + new Filter(false, false, false, "aselect", new FilterPattern("A"), new FilterPattern("N"), "Select audio frames to pass in output."), + new Filter(false, false, false, "asendcmd", new FilterPattern("A"), new FilterPattern("A"), "Send commands to filters."), + new Filter(true, false, true, "asetnsamples", new FilterPattern("A"), new FilterPattern("A"), "Set the number of samples for each output audio frames."), + new Filter(false, false, true, "asetpts", new FilterPattern("A"), new FilterPattern("A"), "Set PTS for the output audio frame."), + new Filter(false, false, false, "asetrate", new FilterPattern("A"), new FilterPattern("A"), "Change the sample rate without altering the data."), + new Filter(false, false, false, "asettb", new FilterPattern("A"), new FilterPattern("A"), "Set timebase for the audio output link."), + new Filter(false, false, false, "ashowinfo", new FilterPattern("A"), new FilterPattern("A"), "Show textual information for each audio frame."), + new Filter(true, false, false, "asidedata", new FilterPattern("A"), new FilterPattern("A"), "Manipulate audio frame side data."), + new Filter(true, true, false, "asisdr", new FilterPattern("AA"), new FilterPattern("A"), "Measure Audio Scale-Invariant Signal-to-Distortion Ratio."), + new Filter(true, true, true, "asoftclip", new FilterPattern("A"), new FilterPattern("A"), "Audio Soft Clipper."), + new Filter(false, true, false, "aspectralstats", new FilterPattern("A"), new FilterPattern("A"), "Show frequency domain statistics about audio frames."), + new Filter(false, false, false, "asplit", new FilterPattern("A"), new FilterPattern("N"), "Pass on the audio input to N audio outputs."), + new Filter(false, true, false, "astats", new FilterPattern("A"), new FilterPattern("A"), "Show time domain statistics about audio frames."), + new Filter(false, false, true, "astreamselect", new FilterPattern("N"), new FilterPattern("N"), "Select audio streams"), + new Filter(true, true, true, "asubboost", new FilterPattern("A"), new FilterPattern("A"), "Boost subwoofer frequencies."), + new Filter(true, true, true, "asubcut", new FilterPattern("A"), new FilterPattern("A"), "Cut subwoofer frequencies."), + new Filter(true, true, true, "asupercut", new FilterPattern("A"), new FilterPattern("A"), "Cut super frequencies."), + new Filter(true, true, true, "asuperpass", new FilterPattern("A"), new FilterPattern("A"), "Apply high order Butterworth band-pass filter."), + new Filter(true, true, true, "asuperstop", new FilterPattern("A"), new FilterPattern("A"), "Apply high order Butterworth band-stop filter."), + new Filter(false, false, true, "atempo", new FilterPattern("A"), new FilterPattern("A"), "Adjust audio tempo."), + new Filter(true, true, true, "atilt", new FilterPattern("A"), new FilterPattern("A"), "Apply spectral tilt to audio."), + new Filter(false, false, false, "atrim", new FilterPattern("A"), new FilterPattern("A"), "Pick one continuous section from the input, drop the rest."), + new Filter(false, false, false, "axcorrelate", new FilterPattern("AA"), new FilterPattern("A"), "Cross-correlate two audio streams."), + new Filter(false, false, false, "azmq", new FilterPattern("A"), new FilterPattern("A"), "Receive commands through ZMQ and broker them to filters."), + new Filter(true, true, true, "bandpass", new FilterPattern("A"), new FilterPattern("A"), "Apply a two-pole Butterworth band-pass filter."), + new Filter(true, true, true, "bandreject", new FilterPattern("A"), new FilterPattern("A"), "Apply a two-pole Butterworth band-reject filter."), + new Filter(true, true, true, "bass", new FilterPattern("A"), new FilterPattern("A"), "Boost or cut lower frequencies."), + new Filter(true, true, true, "biquad", new FilterPattern("A"), new FilterPattern("A"), "Apply a biquad IIR filter with the given coefficients."), + new Filter(false, false, false, "channelmap", new FilterPattern("A"), new FilterPattern("A"), "Remap audio channels."), + new Filter(false, false, false, "channelsplit", new FilterPattern("A"), new FilterPattern("N"), "Split audio into per-channel streams."), + new Filter(false, false, false, "chorus", new FilterPattern("A"), new FilterPattern("A"), "Add a chorus effect to the audio."), + new Filter(false, false, false, "compand", new FilterPattern("A"), new FilterPattern("A"), "Compress or expand audio dynamic range."), + new Filter(true, false, true, "compensationdelay", new FilterPattern("A"), new FilterPattern("A"), "Audio Compensation Delay Line."), + new Filter(true, false, true, "crossfeed", new FilterPattern("A"), new FilterPattern("A"), "Apply headphone crossfeed filter."), + new Filter(true, true, true, "crystalizer", new FilterPattern("A"), new FilterPattern("A"), "Simple audio noise sharpening filter."), + new Filter(true, false, false, "dcshift", new FilterPattern("A"), new FilterPattern("A"), "Apply a DC shift to the audio."), + new Filter(true, false, false, "deesser", new FilterPattern("A"), new FilterPattern("A"), "Apply de-essing to the audio."), + new Filter(true, false, true, "dialoguenhance", new FilterPattern("A"), new FilterPattern("A"), "Audio Dialogue Enhancement."), + new Filter(false, false, false, "drmeter", new FilterPattern("A"), new FilterPattern("A"), "Measure audio dynamic range."), + new Filter(true, true, true, "dynaudnorm", new FilterPattern("A"), new FilterPattern("A"), "Dynamic Audio Normalizer."), + new Filter(false, false, false, "earwax", new FilterPattern("A"), new FilterPattern("A"), "Widen the stereo image."), + new Filter(false, false, false, "ebur128", new FilterPattern("A"), new FilterPattern("N"), "EBU R128 scanner."), + new Filter(true, true, true, "equalizer", new FilterPattern("A"), new FilterPattern("A"), "Apply two-pole peaking equalization (EQ) filter."), + new Filter(true, false, true, "extrastereo", new FilterPattern("A"), new FilterPattern("A"), "Increase difference between stereo audio channels."), + new Filter(false, false, true, "firequalizer", new FilterPattern("A"), new FilterPattern("A"), "Finite Impulse Response Equalizer."), + new Filter(false, false, false, "flanger", new FilterPattern("A"), new FilterPattern("A"), "Apply a flanging effect to the audio."), + new Filter(false, false, false, "haas", new FilterPattern("A"), new FilterPattern("A"), "Apply Haas Stereo Enhancer."), + new Filter(false, false, false, "hdcd", new FilterPattern("A"), new FilterPattern("A"), "Apply High Definition Compatible Digital (HDCD) decoding."), + new Filter(false, true, false, "headphone", new FilterPattern("N"), new FilterPattern("A"), "Apply headphone binaural spatialization with HRTFs in additional streams."), + new Filter(true, true, true, "highpass", new FilterPattern("A"), new FilterPattern("A"), "Apply a high-pass filter with 3dB point frequency."), + new Filter(true, true, true, "highshelf", new FilterPattern("A"), new FilterPattern("A"), "Apply a high shelf filter."), + new Filter(false, false, false, "join", new FilterPattern("N"), new FilterPattern("A"), "Join multiple audio streams into multi-channel output."), + new Filter(false, false, false, "loudnorm", new FilterPattern("A"), new FilterPattern("A"), "EBU R128 loudness normalization"), + new Filter(true, true, true, "lowpass", new FilterPattern("A"), new FilterPattern("A"), "Apply a low-pass filter with 3dB point frequency."), + new Filter(true, true, true, "lowshelf", new FilterPattern("A"), new FilterPattern("A"), "Apply a low shelf filter."), + new Filter(false, false, false, "mcompand", new FilterPattern("A"), new FilterPattern("A"), "Multiband Compress or expand audio dynamic range."), + new Filter(false, false, false, "pan", new FilterPattern("A"), new FilterPattern("A"), "Remix channels with coefficients (panning)."), + new Filter(false, false, false, "replaygain", new FilterPattern("A"), new FilterPattern("A"), "ReplayGain scanner."), + new Filter(false, false, true, "rubberband", new FilterPattern("A"), new FilterPattern("A"), "Apply time-stretching and pitch-shifting."), + new Filter(false, false, true, "sidechaincompress", new FilterPattern("AA"), new FilterPattern("A"), "Sidechain compressor."), + new Filter(true, false, true, "sidechaingate", new FilterPattern("AA"), new FilterPattern("A"), "Audio sidechain gate."), + new Filter(false, false, false, "silencedetect", new FilterPattern("A"), new FilterPattern("A"), "Detect silence."), + new Filter(true, false, true, "silenceremove", new FilterPattern("A"), new FilterPattern("A"), "Remove silence."), + new Filter(true, false, true, "speechnorm", new FilterPattern("A"), new FilterPattern("A"), "Speech Normalizer."), + new Filter(true, false, true, "stereotools", new FilterPattern("A"), new FilterPattern("A"), "Apply various stereo tools."), + new Filter(true, false, true, "stereowiden", new FilterPattern("A"), new FilterPattern("A"), "Apply stereo widening effect."), + new Filter(false, false, false, "superequalizer", new FilterPattern("A"), new FilterPattern("A"), "Apply 18 band equalization filter."), + new Filter(false, true, true, "surround", new FilterPattern("A"), new FilterPattern("A"), "Apply audio surround upmix filter."), + new Filter(true, true, true, "tiltshelf", new FilterPattern("A"), new FilterPattern("A"), "Apply a tilt shelf filter."), + new Filter(true, true, true, "treble", new FilterPattern("A"), new FilterPattern("A"), "Boost or cut upper frequencies."), + new Filter(true, false, false, "tremolo", new FilterPattern("A"), new FilterPattern("A"), "Apply tremolo effect."), + new Filter(true, false, false, "vibrato", new FilterPattern("A"), new FilterPattern("A"), "Apply vibrato effect."), + new Filter(true, false, true, "virtualbass", new FilterPattern("A"), new FilterPattern("A"), "Audio Virtual Bass."), + new Filter(true, false, true, "volume", new FilterPattern("A"), new FilterPattern("A"), "Change input volume."), + new Filter(false, false, false, "volumedetect", new FilterPattern("A"), new FilterPattern("A"), "Detect audio volume."), + new Filter(false, false, false, "aevalsrc", new FilterPattern("|"), new FilterPattern("A"), "Generate an audio signal generated by an expression."), + new Filter(false, false, false, "afdelaysrc", new FilterPattern("|"), new FilterPattern("A"), "Generate a Fractional delay FIR coefficients."), + new Filter(false, false, false, "afireqsrc", new FilterPattern("|"), new FilterPattern("A"), "Generate a FIR equalizer coefficients audio stream."), + new Filter(false, false, false, "afirsrc", new FilterPattern("|"), new FilterPattern("A"), "Generate a FIR coefficients audio stream."), + new Filter(false, false, false, "anoisesrc", new FilterPattern("|"), new FilterPattern("A"), "Generate a noise audio signal."), + new Filter(false, false, false, "anullsrc", new FilterPattern("|"), new FilterPattern("A"), "Null audio source, return empty audio frames."), + new Filter(false, false, false, "hilbert", new FilterPattern("|"), new FilterPattern("A"), "Generate a Hilbert transform FIR coefficients."), + new Filter(false, false, false, "sinc", new FilterPattern("|"), new FilterPattern("A"), "Generate a sinc kaiser-windowed low-pass, high-pass, band-pass, or band-reject FIR coefficients."), + new Filter(false, false, false, "sine", new FilterPattern("|"), new FilterPattern("A"), "Generate sine wave audio signal."), + new Filter(false, false, false, "anullsink", new FilterPattern("A"), new FilterPattern("|"), "Do absolutely nothing with the input audio."), + new Filter(false, false, false, "addroi", new FilterPattern("V"), new FilterPattern("V"), "Add region of interest to frame."), + new Filter(false, false, false, "alphaextract", new FilterPattern("V"), new FilterPattern("V"), "Extract an alpha channel as a grayscale image component."), + new Filter(true, false, false, "alphamerge", new FilterPattern("VV"), new FilterPattern("V"), "Copy the luma value of the second input into the alpha channel of the first input."), + new Filter(true, true, true, "amplify", new FilterPattern("V"), new FilterPattern("V"), "Amplify changes between successive video frames."), + new Filter(false, false, false, "ass", new FilterPattern("V"), new FilterPattern("V"), "Render ASS subtitles onto input video using the libass library."), + new Filter(true, true, true, "atadenoise", new FilterPattern("V"), new FilterPattern("V"), "Apply an Adaptive Temporal Averaging Denoiser."), + new Filter(true, false, true, "avgblur", new FilterPattern("V"), new FilterPattern("V"), "Apply Average Blur filter."), + new Filter(true, true, true, "backgroundkey", new FilterPattern("V"), new FilterPattern("V"), "Turns a static background into transparency."), + new Filter(true, false, true, "bbox", new FilterPattern("V"), new FilterPattern("V"), "Compute bounding box for each frame."), + new Filter(false, false, false, "bench", new FilterPattern("V"), new FilterPattern("V"), "Benchmark part of a filtergraph."), + new Filter(true, true, true, "bilateral", new FilterPattern("V"), new FilterPattern("V"), "Apply Bilateral filter."), + new Filter(true, false, false, "bitplanenoise", new FilterPattern("V"), new FilterPattern("V"), "Measure bit plane noise."), + new Filter(false, true, false, "blackdetect", new FilterPattern("V"), new FilterPattern("V"), "Detect video intervals that are (almost) black."), + new Filter(false, false, false, "blackframe", new FilterPattern("V"), new FilterPattern("V"), "Detect frames that are (almost) black."), + new Filter(true, true, true, "blend", new FilterPattern("VV"), new FilterPattern("V"), "Blend two video frames into each other."), + new Filter(false, false, false, "blockdetect", new FilterPattern("V"), new FilterPattern("V"), "Blockdetect filter."), + new Filter(false, false, false, "blurdetect", new FilterPattern("V"), new FilterPattern("V"), "Blurdetect filter."), + new Filter(true, true, false, "bm3d", new FilterPattern("N"), new FilterPattern("V"), "Block-Matching 3D denoiser."), + new Filter(true, false, false, "boxblur", new FilterPattern("V"), new FilterPattern("V"), "Blur the input."), + new Filter(true, true, false, "bwdif", new FilterPattern("V"), new FilterPattern("V"), "Deinterlace the input image."), + new Filter(true, true, true, "cas", new FilterPattern("V"), new FilterPattern("V"), "Contrast Adaptive Sharpen."), + new Filter(false, false, false, "ccrepack", new FilterPattern("V"), new FilterPattern("V"), "Repack CEA-708 closed caption metadata"), + new Filter(true, true, true, "chromahold", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain color range into gray."), + new Filter(true, true, true, "chromakey", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain color into transparency. Operates on YUV colors."), + new Filter(true, true, true, "chromanr", new FilterPattern("V"), new FilterPattern("V"), "Reduce chrominance noise."), + new Filter(true, true, true, "chromashift", new FilterPattern("V"), new FilterPattern("V"), "Shift chroma."), + new Filter(false, false, false, "ciescope", new FilterPattern("V"), new FilterPattern("V"), "Video CIE scope."), + new Filter(true, false, false, "codecview", new FilterPattern("V"), new FilterPattern("V"), "Visualize information about some codecs."), + new Filter(true, true, true, "colorbalance", new FilterPattern("V"), new FilterPattern("V"), "Adjust the color balance."), + new Filter(true, true, true, "colorchannelmixer", new FilterPattern("V"), new FilterPattern("V"), "Adjust colors by mixing color channels."), + new Filter(true, true, true, "colorcontrast", new FilterPattern("V"), new FilterPattern("V"), "Adjust color contrast between RGB components."), + new Filter(true, true, true, "colorcorrect", new FilterPattern("V"), new FilterPattern("V"), "Adjust color white balance selectively for blacks and whites."), + new Filter(true, true, true, "colorize", new FilterPattern("V"), new FilterPattern("V"), "Overlay a solid color on the video stream."), + new Filter(true, true, true, "colorkey", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain color into transparency. Operates on RGB colors."), + new Filter(true, true, true, "colorhold", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain color range into gray. Operates on RGB colors."), + new Filter(true, true, true, "colorlevels", new FilterPattern("V"), new FilterPattern("V"), "Adjust the color levels."), + new Filter(true, true, true, "colormap", new FilterPattern("VVV"), new FilterPattern("V"), "Apply custom Color Maps to video stream."), + new Filter(true, true, false, "colormatrix", new FilterPattern("V"), new FilterPattern("V"), "Convert color matrix."), + new Filter(true, true, false, "colorspace", new FilterPattern("V"), new FilterPattern("V"), "Convert between colorspaces."), + new Filter(true, true, true, "colortemperature", new FilterPattern("V"), new FilterPattern("V"), "Adjust color temperature of video."), + new Filter(true, true, true, "convolution", new FilterPattern("V"), new FilterPattern("V"), "Apply convolution filter."), + new Filter(true, true, false, "convolve", new FilterPattern("VV"), new FilterPattern("V"), "Convolve first video stream with second video stream."), + new Filter(false, false, false, "copy", new FilterPattern("V"), new FilterPattern("V"), "Copy the input video unchanged to the output."), + new Filter(false, false, false, "coreimage", new FilterPattern("V"), new FilterPattern("V"), "Video filtering using CoreImage API."), + new Filter(true, false, false, "corr", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the correlation between two video streams."), + new Filter(false, false, false, "cover_rect", new FilterPattern("V"), new FilterPattern("V"), "Find and cover a user specified object."), + new Filter(false, false, true, "crop", new FilterPattern("V"), new FilterPattern("V"), "Crop the input video."), + new Filter(true, false, true, "cropdetect", new FilterPattern("V"), new FilterPattern("V"), "Auto-detect crop size."), + new Filter(false, false, false, "cue", new FilterPattern("V"), new FilterPattern("V"), "Delay filtering to match a cue."), + new Filter(true, true, true, "curves", new FilterPattern("V"), new FilterPattern("V"), "Adjust components curves."), + new Filter(false, true, true, "datascope", new FilterPattern("V"), new FilterPattern("V"), "Video data analysis."), + new Filter(true, false, true, "dblur", new FilterPattern("V"), new FilterPattern("V"), "Apply Directional Blur filter."), + new Filter(true, true, false, "dctdnoiz", new FilterPattern("V"), new FilterPattern("V"), "Denoise frames using 2D DCT."), + new Filter(true, true, true, "deband", new FilterPattern("V"), new FilterPattern("V"), "Debands video."), + new Filter(true, false, true, "deblock", new FilterPattern("V"), new FilterPattern("V"), "Deblock video."), + new Filter(false, false, false, "decimate", new FilterPattern("N"), new FilterPattern("V"), "Decimate frames (post field matching filter)."), + new Filter(true, true, false, "deconvolve", new FilterPattern("VV"), new FilterPattern("V"), "Deconvolve first video stream with second video stream."), + new Filter(true, true, false, "dedot", new FilterPattern("V"), new FilterPattern("V"), "Reduce cross-luminance and cross-color."), + new Filter(true, true, true, "deflate", new FilterPattern("V"), new FilterPattern("V"), "Apply deflate effect."), + new Filter(false, false, false, "deflicker", new FilterPattern("V"), new FilterPattern("V"), "Remove temporal frame luminance variations."), + new Filter(false, false, false, "dejudder", new FilterPattern("V"), new FilterPattern("V"), "Remove judder produced by pullup."), + new Filter(true, false, false, "delogo", new FilterPattern("V"), new FilterPattern("V"), "Remove logo from input video."), + new Filter(true, false, false, "derain", new FilterPattern("V"), new FilterPattern("V"), "Apply derain filter to the input."), + new Filter(false, false, false, "deshake", new FilterPattern("V"), new FilterPattern("V"), "Stabilize shaky video."), + new Filter(true, true, true, "despill", new FilterPattern("V"), new FilterPattern("V"), "Despill video."), + new Filter(false, false, false, "detelecine", new FilterPattern("V"), new FilterPattern("V"), "Apply an inverse telecine pattern."), + new Filter(true, true, true, "dilation", new FilterPattern("V"), new FilterPattern("V"), "Apply dilation effect."), + new Filter(true, true, true, "displace", new FilterPattern("VVV"), new FilterPattern("V"), "Displace pixels."), + new Filter(false, false, false, "dnn_classify", new FilterPattern("V"), new FilterPattern("V"), "Apply DNN classify filter to the input."), + new Filter(false, false, false, "dnn_detect", new FilterPattern("V"), new FilterPattern("V"), "Apply DNN detect filter to the input."), + new Filter(false, false, false, "dnn_processing", new FilterPattern("V"), new FilterPattern("V"), "Apply DNN processing filter to the input."), + new Filter(false, true, false, "doubleweave", new FilterPattern("V"), new FilterPattern("V"), "Weave input video fields into double number of frames."), + new Filter(true, false, true, "drawbox", new FilterPattern("V"), new FilterPattern("V"), "Draw a colored box on the input video."), + new Filter(false, false, false, "drawgraph", new FilterPattern("V"), new FilterPattern("V"), "Draw a graph using input video metadata."), + new Filter(true, false, true, "drawgrid", new FilterPattern("V"), new FilterPattern("V"), "Draw a colored grid on the input video."), + new Filter(true, false, true, "drawtext", new FilterPattern("V"), new FilterPattern("V"), "Draw text on top of video frames using libfreetype library."), + new Filter(true, false, false, "edgedetect", new FilterPattern("V"), new FilterPattern("V"), "Detect and draw edge."), + new Filter(false, false, false, "elbg", new FilterPattern("V"), new FilterPattern("V"), "Apply posterize effect, using the ELBG algorithm."), + new Filter(true, false, false, "entropy", new FilterPattern("V"), new FilterPattern("V"), "Measure video frames entropy."), + new Filter(false, true, false, "epx", new FilterPattern("V"), new FilterPattern("V"), "Scale the input using EPX algorithm."), + new Filter(true, false, true, "eq", new FilterPattern("V"), new FilterPattern("V"), "Adjust brightness, contrast, gamma, and saturation."), + new Filter(true, true, true, "erosion", new FilterPattern("V"), new FilterPattern("V"), "Apply erosion effect."), + new Filter(true, true, true, "estdif", new FilterPattern("V"), new FilterPattern("V"), "Apply Edge Slope Tracing deinterlace."), + new Filter(true, true, true, "exposure", new FilterPattern("V"), new FilterPattern("V"), "Adjust exposure of the video stream."), + new Filter(false, false, false, "extractplanes", new FilterPattern("V"), new FilterPattern("N"), "Extract planes as grayscale frames."), + new Filter(true, true, false, "fade", new FilterPattern("V"), new FilterPattern("V"), "Fade in/out input video."), + new Filter(false, false, true, "feedback", new FilterPattern("VV"), new FilterPattern("VV"), "Apply feedback video filter."), + new Filter(true, true, true, "fftdnoiz", new FilterPattern("V"), new FilterPattern("V"), "Denoise frames using 3D FFT."), + new Filter(true, true, false, "fftfilt", new FilterPattern("V"), new FilterPattern("V"), "Apply arbitrary expressions to pixels in frequency domain."), + new Filter(false, false, false, "field", new FilterPattern("V"), new FilterPattern("V"), "Extract a field from the input video."), + new Filter(false, false, false, "fieldhint", new FilterPattern("V"), new FilterPattern("V"), "Field matching using hints."), + new Filter(false, false, false, "fieldmatch", new FilterPattern("N"), new FilterPattern("V"), "Field matching for inverse telecine."), + new Filter(true, false, false, "fieldorder", new FilterPattern("V"), new FilterPattern("V"), "Set the field order."), + new Filter(true, false, true, "fillborders", new FilterPattern("V"), new FilterPattern("V"), "Fill borders of the input video."), + new Filter(false, false, false, "find_rect", new FilterPattern("V"), new FilterPattern("V"), "Find a user specified object."), + new Filter(true, false, false, "floodfill", new FilterPattern("V"), new FilterPattern("V"), "Fill area with same color with another color."), + new Filter(false, false, false, "format", new FilterPattern("V"), new FilterPattern("V"), "Convert the input video to one of the specified pixel formats."), + new Filter(false, false, false, "fps", new FilterPattern("V"), new FilterPattern("V"), "Force constant framerate."), + new Filter(false, false, false, "framepack", new FilterPattern("VV"), new FilterPattern("V"), "Generate a frame packed stereoscopic video."), + new Filter(false, true, false, "framerate", new FilterPattern("V"), new FilterPattern("V"), "Upsamples or downsamples progressive source between specified frame rates."), + new Filter(true, false, false, "framestep", new FilterPattern("V"), new FilterPattern("V"), "Select one frame every N frames."), + new Filter(false, false, false, "freezedetect", new FilterPattern("V"), new FilterPattern("V"), "Detects frozen video input."), + new Filter(false, false, false, "freezeframes", new FilterPattern("VV"), new FilterPattern("V"), "Freeze video frames."), + new Filter(true, false, true, "frei0r", new FilterPattern("V"), new FilterPattern("V"), "Apply a frei0r effect."), + new Filter(true, false, false, "fspp", new FilterPattern("V"), new FilterPattern("V"), "Apply Fast Simple Post-processing filter."), + new Filter(true, true, true, "gblur", new FilterPattern("V"), new FilterPattern("V"), "Apply Gaussian Blur filter."), + new Filter(true, true, false, "geq", new FilterPattern("V"), new FilterPattern("V"), "Apply generic equation to each pixel."), + new Filter(true, false, false, "gradfun", new FilterPattern("V"), new FilterPattern("V"), "Debands video quickly using gradients."), + new Filter(false, false, true, "graphmonitor", new FilterPattern("V"), new FilterPattern("V"), "Show various filtergraph stats."), + new Filter(true, true, false, "grayworld", new FilterPattern("V"), new FilterPattern("V"), "Adjust white balance using LAB gray world algorithm"), + new Filter(true, true, false, "greyedge", new FilterPattern("V"), new FilterPattern("V"), "Estimates scene illumination by grey edge assumption."), + new Filter(true, true, true, "guided", new FilterPattern("N"), new FilterPattern("V"), "Apply Guided filter."), + new Filter(true, true, true, "haldclut", new FilterPattern("VV"), new FilterPattern("V"), "Adjust colors using a Hald CLUT."), + new Filter(true, true, false, "hflip", new FilterPattern("V"), new FilterPattern("V"), "Horizontally flip the input video."), + new Filter(true, false, false, "histeq", new FilterPattern("V"), new FilterPattern("V"), "Apply global color histogram equalization."), + new Filter(false, false, false, "histogram", new FilterPattern("V"), new FilterPattern("V"), "Compute and draw a histogram."), + new Filter(true, true, true, "hqdn3d", new FilterPattern("V"), new FilterPattern("V"), "Apply a High Quality 3D Denoiser."), + new Filter(false, true, false, "hqx", new FilterPattern("V"), new FilterPattern("V"), "Scale the input by 2, 3 or 4 using the hq*x magnification algorithm."), + new Filter(false, true, false, "hstack", new FilterPattern("N"), new FilterPattern("V"), "Stack video inputs horizontally."), + new Filter(true, true, true, "hsvhold", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain HSV range into gray."), + new Filter(true, true, true, "hsvkey", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain HSV range into transparency. Operates on YUV colors."), + new Filter(true, false, true, "hue", new FilterPattern("V"), new FilterPattern("V"), "Adjust the hue and saturation of the input video."), + new Filter(true, true, true, "huesaturation", new FilterPattern("V"), new FilterPattern("V"), "Apply hue-saturation-intensity adjustments."), + new Filter(false, false, false, "hwdownload", new FilterPattern("V"), new FilterPattern("V"), "Download a hardware frame to a normal frame"), + new Filter(false, false, false, "hwmap", new FilterPattern("V"), new FilterPattern("V"), "Map hardware frames"), + new Filter(false, false, false, "hwupload", new FilterPattern("V"), new FilterPattern("V"), "Upload a normal frame to a hardware frame"), + new Filter(true, false, false, "hysteresis", new FilterPattern("VV"), new FilterPattern("V"), "Grow first stream into second stream by connecting components."), + new Filter(true, true, false, "identity", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the Identity between two video streams."), + new Filter(false, false, false, "idet", new FilterPattern("V"), new FilterPattern("V"), "Interlace detect Filter."), + new Filter(true, false, true, "il", new FilterPattern("V"), new FilterPattern("V"), "Deinterleave or interleave fields."), + new Filter(true, true, true, "inflate", new FilterPattern("V"), new FilterPattern("V"), "Apply inflate effect."), + new Filter(false, false, false, "interlace", new FilterPattern("V"), new FilterPattern("V"), "Convert progressive video into interlaced."), + new Filter(false, false, false, "interleave", new FilterPattern("N"), new FilterPattern("V"), "Temporally interleave video inputs."), + new Filter(false, false, false, "kerndeint", new FilterPattern("V"), new FilterPattern("V"), "Apply kernel deinterlacing to the input."), + new Filter(true, true, true, "kirsch", new FilterPattern("V"), new FilterPattern("V"), "Apply kirsch operator."), + new Filter(true, true, true, "lagfun", new FilterPattern("V"), new FilterPattern("V"), "Slowly update darker pixels."), + new Filter(true, false, false, "latency", new FilterPattern("V"), new FilterPattern("V"), "Report video filtering latency."), + new Filter(true, true, true, "lenscorrection", new FilterPattern("V"), new FilterPattern("V"), "Rectify the image by correcting for lens distortion."), + new Filter(false, false, false, "libvmaf", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the VMAF between two video streams."), + new Filter(true, true, true, "limitdiff", new FilterPattern("N"), new FilterPattern("V"), "Apply filtering with limiting difference."), + new Filter(true, true, true, "limiter", new FilterPattern("V"), new FilterPattern("V"), "Limit pixels components to the specified range."), + new Filter(false, false, false, "loop", new FilterPattern("V"), new FilterPattern("V"), "Loop video frames."), + new Filter(true, true, true, "lumakey", new FilterPattern("V"), new FilterPattern("V"), "Turns a certain luma into transparency."), + new Filter(true, true, true, "lut", new FilterPattern("V"), new FilterPattern("V"), "Compute and apply a lookup table to the RGB/YUV input video."), + new Filter(true, true, true, "lut1d", new FilterPattern("V"), new FilterPattern("V"), "Adjust colors using a 1D LUT."), + new Filter(true, true, true, "lut2", new FilterPattern("VV"), new FilterPattern("V"), "Compute and apply a lookup table from two video inputs."), + new Filter(true, true, true, "lut3d", new FilterPattern("V"), new FilterPattern("V"), "Adjust colors using a 3D LUT."), + new Filter(true, true, true, "lutrgb", new FilterPattern("V"), new FilterPattern("V"), "Compute and apply a lookup table to the RGB input video."), + new Filter(true, true, true, "lutyuv", new FilterPattern("V"), new FilterPattern("V"), "Compute and apply a lookup table to the YUV input video."), + new Filter(true, true, true, "maskedclamp", new FilterPattern("VVV"), new FilterPattern("V"), "Clamp first stream with second stream and third stream."), + new Filter(true, true, true, "maskedmax", new FilterPattern("VVV"), new FilterPattern("V"), "Apply filtering with maximum difference of two streams."), + new Filter(true, true, true, "maskedmerge", new FilterPattern("VVV"), new FilterPattern("V"), "Merge first stream with second stream using third stream as mask."), + new Filter(true, true, true, "maskedmin", new FilterPattern("VVV"), new FilterPattern("V"), "Apply filtering with minimum difference of two streams."), + new Filter(true, true, true, "maskedthreshold", new FilterPattern("VV"), new FilterPattern("V"), "Pick pixels comparing absolute difference of two streams with threshold."), + new Filter(true, true, true, "maskfun", new FilterPattern("V"), new FilterPattern("V"), "Create Mask."), + new Filter(false, false, false, "mcdeint", new FilterPattern("V"), new FilterPattern("V"), "Apply motion compensating deinterlacing."), + new Filter(true, true, true, "median", new FilterPattern("V"), new FilterPattern("V"), "Apply Median filter."), + new Filter(false, false, false, "mergeplanes", new FilterPattern("N"), new FilterPattern("V"), "Merge planes."), + new Filter(false, false, false, "mestimate", new FilterPattern("V"), new FilterPattern("V"), "Generate motion vectors."), + new Filter(true, false, false, "metadata", new FilterPattern("V"), new FilterPattern("V"), "Manipulate video frame metadata."), + new Filter(true, false, false, "midequalizer", new FilterPattern("VV"), new FilterPattern("V"), "Apply Midway Equalization."), + new Filter(false, false, false, "minterpolate", new FilterPattern("V"), new FilterPattern("V"), "Frame rate conversion using Motion Interpolation."), + new Filter(true, true, true, "mix", new FilterPattern("N"), new FilterPattern("V"), "Mix video inputs."), + new Filter(true, true, true, "monochrome", new FilterPattern("V"), new FilterPattern("V"), "Convert video to gray using custom color filter."), + new Filter(true, true, true, "morpho", new FilterPattern("VV"), new FilterPattern("V"), "Apply Morphological filter."), + new Filter(false, false, false, "mpdecimate", new FilterPattern("V"), new FilterPattern("V"), "Remove near-duplicate frames."), + new Filter(true, true, false, "msad", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the MSAD between two video streams."), + new Filter(true, true, true, "multiply", new FilterPattern("VV"), new FilterPattern("V"), "Multiply first video stream with second video stream."), + new Filter(true, true, true, "negate", new FilterPattern("V"), new FilterPattern("V"), "Negate input video."), + new Filter(true, true, false, "nlmeans", new FilterPattern("V"), new FilterPattern("V"), "Non-local means denoiser."), + new Filter(true, true, true, "nnedi", new FilterPattern("V"), new FilterPattern("V"), "Apply neural network edge directed interpolation intra-only deinterlacer."), + new Filter(false, false, false, "noformat", new FilterPattern("V"), new FilterPattern("V"), "Force libavfilter not to use any of the specified pixel formats for the input to the next filter."), + new Filter(true, true, false, "noise", new FilterPattern("V"), new FilterPattern("V"), "Add noise."), + new Filter(true, false, true, "normalize", new FilterPattern("V"), new FilterPattern("V"), "Normalize RGB video."), + new Filter(false, false, false, "null", new FilterPattern("V"), new FilterPattern("V"), "Pass the source unchanged to the output."), + new Filter(false, false, false, "ocr", new FilterPattern("V"), new FilterPattern("V"), "Optical Character Recognition."), + new Filter(true, false, true, "oscilloscope", new FilterPattern("V"), new FilterPattern("V"), "2D Video Oscilloscope."), + new Filter(true, true, true, "overlay", new FilterPattern("VV"), new FilterPattern("V"), "Overlay a video source on top of the input."), + new Filter(true, false, false, "owdenoise", new FilterPattern("V"), new FilterPattern("V"), "Denoise using wavelets."), + new Filter(false, false, false, "pad", new FilterPattern("V"), new FilterPattern("V"), "Pad the input video."), + new Filter(false, false, false, "palettegen", new FilterPattern("V"), new FilterPattern("V"), "Find the optimal palette for a given stream."), + new Filter(false, false, false, "paletteuse", new FilterPattern("VV"), new FilterPattern("V"), "Use a palette to downsample an input video stream."), + new Filter(true, false, true, "perms", new FilterPattern("V"), new FilterPattern("V"), "Set permissions for the output video frame."), + new Filter(true, true, false, "perspective", new FilterPattern("V"), new FilterPattern("V"), "Correct the perspective of video."), + new Filter(true, false, true, "phase", new FilterPattern("V"), new FilterPattern("V"), "Phase shift fields."), + new Filter(false, false, false, "photosensitivity", new FilterPattern("V"), new FilterPattern("V"), "Filter out photosensitive epilepsy seizure-inducing flashes."), + new Filter(false, false, false, "pixdesctest", new FilterPattern("V"), new FilterPattern("V"), "Test pixel format definitions."), + new Filter(true, true, true, "pixelize", new FilterPattern("V"), new FilterPattern("V"), "Pixelize video."), + new Filter(true, false, true, "pixscope", new FilterPattern("V"), new FilterPattern("V"), "Pixel data analysis."), + new Filter(true, false, true, "pp", new FilterPattern("V"), new FilterPattern("V"), "Filter video using libpostproc."), + new Filter(true, false, false, "pp7", new FilterPattern("V"), new FilterPattern("V"), "Apply Postprocessing 7 filter."), + new Filter(true, true, false, "premultiply", new FilterPattern("N"), new FilterPattern("V"), "PreMultiply first stream with first plane of second stream."), + new Filter(true, true, true, "prewitt", new FilterPattern("V"), new FilterPattern("V"), "Apply prewitt operator."), + new Filter(true, true, true, "pseudocolor", new FilterPattern("V"), new FilterPattern("V"), "Make pseudocolored video frames."), + new Filter(true, true, false, "psnr", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the PSNR between two video streams."), + new Filter(false, false, false, "pullup", new FilterPattern("V"), new FilterPattern("V"), "Pullup from field sequence to frames."), + new Filter(true, false, false, "qp", new FilterPattern("V"), new FilterPattern("V"), "Change video quantization parameters."), + new Filter(false, false, false, "random", new FilterPattern("V"), new FilterPattern("V"), "Return random frames."), + new Filter(true, true, true, "readeia608", new FilterPattern("V"), new FilterPattern("V"), "Read EIA-608 Closed Caption codes from input video and write them to frame metadata."), + new Filter(false, false, false, "readvitc", new FilterPattern("V"), new FilterPattern("V"), "Read vertical interval timecode and write it to frame metadata."), + new Filter(false, false, true, "realtime", new FilterPattern("V"), new FilterPattern("V"), "Slow down filtering to match realtime."), + new Filter(false, true, false, "remap", new FilterPattern("VVV"), new FilterPattern("V"), "Remap pixels."), + new Filter(true, true, false, "removegrain", new FilterPattern("V"), new FilterPattern("V"), "Remove grain."), + new Filter(true, false, false, "removelogo", new FilterPattern("V"), new FilterPattern("V"), "Remove a TV logo based on a mask image."), + new Filter(false, false, false, "repeatfields", new FilterPattern("V"), new FilterPattern("V"), "Hard repeat fields based on MPEG repeat field flag."), + new Filter(false, false, false, "reverse", new FilterPattern("V"), new FilterPattern("V"), "Reverse a clip."), + new Filter(true, true, true, "rgbashift", new FilterPattern("V"), new FilterPattern("V"), "Shift RGBA."), + new Filter(true, true, true, "roberts", new FilterPattern("V"), new FilterPattern("V"), "Apply roberts cross operator."), + new Filter(true, true, true, "rotate", new FilterPattern("V"), new FilterPattern("V"), "Rotate the input image."), + new Filter(true, false, false, "sab", new FilterPattern("V"), new FilterPattern("V"), "Apply shape adaptive blur."), + new Filter(false, false, true, "scale", new FilterPattern("V"), new FilterPattern("V"), "Scale the input video size and/or convert the image format."), + new Filter(false, false, false, "scale_vt", new FilterPattern("V"), new FilterPattern("V"), "Scale Videotoolbox frames"), + new Filter(false, false, true, "scale2ref", new FilterPattern("VV"), new FilterPattern("VV"), "Scale the input video size and/or convert the image format to the given reference."), + new Filter(false, false, false, "scdet", new FilterPattern("V"), new FilterPattern("V"), "Detect video scene change"), + new Filter(true, true, true, "scharr", new FilterPattern("V"), new FilterPattern("V"), "Apply scharr operator."), + new Filter(true, true, true, "scroll", new FilterPattern("V"), new FilterPattern("V"), "Scroll input video."), + new Filter(false, false, false, "segment", new FilterPattern("V"), new FilterPattern("N"), "Segment video stream."), + new Filter(false, false, false, "select", new FilterPattern("V"), new FilterPattern("N"), "Select video frames to pass in output."), + new Filter(true, true, false, "selectivecolor", new FilterPattern("V"), new FilterPattern("V"), "Apply CMYK adjustments to specific color ranges."), + new Filter(false, false, false, "sendcmd", new FilterPattern("V"), new FilterPattern("V"), "Send commands to filters."), + new Filter(false, false, false, "separatefields", new FilterPattern("V"), new FilterPattern("V"), "Split input video frames into fields."), + new Filter(false, false, false, "setdar", new FilterPattern("V"), new FilterPattern("V"), "Set the frame display aspect ratio."), + new Filter(false, false, false, "setfield", new FilterPattern("V"), new FilterPattern("V"), "Force field for the output video frame."), + new Filter(false, false, false, "setparams", new FilterPattern("V"), new FilterPattern("V"), "Force field, or color property for the output video frame."), + new Filter(false, false, true, "setpts", new FilterPattern("V"), new FilterPattern("V"), "Set PTS for the output video frame."), + new Filter(false, false, false, "setrange", new FilterPattern("V"), new FilterPattern("V"), "Force color range for the output video frame."), + new Filter(false, false, false, "setsar", new FilterPattern("V"), new FilterPattern("V"), "Set the pixel sample aspect ratio."), + new Filter(false, false, false, "settb", new FilterPattern("V"), new FilterPattern("V"), "Set timebase for the video output link."), + new Filter(true, true, true, "shear", new FilterPattern("V"), new FilterPattern("V"), "Shear transform the input image."), + new Filter(false, false, false, "showinfo", new FilterPattern("V"), new FilterPattern("V"), "Show textual information for each video frame."), + new Filter(false, false, false, "showpalette", new FilterPattern("V"), new FilterPattern("V"), "Display frame palette."), + new Filter(true, false, false, "shuffleframes", new FilterPattern("V"), new FilterPattern("V"), "Shuffle video frames."), + new Filter(true, true, false, "shufflepixels", new FilterPattern("V"), new FilterPattern("V"), "Shuffle video pixels."), + new Filter(true, false, false, "shuffleplanes", new FilterPattern("V"), new FilterPattern("V"), "Shuffle video planes."), + new Filter(true, false, false, "sidedata", new FilterPattern("V"), new FilterPattern("V"), "Manipulate video frame side data."), + new Filter(false, true, false, "signalstats", new FilterPattern("V"), new FilterPattern("V"), "Generate statistics from video analysis."), + new Filter(false, false, false, "signature", new FilterPattern("N"), new FilterPattern("V"), "Calculate the MPEG-7 video signature"), + new Filter(false, false, false, "siti", new FilterPattern("V"), new FilterPattern("V"), "Calculate spatial information (SI) and temporal information (TI)."), + new Filter(true, false, false, "smartblur", new FilterPattern("V"), new FilterPattern("V"), "Blur the input video without impacting the outlines."), + new Filter(true, true, true, "sobel", new FilterPattern("V"), new FilterPattern("V"), "Apply sobel operator."), + new Filter(false, false, false, "split", new FilterPattern("V"), new FilterPattern("N"), "Pass on the input to N video outputs."), + new Filter(true, false, true, "spp", new FilterPattern("V"), new FilterPattern("V"), "Apply a simple post processing filter."), + new Filter(false, false, false, "sr", new FilterPattern("V"), new FilterPattern("V"), "Apply DNN-based image super resolution to the input."), + new Filter(true, true, false, "ssim", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the SSIM between two video streams."), + new Filter(false, false, false, "ssim360", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the SSIM between two 360 video streams."), + new Filter(false, true, false, "stereo3d", new FilterPattern("V"), new FilterPattern("V"), "Convert video stereoscopic 3D view."), + new Filter(false, false, true, "streamselect", new FilterPattern("N"), new FilterPattern("N"), "Select video streams"), + new Filter(false, false, false, "subtitles", new FilterPattern("V"), new FilterPattern("V"), "Render text subtitles onto input video using the libass library."), + new Filter(false, true, false, "super2xsai", new FilterPattern("V"), new FilterPattern("V"), "Scale the input by 2x using the Super2xSaI pixel art algorithm."), + new Filter(true, false, true, "swaprect", new FilterPattern("V"), new FilterPattern("V"), "Swap 2 rectangular objects in video."), + new Filter(true, false, false, "swapuv", new FilterPattern("V"), new FilterPattern("V"), "Swap U and V components."), + new Filter(true, true, true, "tblend", new FilterPattern("V"), new FilterPattern("V"), "Blend successive frames."), + new Filter(false, false, false, "telecine", new FilterPattern("V"), new FilterPattern("V"), "Apply a telecine pattern."), + new Filter(false, false, false, "thistogram", new FilterPattern("V"), new FilterPattern("V"), "Compute and draw a temporal histogram."), + new Filter(true, true, true, "threshold", new FilterPattern("VVVV"), new FilterPattern("V"), "Threshold first video stream using other video streams."), + new Filter(true, true, false, "thumbnail", new FilterPattern("V"), new FilterPattern("V"), "Select the most representative frame in a given sequence of consecutive frames."), + new Filter(false, false, false, "tile", new FilterPattern("V"), new FilterPattern("V"), "Tile several successive frames together."), + new Filter(false, false, false, "tinterlace", new FilterPattern("V"), new FilterPattern("V"), "Perform temporal field interlacing."), + new Filter(true, true, true, "tlut2", new FilterPattern("V"), new FilterPattern("V"), "Compute and apply a lookup table from two successive frames."), + new Filter(true, true, true, "tmedian", new FilterPattern("V"), new FilterPattern("V"), "Pick median pixels from successive frames."), + new Filter(true, false, false, "tmidequalizer", new FilterPattern("V"), new FilterPattern("V"), "Apply Temporal Midway Equalization."), + new Filter(true, true, true, "tmix", new FilterPattern("V"), new FilterPattern("V"), "Mix successive video frames."), + new Filter(false, true, false, "tonemap", new FilterPattern("V"), new FilterPattern("V"), "Conversion to/from different dynamic ranges."), + new Filter(false, false, false, "tpad", new FilterPattern("V"), new FilterPattern("V"), "Temporarily pad video frames."), + new Filter(false, true, false, "transpose", new FilterPattern("V"), new FilterPattern("V"), "Transpose input video."), + new Filter(false, false, false, "transpose_vt", new FilterPattern("V"), new FilterPattern("V"), "Transpose Videotoolbox frames"), + new Filter(false, false, false, "trim", new FilterPattern("V"), new FilterPattern("V"), "Pick one continuous section from the input, drop the rest."), + new Filter(true, true, false, "unpremultiply", new FilterPattern("N"), new FilterPattern("V"), "UnPreMultiply first stream with first plane of second stream."), + new Filter(true, true, false, "unsharp", new FilterPattern("V"), new FilterPattern("V"), "Sharpen or blur the input video."), + new Filter(false, false, false, "untile", new FilterPattern("V"), new FilterPattern("V"), "Untile a frame into a sequence of frames."), + new Filter(true, true, false, "uspp", new FilterPattern("V"), new FilterPattern("V"), "Apply Ultra Simple / Slow Post-processing filter."), + new Filter(false, true, true, "v360", new FilterPattern("V"), new FilterPattern("V"), "Convert 360 projection of video."), + new Filter(true, false, false, "vaguedenoiser", new FilterPattern("V"), new FilterPattern("V"), "Apply a Wavelet based Denoiser."), + new Filter(true, true, true, "varblur", new FilterPattern("VV"), new FilterPattern("V"), "Apply Variable Blur filter."), + new Filter(false, false, true, "vectorscope", new FilterPattern("V"), new FilterPattern("V"), "Video vectorscope."), + new Filter(true, false, false, "vflip", new FilterPattern("V"), new FilterPattern("V"), "Flip the input video vertically."), + new Filter(false, false, false, "vfrdet", new FilterPattern("V"), new FilterPattern("V"), "Variable frame rate detect filter."), + new Filter(true, true, true, "vibrance", new FilterPattern("V"), new FilterPattern("V"), "Boost or alter saturation."), + new Filter(false, false, false, "vidstabdetect", new FilterPattern("V"), new FilterPattern("V"), "Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2)."), + new Filter(false, false, false, "vidstabtransform", new FilterPattern("V"), new FilterPattern("V"), "Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1)."), + new Filter(true, true, false, "vif", new FilterPattern("VV"), new FilterPattern("V"), "Calculate the VIF between two video streams."), + new Filter(true, false, false, "vignette", new FilterPattern("V"), new FilterPattern("V"), "Make or reverse a vignette effect."), + new Filter(false, false, false, "vmafmotion", new FilterPattern("V"), new FilterPattern("V"), "Calculate the VMAF Motion score."), + new Filter(false, true, false, "vstack", new FilterPattern("N"), new FilterPattern("V"), "Stack video inputs vertically."), + new Filter(true, true, true, "w3fdif", new FilterPattern("V"), new FilterPattern("V"), "Apply Martin Weston three field deinterlace."), + new Filter(false, true, true, "waveform", new FilterPattern("V"), new FilterPattern("V"), "Video waveform monitor."), + new Filter(false, true, false, "weave", new FilterPattern("V"), new FilterPattern("V"), "Weave input video fields into frames."), + new Filter(false, true, false, "xbr", new FilterPattern("V"), new FilterPattern("V"), "Scale the input using xBR algorithm."), + new Filter(true, true, false, "xcorrelate", new FilterPattern("VV"), new FilterPattern("V"), "Cross-correlate first video stream with second video stream."), + new Filter(false, true, false, "xfade", new FilterPattern("VV"), new FilterPattern("V"), "Cross fade one video with another video."), + new Filter(true, true, true, "xmedian", new FilterPattern("N"), new FilterPattern("V"), "Pick median pixels from several video inputs."), + new Filter(false, true, false, "xstack", new FilterPattern("N"), new FilterPattern("V"), "Stack video inputs into custom layout."), + new Filter(true, true, false, "yadif", new FilterPattern("V"), new FilterPattern("V"), "Deinterlace the input image."), + new Filter(true, false, false, "yadif_videotoolbox",new FilterPattern("V"), new FilterPattern("V"), "YADIF for VideoToolbox frames using Metal compute"), + new Filter(true, true, true, "yaepblur", new FilterPattern("V"), new FilterPattern("V"), "Yet another edge preserving blur filter."), + new Filter(false, false, false, "zmq", new FilterPattern("V"), new FilterPattern("V"), "Receive commands through ZMQ and broker them to filters."), + new Filter(false, false, false, "zoompan", new FilterPattern("V"), new FilterPattern("V"), "Apply Zoom & Pan effect."), + new Filter(false, true, true, "zscale", new FilterPattern("V"), new FilterPattern("V"), "Apply resizing, colorspace and bit depth conversion."), + new Filter(false, false, false, "allrgb", new FilterPattern("|"), new FilterPattern("V"), "Generate all RGB colors."), + new Filter(false, false, false, "allyuv", new FilterPattern("|"), new FilterPattern("V"), "Generate all yuv colors."), + new Filter(false, false, false, "cellauto", new FilterPattern("|"), new FilterPattern("V"), "Create pattern generated by an elementary cellular automaton."), + new Filter(false, false, true, "color", new FilterPattern("|"), new FilterPattern("V"), "Provide an uniformly colored input."), + new Filter(false, false, false, "colorchart", new FilterPattern("|"), new FilterPattern("V"), "Generate color checker chart."), + new Filter(false, false, false, "colorspectrum", new FilterPattern("|"), new FilterPattern("V"), "Generate colors spectrum."), + new Filter(false, false, false, "coreimagesrc", new FilterPattern("|"), new FilterPattern("V"), "Video source using image generators of CoreImage API."), + new Filter(false, false, false, "frei0r_src", new FilterPattern("|"), new FilterPattern("V"), "Generate a frei0r source."), + new Filter(false, true, false, "gradients", new FilterPattern("|"), new FilterPattern("V"), "Draw a gradients."), + new Filter(false, false, false, "haldclutsrc", new FilterPattern("|"), new FilterPattern("V"), "Provide an identity Hald CLUT."), + new Filter(false, false, false, "life", new FilterPattern("|"), new FilterPattern("V"), "Create life."), + new Filter(false, false, false, "mandelbrot", new FilterPattern("|"), new FilterPattern("V"), "Render a Mandelbrot fractal."), + new Filter(false, false, false, "mptestsrc", new FilterPattern("|"), new FilterPattern("V"), "Generate various test pattern."), + new Filter(false, false, false, "nullsrc", new FilterPattern("|"), new FilterPattern("V"), "Null video source, return unprocessed video frames."), + new Filter(false, false, false, "pal75bars", new FilterPattern("|"), new FilterPattern("V"), "Generate PAL 75% color bars."), + new Filter(false, false, false, "pal100bars", new FilterPattern("|"), new FilterPattern("V"), "Generate PAL 100% color bars."), + new Filter(false, false, false, "rgbtestsrc", new FilterPattern("|"), new FilterPattern("V"), "Generate RGB test pattern."), + new Filter(false, true, false, "sierpinski", new FilterPattern("|"), new FilterPattern("V"), "Render a Sierpinski fractal."), + new Filter(false, false, false, "smptebars", new FilterPattern("|"), new FilterPattern("V"), "Generate SMPTE color bars."), + new Filter(false, false, false, "smptehdbars", new FilterPattern("|"), new FilterPattern("V"), "Generate SMPTE HD color bars."), + new Filter(false, false, false, "testsrc", new FilterPattern("|"), new FilterPattern("V"), "Generate test pattern."), + new Filter(false, false, false, "testsrc2", new FilterPattern("|"), new FilterPattern("V"), "Generate another test pattern."), + new Filter(false, false, false, "yuvtestsrc", new FilterPattern("|"), new FilterPattern("V"), "Generate YUV test pattern."), + new Filter(false, true, true, "zoneplate", new FilterPattern("|"), new FilterPattern("V"), "Generate zone-plate."), + new Filter(false, false, false, "nullsink", new FilterPattern("V"), new FilterPattern("|"), "Do absolutely nothing with the input video."), + new Filter(false, false, true, "a3dscope", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to 3d scope video output."), + new Filter(false, false, false, "abitscope", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to audio bit scope video output."), + new Filter(false, false, false, "adrawgraph", new FilterPattern("A"), new FilterPattern("V"), "Draw a graph using input audio metadata."), + new Filter(false, false, true, "agraphmonitor", new FilterPattern("A"), new FilterPattern("V"), "Show various filtergraph stats."), + new Filter(false, false, false, "ahistogram", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to histogram video output."), + new Filter(false, false, false, "aphasemeter", new FilterPattern("A"), new FilterPattern("N"), "Convert input audio to phase meter video output."), + new Filter(false, true, true, "avectorscope", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to vectorscope video output."), + new Filter(false, false, true, "concat", new FilterPattern("N"), new FilterPattern("N"), "Concatenate audio and video streams."), + new Filter(false, false, false, "showcqt", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a CQT (Constant/Clamped Q Transform) spectrum video output."), + new Filter(false, true, false, "showcwt", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a CWT (Continuous Wavelet Transform) spectrum video output."), + new Filter(false, false, false, "showfreqs", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a frequencies video output."), + new Filter(false, true, false, "showspatial", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a spatial video output."), + new Filter(false, true, false, "showspectrum", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a spectrum video output."), + new Filter(false, true, false, "showspectrumpic", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a spectrum video output single picture."), + new Filter(false, false, false, "showvolume", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio volume to video output."), + new Filter(false, false, false, "showwaves", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a video output."), + new Filter(false, false, false, "showwavespic", new FilterPattern("A"), new FilterPattern("V"), "Convert input audio to a video output single picture."), + new Filter(false, false, false, "spectrumsynth", new FilterPattern("VV"), new FilterPattern("A"), "Convert input spectrum videos to audio output."), + new Filter(false, false, true, "avsynctest", new FilterPattern("|"), new FilterPattern("AV"), "Generate an Audio Video Sync Test."), + new Filter(false, false, true, "amovie", new FilterPattern("|"), new FilterPattern("N"), "Read audio from a movie source."), + new Filter(false, false, true, "movie", new FilterPattern("|"), new FilterPattern("N"), "Read from a movie source."), + new Filter(false, false, false, "afifo", new FilterPattern("A"), new FilterPattern("A"), "Buffer input frames and send them when they are requested."), + new Filter(false, false, false, "fifo", new FilterPattern("V"), new FilterPattern("V"), "Buffer input images and send them when they are requested."), + new Filter(false, false, false, "abuffer", new FilterPattern("|"), new FilterPattern("A"), "Buffer audio frames, and make them accessible to the filterchain."), + new Filter(false, false, false, "buffer", new FilterPattern("|"), new FilterPattern("V"), "Buffer video frames, and make them accessible to the filterchain."), + new Filter(false, false, false, "abuffersink", new FilterPattern("A"), new FilterPattern("|"), "Buffer audio frames, and make them available to the end of the filter graph."), + new Filter(false, false, false, "buffersink", new FilterPattern("V"), new FilterPattern("|"), "Buffer video frames, and make them available to the end of the filter graph.")) + .build(); +} diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-filters b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-filters new file mode 100644 index 00000000..11526539 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-filters @@ -0,0 +1,502 @@ +Filters: + T.. = Timeline support + .S. = Slice threading + ..C = Command support + A = Audio input/output + V = Video input/output + N = Dynamic number and/or type of input/output + | = Source or sink filter + ... abench A->A Benchmark part of a filtergraph. + ..C acompressor A->A Audio compressor. + ... acontrast A->A Simple audio dynamic range compression/expansion filter. + ... acopy A->A Copy the input audio unchanged to the output. + ... acue A->A Delay filtering to match a cue. + ... acrossfade AA->A Cross fade two input audio streams. + .S. acrossover A->N Split audio into per-bands streams. + T.C acrusher A->A Reduce audio bit resolution. + TS. adeclick A->A Remove impulsive noise from input audio. + TS. adeclip A->A Remove clipping from input audio. + TS. adecorrelate A->A Apply decorrelation to input audio. + T.C adelay A->A Delay one or more audio channels. + TSC adenorm A->A Remedy denormals by adding extremely low-level noise. + T.. aderivative A->A Compute derivative of input audio. + TSC adrc A->A Audio Spectral Dynamic Range Controller. + TSC adynamicequalizer A->A Apply Dynamic Equalization of input audio. + T.C adynamicsmooth A->A Apply Dynamic Smoothing of input audio. + ... aecho A->A Add echoing to the audio. + TSC aemphasis A->A Audio emphasis. + T.. aeval A->A Filter audio signal according to a specified expression. + T.C aexciter A->A Enhance high frequency part of audio. + T.C afade A->A Fade in/out input audio. + TSC afftdn A->A Denoise audio samples using FFT. + TS. afftfilt A->A Apply arbitrary expressions to samples in frequency domain. + .SC afir N->N Apply Finite Impulse Response filter with supplied coefficients in additional stream(s). + ... aformat A->A Convert the input audio to one of the specified formats. + TSC afreqshift A->A Apply frequency shifting to input audio. + TSC afwtdn A->A Denoise audio stream using Wavelets. + T.C agate A->A Audio gate. + .S. aiir A->N Apply Infinite Impulse Response filter with supplied coefficients. + T.. aintegral A->A Compute integral of input audio. + ... ainterleave N->A Temporally interleave audio inputs. + T.. alatency A->A Report audio filtering latency. + T.C alimiter A->A Audio lookahead limiter. + TSC allpass A->A Apply a two-pole all-pass filter. + ... aloop A->A Loop audio samples. + ... amerge N->A Merge two or more audio streams into a single multi-channel stream. + T.. ametadata A->A Manipulate audio frame metadata. + ..C amix N->A Audio mixing. + ... amultiply AA->A Multiply two audio streams. + TSC anequalizer A->N Apply high-order audio parametric multi band equalizer. + TSC anlmdn A->A Reduce broadband noise from stream using Non-Local Means. + TSC anlmf AA->A Apply Normalized Least-Mean-Fourth algorithm to first audio stream. + TSC anlms AA->A Apply Normalized Least-Mean-Squares algorithm to first audio stream. + ... anull A->A Pass the source unchanged to the output. + T.. apad A->A Pad audio with silence. + T.C aperms A->A Set permissions for the output audio frame. + ... aphaser A->A Add a phasing effect to the audio. + TSC aphaseshift A->A Apply phase shifting to input audio. + TS. apsnr AA->A Measure Audio Peak Signal-to-Noise Ratio. + TSC apsyclip A->A Audio Psychoacoustic Clipper. + ... apulsator A->A Audio pulsator. + ..C arealtime A->A Slow down filtering to match realtime. + ... aresample A->A Resample audio data. + ... areverse A->A Reverse an audio clip. + TSC arls AA->A Apply Recursive Least Squares algorithm to first audio stream. + TSC arnndn A->A Reduce noise from speech using Recurrent Neural Networks. + TS. asdr AA->A Measure Audio Signal-to-Distortion Ratio. + ... asegment A->N Segment audio stream. + ... aselect A->N Select audio frames to pass in output. + ... asendcmd A->A Send commands to filters. + T.C asetnsamples A->A Set the number of samples for each output audio frames. + ..C asetpts A->A Set PTS for the output audio frame. + ... asetrate A->A Change the sample rate without altering the data. + ... asettb A->A Set timebase for the audio output link. + ... ashowinfo A->A Show textual information for each audio frame. + T.. asidedata A->A Manipulate audio frame side data. + TS. asisdr AA->A Measure Audio Scale-Invariant Signal-to-Distortion Ratio. + TSC asoftclip A->A Audio Soft Clipper. + .S. aspectralstats A->A Show frequency domain statistics about audio frames. + ... asplit A->N Pass on the audio input to N audio outputs. + .S. astats A->A Show time domain statistics about audio frames. + ..C astreamselect N->N Select audio streams + TSC asubboost A->A Boost subwoofer frequencies. + TSC asubcut A->A Cut subwoofer frequencies. + TSC asupercut A->A Cut super frequencies. + TSC asuperpass A->A Apply high order Butterworth band-pass filter. + TSC asuperstop A->A Apply high order Butterworth band-stop filter. + ..C atempo A->A Adjust audio tempo. + TSC atilt A->A Apply spectral tilt to audio. + ... atrim A->A Pick one continuous section from the input, drop the rest. + ... axcorrelate AA->A Cross-correlate two audio streams. + ... azmq A->A Receive commands through ZMQ and broker them to filters. + TSC bandpass A->A Apply a two-pole Butterworth band-pass filter. + TSC bandreject A->A Apply a two-pole Butterworth band-reject filter. + TSC bass A->A Boost or cut lower frequencies. + TSC biquad A->A Apply a biquad IIR filter with the given coefficients. + ... channelmap A->A Remap audio channels. + ... channelsplit A->N Split audio into per-channel streams. + ... chorus A->A Add a chorus effect to the audio. + ... compand A->A Compress or expand audio dynamic range. + T.C compensationdelay A->A Audio Compensation Delay Line. + T.C crossfeed A->A Apply headphone crossfeed filter. + TSC crystalizer A->A Simple audio noise sharpening filter. + T.. dcshift A->A Apply a DC shift to the audio. + T.. deesser A->A Apply de-essing to the audio. + T.C dialoguenhance A->A Audio Dialogue Enhancement. + ... drmeter A->A Measure audio dynamic range. + TSC dynaudnorm A->A Dynamic Audio Normalizer. + ... earwax A->A Widen the stereo image. + ... ebur128 A->N EBU R128 scanner. + TSC equalizer A->A Apply two-pole peaking equalization (EQ) filter. + T.C extrastereo A->A Increase difference between stereo audio channels. + ..C firequalizer A->A Finite Impulse Response Equalizer. + ... flanger A->A Apply a flanging effect to the audio. + ... haas A->A Apply Haas Stereo Enhancer. + ... hdcd A->A Apply High Definition Compatible Digital (HDCD) decoding. + .S. headphone N->A Apply headphone binaural spatialization with HRTFs in additional streams. + TSC highpass A->A Apply a high-pass filter with 3dB point frequency. + TSC highshelf A->A Apply a high shelf filter. + ... join N->A Join multiple audio streams into multi-channel output. + ... loudnorm A->A EBU R128 loudness normalization + TSC lowpass A->A Apply a low-pass filter with 3dB point frequency. + TSC lowshelf A->A Apply a low shelf filter. + ... mcompand A->A Multiband Compress or expand audio dynamic range. + ... pan A->A Remix channels with coefficients (panning). + ... replaygain A->A ReplayGain scanner. + ..C rubberband A->A Apply time-stretching and pitch-shifting. + ..C sidechaincompress AA->A Sidechain compressor. + T.C sidechaingate AA->A Audio sidechain gate. + ... silencedetect A->A Detect silence. + T.C silenceremove A->A Remove silence. + T.C speechnorm A->A Speech Normalizer. + T.C stereotools A->A Apply various stereo tools. + T.C stereowiden A->A Apply stereo widening effect. + ... superequalizer A->A Apply 18 band equalization filter. + .SC surround A->A Apply audio surround upmix filter. + TSC tiltshelf A->A Apply a tilt shelf filter. + TSC treble A->A Boost or cut upper frequencies. + T.. tremolo A->A Apply tremolo effect. + T.. vibrato A->A Apply vibrato effect. + T.C virtualbass A->A Audio Virtual Bass. + T.C volume A->A Change input volume. + ... volumedetect A->A Detect audio volume. + ... aevalsrc |->A Generate an audio signal generated by an expression. + ... afdelaysrc |->A Generate a Fractional delay FIR coefficients. + ... afireqsrc |->A Generate a FIR equalizer coefficients audio stream. + ... afirsrc |->A Generate a FIR coefficients audio stream. + ... anoisesrc |->A Generate a noise audio signal. + ... anullsrc |->A Null audio source, return empty audio frames. + ... hilbert |->A Generate a Hilbert transform FIR coefficients. + ... sinc |->A Generate a sinc kaiser-windowed low-pass, high-pass, band-pass, or band-reject FIR coefficients. + ... sine |->A Generate sine wave audio signal. + ... anullsink A->| Do absolutely nothing with the input audio. + ... addroi V->V Add region of interest to frame. + ... alphaextract V->V Extract an alpha channel as a grayscale image component. + T.. alphamerge VV->V Copy the luma value of the second input into the alpha channel of the first input. + TSC amplify V->V Amplify changes between successive video frames. + ... ass V->V Render ASS subtitles onto input video using the libass library. + TSC atadenoise V->V Apply an Adaptive Temporal Averaging Denoiser. + T.C avgblur V->V Apply Average Blur filter. + TSC backgroundkey V->V Turns a static background into transparency. + T.C bbox V->V Compute bounding box for each frame. + ... bench V->V Benchmark part of a filtergraph. + TSC bilateral V->V Apply Bilateral filter. + T.. bitplanenoise V->V Measure bit plane noise. + .S. blackdetect V->V Detect video intervals that are (almost) black. + ... blackframe V->V Detect frames that are (almost) black. + TSC blend VV->V Blend two video frames into each other. + ... blockdetect V->V Blockdetect filter. + ... blurdetect V->V Blurdetect filter. + TS. bm3d N->V Block-Matching 3D denoiser. + T.. boxblur V->V Blur the input. + TS. bwdif V->V Deinterlace the input image. + TSC cas V->V Contrast Adaptive Sharpen. + ... ccrepack V->V Repack CEA-708 closed caption metadata + TSC chromahold V->V Turns a certain color range into gray. + TSC chromakey V->V Turns a certain color into transparency. Operates on YUV colors. + TSC chromanr V->V Reduce chrominance noise. + TSC chromashift V->V Shift chroma. + ... ciescope V->V Video CIE scope. + T.. codecview V->V Visualize information about some codecs. + TSC colorbalance V->V Adjust the color balance. + TSC colorchannelmixer V->V Adjust colors by mixing color channels. + TSC colorcontrast V->V Adjust color contrast between RGB components. + TSC colorcorrect V->V Adjust color white balance selectively for blacks and whites. + TSC colorize V->V Overlay a solid color on the video stream. + TSC colorkey V->V Turns a certain color into transparency. Operates on RGB colors. + TSC colorhold V->V Turns a certain color range into gray. Operates on RGB colors. + TSC colorlevels V->V Adjust the color levels. + TSC colormap VVV->V Apply custom Color Maps to video stream. + TS. colormatrix V->V Convert color matrix. + TS. colorspace V->V Convert between colorspaces. + TSC colortemperature V->V Adjust color temperature of video. + TSC convolution V->V Apply convolution filter. + TS. convolve VV->V Convolve first video stream with second video stream. + ... copy V->V Copy the input video unchanged to the output. + ... coreimage V->V Video filtering using CoreImage API. + T.. corr VV->V Calculate the correlation between two video streams. + ... cover_rect V->V Find and cover a user specified object. + ..C crop V->V Crop the input video. + T.C cropdetect V->V Auto-detect crop size. + ... cue V->V Delay filtering to match a cue. + TSC curves V->V Adjust components curves. + .SC datascope V->V Video data analysis. + T.C dblur V->V Apply Directional Blur filter. + TS. dctdnoiz V->V Denoise frames using 2D DCT. + TSC deband V->V Debands video. + T.C deblock V->V Deblock video. + ... decimate N->V Decimate frames (post field matching filter). + TS. deconvolve VV->V Deconvolve first video stream with second video stream. + TS. dedot V->V Reduce cross-luminance and cross-color. + TSC deflate V->V Apply deflate effect. + ... deflicker V->V Remove temporal frame luminance variations. + ... dejudder V->V Remove judder produced by pullup. + T.. delogo V->V Remove logo from input video. + T.. derain V->V Apply derain filter to the input. + ... deshake V->V Stabilize shaky video. + TSC despill V->V Despill video. + ... detelecine V->V Apply an inverse telecine pattern. + TSC dilation V->V Apply dilation effect. + TSC displace VVV->V Displace pixels. + ... dnn_classify V->V Apply DNN classify filter to the input. + ... dnn_detect V->V Apply DNN detect filter to the input. + ... dnn_processing V->V Apply DNN processing filter to the input. + .S. doubleweave V->V Weave input video fields into double number of frames. + T.C drawbox V->V Draw a colored box on the input video. + ... drawgraph V->V Draw a graph using input video metadata. + T.C drawgrid V->V Draw a colored grid on the input video. + T.C drawtext V->V Draw text on top of video frames using libfreetype library. + T.. edgedetect V->V Detect and draw edge. + ... elbg V->V Apply posterize effect, using the ELBG algorithm. + T.. entropy V->V Measure video frames entropy. + .S. epx V->V Scale the input using EPX algorithm. + T.C eq V->V Adjust brightness, contrast, gamma, and saturation. + TSC erosion V->V Apply erosion effect. + TSC estdif V->V Apply Edge Slope Tracing deinterlace. + TSC exposure V->V Adjust exposure of the video stream. + ... extractplanes V->N Extract planes as grayscale frames. + TS. fade V->V Fade in/out input video. + ..C feedback VV->VV Apply feedback video filter. + TSC fftdnoiz V->V Denoise frames using 3D FFT. + TS. fftfilt V->V Apply arbitrary expressions to pixels in frequency domain. + ... field V->V Extract a field from the input video. + ... fieldhint V->V Field matching using hints. + ... fieldmatch N->V Field matching for inverse telecine. + T.. fieldorder V->V Set the field order. + T.C fillborders V->V Fill borders of the input video. + ... find_rect V->V Find a user specified object. + T.. floodfill V->V Fill area with same color with another color. + ... format V->V Convert the input video to one of the specified pixel formats. + ... fps V->V Force constant framerate. + ... framepack VV->V Generate a frame packed stereoscopic video. + .S. framerate V->V Upsamples or downsamples progressive source between specified frame rates. + T.. framestep V->V Select one frame every N frames. + ... freezedetect V->V Detects frozen video input. + ... freezeframes VV->V Freeze video frames. + T.C frei0r V->V Apply a frei0r effect. + T.. fspp V->V Apply Fast Simple Post-processing filter. + TSC gblur V->V Apply Gaussian Blur filter. + TS. geq V->V Apply generic equation to each pixel. + T.. gradfun V->V Debands video quickly using gradients. + ..C graphmonitor V->V Show various filtergraph stats. + TS. grayworld V->V Adjust white balance using LAB gray world algorithm + TS. greyedge V->V Estimates scene illumination by grey edge assumption. + TSC guided N->V Apply Guided filter. + TSC haldclut VV->V Adjust colors using a Hald CLUT. + TS. hflip V->V Horizontally flip the input video. + T.. histeq V->V Apply global color histogram equalization. + ... histogram V->V Compute and draw a histogram. + TSC hqdn3d V->V Apply a High Quality 3D Denoiser. + .S. hqx V->V Scale the input by 2, 3 or 4 using the hq*x magnification algorithm. + .S. hstack N->V Stack video inputs horizontally. + TSC hsvhold V->V Turns a certain HSV range into gray. + TSC hsvkey V->V Turns a certain HSV range into transparency. Operates on YUV colors. + T.C hue V->V Adjust the hue and saturation of the input video. + TSC huesaturation V->V Apply hue-saturation-intensity adjustments. + ... hwdownload V->V Download a hardware frame to a normal frame + ... hwmap V->V Map hardware frames + ... hwupload V->V Upload a normal frame to a hardware frame + T.. hysteresis VV->V Grow first stream into second stream by connecting components. + TS. identity VV->V Calculate the Identity between two video streams. + ... idet V->V Interlace detect Filter. + T.C il V->V Deinterleave or interleave fields. + TSC inflate V->V Apply inflate effect. + ... interlace V->V Convert progressive video into interlaced. + ... interleave N->V Temporally interleave video inputs. + ... kerndeint V->V Apply kernel deinterlacing to the input. + TSC kirsch V->V Apply kirsch operator. + TSC lagfun V->V Slowly update darker pixels. + T.. latency V->V Report video filtering latency. + TSC lenscorrection V->V Rectify the image by correcting for lens distortion. + ... libvmaf VV->V Calculate the VMAF between two video streams. + TSC limitdiff N->V Apply filtering with limiting difference. + TSC limiter V->V Limit pixels components to the specified range. + ... loop V->V Loop video frames. + TSC lumakey V->V Turns a certain luma into transparency. + TSC lut V->V Compute and apply a lookup table to the RGB/YUV input video. + TSC lut1d V->V Adjust colors using a 1D LUT. + TSC lut2 VV->V Compute and apply a lookup table from two video inputs. + TSC lut3d V->V Adjust colors using a 3D LUT. + TSC lutrgb V->V Compute and apply a lookup table to the RGB input video. + TSC lutyuv V->V Compute and apply a lookup table to the YUV input video. + TSC maskedclamp VVV->V Clamp first stream with second stream and third stream. + TSC maskedmax VVV->V Apply filtering with maximum difference of two streams. + TSC maskedmerge VVV->V Merge first stream with second stream using third stream as mask. + TSC maskedmin VVV->V Apply filtering with minimum difference of two streams. + TSC maskedthreshold VV->V Pick pixels comparing absolute difference of two streams with threshold. + TSC maskfun V->V Create Mask. + ... mcdeint V->V Apply motion compensating deinterlacing. + TSC median V->V Apply Median filter. + ... mergeplanes N->V Merge planes. + ... mestimate V->V Generate motion vectors. + T.. metadata V->V Manipulate video frame metadata. + T.. midequalizer VV->V Apply Midway Equalization. + ... minterpolate V->V Frame rate conversion using Motion Interpolation. + TSC mix N->V Mix video inputs. + TSC monochrome V->V Convert video to gray using custom color filter. + TSC morpho VV->V Apply Morphological filter. + ... mpdecimate V->V Remove near-duplicate frames. + TS. msad VV->V Calculate the MSAD between two video streams. + TSC multiply VV->V Multiply first video stream with second video stream. + TSC negate V->V Negate input video. + TS. nlmeans V->V Non-local means denoiser. + TSC nnedi V->V Apply neural network edge directed interpolation intra-only deinterlacer. + ... noformat V->V Force libavfilter not to use any of the specified pixel formats for the input to the next filter. + TS. noise V->V Add noise. + T.C normalize V->V Normalize RGB video. + ... null V->V Pass the source unchanged to the output. + ... ocr V->V Optical Character Recognition. + T.C oscilloscope V->V 2D Video Oscilloscope. + TSC overlay VV->V Overlay a video source on top of the input. + T.. owdenoise V->V Denoise using wavelets. + ... pad V->V Pad the input video. + ... palettegen V->V Find the optimal palette for a given stream. + ... paletteuse VV->V Use a palette to downsample an input video stream. + T.C perms V->V Set permissions for the output video frame. + TS. perspective V->V Correct the perspective of video. + T.C phase V->V Phase shift fields. + ... photosensitivity V->V Filter out photosensitive epilepsy seizure-inducing flashes. + ... pixdesctest V->V Test pixel format definitions. + TSC pixelize V->V Pixelize video. + T.C pixscope V->V Pixel data analysis. + T.C pp V->V Filter video using libpostproc. + T.. pp7 V->V Apply Postprocessing 7 filter. + TS. premultiply N->V PreMultiply first stream with first plane of second stream. + TSC prewitt V->V Apply prewitt operator. + TSC pseudocolor V->V Make pseudocolored video frames. + TS. psnr VV->V Calculate the PSNR between two video streams. + ... pullup V->V Pullup from field sequence to frames. + T.. qp V->V Change video quantization parameters. + ... random V->V Return random frames. + TSC readeia608 V->V Read EIA-608 Closed Caption codes from input video and write them to frame metadata. + ... readvitc V->V Read vertical interval timecode and write it to frame metadata. + ..C realtime V->V Slow down filtering to match realtime. + .S. remap VVV->V Remap pixels. + TS. removegrain V->V Remove grain. + T.. removelogo V->V Remove a TV logo based on a mask image. + ... repeatfields V->V Hard repeat fields based on MPEG repeat field flag. + ... reverse V->V Reverse a clip. + TSC rgbashift V->V Shift RGBA. + TSC roberts V->V Apply roberts cross operator. + TSC rotate V->V Rotate the input image. + T.. sab V->V Apply shape adaptive blur. + ..C scale V->V Scale the input video size and/or convert the image format. + ... scale_vt V->V Scale Videotoolbox frames + ..C scale2ref VV->VV Scale the input video size and/or convert the image format to the given reference. + ... scdet V->V Detect video scene change + TSC scharr V->V Apply scharr operator. + TSC scroll V->V Scroll input video. + ... segment V->N Segment video stream. + ... select V->N Select video frames to pass in output. + TS. selectivecolor V->V Apply CMYK adjustments to specific color ranges. + ... sendcmd V->V Send commands to filters. + ... separatefields V->V Split input video frames into fields. + ... setdar V->V Set the frame display aspect ratio. + ... setfield V->V Force field for the output video frame. + ... setparams V->V Force field, or color property for the output video frame. + ..C setpts V->V Set PTS for the output video frame. + ... setrange V->V Force color range for the output video frame. + ... setsar V->V Set the pixel sample aspect ratio. + ... settb V->V Set timebase for the video output link. + TSC shear V->V Shear transform the input image. + ... showinfo V->V Show textual information for each video frame. + ... showpalette V->V Display frame palette. + T.. shuffleframes V->V Shuffle video frames. + TS. shufflepixels V->V Shuffle video pixels. + T.. shuffleplanes V->V Shuffle video planes. + T.. sidedata V->V Manipulate video frame side data. + .S. signalstats V->V Generate statistics from video analysis. + ... signature N->V Calculate the MPEG-7 video signature + ... siti V->V Calculate spatial information (SI) and temporal information (TI). + T.. smartblur V->V Blur the input video without impacting the outlines. + TSC sobel V->V Apply sobel operator. + ... split V->N Pass on the input to N video outputs. + T.C spp V->V Apply a simple post processing filter. + ... sr V->V Apply DNN-based image super resolution to the input. + TS. ssim VV->V Calculate the SSIM between two video streams. + ... ssim360 VV->V Calculate the SSIM between two 360 video streams. + .S. stereo3d V->V Convert video stereoscopic 3D view. + ..C streamselect N->N Select video streams + ... subtitles V->V Render text subtitles onto input video using the libass library. + .S. super2xsai V->V Scale the input by 2x using the Super2xSaI pixel art algorithm. + T.C swaprect V->V Swap 2 rectangular objects in video. + T.. swapuv V->V Swap U and V components. + TSC tblend V->V Blend successive frames. + ... telecine V->V Apply a telecine pattern. + ... thistogram V->V Compute and draw a temporal histogram. + TSC threshold VVVV->V Threshold first video stream using other video streams. + TS. thumbnail V->V Select the most representative frame in a given sequence of consecutive frames. + ... tile V->V Tile several successive frames together. + ... tinterlace V->V Perform temporal field interlacing. + TSC tlut2 V->V Compute and apply a lookup table from two successive frames. + TSC tmedian V->V Pick median pixels from successive frames. + T.. tmidequalizer V->V Apply Temporal Midway Equalization. + TSC tmix V->V Mix successive video frames. + .S. tonemap V->V Conversion to/from different dynamic ranges. + ... tpad V->V Temporarily pad video frames. + .S. transpose V->V Transpose input video. + ... transpose_vt V->V Transpose Videotoolbox frames + ... trim V->V Pick one continuous section from the input, drop the rest. + TS. unpremultiply N->V UnPreMultiply first stream with first plane of second stream. + TS. unsharp V->V Sharpen or blur the input video. + ... untile V->V Untile a frame into a sequence of frames. + TS. uspp V->V Apply Ultra Simple / Slow Post-processing filter. + .SC v360 V->V Convert 360 projection of video. + T.. vaguedenoiser V->V Apply a Wavelet based Denoiser. + TSC varblur VV->V Apply Variable Blur filter. + ..C vectorscope V->V Video vectorscope. + T.. vflip V->V Flip the input video vertically. + ... vfrdet V->V Variable frame rate detect filter. + TSC vibrance V->V Boost or alter saturation. + ... vidstabdetect V->V Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2). + ... vidstabtransform V->V Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1). + TS. vif VV->V Calculate the VIF between two video streams. + T.. vignette V->V Make or reverse a vignette effect. + ... vmafmotion V->V Calculate the VMAF Motion score. + .S. vstack N->V Stack video inputs vertically. + TSC w3fdif V->V Apply Martin Weston three field deinterlace. + .SC waveform V->V Video waveform monitor. + .S. weave V->V Weave input video fields into frames. + .S. xbr V->V Scale the input using xBR algorithm. + TS. xcorrelate VV->V Cross-correlate first video stream with second video stream. + .S. xfade VV->V Cross fade one video with another video. + TSC xmedian N->V Pick median pixels from several video inputs. + .S. xstack N->V Stack video inputs into custom layout. + TS. yadif V->V Deinterlace the input image. + T.. yadif_videotoolbox V->V YADIF for VideoToolbox frames using Metal compute + TSC yaepblur V->V Yet another edge preserving blur filter. + ... zmq V->V Receive commands through ZMQ and broker them to filters. + ... zoompan V->V Apply Zoom & Pan effect. + .SC zscale V->V Apply resizing, colorspace and bit depth conversion. + ... allrgb |->V Generate all RGB colors. + ... allyuv |->V Generate all yuv colors. + ... cellauto |->V Create pattern generated by an elementary cellular automaton. + ..C color |->V Provide an uniformly colored input. + ... colorchart |->V Generate color checker chart. + ... colorspectrum |->V Generate colors spectrum. + ... coreimagesrc |->V Video source using image generators of CoreImage API. + ... frei0r_src |->V Generate a frei0r source. + .S. gradients |->V Draw a gradients. + ... haldclutsrc |->V Provide an identity Hald CLUT. + ... life |->V Create life. + ... mandelbrot |->V Render a Mandelbrot fractal. + ... mptestsrc |->V Generate various test pattern. + ... nullsrc |->V Null video source, return unprocessed video frames. + ... pal75bars |->V Generate PAL 75% color bars. + ... pal100bars |->V Generate PAL 100% color bars. + ... rgbtestsrc |->V Generate RGB test pattern. + .S. sierpinski |->V Render a Sierpinski fractal. + ... smptebars |->V Generate SMPTE color bars. + ... smptehdbars |->V Generate SMPTE HD color bars. + ... testsrc |->V Generate test pattern. + ... testsrc2 |->V Generate another test pattern. + ... yuvtestsrc |->V Generate YUV test pattern. + .SC zoneplate |->V Generate zone-plate. + ... nullsink V->| Do absolutely nothing with the input video. + ..C a3dscope A->V Convert input audio to 3d scope video output. + ... abitscope A->V Convert input audio to audio bit scope video output. + ... adrawgraph A->V Draw a graph using input audio metadata. + ..C agraphmonitor A->V Show various filtergraph stats. + ... ahistogram A->V Convert input audio to histogram video output. + ... aphasemeter A->N Convert input audio to phase meter video output. + .SC avectorscope A->V Convert input audio to vectorscope video output. + ..C concat N->N Concatenate audio and video streams. + ... showcqt A->V Convert input audio to a CQT (Constant/Clamped Q Transform) spectrum video output. + .S. showcwt A->V Convert input audio to a CWT (Continuous Wavelet Transform) spectrum video output. + ... showfreqs A->V Convert input audio to a frequencies video output. + .S. showspatial A->V Convert input audio to a spatial video output. + .S. showspectrum A->V Convert input audio to a spectrum video output. + .S. showspectrumpic A->V Convert input audio to a spectrum video output single picture. + ... showvolume A->V Convert input audio volume to video output. + ... showwaves A->V Convert input audio to a video output. + ... showwavespic A->V Convert input audio to a video output single picture. + ... spectrumsynth VV->A Convert input spectrum videos to audio output. + ..C avsynctest |->AV Generate an Audio Video Sync Test. + ..C amovie |->N Read audio from a movie source. + ..C movie |->N Read from a movie source. + ... afifo A->A Buffer input frames and send them when they are requested. + ... fifo V->V Buffer input images and send them when they are requested. + ... abuffer |->A Buffer audio frames, and make them accessible to the filterchain. + ... buffer |->V Buffer video frames, and make them accessible to the filterchain. + ... abuffersink A->| Buffer audio frames, and make them available to the end of the filter graph. + ... buffersink V->| Buffer video frames, and make them available to the end of the filter graph. From 2ada172e546de810d75a44a77d3e084c226c07e4 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Mar 2024 10:43:22 -0700 Subject: [PATCH 038/101] Add a buy me a coffee link to the README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 430ee71b..441af12a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ FFmpeg Java =========== by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2014,2016 +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/bramp) + A fluent interface to running FFmpeg from Java. ![Java](https://img.shields.io/badge/Java-8+-brightgreen.svg) From ad968e4b5c1db70b4a2e3f9f310a4004ca4ac01d Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Mar 2024 10:51:21 -0700 Subject: [PATCH 039/101] Changed maven compile to be more strict with lint issues, and fixed a couple of issues along the way: * [fallthrough] possible fall-through into case * [this-escape] possible 'this' escape before subclass is fully initialized --- pom.xml | 5 +++++ src/main/java/net/bramp/ffmpeg/FFmpeg.java | 1 + src/main/java/net/bramp/ffmpeg/info/Codec.java | 1 + src/main/java/net/bramp/ffmpeg/nut/Frame.java | 8 +++++++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 71515875..9048c681 100644 --- a/pom.xml +++ b/pom.xml @@ -330,7 +330,12 @@ javac-with-errorprone true true + true + true + + -Xlint:-options -Xlint:all diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index 45b01b49..46ecec74 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -92,6 +92,7 @@ public FFmpeg(@Nonnull String path) throws IOException { this(path, new RunProcessFunction()); } + @SuppressWarnings("this-escape") public FFmpeg(@Nonnull String path, @Nonnull ProcessFunction runFunction) throws IOException { super(path, runFunction); version(); diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index 4a0e11a0..2b168eef 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -64,6 +64,7 @@ public Codec(String name, String longName, String flags) { break; case 'T': this.type = CodecType.ATTACHMENT; + break; default: throw new IllegalArgumentException("Invalid codec type '" + flags.charAt(2) + "'"); } diff --git a/src/main/java/net/bramp/ffmpeg/nut/Frame.java b/src/main/java/net/bramp/ffmpeg/nut/Frame.java index b423f851..e50f1cb9 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/Frame.java +++ b/src/main/java/net/bramp/ffmpeg/nut/Frame.java @@ -1,6 +1,7 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; +import java.io.EOFException; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -162,7 +163,12 @@ public void read(NutReader nut, NutDataInputStream in, int code) throws IOExcept long pos = in.offset(); sideData = readMetaData(in); metaData = readMetaData(in); - size -= (in.offset() - pos); + long metadataLen = (in.offset() - pos); + if (metadataLen > size) { + throw new EOFException(); + } + + size -= (int) metadataLen; } else { sideData = null; From 1fa60d601b9c380b3e76ceccf0937ba9c89a1f8a Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Mar 2024 11:00:56 -0700 Subject: [PATCH 040/101] Added new Java/Maven build/test github action workflow. --- .github/workflows/maven.yml | 52 +++++++++++++++++++++++++++++++++++++ README.md | 3 ++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..a06f41cb --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,52 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + # Long term supported versions + java-version: [11, 17, 21] + + # TODO Add support for 8, but it fails with + # java.lang.UnsupportedClassVersionError: com/spotify/fmt/FMT has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 + + # TODO Should we test locales? The old travis setup did, see: + # https://github.com/bramp/ffmpeg-cli-wrapper/pull/55 + + name: JDK ${{ matrix.java-version }} + + steps: + - uses: actions/checkout@v3 + + - name: Set up FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v3 + id: setup-ffmpeg + with: + ffmpeg-version: release + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v3 + with: + java-version: ${{ matrix.java-version }} + distribution: 'temurin' + cache: maven + + - name: Compile with Maven + run: mvn --batch-mode --update-snapshots compile + + - name: Test with Maven, Package and Verify with Maven + run: mvn --batch-mode --update-snapshots verify -Dgpg.skip + + # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive + - name: Update dependency graph + uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 diff --git a/README.md b/README.md index 441af12a..18faa42f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ FFmpeg Java =========== + by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2014,2016 [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/bramp) @@ -7,7 +8,7 @@ by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2014,2016 A fluent interface to running FFmpeg from Java. ![Java](https://img.shields.io/badge/Java-8+-brightgreen.svg) -[![Build Status](https://img.shields.io/travis/bramp/ffmpeg-cli-wrapper/master.svg)](https://travis-ci.org/bramp/ffmpeg-cli-wrapper) +[![Build Status](https://github.com/bramp/ffmpeg-cli-wrapper/actions/workflows/maven.yml/badge.svg)](https://github.com/bramp/ffmpeg-cli-wrapper/actions/workflows/maven.yml) [![Coverage Status](https://img.shields.io/coveralls/bramp/ffmpeg-cli-wrapper.svg)](https://coveralls.io/github/bramp/ffmpeg-cli-wrapper) [![Maven](https://img.shields.io/maven-central/v/net.bramp.ffmpeg/ffmpeg.svg)](http://mvnrepository.com/artifact/net.bramp.ffmpeg/ffmpeg) [![Libraries.io](https://img.shields.io/librariesio/github/bramp/ffmpeg-cli-wrapper.svg)](https://libraries.io/github/bramp/ffmpeg-cli-wrapper) From f3249e85162e3372822cab0fdacc63478b8b0a87 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Mar 2024 11:12:50 -0700 Subject: [PATCH 041/101] Removed old travis configs. --- .travis.yml | 48 ---------------------------------------- travis-install-ffmpeg.sh | 22 ------------------ 2 files changed, 70 deletions(-) delete mode 100644 .travis.yml delete mode 100755 travis-install-ffmpeg.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d4b61379..00000000 --- a/.travis.yml +++ /dev/null @@ -1,48 +0,0 @@ -dist: trusty -sudo: false - -language: java - -env: - - USER_LANGUAGE=en USER_COUNTRY=US - - USER_LANGUAGE=de USER_COUNTRY=DE - -jdk: - - openjdk7 - - openjdk8 - - oraclejdk8 - - oraclejdk9 - -os: - - linux - -addons: -# apt: -# packages: -# - ffmpeg # Sadly this is libav's ffmpeg, which is not compatible - -before_install: - - ./travis-install-ffmpeg.sh - - export FFMPEG=$PWD/ffmpeg-release-amd64-static/ffmpeg - - export FFPROBE=$PWD/ffmpeg-release-amd64-static/ffprobe - - export MAVEN_OPTS="$MAVEN_OPTS -Duser.language=$USER_LANGUAGE -Duser.country=$USER_COUNTRY" - -before_script: - - echo $HOME - - echo $JAVA_OPTS - - echo $MAVEN_OPTS - -install: - - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip=true -B -V - -script: - - mvn test -Dgpg.skip=true -B -V - -after_success: - - mvn clean cobertura:cobertura coveralls:report - -cache: - apt: true - directories: - - $HOME/.m2 - - $HOME/.dist diff --git a/travis-install-ffmpeg.sh b/travis-install-ffmpeg.sh deleted file mode 100755 index c8a76c12..00000000 --- a/travis-install-ffmpeg.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Small script to fetch a static ffmpeg -set -ex - -URL=https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -FILE=$(basename ${URL}) -DIST=$HOME/.dist -DISTFILE=${DIST}/${FILE} -DEST=${FILE%%.*} - -[ -d ${DIST} ] || mkdir ${DIST} -[ -d ${DEST} ] || mkdir ${DEST} - -if [[ -f ${DISTFILE} ]]; then - # not first run - curl -o ${DISTFILE} -z ${DISTFILE} -L ${URL} -else - # first run - curl -o ${DISTFILE} -L ${URL} -fi - -tar xvJ --strip-components=1 -C ${DEST} -f ${DISTFILE} From 3ae1f5e9dc682c0a5bac875af09e409650d13d80 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Sun, 10 Mar 2024 11:15:49 -0700 Subject: [PATCH 042/101] Remove old code climate setup. --- .codeclimate.yml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .codeclimate.yml diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 3c426c68..00000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,6 +0,0 @@ -engines: - fixme: - enabled: false -ratings: - paths: [] -exclude_paths: [] From b5a564c0bf23474846881a372d209db01915c94d Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Mon, 11 Mar 2024 08:47:34 -0700 Subject: [PATCH 043/101] Updated Github Action to use latest maven-dependency-submission and allow it to fail without causing the job to fail. --- .github/workflows/maven.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index a06f41cb..b9681e9e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -49,4 +49,5 @@ jobs: # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph - uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 + uses: advanced-security/maven-dependency-submission-action@v4 + continue-on-error: true From 0e8d1739af4b1598298b892c45bc6f5c0a55bdbf Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Mon, 11 Mar 2024 15:38:09 +0100 Subject: [PATCH 044/101] Add additional N/A checks to FFmpegUtils --- src/main/java/net/bramp/ffmpeg/FFmpegUtils.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java index 6c778313..fb42e733 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java @@ -74,10 +74,15 @@ public static String toTimecode(long duration, TimeUnit units) { * format "hour:minute:second", where second can be a decimal number. * * @param time the timecode to parse. - * @return the number of nanoseconds. + * @return the number of nanoseconds or -1 if time is 'N/A' */ public static long fromTimecode(String time) { checkNotEmpty(time, "time must not be empty string"); + + if (time.equals("N/A")) { + return -1; + } + Matcher m = TIME_REGEX.matcher(time); if (!m.find()) { throw new IllegalArgumentException("invalid time '" + time + "'"); @@ -97,6 +102,8 @@ public static long fromTimecode(String time) { * @return the bitrate in bits per second or -1 if bitrate is 'N/A' */ public static long parseBitrate(String bitrate) { + checkNotEmpty(bitrate, "bitrate must not be empty string"); + if ("N/A".equals(bitrate)) { return -1; } From 6966a234b50faa5cce3260d8e29abc46e3bfe5a6 Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Mon, 11 Mar 2024 15:38:31 +0100 Subject: [PATCH 045/101] Test N/A values in all Progress parser implementations --- .../net/bramp/ffmpeg/fixtures/Progresses.java | 14 +++++++-- .../progress/StreamProgressParserTest.java | 15 ++++++++-- .../progress/TcpProgressParserTest.java | 30 +++++++++++++++++-- .../progress/UdpProgressParserTest.java | 29 ++++++++++++++++-- .../bramp/ffmpeg/fixtures/ffmpeg-progress-na | 11 +++++++ 5 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-progress-na diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java b/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java index 7aaf4866..b82932b3 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Progresses.java @@ -10,12 +10,20 @@ private Progresses() { } public static final ImmutableList allFiles = - ImmutableList.of("ffmpeg-progress-0", "ffmpeg-progress-1", "ffmpeg-progress-2"); + ImmutableList.of( + "ffmpeg-progress-0", + "ffmpeg-progress-1", + "ffmpeg-progress-2"); + + public static final ImmutableList naProgressFile = ImmutableList.of("ffmpeg-progress-na"); public static final ImmutableList allProgresses = ImmutableList.of( new Progress(5, 0.0f, 800, 48, 512000000, 0, 0, 1.01f, Progress.Status.CONTINUE), new Progress(118, 23.4f, -1, -1, 5034667000L, 0, 0, -1, Progress.Status.CONTINUE), - new Progress( - 132, 23.1f, 1935500, 1285168, 5312000000L, 0, 0, 0.929f, Progress.Status.END)); + new Progress(132, 23.1f, 1935500, 1285168, 5312000000L, 0, 0, 0.929f, Progress.Status.END)); + + public static final ImmutableList naProgresses = ImmutableList.of( + new Progress(0, 0.0f, -1, -1, -1, 0, 0, -1, Progress.Status.END) + ); } diff --git a/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java index 18f41993..80d2c5bd 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/StreamProgressParserTest.java @@ -6,7 +6,6 @@ import java.io.IOException; import java.io.InputStream; -import java.util.List; import net.bramp.ffmpeg.fixtures.Progresses; import org.junit.Test; @@ -23,6 +22,18 @@ public void testNormal() throws IOException { InputStream inputStream = combineResource(Progresses.allFiles); parser.processStream(inputStream); - assertThat(listener.progesses, equalTo((List) Progresses.allProgresses)); + assertThat(listener.progesses, equalTo(Progresses.allProgresses)); + } + + @Test + public void testNaProgressPackets() throws IOException { + listener.reset(); + + StreamProgressParser parser = new StreamProgressParser(listener); + + InputStream inputStream = combineResource(Progresses.naProgressFile); + parser.processStream(inputStream); + + assertThat(listener.progesses, equalTo(Progresses.naProgresses)); } } diff --git a/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java index 4a7de8dc..82071824 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/TcpProgressParserTest.java @@ -12,7 +12,6 @@ import java.io.OutputStream; import java.net.Socket; import java.net.URISyntaxException; -import java.util.List; import net.bramp.ffmpeg.fixtures.Progresses; import org.junit.Test; @@ -44,12 +43,37 @@ public void testNormal() throws IOException, InterruptedException, URISyntaxExce parser.stop(); assertThat(bytes, greaterThan(0L)); - assertThat(progesses, equalTo((List) Progresses.allProgresses)); + assertThat(progesses, equalTo(Progresses.allProgresses)); + } + + + + @Test + public void testNaProgressPackets() throws IOException, InterruptedException, URISyntaxException { + parser.start(); + + Socket client = new Socket(uri.getHost(), uri.getPort()); + assertTrue("Socket is connected", client.isConnected()); + + InputStream inputStream = combineResource(Progresses.naProgressFile); + OutputStream outputStream = client.getOutputStream(); + + long bytes = ByteStreams.copy(inputStream, outputStream); + + // HACK, but give the TcpProgressParser thread time to actually handle the connection/data + // before the client is closed, and the parser is stopped. + Thread.sleep(100); + + client.close(); + parser.stop(); + + assertThat(bytes, greaterThan(0L)); + assertThat(progesses, equalTo(Progresses.naProgresses)); } @Test public void testPrematureDisconnect() - throws IOException, InterruptedException, URISyntaxException { + throws IOException { parser.start(); new Socket(uri.getHost(), uri.getPort()).close(); parser.stop(); diff --git a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java index 7f9ccf43..bb06fc51 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java @@ -24,7 +24,7 @@ public ProgressParser newParser(ProgressListener listener) } @Test - public void testNormal() throws IOException, InterruptedException, URISyntaxException { + public void testNormal() throws IOException, InterruptedException { parser.start(); final InetAddress addr = InetAddress.getByName(uri.getHost()); @@ -41,10 +41,35 @@ public void testNormal() throws IOException, InterruptedException, URISyntaxExce } } + Thread.sleep(1000); // HACK: Wait a short while to avoid closing the receiving socket + + parser.stop(); + + assertThat(progesses, equalTo(Progresses.allProgresses)); + } + + @Test + public void testNaProgressPackets() throws IOException, InterruptedException, URISyntaxException { + parser.start(); + + final InetAddress addr = InetAddress.getByName(uri.getHost()); + final int port = uri.getPort(); + + try (DatagramSocket socket = new DatagramSocket()) { + // Load each Progress Fixture, and send in a single datagram packet + for (String progressFixture : Progresses.naProgressFile) { + InputStream inputStream = loadResource(progressFixture); + byte[] bytes = ByteStreams.toByteArray(inputStream); + + DatagramPacket packet = new DatagramPacket(bytes, bytes.length, addr, port); + socket.send(packet); + } + } + Thread.sleep(100); // HACK: Wait a short while to avoid closing the receiving socket parser.stop(); - assertThat(progesses, equalTo((List) Progresses.allProgresses)); + assertThat(progesses, equalTo(Progresses.naProgresses)); } } diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-progress-na b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-progress-na new file mode 100644 index 00000000..dde3b21c --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-progress-na @@ -0,0 +1,11 @@ +frame=0 +fps=0 +stream_0_0_q=-1.0 +bitrate=N/A +total_size=N/A +out_time_ms=N/A +out_time=N/A +dup_frames=0 +drop_frames=0 +speed=N/A +progress=end From 4bc84da39d41969adcb7d233a9bd48bb658ac825 Mon Sep 17 00:00:00 2001 From: Euklios Date: Mon, 11 Mar 2024 17:27:37 +0100 Subject: [PATCH 046/101] Replace animal-sniffer with javac parameter (#312) * Replace animal-sniffer with javac parameter / maven.compiler.release property --- pom.xml | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index 9048c681..b4fb888f 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,8 @@ 1.8 + ${base.java.version} + ${base.java.version} 1.5.2 @@ -243,11 +245,6 @@ maven-surefire-plugin 3.2.1 - - org.codehaus.mojo - animal-sniffer-maven-plugin - 1.23 - org.codehaus.mojo cobertura-maven-plugin @@ -485,11 +482,6 @@ extra-enforcer-rules 1.5.1 - - org.codehaus.mojo - animal-sniffer-enforcer-rule - 1.21 - @@ -520,27 +512,6 @@ - - org.codehaus.mojo - animal-sniffer-maven-plugin - - - check-java-api - test - - check - - - - org.codehaus.mojo.signature - java17 - 1.0 - - - - - - org.codehaus.mojo @@ -740,4 +711,16 @@ + + + + set-compiler-release + + [9,) + + + ${base.java.version} + + + From 8890104886e34b606c8e75d5de65f12db52ea23b Mon Sep 17 00:00:00 2001 From: Euklios Date: Mon, 11 Mar 2024 17:30:53 +0100 Subject: [PATCH 047/101] Feature/pr214 Appendable to output and error streams - changes (#304) * FEAT Define Appendable to read input and error streams of ffmpeg/ffprobe process Co-authored-by: Mickael GREGORI --- src/main/java/net/bramp/ffmpeg/FFcommon.java | 31 +++++++++++++++++-- .../java/net/bramp/ffmpeg/FFmpegTest.java | 19 ++++++++++++ .../bramp/ffmpeg/lang/NewProcessAnswer.java | 11 ++++++- .../bramp/ffmpeg/fixtures/ffmpeg-no-such-file | 1 + 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-no-such-file diff --git a/src/main/java/net/bramp/ffmpeg/FFcommon.java b/src/main/java/net/bramp/ffmpeg/FFcommon.java index b5746102..e766a1ca 100644 --- a/src/main/java/net/bramp/ffmpeg/FFcommon.java +++ b/src/main/java/net/bramp/ffmpeg/FFcommon.java @@ -8,6 +8,7 @@ import com.google.common.io.CharStreams; import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.List; @@ -28,6 +29,12 @@ abstract class FFcommon { /** Version string */ String version = null; + /** Process input stream */ + Appendable processOutputStream = System.out; + + /** Process error stream */ + Appendable processErrorStream = System.err; + public FFcommon(@Nonnull String path) { this(path, new RunProcessFunction()); } @@ -38,8 +45,26 @@ protected FFcommon(@Nonnull String path, @Nonnull ProcessFunction runFunction) { this.path = path; } + public void setProcessOutputStream(@Nonnull Appendable processOutputStream) { + Preconditions.checkNotNull(processOutputStream); + this.processOutputStream = processOutputStream; + } + + public void setProcessErrorStream(@Nonnull Appendable processErrorStream) { + Preconditions.checkNotNull(processErrorStream); + this.processErrorStream = processErrorStream; + } + + private BufferedReader _wrapInReader(final InputStream inputStream) { + return new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + } + protected BufferedReader wrapInReader(Process p) { - return new BufferedReader(new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8)); + return _wrapInReader(p.getInputStream()); + } + + protected BufferedReader wrapErrorInReader(Process p) { + return _wrapInReader(p.getErrorStream()); } protected void throwOnError(Process p) throws IOException { @@ -107,8 +132,8 @@ public void run(List args) throws IOException { // TODO Move the copy onto a thread, so that FFmpegProgressListener can be on this thread. // Now block reading ffmpeg's stdout. We are effectively throwing away the output. - CharStreams.copy(wrapInReader(p), System.out); // TODO Should I be outputting to stdout? - + CharStreams.copy(wrapInReader(p), processOutputStream); + CharStreams.copy(wrapErrorInReader(p), processErrorStream); throwOnError(p); } finally { diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index 7a4902fe..91e31f6f 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -7,6 +7,8 @@ import java.io.IOException; import java.util.List; + +import com.google.common.collect.Lists; import net.bramp.ffmpeg.fixtures.Codecs; import net.bramp.ffmpeg.fixtures.Filters; import net.bramp.ffmpeg.fixtures.Formats; @@ -35,6 +37,8 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem("-codecs"))).thenAnswer(new NewProcessAnswer("ffmpeg-codecs")); when(runFunc.run(argThatHasItem("-pix_fmts"))) .thenAnswer(new NewProcessAnswer("ffmpeg-pix_fmts")); + when(runFunc.run(argThatHasItem("toto.mp4"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-version", "ffmpeg-no-such-file")); when(runFunc.run(argThatHasItem("-filters"))) .thenAnswer(new NewProcessAnswer("ffmpeg-filters")); @@ -72,6 +76,21 @@ public void testFormats() throws IOException { verify(runFunc, times(1)).run(argThatHasItem("-formats")); } + @Test + public void testReadProcessStreams() throws IOException { + // process input stream + Appendable processInputStream = mock(Appendable.class); + ffmpeg.setProcessOutputStream(processInputStream); + // process error stream + Appendable processErrStream = mock(Appendable.class); + ffmpeg.setProcessErrorStream(processErrStream); + // run ffmpeg with non existing file + ffmpeg.run(Lists.newArrayList("-i", "toto.mp4")); + // check calls to Appendables + verify(processInputStream, times(1)).append(any(CharSequence.class)); + verify(processErrStream, times(1)).append(any(CharSequence.class)); + } + @Test public void testPixelFormat() throws IOException { // Run twice, the second should be cached diff --git a/src/test/java/net/bramp/ffmpeg/lang/NewProcessAnswer.java b/src/test/java/net/bramp/ffmpeg/lang/NewProcessAnswer.java index 5895537b..25154120 100644 --- a/src/test/java/net/bramp/ffmpeg/lang/NewProcessAnswer.java +++ b/src/test/java/net/bramp/ffmpeg/lang/NewProcessAnswer.java @@ -7,12 +7,21 @@ public class NewProcessAnswer implements Answer { final String resource; + final String errResource; + public NewProcessAnswer(String resource) { + this(resource, null); + } + + public NewProcessAnswer(String resource, String errResource) { this.resource = resource; + this.errResource = errResource; } @Override public Process answer(InvocationOnMock invocationOnMock) throws Throwable { - return new MockProcess(Helper.loadResource(resource)); + return errResource == null + ? new MockProcess(Helper.loadResource(resource)) + : new MockProcess(null, Helper.loadResource(resource), Helper.loadResource(errResource)); } } diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-no-such-file b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-no-such-file new file mode 100644 index 00000000..070b5f6d --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-no-such-file @@ -0,0 +1 @@ +toto.mp4: No such file or directory \ No newline at end of file From 053c32ce8086d431573113f135d18b65963d764e Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Mon, 11 Mar 2024 11:16:23 -0700 Subject: [PATCH 048/101] Created JDK 8 and 9 maven profiles, and allow JDK 8 to use old versions of test dependencies. --- pom.xml | 68 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index b4fb888f..59d91669 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ - 1.8 + 8 ${base.java.version} ${base.java.version} @@ -127,7 +127,7 @@ org.glassfish.grizzly grizzly-http-server - 4.0.0 + 4.0.2 @@ -531,17 +531,6 @@ UTF-8 - - com.spotify.fmt - fmt-maven-plugin - - - - format - - - - install @@ -714,13 +703,64 @@ - set-compiler-release + + Java 8 + + 1.8 + + + + + + ch.qos.logback + logback-classic + + 1.3.14 + + + org.mockito + mockito-core + + 4.11.0 + + + org.glassfish.grizzly + grizzly-http-server + + 3.0.1 + + + + + + + Java 9+ [9,) + ${base.java.version} + + + + + com.spotify.fmt + fmt-maven-plugin + + + + + From be9d457e6d053ce337ee79f5c1c90727fc4de561 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Mon, 11 Mar 2024 11:17:04 -0700 Subject: [PATCH 049/101] Add JDK 8 to the Github actions for testing. --- .github/workflows/maven.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b9681e9e..56478613 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -15,10 +15,7 @@ jobs: strategy: matrix: # Long term supported versions - java-version: [11, 17, 21] - - # TODO Add support for 8, but it fails with - # java.lang.UnsupportedClassVersionError: com/spotify/fmt/FMT has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 + java-version: [8, 11, 17, 21] # TODO Should we test locales? The old travis setup did, see: # https://github.com/bramp/ffmpeg-cli-wrapper/pull/55 From 1d11c37dab41fed2f4b5cda8158193176de52f2b Mon Sep 17 00:00:00 2001 From: Euklios Date: Mon, 11 Mar 2024 20:30:09 +0100 Subject: [PATCH 050/101] Feature/ffmpeg layouts (#314) * Implement ffmpeg layouts command --- src/main/java/net/bramp/ffmpeg/FFmpeg.java | 22 +++ .../net/bramp/ffmpeg/info/ChannelLayout.java | 5 + .../bramp/ffmpeg/info/IndividualChannel.java | 39 ++++++ .../net/bramp/ffmpeg/info/InfoParser.java | 48 +++++++ .../ffmpeg/info/StandardChannelLayout.java | 40 ++++++ .../java/net/bramp/ffmpeg/FFmpegTest.java | 11 ++ .../bramp/ffmpeg/fixtures/ChannelLayouts.java | 128 ++++++++++++++++++ .../net/bramp/ffmpeg/fixtures/ffmpeg-layouts | 66 +++++++++ 8 files changed, 359 insertions(+) create mode 100644 src/main/java/net/bramp/ffmpeg/info/ChannelLayout.java create mode 100644 src/main/java/net/bramp/ffmpeg/info/IndividualChannel.java create mode 100644 src/main/java/net/bramp/ffmpeg/info/InfoParser.java create mode 100644 src/main/java/net/bramp/ffmpeg/info/StandardChannelLayout.java create mode 100644 src/test/java/net/bramp/ffmpeg/fixtures/ChannelLayouts.java create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-layouts diff --git a/src/main/java/net/bramp/ffmpeg/FFmpeg.java b/src/main/java/net/bramp/ffmpeg/FFmpeg.java index 46ecec74..459e42dd 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpeg.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpeg.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -80,6 +81,9 @@ public class FFmpeg extends FFcommon { /** Supported filters */ private List filters = null; + /** Supported channel layouts */ + private List channelLayouts = null; + public FFmpeg() throws IOException { this(DEFAULT_PATH, new RunProcessFunction()); } @@ -242,6 +246,24 @@ public synchronized List pixelFormats() throws IOException { return pixelFormats; } + public synchronized List channelLayouts() throws IOException { + checkIfFFmpeg(); + + if (this.channelLayouts == null) { + Process p = runFunc.run(ImmutableList.of(path, "-layouts")); + + try { + BufferedReader r = wrapInReader(p); + this.channelLayouts = Collections.unmodifiableList(InfoParser.parseLayouts(r)); + } finally { + p.destroy(); + } + + } + + return this.channelLayouts; + } + protected ProgressParser createProgressParser(ProgressListener listener) throws IOException { // TODO In future create the best kind for this OS, unix socket, named pipe, or TCP. try { diff --git a/src/main/java/net/bramp/ffmpeg/info/ChannelLayout.java b/src/main/java/net/bramp/ffmpeg/info/ChannelLayout.java new file mode 100644 index 00000000..1f4fc62b --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/ChannelLayout.java @@ -0,0 +1,5 @@ +package net.bramp.ffmpeg.info; + +public interface ChannelLayout { + String getName(); +} diff --git a/src/main/java/net/bramp/ffmpeg/info/IndividualChannel.java b/src/main/java/net/bramp/ffmpeg/info/IndividualChannel.java new file mode 100644 index 00000000..38f90541 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/IndividualChannel.java @@ -0,0 +1,39 @@ +package net.bramp.ffmpeg.info; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +public class IndividualChannel implements ChannelLayout { + private final String name; + private final String description; + + public IndividualChannel(String name, String description) { + this.name = name; + this.description = description; + + } + + @Override + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + @Override + public String toString() { + return name + " " + description; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } +} diff --git a/src/main/java/net/bramp/ffmpeg/info/InfoParser.java b/src/main/java/net/bramp/ffmpeg/info/InfoParser.java new file mode 100644 index 00000000..6898ebcc --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/InfoParser.java @@ -0,0 +1,48 @@ +package net.bramp.ffmpeg.info; + +import java.io.BufferedReader; +import java.io.IOException; +import java.util.*; + +public final class InfoParser { + private InfoParser() { + throw new AssertionError("No instances for you!"); + } + + public static List parseLayouts(BufferedReader r) throws IOException { + Map individualChannelLookup = new HashMap<>(); + List channelLayouts = new ArrayList<>(); + + String line; + boolean parsingIndividualChannels = false; + boolean parsingChannelLayouts = false; + + while ((line = r.readLine()) != null) { + if (line.startsWith("NAME") || line.isEmpty()) { + // Skip header and empty lines + continue; + } else if (line.equals("Individual channels:")) { + parsingIndividualChannels = true; + parsingChannelLayouts = false; + } else if (line.equals("Standard channel layouts:")) { + parsingIndividualChannels = false; + parsingChannelLayouts = true; + } else if (parsingIndividualChannels) { + String[] s = line.split(" ", 2); + IndividualChannel individualChannel = new IndividualChannel(s[0], s[1].trim()); + channelLayouts.add(individualChannel); + individualChannelLookup.put(individualChannel.getName(), individualChannel); + } else if (parsingChannelLayouts) { + String[] s = line.split(" ", 2); + List decomposition = new ArrayList<>(); + for (String channelName : s[1].trim().split("\\+")) { + decomposition.add(individualChannelLookup.get(channelName)); + } + + channelLayouts.add(new StandardChannelLayout(s[0], Collections.unmodifiableList(decomposition))); + } + } + + return channelLayouts; + } +} diff --git a/src/main/java/net/bramp/ffmpeg/info/StandardChannelLayout.java b/src/main/java/net/bramp/ffmpeg/info/StandardChannelLayout.java new file mode 100644 index 00000000..c09224b2 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/info/StandardChannelLayout.java @@ -0,0 +1,40 @@ +package net.bramp.ffmpeg.info; + +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +import java.util.List; + +public class StandardChannelLayout implements ChannelLayout { + private final String name; + private final List decomposition; + + public StandardChannelLayout(String name, List decomposition) { + this.name = name; + this.decomposition = decomposition; + } + + @Override + public String getName() { + return name; + } + + public List getDecomposition() { + return decomposition; + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } + + @Override + public int hashCode() { + return HashCodeBuilder.reflectionHashCode(this); + } +} diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java index 91e31f6f..bbc0ec35 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegTest.java @@ -12,6 +12,7 @@ import net.bramp.ffmpeg.fixtures.Codecs; import net.bramp.ffmpeg.fixtures.Filters; import net.bramp.ffmpeg.fixtures.Formats; +import net.bramp.ffmpeg.fixtures.ChannelLayouts; import net.bramp.ffmpeg.fixtures.PixelFormats; import net.bramp.ffmpeg.info.Filter; import net.bramp.ffmpeg.lang.NewProcessAnswer; @@ -41,6 +42,8 @@ public void before() throws IOException { .thenAnswer(new NewProcessAnswer("ffmpeg-version", "ffmpeg-no-such-file")); when(runFunc.run(argThatHasItem("-filters"))) .thenAnswer(new NewProcessAnswer("ffmpeg-filters")); + when(runFunc.run(argThatHasItem("-layouts"))) + .thenAnswer(new NewProcessAnswer("ffmpeg-layouts")); ffmpeg = new FFmpeg(runFunc); } @@ -115,4 +118,12 @@ public void testFilters() throws IOException { verify(runFunc, times(1)).run(argThatHasItem("-filters")); } + + @Test + public void testLayouts() throws IOException { + assertEquals(ChannelLayouts.CHANNEL_LAYOUTS, ffmpeg.channelLayouts()); + assertEquals(ChannelLayouts.CHANNEL_LAYOUTS, ffmpeg.channelLayouts()); + + verify(runFunc, times(1)).run(argThatHasItem("-layouts")); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/ChannelLayouts.java b/src/test/java/net/bramp/ffmpeg/fixtures/ChannelLayouts.java new file mode 100644 index 00000000..e90219f0 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/fixtures/ChannelLayouts.java @@ -0,0 +1,128 @@ +package net.bramp.ffmpeg.fixtures; + +import com.google.common.collect.ImmutableList; +import net.bramp.ffmpeg.info.ChannelLayout; +import net.bramp.ffmpeg.info.IndividualChannel; +import net.bramp.ffmpeg.info.StandardChannelLayout; + +import java.util.*; + +/** + * Class that contains all layouts as defined in the unit tests This should not be used as a concise + * list of available layouts, as every install of ffmpeg is different. Call ffmpeg.layouts() to + * discover. + * + * @author euklios + */ +public final class ChannelLayouts { + + private ChannelLayouts() { + throw new AssertionError("No instances for you!"); + } + + private static final IndividualChannel FL = new IndividualChannel("FL", "front left"); + private static final IndividualChannel FR = new IndividualChannel("FR", "front right"); + private static final IndividualChannel FC = new IndividualChannel("FC", "front center"); + private static final IndividualChannel LFE = new IndividualChannel("LFE", "low frequency"); + private static final IndividualChannel BL = new IndividualChannel("BL", "back left"); + private static final IndividualChannel BR = new IndividualChannel("BR", "back right"); + private static final IndividualChannel FLC = new IndividualChannel("FLC", "front left-of-center"); + private static final IndividualChannel FRC = new IndividualChannel("FRC", "front right-of-center"); + private static final IndividualChannel BC = new IndividualChannel("BC", "back center"); + private static final IndividualChannel SL = new IndividualChannel("SL", "side left"); + private static final IndividualChannel SR = new IndividualChannel("SR", "side right"); + private static final IndividualChannel TC = new IndividualChannel("TC", "top center"); + private static final IndividualChannel TFL = new IndividualChannel("TFL", "top front left"); + private static final IndividualChannel TFC = new IndividualChannel("TFC", "top front center"); + private static final IndividualChannel TFR = new IndividualChannel("TFR", "top front right"); + private static final IndividualChannel TBL = new IndividualChannel("TBL", "top back left"); + private static final IndividualChannel TBC = new IndividualChannel("TBC", "top back center"); + private static final IndividualChannel TBR = new IndividualChannel("TBR", "top back right"); + private static final IndividualChannel DL = new IndividualChannel("DL", "downmix left"); + private static final IndividualChannel DR = new IndividualChannel("DR", "downmix right"); + private static final IndividualChannel WL = new IndividualChannel("WL", "wide left"); + private static final IndividualChannel WR = new IndividualChannel("WR", "wide right"); + private static final IndividualChannel SDL = new IndividualChannel("SDL", "surround direct left"); + private static final IndividualChannel SDR = new IndividualChannel("SDR", "surround direct right"); + private static final IndividualChannel LFE2 = new IndividualChannel("LFE2", "low frequency 2"); + private static final IndividualChannel TSL = new IndividualChannel("TSL", "top side left"); + private static final IndividualChannel TSR = new IndividualChannel("TSR", "top side right"); + private static final IndividualChannel BFC = new IndividualChannel("BFC", "bottom front center"); + private static final IndividualChannel BFL = new IndividualChannel("BFL", "bottom front left"); + private static final IndividualChannel BFR = new IndividualChannel("BFR", "bottom front right"); + + public static final ImmutableList CHANNEL_LAYOUTS = + new ImmutableList.Builder() + .add( + FL, + FR, + FC, + LFE, + BL, + BR, + FLC, + FRC, + BC, + SL, + SR, + TC, + TFL, + TFC, + TFR, + TBL, + TBC, + TBR, + DL, + DR, + WL, + WR, + SDL, + SDR, + LFE2, + TSL, + TSR, + BFC, + BFL, + BFR, +new StandardChannelLayout("mono", decomposition(FC)), +new StandardChannelLayout("stereo", decomposition(FL, FR)), +new StandardChannelLayout("2.1", decomposition(FL, FR, LFE)), +new StandardChannelLayout("3.0", decomposition(FL, FR, FC)), +new StandardChannelLayout("3.0(back)", decomposition(FL, FR, BC)), +new StandardChannelLayout("4.0", decomposition(FL, FR, FC, BC)), +new StandardChannelLayout("quad", decomposition(FL, FR, BL, BR)), +new StandardChannelLayout("quad(side)", decomposition(FL, FR, SL, SR)), +new StandardChannelLayout("3.1", decomposition(FL, FR, FC, LFE)), +new StandardChannelLayout("5.0", decomposition(FL, FR, FC, BL, BR)), +new StandardChannelLayout("5.0(side)", decomposition(FL, FR, FC, SL, SR)), +new StandardChannelLayout("4.1", decomposition(FL, FR, FC, LFE, BC)), +new StandardChannelLayout("5.1", decomposition(FL, FR, FC, LFE, BL, BR)), +new StandardChannelLayout("5.1(side)", decomposition(FL, FR, FC, LFE, SL, SR)), +new StandardChannelLayout("6.0", decomposition(FL, FR, FC, BC, SL, SR)), +new StandardChannelLayout("6.0(front)", decomposition(FL, FR, FLC, FRC, SL, SR)), +new StandardChannelLayout("hexagonal", decomposition(FL, FR, FC, BL, BR, BC)), +new StandardChannelLayout("6.1", decomposition(FL, FR, FC, LFE, BC, SL, SR)), +new StandardChannelLayout("6.1(back)", decomposition(FL, FR, FC, LFE, BL, BR, BC)), +new StandardChannelLayout("6.1(front)", decomposition(FL, FR, LFE, FLC, FRC, SL, SR)), +new StandardChannelLayout("7.0", decomposition(FL, FR, FC, BL, BR, SL, SR)), +new StandardChannelLayout("7.0(front)", decomposition(FL, FR, FC, FLC, FRC, SL, SR)), +new StandardChannelLayout("7.1", decomposition(FL, FR, FC, LFE, BL, BR, SL, SR)), +new StandardChannelLayout("7.1(wide)", decomposition(FL, FR, FC, LFE, BL, BR, FLC, FRC)), +new StandardChannelLayout("7.1(wide-side)", decomposition(FL, FR, FC, LFE, FLC, FRC, SL, SR)), +new StandardChannelLayout("7.1(top)", decomposition(FL, FR, FC, LFE, BL, BR, TFL, TFR)), +new StandardChannelLayout("octagonal", decomposition(FL, FR, FC, BL, BR, BC, SL, SR)), +new StandardChannelLayout("cube", decomposition(FL, FR, BL, BR, TFL, TFR, TBL, TBR)), +new StandardChannelLayout("hexadecagonal", decomposition(FL, FR, FC, BL, BR, BC, SL, SR, TFL, TFC, TFR, TBL, TBC, TBR, WL, WR)), +new StandardChannelLayout("downmix", decomposition(DL, DR)), +new StandardChannelLayout("22.2", decomposition(FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, LFE2, TSL, TSR, BFC, BFL, BFR)) + ) + .build(); + + private static List decomposition(IndividualChannel... channels) { + List decomposition = new ArrayList<>(); + + Collections.addAll(decomposition, channels); + + return Collections.unmodifiableList(decomposition); + } +} diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-layouts b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-layouts new file mode 100644 index 00000000..e9254123 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffmpeg-layouts @@ -0,0 +1,66 @@ +Individual channels: +NAME DESCRIPTION +FL front left +FR front right +FC front center +LFE low frequency +BL back left +BR back right +FLC front left-of-center +FRC front right-of-center +BC back center +SL side left +SR side right +TC top center +TFL top front left +TFC top front center +TFR top front right +TBL top back left +TBC top back center +TBR top back right +DL downmix left +DR downmix right +WL wide left +WR wide right +SDL surround direct left +SDR surround direct right +LFE2 low frequency 2 +TSL top side left +TSR top side right +BFC bottom front center +BFL bottom front left +BFR bottom front right + +Standard channel layouts: +NAME DECOMPOSITION +mono FC +stereo FL+FR +2.1 FL+FR+LFE +3.0 FL+FR+FC +3.0(back) FL+FR+BC +4.0 FL+FR+FC+BC +quad FL+FR+BL+BR +quad(side) FL+FR+SL+SR +3.1 FL+FR+FC+LFE +5.0 FL+FR+FC+BL+BR +5.0(side) FL+FR+FC+SL+SR +4.1 FL+FR+FC+LFE+BC +5.1 FL+FR+FC+LFE+BL+BR +5.1(side) FL+FR+FC+LFE+SL+SR +6.0 FL+FR+FC+BC+SL+SR +6.0(front) FL+FR+FLC+FRC+SL+SR +hexagonal FL+FR+FC+BL+BR+BC +6.1 FL+FR+FC+LFE+BC+SL+SR +6.1(back) FL+FR+FC+LFE+BL+BR+BC +6.1(front) FL+FR+LFE+FLC+FRC+SL+SR +7.0 FL+FR+FC+BL+BR+SL+SR +7.0(front) FL+FR+FC+FLC+FRC+SL+SR +7.1 FL+FR+FC+LFE+BL+BR+SL+SR +7.1(wide) FL+FR+FC+LFE+BL+BR+FLC+FRC +7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR +7.1(top) FL+FR+FC+LFE+BL+BR+TFL+TFR +octagonal FL+FR+FC+BL+BR+BC+SL+SR +cube FL+FR+BL+BR+TFL+TFR+TBL+TBR +hexadecagonal FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR +downmix DL+DR +22.2 FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR From e196dc54fc9e3b8b7e08bb47a4501cda81f8eaf4 Mon Sep 17 00:00:00 2001 From: Joel Widmer Date: Mon, 11 Mar 2024 21:44:15 +0100 Subject: [PATCH 051/101] Add labels to issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 1 + .github/ISSUE_TEMPLATE/feature_request.md | 1 + .github/ISSUE_TEMPLATE/question.md | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index f50b4cb9..9094583d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,7 @@ --- name: Bug report about: Create a report to help us improve +labels: bug --- diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e36eff9b..ade76542 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,7 @@ --- name: Feature request about: Suggest an idea for this project +labels: enhancement --- diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index d14ef669..0aa9e2f2 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -1,6 +1,7 @@ --- name: Question about: Have a question on how to use ffmpeg-cli-wrapper +labels: question --- From 06165410d1b048931edc6e647d5747936a4d54df Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Mon, 11 Mar 2024 14:55:36 -0700 Subject: [PATCH 052/101] Create FUNDING.yml --- .github/FUNDING.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..b1c85456 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: bramp +buy_me_a_coffee: bramp From f315cfc3d3dcade7f2ee16d2da284e48e5981f67 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Tue, 12 Mar 2024 07:56:54 -0700 Subject: [PATCH 053/101] Bump all the project/plugin deps to their latest versions. (#317) * Updated the README.md. * Bump all the project/plugin deps to their latest versions. * Updated the use of javac-errorprone to latest. * Fix various issues detected by errorprone. * Disable error prone on Java 11 and below. --- README.md | 92 ++++++------- pom.xml | 128 +++++++++++++----- .../java/net/bramp/ffmpeg/FFmpegUtils.java | 5 + .../java/net/bramp/ffmpeg/Preconditions.java | 3 +- .../builder/AbstractFFmpegStreamBuilder.java | 2 +- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 21 +-- .../ffmpeg/builder/FFmpegOutputBuilder.java | 5 +- .../bramp/ffmpeg/gson/NamedBitsetAdapter.java | 2 +- .../java/net/bramp/ffmpeg/info/Codec.java | 2 +- .../net/bramp/ffmpeg/info/FilterPattern.java | 4 +- .../java/net/bramp/ffmpeg/info/Format.java | 2 +- .../net/bramp/ffmpeg/info/InfoParser.java | 4 +- .../net/bramp/ffmpeg/io/ProcessUtils.java | 2 + .../java/net/bramp/ffmpeg/job/FFmpegJob.java | 2 + .../bramp/ffmpeg/job/SinglePassFFmpegJob.java | 1 + .../bramp/ffmpeg/job/TwoPassFFmpegJob.java | 1 + src/main/java/net/bramp/ffmpeg/nut/Frame.java | 2 + .../bramp/ffmpeg/nut/MainHeaderPacket.java | 2 +- .../bramp/ffmpeg/options/EncodingOptions.java | 2 + .../ffmpeg/options/MainEncodingOptions.java | 2 + .../AbstractSocketProgressParser.java | 10 +- .../net/bramp/ffmpeg/progress/Progress.java | 3 +- .../java/net/bramp/ffmpeg/FFmpegAvTest.java | 2 - .../net/bramp/ffmpeg/FFmpegExecutorTest.java | 4 - .../net/bramp/ffmpeg/FFmpegUtilsTest.java | 6 +- src/test/java/net/bramp/ffmpeg/Helper.java | 6 - .../java/net/bramp/ffmpeg/ReadmeTest.java | 1 + .../ffmpeg/builder/FFmpegBuilderTest.java | 7 +- .../RawHandlerStreamToAudioFormatTest.java | 2 +- .../progress/UdpProgressParserTest.java | 1 - 30 files changed, 197 insertions(+), 129 deletions(-) diff --git a/README.md b/README.md index 18faa42f..08402a2f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ -FFmpeg Java -=========== +# FFmpeg CLI Wrapper for Java -by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2014,2016 +by Andrew Brampton ([bramp.net](https://bramp.net)) (c) 2013-2024 [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/bramp) -A fluent interface to running FFmpeg from Java. +A fluent interface for running FFmpeg from Java. ![Java](https://img.shields.io/badge/Java-8+-brightgreen.svg) [![Build Status](https://github.com/bramp/ffmpeg-cli-wrapper/actions/workflows/maven.yml/badge.svg)](https://github.com/bramp/ffmpeg-cli-wrapper/actions/workflows/maven.yml) @@ -15,8 +14,7 @@ A fluent interface to running FFmpeg from Java. [GitHub](https://github.com/bramp/ffmpeg-cli-wrapper) | [API docs](https://bramp.github.io/ffmpeg-cli-wrapper/) -Install -------- +## Install We currently support Java 8 and above. Use Maven to install the dependency. @@ -28,12 +26,12 @@ We currently support Java 8 and above. Use Maven to install the dependency. ``` -Usage ------ +## Usage ### Video Encoding Code: + ```java FFmpeg ffmpeg = new FFmpeg("/path/to/ffmpeg"); FFprobe ffprobe = new FFprobe("/path/to/ffprobe"); @@ -73,64 +71,67 @@ executor.createTwoPassJob(builder).run(); ### Get Media Information Code: + ```java FFprobe ffprobe = new FFprobe("/path/to/ffprobe"); FFmpegProbeResult probeResult = ffprobe.probe("input.mp4"); FFmpegFormat format = probeResult.getFormat(); System.out.format("%nFile: '%s' ; Format: '%s' ; Duration: %.3fs", - format.filename, - format.format_long_name, - format.duration + format.filename, + format.format_long_name, + format.duration ); FFmpegStream stream = probeResult.getStreams().get(0); System.out.format("%nCodec: '%s' ; Width: %dpx ; Height: %dpx", - stream.codec_long_name, - stream.width, - stream.height + stream.codec_long_name, + stream.width, + stream.height ); ``` ### Get progress while encoding + ```java FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); FFmpegProbeResult in = ffprobe.probe("input.flv"); FFmpegBuilder builder = new FFmpegBuilder() - .setInput(in) // Or filename - .addOutput("output.mp4") - .done(); + .setInput(in) // Or filename + .addOutput("output.mp4") + .done(); FFmpegJob job = executor.createJob(builder, new ProgressListener() { - // Using the FFmpegProbeResult determine the duration of the input - final double duration_ns = in.getFormat().duration * TimeUnit.SECONDS.toNanos(1); - - @Override - public void progress(Progress progress) { - double percentage = progress.out_time_ns / duration_ns; - - // Print out interesting information about the progress - System.out.println(String.format( - "[%.0f%%] status:%s frame:%d time:%s ms fps:%.0f speed:%.2fx", - percentage * 100, - progress.status, - progress.frame, - FFmpegUtils.toTimecode(progress.out_time_ns, TimeUnit.NANOSECONDS), - progress.fps.doubleValue(), - progress.speed - )); - } + // Using the FFmpegProbeResult determine the duration of the input + final double duration_ns = in.getFormat().duration * TimeUnit.SECONDS.toNanos(1); + + @Override + public void progress(Progress progress) { + double percentage = progress.out_time_ns / duration_ns; + + // Print out interesting information about the progress + System.out.println(String.format( + "[%.0f%%] status:%s frame:%d time:%s ms fps:%.0f speed:%.2fx", + percentage * 100, + progress.status, + progress.frame, + FFmpegUtils.toTimecode(progress.out_time_ns, TimeUnit.NANOSECONDS), + progress.fps.doubleValue(), + progress.speed + )); + } }); job.run(); ``` -Building & Releasing --------------- +## Building & Releasing + If you wish to make changes, then building and releasing is simple: + ```bash # To build mvn @@ -148,8 +149,7 @@ git checkout ffmpeg-0.x mvn clean javadoc:aggregate scm-publish:publish-scm ``` -Bumpings Deps ------ +## Bumpings Deps ```bash # Update Maven Plugins @@ -159,15 +159,13 @@ mvn versions:display-plugin-updates mvn versions:display-dependency-updates ``` -Install FFmpeg on Ubuntu ------------------ +## Install FFmpeg on Ubuntu We only the support the original FFmpeg, not the libav version. Before Ubuntu 12.04, and in 15.04 and later the original FFmpeg is shipped. If you have to run on a version with libav, you can install FFmpeg from a PPA, or using the static build. More information [here](http://askubuntu.com/q/373322/34845) -Get involved! -------------- +## Get involved We welcome contributions. Please check the [issue tracker](https://github.com/bramp/ffmpeg-cli-wrapper/issues). If you see something you wish to work on, please either comment on the issue, or just send a pull @@ -175,10 +173,10 @@ request. Want to work on something else, then just open a issue, and we can disc documentation improvements, code cleanup, or new features. Please be mindful that all work is done on a volunteer basis, thus we can be slow to reply. -Licence (Simplified BSD License) --------------------------------- -``` -Copyright (c) 2016-2022, Andrew Brampton +## Licence (Simplified BSD License) + +```plaintext +Copyright (c) 2013-2024, Andrew Brampton All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/pom.xml b/pom.xml index 59d91669..211c649c 100644 --- a/pom.xml +++ b/pom.xml @@ -54,32 +54,32 @@ org.slf4j slf4j-api - 2.0.9 + 2.0.12 com.github.spotbugs spotbugs-annotations - 4.8.0 + 4.8.3 com.google.errorprone error_prone_annotations - 2.23.0 + 2.25.0 com.google.guava guava - 32.1.3-jre + 33.0.0-jre commons-io commons-io - 2.15.0 + 2.15.1 org.apache.commons commons-lang3 - 3.13.0 + 3.14.0 com.google.code.gson @@ -96,7 +96,7 @@ ch.qos.logback logback-classic - 1.4.12 + 1.5.3 @@ -107,7 +107,7 @@ org.mockito mockito-core - 5.6.0 + 5.11.0 org.hamcrest @@ -223,7 +223,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.3.1 + 3.3.2 org.apache.maven.plugins @@ -243,7 +243,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.1 + 3.2.5 org.codehaus.mojo @@ -258,7 +258,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.11.0 + 3.12.1 net.revelc.code @@ -278,7 +278,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.0 + 3.6.3 org.apache.maven.plugins @@ -293,7 +293,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.1.0 + 3.2.0 org.apache.maven.plugins @@ -308,7 +308,7 @@ com.spotify.fmt fmt-maven-plugin - 2.21.1 + 2.23 org.apache.maven.plugins @@ -324,8 +324,6 @@ ${base.java.version} ${base.java.version} - javac-with-errorprone - true true true true @@ -336,20 +334,6 @@ -Xlint:all - - - org.codehaus.plexus - plexus-compiler-javac-errorprone - 2.11.1 - - - - com.google.errorprone - error_prone_core - 2.12.1 - - org.apache.maven.plugins @@ -480,7 +464,7 @@ org.codehaus.mojo extra-enforcer-rules - 1.5.1 + 1.8.0 @@ -541,13 +525,13 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.4.5 + 3.5.0 org.codehaus.mojo versions-maven-plugin - 2.16.1 + 2.16.2 @@ -592,7 +576,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.21.0 + 3.21.2 true @@ -665,7 +649,7 @@ org.apache.maven.plugins maven-jxr-plugin - 3.3.1 + 3.3.2 true @@ -683,7 +667,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 3.2.1 + 3.2.5 ${project.reporting.outputDirectory}/testresults @@ -734,8 +718,8 @@ - + Java 9+ @@ -745,9 +729,43 @@ ${base.java.version} + + + + Java 11+ + + [11,) + + + + org.apache.maven.plugins + maven-compiler-plugin + + true + + + -XDcompilePolicy=simple + -Xplugin:ErrorProne + + + + com.google.errorprone + error_prone_core + 2.25.0 + + + + + + com.spotify.fmt fmt-maven-plugin @@ -762,5 +780,41 @@ + + + Java 16+ + + [16,) + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + + -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED + + + + + + + diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java index fb42e733..c1f4c26d 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java @@ -5,6 +5,7 @@ import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; import com.google.common.base.CharMatcher; +import com.google.errorprone.annotations.InlineMe; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.concurrent.TimeUnit; @@ -36,6 +37,10 @@ public final class FFmpegUtils { * @deprecated please use #toTimecode() instead. */ @Deprecated + @InlineMe( + replacement = "FFmpegUtils.toTimecode(milliseconds, MILLISECONDS)", + imports = "net.bramp.ffmpeg.FFmpegUtils", + staticImports = "java.util.concurrent.TimeUnit.MILLISECONDS") public static String millisecondsToString(long milliseconds) { return toTimecode(milliseconds, MILLISECONDS); } diff --git a/src/main/java/net/bramp/ffmpeg/Preconditions.java b/src/main/java/net/bramp/ffmpeg/Preconditions.java index b7910f99..04e20b19 100644 --- a/src/main/java/net/bramp/ffmpeg/Preconditions.java +++ b/src/main/java/net/bramp/ffmpeg/Preconditions.java @@ -3,6 +3,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.base.Ascii; import com.google.common.base.CharMatcher; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; @@ -41,7 +42,7 @@ public static String checkNotEmpty(String arg, @Nullable Object errorMessage) { */ public static URI checkValidStream(URI uri) throws IllegalArgumentException { String scheme = checkNotNull(uri).getScheme(); - scheme = checkNotNull(scheme, "URI is missing a scheme").toLowerCase(); + scheme = Ascii.toLowerCase(checkNotNull(scheme, "URI is missing a scheme")); if (rtps.contains(scheme)) { return uri; diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index e7fbb3d3..ea7721a5 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -597,7 +597,7 @@ protected List build(FFmpegBuilder parent, int pass) { } else if (uri != null) { args.add(uri.toString()); } else { - assert (false); + assert false; } return args.build(); diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index d3bf6bea..3cf4913a 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -4,6 +4,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; +import com.google.common.base.Ascii; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; @@ -32,10 +33,10 @@ public enum Strict { UNOFFICIAL, // allow unofficial extensions EXPERIMENTAL; - // ffmpeg command line requires these options in lower case @Override public String toString() { - return name().toLowerCase(); + // ffmpeg command line requires these options in lower case + return Ascii.toLowerCase(name()); } } @@ -52,7 +53,8 @@ public enum Verbosity { @Override public String toString() { - return name().toLowerCase(); + // ffmpeg command line requires these options in lower case + return Ascii.toLowerCase(name()); } } @@ -179,8 +181,8 @@ public FFmpegBuilder addProgress(URI uri) { /** * Sets the complex filter flag. * - * @param filter - * @return + * @param filter the complex filter string + * @return this */ public FFmpegBuilder setComplexFilter(String filter) { this.complexFilter = checkNotEmpty(filter, "filter must not be empty"); @@ -190,8 +192,8 @@ public FFmpegBuilder setComplexFilter(String filter) { /** * Sets the audio filter flag. * - * @param filter - * @return + * @param filter the audio filter string + * @return this */ public FFmpegBuilder setAudioFilter(String filter) { this.audioFilter = checkNotEmpty(filter, "filter must not be empty"); @@ -201,8 +203,8 @@ public FFmpegBuilder setAudioFilter(String filter) { /** * Sets the video filter flag. * - * @param filter - * @return + * @param filter the video filter string + * @return this */ public FFmpegBuilder setVideoFilter(String filter) { this.videoFilter = checkNotEmpty(filter, "filter must not be empty"); @@ -211,6 +213,7 @@ public FFmpegBuilder setVideoFilter(String filter) { /** * Sets vbr quality when decoding mp3 output. + * * @param quality the quality between 0 and 9. Where 0 is best. * @return FFmpegBuilder */ diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java index 2765f796..939b05c9 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java @@ -6,6 +6,8 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; +import com.google.errorprone.annotations.InlineMe; + import java.net.URI; import java.util.List; import java.util.regex.Pattern; @@ -113,7 +115,8 @@ public FFmpegOutputBuilder setVideoFilter(String filter) { * @deprecated use {@link #setAudioSampleFormat} instead. */ @Deprecated - public FFmpegOutputBuilder setAudioBitDepth(String bit_depth) { + @InlineMe(replacement = "this.setAudioSampleFormat(bit_depth)") + final public FFmpegOutputBuilder setAudioBitDepth(String bit_depth) { return setAudioSampleFormat(bit_depth); } diff --git a/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java b/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java index 2435b225..7af7a44a 100644 --- a/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java +++ b/src/main/java/net/bramp/ffmpeg/gson/NamedBitsetAdapter.java @@ -60,7 +60,7 @@ protected Optional readBoolean(JsonReader reader) throws IOException { protected void setField(T target, String name, boolean value) throws IllegalAccessException { try { Field f = clazz.getField(name); - if ((boolean.class.equals(f.getType()))) { + if (boolean.class.equals(f.getType())) { f.setBoolean(target, value); } else if (int.class.equals(f.getType())) { f.setInt(target, value ? 1 : 0); diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index 2b168eef..c94a0bc2 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -45,7 +45,7 @@ public Codec(String name, String longName, String flags) { this.longName = Preconditions.checkNotNull(longName).trim(); Preconditions.checkNotNull(flags); - Preconditions.checkArgument(flags.length() == 6, "Format flags is invalid '{}'", flags); + Preconditions.checkArgument(flags.length() == 6, "Format flags is invalid '%s'", flags); this.canDecode = flags.charAt(0) == 'D'; this.canEncode = flags.charAt(1) == 'E'; diff --git a/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java b/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java index 049e04e9..ee50288f 100644 --- a/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java +++ b/src/main/java/net/bramp/ffmpeg/info/FilterPattern.java @@ -21,7 +21,9 @@ public FilterPattern(String pattern) { this.variableStreams = pattern.contains("N"); List streams = new ArrayList<>(); - for (char c : pattern.toCharArray()) { + for (int i = 0; i < pattern.length(); i++) { + final char c = pattern.charAt(i); + if (c == '|' || c == 'N') { // These symbols are handled separately continue; diff --git a/src/main/java/net/bramp/ffmpeg/info/Format.java b/src/main/java/net/bramp/ffmpeg/info/Format.java index 31460b20..64bbd82a 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Format.java +++ b/src/main/java/net/bramp/ffmpeg/info/Format.java @@ -32,7 +32,7 @@ public Format(String name, String longName, String flags) { this.longName = Preconditions.checkNotNull(longName).trim(); Preconditions.checkNotNull(flags); - Preconditions.checkArgument(flags.length() == 2, "Format flags is invalid '{}'", flags); + Preconditions.checkArgument(flags.length() == 2, "Format flags is invalid '%s'", flags); canDemux = flags.charAt(0) == 'D'; canMux = flags.charAt(1) == 'E'; } diff --git a/src/main/java/net/bramp/ffmpeg/info/InfoParser.java b/src/main/java/net/bramp/ffmpeg/info/InfoParser.java index 6898ebcc..8a40ced7 100644 --- a/src/main/java/net/bramp/ffmpeg/info/InfoParser.java +++ b/src/main/java/net/bramp/ffmpeg/info/InfoParser.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.util.*; +import com.google.common.base.Splitter; + public final class InfoParser { private InfoParser() { throw new AssertionError("No instances for you!"); @@ -35,7 +37,7 @@ public static List parseLayouts(BufferedReader r) throws IOExcept } else if (parsingChannelLayouts) { String[] s = line.split(" ", 2); List decomposition = new ArrayList<>(); - for (String channelName : s[1].trim().split("\\+")) { + for (String channelName : Splitter.on('+').split(s[1].trim())) { decomposition.add(individualChannelLookup.get(channelName)); } diff --git a/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java b/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java index 2869cb57..f51f8224 100644 --- a/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java +++ b/src/main/java/net/bramp/ffmpeg/io/ProcessUtils.java @@ -4,6 +4,8 @@ import java.util.concurrent.TimeoutException; /** + * A collection of utility methods for dealing with processes. + * * @author bramp */ public final class ProcessUtils { diff --git a/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java index 14404233..47298193 100644 --- a/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/FFmpegJob.java @@ -7,6 +7,8 @@ import net.bramp.ffmpeg.progress.ProgressListener; /** + * A FFmpegJob is a single job that can be run by FFmpeg. It can be a single pass, or a two pass job. + * * @author bramp */ public abstract class FFmpegJob implements Runnable { diff --git a/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java index 13662d2c..2094fc9a 100644 --- a/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/SinglePassFFmpegJob.java @@ -25,6 +25,7 @@ public SinglePassFFmpegJob( // Build the args now (but throw away the results). This allows the illegal arguments to be // caught early, but also allows the ffmpeg command to actually alter the arguments when // running. + @SuppressWarnings("unused") List unused = this.builder.build(); } diff --git a/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java b/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java index 8a03ad54..9b4c930e 100644 --- a/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java +++ b/src/main/java/net/bramp/ffmpeg/job/TwoPassFFmpegJob.java @@ -35,6 +35,7 @@ public TwoPassFFmpegJob( // Build the args now (but throw away the results). This allows the illegal arguments to be // caught early, but also allows the ffmpeg command to actually alter the arguments when // running. + @SuppressWarnings("unused") List unused = this.builder.setPass(1).build(); } diff --git a/src/main/java/net/bramp/ffmpeg/nut/Frame.java b/src/main/java/net/bramp/ffmpeg/nut/Frame.java index e50f1cb9..961b7f9f 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/Frame.java +++ b/src/main/java/net/bramp/ffmpeg/nut/Frame.java @@ -1,6 +1,7 @@ package net.bramp.ffmpeg.nut; import com.google.common.base.MoreObjects; + import java.io.EOFException; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -145,6 +146,7 @@ public void read(NutReader nut, NutDataInputStream in, int code) throws IOExcept } if ((flags & FLAG_CHECKSUM) == FLAG_CHECKSUM) { + @SuppressWarnings("unused") long checksum = in.readInt(); // TODO Test checksum } diff --git a/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java b/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java index 16c6c47a..60fca458 100644 --- a/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java +++ b/src/main/java/net/bramp/ffmpeg/nut/MainHeaderPacket.java @@ -94,7 +94,7 @@ protected void readBody(NutDataInputStream in) throws IOException { if (fields > 5) { count = in.readVarLong(); } else { - count = mul - size; + count = (long) mul - size; } if (fields > 6) { match = in.readSignedVarInt(); diff --git a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java index bb2528ad..b93f4f47 100644 --- a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java @@ -3,6 +3,8 @@ import java.beans.ConstructorProperties; /** + * Audio, Video and Main encoding options for ffmpeg. + * * @author bramp */ public class EncodingOptions { diff --git a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java index 8be785d6..86547267 100644 --- a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java @@ -3,6 +3,8 @@ import java.beans.ConstructorProperties; /** + * Encoding options that are specific to the main output. + * * @author bramp */ public class MainEncodingOptions { diff --git a/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java b/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java index bf174416..e3f3095e 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java +++ b/src/main/java/net/bramp/ffmpeg/progress/AbstractSocketProgressParser.java @@ -25,11 +25,11 @@ public AbstractSocketProgressParser(ProgressListener listener) { * *

    TODO Move this method to somewhere better. * - * @param scheme - * @param address - * @param port - * @return - * @throws URISyntaxException + * @param scheme The scheme to use (e.g. "tcp", "udp", "rtp", "http") + * @param address The address of the server + * @param port The port to connect to + * @return A URI representing the address and port + * @throws URISyntaxException if the URI is invalid */ @CheckReturnValue static URI createUri(String scheme, InetAddress address, int port) throws URISyntaxException { diff --git a/src/main/java/net/bramp/ffmpeg/progress/Progress.java b/src/main/java/net/bramp/ffmpeg/progress/Progress.java index f43bdc80..e97e133c 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/Progress.java +++ b/src/main/java/net/bramp/ffmpeg/progress/Progress.java @@ -208,7 +208,8 @@ public boolean isEnd() { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (!(o instanceof Progress)) return false; + Progress progress1 = (Progress) o; return frame == progress1.frame && bitrate == progress1.bitrate diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java index b287ecf0..10a19178 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegAvTest.java @@ -39,8 +39,6 @@ public void testVersion() throws Exception { /** * We don't support avconv, so all methods should throw an exception. - * - * @throws IOException */ @Test(expected = IllegalArgumentException.class) public void testProbeVideo() throws IOException { diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java index 72519222..31106c62 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java @@ -180,10 +180,6 @@ public void testMetaTags() throws InterruptedException, ExecutionException, IOEx /** * Test if addStdoutOutput() actually works, and the output can be correctly captured. - * - * @throws InterruptedException - * @throws ExecutionException - * @throws IOException */ @Test public void testStdout() throws InterruptedException, ExecutionException, IOException { diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java index b13a0474..4993fb1b 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java @@ -14,7 +14,7 @@ public void testAbstractUtilsClass() { } @Test - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "InlineMeInliner"}) public void testMillisecondsToString() { assertEquals("00:01:03.123", millisecondsToString(63123)); assertEquals("00:01:03", millisecondsToString(63000)); @@ -24,13 +24,13 @@ public void testMillisecondsToString() { } @Test(expected = IllegalArgumentException.class) - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "InlineMeInliner"}) public void testMillisecondsToStringNegative() { millisecondsToString(-1); } @Test(expected = IllegalArgumentException.class) - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "InlineMeInliner"}) public void testMillisecondsToStringNegativeMinValue() { millisecondsToString(Long.MIN_VALUE); } diff --git a/src/test/java/net/bramp/ffmpeg/Helper.java b/src/test/java/net/bramp/ffmpeg/Helper.java index a1ba24ba..7a8b13bc 100644 --- a/src/test/java/net/bramp/ffmpeg/Helper.java +++ b/src/test/java/net/bramp/ffmpeg/Helper.java @@ -25,9 +25,6 @@ public InputStream apply(@Nullable String input) { /** * Simple wrapper around "new SequenceInputStream", so the user doesn't have to deal with the * horribly dated Enumeration type. - * - * @param input - * @return */ public static InputStream sequenceInputStream(Iterable input) { checkNotNull(input); @@ -41,9 +38,6 @@ public static InputStream loadResource(String name) { /** * Loads all resources, and returns one stream containing them all. - * - * @param names - * @return */ public static InputStream combineResource(List names) { checkNotNull(names); diff --git a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java index 53c81b4f..e2256a43 100644 --- a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java +++ b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java @@ -27,6 +27,7 @@ public class ReadmeTest { public ReadmeTest() throws IOException {} @Test + @SuppressWarnings("unused") public void testCreateFF() throws IOException { FFmpeg ffmpeg = new FFmpeg(FFmpeg.DEFAULT_PATH); FFprobe ffprobe = new FFprobe(FFmpeg.DEFAULT_PATH); diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index a7a27669..43f49e31 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -17,15 +17,15 @@ import java.net.URI; import java.util.List; import java.util.concurrent.TimeUnit; + +import net.bramp.ffmpeg.builder.FFmpegBuilder.Verbosity; import net.bramp.ffmpeg.options.AudioEncodingOptions; import net.bramp.ffmpeg.options.EncodingOptions; import net.bramp.ffmpeg.options.MainEncodingOptions; import net.bramp.ffmpeg.options.VideoEncodingOptions; import org.junit.Test; -/** - * @author bramp - */ +@SuppressWarnings("unused") public class FFmpegBuilderTest { public FFmpegBuilderTest() throws IOException {} @@ -229,7 +229,6 @@ public void testConflictingVideoSize() { @Test public void testURIOutput() { - List args = new FFmpegBuilder() .setInput("input") diff --git a/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java b/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java index 2975f02b..5742172c 100644 --- a/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java +++ b/src/test/java/net/bramp/ffmpeg/nut/RawHandlerStreamToAudioFormatTest.java @@ -24,7 +24,7 @@ public static List data() { {"ULAW", 48000, 1, 3, new AudioFormat(ULAW, 48000, 8, 3, 3, 48000, false)}, {"PSD\u0008", 48000, 1, 4, new AudioFormat(PCM_SIGNED, 48000, 8, 4, 4, 48000, false)}, {"\u0010DUP", 48000, 1, 6, new AudioFormat(PCM_UNSIGNED, 48000, 16, 6, 12, 48000, true)}, - {"PFD\u0020", 48000, 1, 8, new AudioFormat(PCM_FLOAT, 48000, 32, 8, 32, 48000, false)}, + {"PFD ", 48000, 1, 8, new AudioFormat(PCM_FLOAT, 48000, 32, 8, 32, 48000, false)}, }); } diff --git a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java index bb06fc51..c573e6ec 100644 --- a/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java +++ b/src/test/java/net/bramp/ffmpeg/progress/UdpProgressParserTest.java @@ -11,7 +11,6 @@ import java.net.DatagramSocket; import java.net.InetAddress; import java.net.URISyntaxException; -import java.util.List; import net.bramp.ffmpeg.fixtures.Progresses; import org.junit.Test; From 137498292c28190a5f9442b0f2310b2d0af0d71e Mon Sep 17 00:00:00 2001 From: Euklios Date: Wed, 13 Mar 2024 15:34:15 +0100 Subject: [PATCH 054/101] Issue/138 build ffprobe command (#268) * Allow probing with custom arguments * Parse ffprobe response for -show_frames and -show_packets * Use FFprobe.path instead of providing executable manually * Add FFprobeBuilder * Use FFprobeBuilder when testing -show_packets and -show_frames * chore: Remove stream api usage * Test probe parameter options --- .../java/net/bramp/ffmpeg/FFmpegUtils.java | 3 + src/main/java/net/bramp/ffmpeg/FFprobe.java | 59 +- .../FFmpegPacketsAndFramesAdapter.java | 25 + .../bramp/ffmpeg/builder/FFprobeBuilder.java | 102 + .../net/bramp/ffmpeg/probe/FFmpegFrame.java | 27 + .../ffmpeg/probe/FFmpegFrameOrPacket.java | 4 + .../net/bramp/ffmpeg/probe/FFmpegPacket.java | 21 + .../bramp/ffmpeg/probe/FFmpegProbeResult.java | 40 + .../java/net/bramp/ffmpeg/FFprobeTest.java | 340 +- .../ffmpeg/builder/FFprobeBuilderTest.java | 106 + .../net/bramp/ffmpeg/fixtures/Samples.java | 3 + ...ffprobe-big_buck_bunny_720p_1mb_frames.mp4 | 8167 +++++++++ ...fprobe-big_buck_bunny_720p_1mb_packets.mp4 | 4957 ++++++ ...buck_bunny_720p_1mb_packets_and_frames.mp4 | 13882 ++++++++++++++++ 14 files changed, 27695 insertions(+), 41 deletions(-) create mode 100644 src/main/java/net/bramp/ffmpeg/adapter/FFmpegPacketsAndFramesAdapter.java create mode 100644 src/main/java/net/bramp/ffmpeg/builder/FFprobeBuilder.java create mode 100644 src/main/java/net/bramp/ffmpeg/probe/FFmpegFrame.java create mode 100644 src/main/java/net/bramp/ffmpeg/probe/FFmpegFrameOrPacket.java create mode 100644 src/main/java/net/bramp/ffmpeg/probe/FFmpegPacket.java create mode 100644 src/test/java/net/bramp/ffmpeg/builder/FFprobeBuilderTest.java create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_frames.mp4 create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets.mp4 create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4 diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java index c1f4c26d..6f9e44b0 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java @@ -12,9 +12,11 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import net.bramp.commons.lang3.math.gson.FractionAdapter; +import net.bramp.ffmpeg.adapter.FFmpegPacketsAndFramesAdapter; import net.bramp.ffmpeg.gson.LowercaseEnumTypeAdapterFactory; import net.bramp.ffmpeg.gson.NamedBitsetAdapter; import net.bramp.ffmpeg.probe.FFmpegDisposition; +import net.bramp.ffmpeg.probe.FFmpegFrameOrPacket; import org.apache.commons.lang3.math.Fraction; /** Helper class with commonly used methods */ @@ -129,6 +131,7 @@ private static Gson setupGson() { builder.registerTypeAdapterFactory(new LowercaseEnumTypeAdapterFactory()); builder.registerTypeAdapter(Fraction.class, new FractionAdapter()); + builder.registerTypeAdapter(FFmpegFrameOrPacket.class, new FFmpegPacketsAndFramesAdapter()); builder.registerTypeAdapter( FFmpegDisposition.class, new NamedBitsetAdapter<>(FFmpegDisposition.class)); diff --git a/src/main/java/net/bramp/ffmpeg/FFprobe.java b/src/main/java/net/bramp/ffmpeg/FFprobe.java index ad75abaf..48119e6a 100644 --- a/src/main/java/net/bramp/ffmpeg/FFprobe.java +++ b/src/main/java/net/bramp/ffmpeg/FFprobe.java @@ -1,18 +1,22 @@ package net.bramp.ffmpeg; import com.google.common.base.MoreObjects; -import com.google.common.collect.ImmutableList; import com.google.gson.Gson; -import java.io.IOException; -import java.io.Reader; -import java.util.List; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import net.bramp.ffmpeg.builder.FFprobeBuilder; import net.bramp.ffmpeg.io.LoggingFilterReader; import net.bramp.ffmpeg.probe.FFmpegProbeResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.CheckReturnValue; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.IOException; +import java.io.Reader; +import java.util.List; + +import static com.google.common.base.Preconditions.checkNotNull; + /** * Wrapper around FFprobe * @@ -77,34 +81,24 @@ public void run(List args) throws IOException { super.run(args); } - // TODO Add Probe Inputstream - public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent, @Nullable String... extraArgs) throws IOException { - checkIfFFprobe(); - - ImmutableList.Builder args = new ImmutableList.Builder(); - - // TODO Add: - // .add("--show_packets") - // .add("--show_frames") + public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent) throws IOException { + return probe(this.builder().setInput(mediaPath).setUserAgent(userAgent)); + } - args.add(path).add("-v", "quiet"); + public FFmpegProbeResult probe(FFprobeBuilder builder) throws IOException { + checkNotNull(builder); + return probe(builder.build()); + } - if (userAgent != null) { - args.add("-user_agent", userAgent); - } - - if (extraArgs != null) { - args.add(extraArgs); - } + public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent, @Nullable String... extraArgs) throws IOException { + return probe(this.builder().setInput(mediaPath).setUserAgent(userAgent).addExtraArgs(extraArgs).build()); + } - args.add("-print_format", "json") - .add("-show_error") - .add("-show_format") - .add("-show_streams") - .add("-show_chapters") - .add(mediaPath); + // TODO Add Probe Inputstream + public FFmpegProbeResult probe(List args) throws IOException { + checkIfFFprobe(); - Process p = runFunc.run(args.build()); + Process p = runFunc.run(path(args)); try { Reader reader = wrapInReader(p); if (LOG.isDebugEnabled()) { @@ -125,4 +119,9 @@ public FFmpegProbeResult probe(String mediaPath, @Nullable String userAgent, @Nu p.destroy(); } } + + @CheckReturnValue + public FFprobeBuilder builder() { + return new FFprobeBuilder(); + } } diff --git a/src/main/java/net/bramp/ffmpeg/adapter/FFmpegPacketsAndFramesAdapter.java b/src/main/java/net/bramp/ffmpeg/adapter/FFmpegPacketsAndFramesAdapter.java new file mode 100644 index 00000000..5379e8f9 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/adapter/FFmpegPacketsAndFramesAdapter.java @@ -0,0 +1,25 @@ +package net.bramp.ffmpeg.adapter; + +import com.google.gson.*; +import net.bramp.ffmpeg.probe.FFmpegFrame; +import net.bramp.ffmpeg.probe.FFmpegFrameOrPacket; +import net.bramp.ffmpeg.probe.FFmpegPacket; + +import java.lang.reflect.Type; + +public class FFmpegPacketsAndFramesAdapter implements JsonDeserializer { + @Override + public FFmpegFrameOrPacket deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + if (jsonElement instanceof JsonObject) { + final String objectType = ((JsonObject) jsonElement).get("type").getAsString(); + + if (objectType.equals("packet")) { + return jsonDeserializationContext.deserialize(jsonElement, FFmpegPacket.class); + } else { + return jsonDeserializationContext.deserialize(jsonElement, FFmpegFrame.class); + } + } + + return null; + } +} diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFprobeBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFprobeBuilder.java new file mode 100644 index 00000000..6dd5bc25 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/FFprobeBuilder.java @@ -0,0 +1,102 @@ +package net.bramp.ffmpeg.builder; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import javax.annotation.CheckReturnValue; +import java.util.ArrayList; +import java.util.List; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; + +/** + * Builds a ffprobe command line + */ +public class FFprobeBuilder { + private boolean showFormat = true; + private boolean showStreams = true; + private boolean showChapters = true; + private boolean showFrames = false; + private boolean showPackets = false; + private String userAgent; + private String input; + + private final List extraArgs = new ArrayList<>(); + + public FFprobeBuilder setShowFormat(boolean showFormat) { + this.showFormat = showFormat; + return this; + } + + public FFprobeBuilder setShowStreams(boolean showStreams) { + this.showStreams = showStreams; + return this; + } + + public FFprobeBuilder setShowChapters(boolean showChapters) { + this.showChapters = showChapters; + return this; + } + + public FFprobeBuilder setShowFrames(boolean showFrames) { + this.showFrames = showFrames; + return this; + } + + public FFprobeBuilder setShowPackets(boolean showPackets) { + this.showPackets = showPackets; + return this; + } + + public FFprobeBuilder setUserAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + + public FFprobeBuilder setInput(String filename) { + checkNotNull(filename); + this.input = filename; + return this; + } + + public FFprobeBuilder addExtraArgs(String... values) { + checkArgument(values != null, "extraArgs can not be null"); + checkArgument(values.length > 0, "one or more values must be supplied"); + checkNotEmpty(values[0], "first extra arg may not be empty"); + + for (String value : values) { + extraArgs.add(checkNotNull(value)); + } + return this; + } + + @CheckReturnValue + public List build() { + ImmutableList.Builder args = new ImmutableList.Builder<>(); + + Preconditions.checkNotNull(input, "Input must be specified"); + + args + .add("-v", "quiet") + .add("-print_format", "json") + .add("-show_error"); + + if (userAgent != null) { + args.add("-user_agent", userAgent); + } + + args.addAll(extraArgs); + + if (showFormat) args.add("-show_format"); + if (showStreams) args.add("-show_streams"); + if (showChapters) args.add("-show_chapters"); + if (showPackets) args.add("-show_packets"); + if (showFrames) args.add("-show_frames"); + + args.add(input); + + return args.build(); + } +} diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrame.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrame.java new file mode 100644 index 00000000..881d5eee --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrame.java @@ -0,0 +1,27 @@ +package net.bramp.ffmpeg.probe; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import net.bramp.ffmpeg.shared.CodecType; + +@SuppressFBWarnings( + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") +public class FFmpegFrame implements FFmpegFrameOrPacket { + public CodecType media_type; + public int stream_index; + public int key_frame; + public long pkt_pts; + public double pkt_pts_time; + public long pkt_dts; + public double pkt_dts_time; + public long best_effort_timestamp; + public float best_effort_timestamp_time; + public long pkt_duration; + public float pkt_duration_time; + public long pkt_pos; + public long pkt_size; + public String sample_fmt; + public int nb_samples; + public int channels; + public String channel_layout; +} diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrameOrPacket.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrameOrPacket.java new file mode 100644 index 00000000..81f8f3a8 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFrameOrPacket.java @@ -0,0 +1,4 @@ +package net.bramp.ffmpeg.probe; + +public interface FFmpegFrameOrPacket { +} diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegPacket.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegPacket.java new file mode 100644 index 00000000..e93d8e67 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegPacket.java @@ -0,0 +1,21 @@ +package net.bramp.ffmpeg.probe; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import net.bramp.ffmpeg.shared.CodecType; + +@SuppressFBWarnings( + value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, + justification = "POJO objects where the fields are populated by gson") +public class FFmpegPacket implements FFmpegFrameOrPacket { + public CodecType codec_type; + public int stream_index; + public long pts; + public double pts_time; + public long dts; + public double dts_time; + public long duration; + public float duration_time; + public String size; + public String pos; + public String flags; +} diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java index 71ee3052..08a5d459 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java @@ -2,6 +2,8 @@ import com.google.common.collect.ImmutableList; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -14,6 +16,9 @@ public class FFmpegProbeResult { public FFmpegFormat format; public List streams; public List chapters; + public List packets; + public List frames; + public List packets_and_frames; public FFmpegError getError() { return error; @@ -36,4 +41,39 @@ public List getChapters() { if (chapters == null) return Collections.emptyList(); return ImmutableList.copyOf(chapters); } + + public List getPackets() { + if (packets == null) { + if (packets_and_frames != null) { + List tmp = new ArrayList<>(); + for (FFmpegFrameOrPacket packetsAndFrame : packets_and_frames) { + if (packetsAndFrame instanceof FFmpegPacket) { + tmp.add((FFmpegPacket) packetsAndFrame); + } + } + packets = tmp; + } else { + return Collections.emptyList(); + } + } + + return ImmutableList.copyOf(packets); + } + + public List getFrames() { + if (frames == null) { + if (packets_and_frames != null) { + List tmp = new ArrayList<>(); + for (FFmpegFrameOrPacket packetsAndFrame : packets_and_frames) { + if (packetsAndFrame instanceof FFmpegFrame) { + tmp.add((FFmpegFrame) packetsAndFrame); + } + } + frames = tmp; + } else { + return Collections.emptyList(); + } + } + return ImmutableList.copyOf(frames); + } } diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 114cc515..c040325f 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -1,29 +1,40 @@ package net.bramp.ffmpeg; -import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - -import java.io.IOException; +import com.google.common.collect.ImmutableList; +import net.bramp.ffmpeg.builder.FFprobeBuilder; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.lang.NewProcessAnswer; -import net.bramp.ffmpeg.probe.FFmpegChapter; -import net.bramp.ffmpeg.probe.FFmpegProbeResult; +import net.bramp.ffmpeg.probe.*; import net.bramp.ffmpeg.shared.CodecType; import org.apache.commons.lang3.math.Fraction; +import org.hamcrest.core.IsNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import java.io.IOException; +import java.util.List; + +import static net.bramp.ffmpeg.FFmpegTest.argThatHasItem; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.mockito.Mockito.*; + @RunWith(MockitoJUnitRunner.class) public class FFprobeTest { - @Mock ProcessFunction runFunc; + @Mock + ProcessFunction runFunc; + + @Captor + ArgumentCaptor> argsCaptor; FFprobe ffprobe; @@ -47,6 +58,15 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem(Samples.book_with_chapters))) .thenAnswer(new NewProcessAnswer("book_with_chapters.m4b")); + when(runFunc.run(argThatHasItem(Samples.big_buck_bunny_720p_1mb_with_packets))) + .thenAnswer(new NewProcessAnswer("ffprobe-big_buck_bunny_720p_1mb_packets.mp4")); + + when(runFunc.run(argThatHasItem(Samples.big_buck_bunny_720p_1mb_with_frames))) + .thenAnswer(new NewProcessAnswer("ffprobe-big_buck_bunny_720p_1mb_frames.mp4")); + + when(runFunc.run(argThatHasItem(Samples.big_buck_bunny_720p_1mb_with_packets_and_frames))) + .thenAnswer(new NewProcessAnswer("ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4")); + when(runFunc.run(argThatHasItem(Samples.side_data_list))) .thenAnswer(new NewProcessAnswer("ffprobe-side_data_list")); @@ -106,6 +126,234 @@ public void testProbeBookWithChapters() throws IOException { assertThat(lastChapter.tags.title, is("24 - Chatterer Has His Turn to Laugh")); } + @Test + public void testProbeWithPackets() throws IOException { + FFmpegProbeResult info = ffprobe.probe( + ffprobe + .builder() + .setInput(Samples.big_buck_bunny_720p_1mb_with_packets) + .setShowPackets(true) + .build()); + assertThat(info.hasError(), is(false)); + assertThat(info.getPackets().size(), is(381)); + + FFmpegPacket firstPacket = info.getPackets().get(0); + assertThat(firstPacket.codec_type, is(CodecType.AUDIO)); + assertThat(firstPacket.stream_index, is(1)); + assertThat(firstPacket.pts, is(0L)); + assertThat(firstPacket.pts_time, is(0.0)); + assertThat(firstPacket.dts, is(0L)); + assertThat(firstPacket.dts_time, is(0.0)); + assertThat(firstPacket.duration, is(1024L)); + assertThat(firstPacket.duration_time, is(0.021333F)); + assertThat(firstPacket.size, is("967")); + assertThat(firstPacket.pos, is("4261")); + assertThat(firstPacket.flags, is("K_")); + + FFmpegPacket secondPacket = info.getPackets().get(1); + assertThat(secondPacket.codec_type, is(CodecType.VIDEO)); + assertThat(secondPacket.stream_index, is(0)); + assertThat(secondPacket.pts, is(0L)); + assertThat(secondPacket.pts_time, is(0.0)); + assertThat(secondPacket.dts, is(0L)); + assertThat(secondPacket.dts_time, is(0.0)); + assertThat(secondPacket.duration, is(512L)); + assertThat(secondPacket.duration_time, is(0.04F)); + assertThat(secondPacket.size, is("105222")); + assertThat(secondPacket.pos, is("5228")); + assertThat(secondPacket.flags, is("K_")); + + FFmpegPacket lastPacket = info.getPackets().get(info.getPackets().size() - 1); + assertThat(lastPacket.codec_type, is(CodecType.AUDIO)); + assertThat(lastPacket.stream_index, is(1)); + assertThat(lastPacket.pts, is(253952L)); + assertThat(lastPacket.pts_time, is(5.290667)); + assertThat(lastPacket.dts, is(253952L)); + assertThat(lastPacket.dts_time, is(5.290667)); + assertThat(lastPacket.duration, is(1024L)); + assertThat(lastPacket.duration_time, is(0.021333F)); + assertThat(lastPacket.size, is("1111")); + assertThat(lastPacket.pos, is("1054609")); + assertThat(lastPacket.flags, is("K_")); + } + + @Test + public void testProbeWithFrames() throws IOException { + FFmpegProbeResult info = ffprobe.probe( + ffprobe + .builder() + .setInput(Samples.big_buck_bunny_720p_1mb_with_frames) + .setShowFrames(true) + .build()); + assertThat(info.hasError(), is(false)); + assertThat(info.getFrames().size(), is(381)); + + FFmpegFrame firstFrame = info.getFrames().get(0); + assertThat(firstFrame.stream_index, is(1)); + assertThat(firstFrame.key_frame, is(1)); + assertThat(firstFrame.pkt_pts, is(0L)); + assertThat(firstFrame.pkt_pts_time, is(0.0)); + assertThat(firstFrame.pkt_dts, is(0L)); + assertThat(firstFrame.pkt_dts_time, is(0.0)); + assertThat(firstFrame.best_effort_timestamp, is(0L)); + assertThat(firstFrame.best_effort_timestamp_time, is(0.0F)); + assertThat(firstFrame.pkt_duration, is(1024L)); + assertThat(firstFrame.pkt_duration_time, is(0.021333F)); + assertThat(firstFrame.pkt_pos, is(4261L)); + assertThat(firstFrame.pkt_size, is(967L)); + assertThat(firstFrame.sample_fmt, is("fltp")); + assertThat(firstFrame.nb_samples, is(1024)); + assertThat(firstFrame.channels, is(6)); + assertThat(firstFrame.channel_layout, is("5.1")); + + FFmpegFrame secondFrame = info.getFrames().get(1); + assertThat(secondFrame.media_type, is(CodecType.VIDEO)); + assertThat(secondFrame.stream_index, is(0)); + assertThat(secondFrame.key_frame, is(1)); + assertThat(secondFrame.pkt_pts, is(0L)); + assertThat(secondFrame.pkt_pts_time, is(0.0)); + assertThat(secondFrame.pkt_dts, is(0L)); + assertThat(secondFrame.pkt_dts_time, is(0.0)); + assertThat(secondFrame.best_effort_timestamp, is(0L)); + assertThat(secondFrame.best_effort_timestamp_time, is(0.0F)); + assertThat(secondFrame.pkt_duration, is(512L)); + assertThat(secondFrame.pkt_duration_time, is(0.04F)); + assertThat(secondFrame.pkt_pos, is(5228L)); + assertThat(secondFrame.pkt_size, is(105222L)); + assertThat(secondFrame.sample_fmt, new IsNull<>()); + assertThat(secondFrame.nb_samples, is(0)); + assertThat(secondFrame.channels, is(0)); + assertThat(secondFrame.channel_layout, new IsNull<>()); + + FFmpegFrame lastFrame = info.getFrames().get(info.getFrames().size() - 1); + assertThat(lastFrame.media_type, is(CodecType.AUDIO)); + assertThat(lastFrame.stream_index, is(1)); + assertThat(lastFrame.key_frame, is(1)); + assertThat(lastFrame.pkt_pts, is(253952L)); + assertThat(lastFrame.pkt_pts_time, is(5.290667)); + assertThat(lastFrame.pkt_dts, is(253952L)); + assertThat(lastFrame.pkt_dts_time, is(5.290667)); + assertThat(lastFrame.best_effort_timestamp, is(253952L)); + assertThat(lastFrame.best_effort_timestamp_time, is(5.290667F)); + assertThat(lastFrame.pkt_duration, is(1024L)); + assertThat(lastFrame.pkt_duration_time, is(0.021333F)); + assertThat(lastFrame.pkt_pos, is(1054609L)); + assertThat(lastFrame.pkt_size, is(1111L)); + assertThat(lastFrame.sample_fmt, is("fltp")); + assertThat(lastFrame.nb_samples, is(1024)); + assertThat(lastFrame.channels, is(6)); + assertThat(lastFrame.channel_layout, is("5.1")); + } + + @Test + public void testProbeWithPacketsAndFrames() throws IOException { + FFmpegProbeResult info = ffprobe.probe( + ffprobe + .builder() + .setInput(Samples.big_buck_bunny_720p_1mb_with_packets_and_frames) + .setShowPackets(true) + .setShowFrames(true) + .build()); + assertThat(info.hasError(), is(false)); + assertThat(info.getPackets().size(), is(381)); + assertThat(info.getFrames().size(), is(381)); + + FFmpegPacket firstPacket = info.getPackets().get(0); + assertThat(firstPacket.codec_type, is(CodecType.AUDIO)); + assertThat(firstPacket.stream_index, is(1)); + assertThat(firstPacket.pts, is(0L)); + assertThat(firstPacket.pts_time, is(0.0)); + assertThat(firstPacket.dts, is(0L)); + assertThat(firstPacket.dts_time, is(0.0)); + assertThat(firstPacket.duration, is(1024L)); + assertThat(firstPacket.duration_time, is(0.021333F)); + assertThat(firstPacket.size, is("967")); + assertThat(firstPacket.pos, is("4261")); + assertThat(firstPacket.flags, is("K_")); + + FFmpegPacket secondPacket = info.getPackets().get(1); + assertThat(secondPacket.codec_type, is(CodecType.VIDEO)); + assertThat(secondPacket.stream_index, is(0)); + assertThat(secondPacket.pts, is(0L)); + assertThat(secondPacket.pts_time, is(0.0)); + assertThat(secondPacket.dts, is(0L)); + assertThat(secondPacket.dts_time, is(0.0)); + assertThat(secondPacket.duration, is(512L)); + assertThat(secondPacket.duration_time, is(0.04F)); + assertThat(secondPacket.size, is("105222")); + assertThat(secondPacket.pos, is("5228")); + assertThat(secondPacket.flags, is("K_")); + + FFmpegPacket lastPacket = info.getPackets().get(info.getPackets().size() - 1); + assertThat(lastPacket.codec_type, is(CodecType.AUDIO)); + assertThat(lastPacket.stream_index, is(1)); + assertThat(lastPacket.pts, is(253952L)); + assertThat(lastPacket.pts_time, is(5.290667)); + assertThat(lastPacket.dts, is(253952L)); + assertThat(lastPacket.dts_time, is(5.290667)); + assertThat(lastPacket.duration, is(1024L)); + assertThat(lastPacket.duration_time, is(0.021333F)); + assertThat(lastPacket.size, is("1111")); + assertThat(lastPacket.pos, is("1054609")); + assertThat(lastPacket.flags, is("K_")); + + FFmpegFrame firstFrame = info.getFrames().get(0); + assertThat(firstFrame.stream_index, is(1)); + assertThat(firstFrame.key_frame, is(1)); + assertThat(firstFrame.pkt_pts, is(0L)); + assertThat(firstFrame.pkt_pts_time, is(0.0)); + assertThat(firstFrame.pkt_dts, is(0L)); + assertThat(firstFrame.pkt_dts_time, is(0.0)); + assertThat(firstFrame.best_effort_timestamp, is(0L)); + assertThat(firstFrame.best_effort_timestamp_time, is(0.0F)); + assertThat(firstFrame.pkt_duration, is(1024L)); + assertThat(firstFrame.pkt_duration_time, is(0.021333F)); + assertThat(firstFrame.pkt_pos, is(4261L)); + assertThat(firstFrame.pkt_size, is(967L)); + assertThat(firstFrame.sample_fmt, is("fltp")); + assertThat(firstFrame.nb_samples, is(1024)); + assertThat(firstFrame.channels, is(6)); + assertThat(firstFrame.channel_layout, is("5.1")); + + FFmpegFrame secondFrame = info.getFrames().get(1); + assertThat(secondFrame.media_type, is(CodecType.VIDEO)); + assertThat(secondFrame.stream_index, is(0)); + assertThat(secondFrame.key_frame, is(1)); + assertThat(secondFrame.pkt_pts, is(0L)); + assertThat(secondFrame.pkt_pts_time, is(0.0)); + assertThat(secondFrame.pkt_dts, is(0L)); + assertThat(secondFrame.pkt_dts_time, is(0.0)); + assertThat(secondFrame.best_effort_timestamp, is(0L)); + assertThat(secondFrame.best_effort_timestamp_time, is(0.0F)); + assertThat(secondFrame.pkt_duration, is(512L)); + assertThat(secondFrame.pkt_duration_time, is(0.04F)); + assertThat(secondFrame.pkt_pos, is(5228L)); + assertThat(secondFrame.pkt_size, is(105222L)); + assertThat(secondFrame.sample_fmt, new IsNull<>()); + assertThat(secondFrame.nb_samples, is(0)); + assertThat(secondFrame.channels, is(0)); + assertThat(secondFrame.channel_layout, new IsNull<>()); + + FFmpegFrame lastFrame = info.getFrames().get(info.getFrames().size() - 1); + assertThat(lastFrame.media_type, is(CodecType.AUDIO)); + assertThat(lastFrame.stream_index, is(1)); + assertThat(lastFrame.key_frame, is(1)); + assertThat(lastFrame.pkt_pts, is(253952L)); + assertThat(lastFrame.pkt_pts_time, is(5.290667)); + assertThat(lastFrame.pkt_dts, is(253952L)); + assertThat(lastFrame.pkt_dts_time, is(5.290667)); + assertThat(lastFrame.best_effort_timestamp, is(253952L)); + assertThat(lastFrame.best_effort_timestamp_time, is(5.290667F)); + assertThat(lastFrame.pkt_duration, is(1024L)); + assertThat(lastFrame.pkt_duration_time, is(0.021333F)); + assertThat(lastFrame.pkt_pos, is(1054609L)); + assertThat(lastFrame.pkt_size, is(1111L)); + assertThat(lastFrame.sample_fmt, is("fltp")); + assertThat(lastFrame.nb_samples, is(1024)); + assertThat(lastFrame.channels, is(6)); + assertThat(lastFrame.channel_layout, is("5.1")); + } + @Test public void testProbeVideo2() throws IOException { FFmpegProbeResult info = ffprobe.probe(Samples.always_on_my_mind); @@ -168,4 +416,74 @@ public void testChaptersWithLongIds() throws IOException { assertThat(info.getChapters().get(0).id, is(6613449456311024506L)); assertThat(info.getChapters().get(1).id, is(-4433436293284298339L)); } + + @Test + public void testProbeDefaultArguments() throws IOException { + ffprobe.probe(Samples.always_on_my_mind); + + verify(runFunc, times(2)).run(argsCaptor.capture()); + + List value = argsCaptor.getValue(); + + assertThat( + value, + is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + ); + } + + @Test + public void testProbeProbeBuilder() throws IOException { + ffprobe.probe(new FFprobeBuilder().setInput(Samples.always_on_my_mind)); + + verify(runFunc, times(2)).run(argsCaptor.capture()); + + List value = argsCaptor.getValue(); + + assertThat( + value, + is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + ); + } + + @Test + public void testProbeProbeBuilderBuilt() throws IOException { + ffprobe.probe(new FFprobeBuilder().setInput(Samples.always_on_my_mind).build()); + + verify(runFunc, times(2)).run(argsCaptor.capture()); + + List value = argsCaptor.getValue(); + + assertThat( + value, + is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + ); + } + + @Test + public void testProbeProbeExtraArgs() throws IOException { + ffprobe.probe(Samples.always_on_my_mind, null, "-rw_timeout", "0"); + + verify(runFunc, times(2)).run(argsCaptor.capture()); + + List value = argsCaptor.getValue(); + + assertThat( + value, + is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-rw_timeout", "0", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + ); + } + + @Test + public void testProbeProbeUserAgent() throws IOException { + ffprobe.probe(Samples.always_on_my_mind, "ffmpeg-cli-wrapper"); + + verify(runFunc, times(2)).run(argsCaptor.capture()); + + List value = argsCaptor.getValue(); + + assertThat( + value, + is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-user_agent", "ffmpeg-cli-wrapper", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + ); + } } diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFprobeBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFprobeBuilderTest.java new file mode 100644 index 00000000..d54d02d3 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/builder/FFprobeBuilderTest.java @@ -0,0 +1,106 @@ +package net.bramp.ffmpeg.builder; + +import com.google.common.collect.ImmutableList; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +public class FFprobeBuilderTest { + @Test + public void testDefaultFFprobeConfiguration() { + final List args = new FFprobeBuilder().setInput("input").build(); + + assertEquals( + args, + ImmutableList.of( + "-v", + "quiet", + "-print_format", + "json", + "-show_error", + "-show_format", + "-show_streams", + "-show_chapters", + "input")); + } + + @Test + public void testPacketsAndFramesEnabled() { + final List args = new FFprobeBuilder().setInput("input").setShowPackets(true).setShowFrames(true).build(); + + assertEquals( + args, + ImmutableList.of( + "-v", + "quiet", + "-print_format", + "json", + "-show_error", + "-show_format", + "-show_streams", + "-show_chapters", + "-show_packets", + "-show_frames", + "input")); + } + + @Test + public void testDefaultOptionsDisabled() { + final List args = new FFprobeBuilder() + .setInput("input") + .setShowChapters(false) + .setShowStreams(false) + .setShowFormat(false) + .build(); + + assertEquals( + args, + ImmutableList.of( + "-v", + "quiet", + "-print_format", + "json", + "-show_error", + "input")); + } + + @Test + public void testSpecifyUserAgent() { + final List args = new FFprobeBuilder() + .setInput("input") + .setShowChapters(false) + .setShowStreams(false) + .setShowFormat(false) + .setUserAgent("user agent") + .build(); + + assertEquals( + args, + ImmutableList.of( + "-v", + "quiet", + "-print_format", + "json", + "-show_error", + "-user_agent", + "user agent", + "input")); + } + + @Test + public void throwsExceptionIfInputIsNull() + { + final FFprobeBuilder builder = new FFprobeBuilder(); + assertThrows(NullPointerException.class, () -> builder.setInput(null)); + } + + @Test + public void throwsExceptionIfNoInputIsGiven() + { + final FFprobeBuilder builder = new FFprobeBuilder(); + assertThrows(NullPointerException.class, builder::build); + } +} diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java index 1d4ebb6c..cc5ed7a7 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java @@ -30,6 +30,9 @@ private Samples() { public static final String start_pts_test = FAKE_PREFIX + "start_pts_test_1mb.ts"; public static final String divide_by_zero = FAKE_PREFIX + "Divide By Zero.mp4"; + public static final String big_buck_bunny_720p_1mb_with_packets = FAKE_PREFIX + "big_buck_bunny_720p_1mb_packets.mp4"; + public static final String big_buck_bunny_720p_1mb_with_frames = FAKE_PREFIX + "big_buck_bunny_720p_1mb_frames.mp4"; + public static final String big_buck_bunny_720p_1mb_with_packets_and_frames = FAKE_PREFIX + "big_buck_bunny_720p_1mb_packets_and_frames.mp4"; public static final String chapters_with_long_id = FAKE_PREFIX + "chapters_with_long_id.m4b"; diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_frames.mp4 b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_frames.mp4 new file mode 100644 index 00000000..d5ddf8f6 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_frames.mp4 @@ -0,0 +1,8167 @@ +{ + "frames": [ + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 0, + "pkt_pts_time": "0.000000", + "pkt_dts": 0, + "pkt_dts_time": "0.000000", + "best_effort_timestamp": 0, + "best_effort_timestamp_time": "0.000000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "4261", + "pkt_size": "967", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 1, + "pkt_pts": 0, + "pkt_pts_time": "0.000000", + "pkt_dts": 0, + "pkt_dts_time": "0.000000", + "best_effort_timestamp": 0, + "best_effort_timestamp_time": "0.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "5228", + "pkt_size": "105222", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "I", + "coded_picture_number": 0, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 1024, + "pkt_pts_time": "0.021333", + "pkt_dts": 1024, + "pkt_dts_time": "0.021333", + "best_effort_timestamp": 1024, + "best_effort_timestamp_time": "0.021333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "110450", + "pkt_size": "1011", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 2048, + "pkt_pts_time": "0.042667", + "pkt_dts": 2048, + "pkt_dts_time": "0.042667", + "best_effort_timestamp": 2048, + "best_effort_timestamp_time": "0.042667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "111461", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 512, + "pkt_pts_time": "0.040000", + "pkt_dts": 512, + "pkt_dts_time": "0.040000", + "best_effort_timestamp": 512, + "best_effort_timestamp_time": "0.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "112487", + "pkt_size": "1554", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 1, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 3072, + "pkt_pts_time": "0.064000", + "pkt_dts": 3072, + "pkt_dts_time": "0.064000", + "best_effort_timestamp": 3072, + "best_effort_timestamp_time": "0.064000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "114041", + "pkt_size": "1030", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 4096, + "pkt_pts_time": "0.085333", + "pkt_dts": 4096, + "pkt_dts_time": "0.085333", + "best_effort_timestamp": 4096, + "best_effort_timestamp_time": "0.085333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "115071", + "pkt_size": "990", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 1024, + "pkt_pts_time": "0.080000", + "pkt_dts": 1024, + "pkt_dts_time": "0.080000", + "best_effort_timestamp": 1024, + "best_effort_timestamp_time": "0.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "116061", + "pkt_size": "2153", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 2, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 5120, + "pkt_pts_time": "0.106667", + "pkt_dts": 5120, + "pkt_dts_time": "0.106667", + "best_effort_timestamp": 5120, + "best_effort_timestamp_time": "0.106667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "118214", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 6144, + "pkt_pts_time": "0.128000", + "pkt_dts": 6144, + "pkt_dts_time": "0.128000", + "best_effort_timestamp": 6144, + "best_effort_timestamp_time": "0.128000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "119172", + "pkt_size": "973", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 1536, + "pkt_pts_time": "0.120000", + "pkt_dts": 1536, + "pkt_dts_time": "0.120000", + "best_effort_timestamp": 1536, + "best_effort_timestamp_time": "0.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "120145", + "pkt_size": "2208", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 3, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 7168, + "pkt_pts_time": "0.149333", + "pkt_dts": 7168, + "pkt_dts_time": "0.149333", + "best_effort_timestamp": 7168, + "best_effort_timestamp_time": "0.149333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "122353", + "pkt_size": "989", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 8192, + "pkt_pts_time": "0.170667", + "pkt_dts": 8192, + "pkt_dts_time": "0.170667", + "best_effort_timestamp": 8192, + "best_effort_timestamp_time": "0.170667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "123342", + "pkt_size": "1009", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 2048, + "pkt_pts_time": "0.160000", + "pkt_dts": 2048, + "pkt_dts_time": "0.160000", + "best_effort_timestamp": 2048, + "best_effort_timestamp_time": "0.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "124351", + "pkt_size": "2523", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 4, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 9216, + "pkt_pts_time": "0.192000", + "pkt_dts": 9216, + "pkt_dts_time": "0.192000", + "best_effort_timestamp": 9216, + "best_effort_timestamp_time": "0.192000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "126874", + "pkt_size": "1000", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 10240, + "pkt_pts_time": "0.213333", + "pkt_dts": 10240, + "pkt_dts_time": "0.213333", + "best_effort_timestamp": 10240, + "best_effort_timestamp_time": "0.213333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "127874", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 2560, + "pkt_pts_time": "0.200000", + "pkt_dts": 2560, + "pkt_dts_time": "0.200000", + "best_effort_timestamp": 2560, + "best_effort_timestamp_time": "0.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "128892", + "pkt_size": "3088", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 5, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 11264, + "pkt_pts_time": "0.234667", + "pkt_dts": 11264, + "pkt_dts_time": "0.234667", + "best_effort_timestamp": 11264, + "best_effort_timestamp_time": "0.234667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "131980", + "pkt_size": "991", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 12288, + "pkt_pts_time": "0.256000", + "pkt_dts": 12288, + "pkt_dts_time": "0.256000", + "best_effort_timestamp": 12288, + "best_effort_timestamp_time": "0.256000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "132971", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 3072, + "pkt_pts_time": "0.240000", + "pkt_dts": 3072, + "pkt_dts_time": "0.240000", + "best_effort_timestamp": 3072, + "best_effort_timestamp_time": "0.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "133977", + "pkt_size": "4188", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 6, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 13312, + "pkt_pts_time": "0.277333", + "pkt_dts": 13312, + "pkt_dts_time": "0.277333", + "best_effort_timestamp": 13312, + "best_effort_timestamp_time": "0.277333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "138165", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 3584, + "pkt_pts_time": "0.280000", + "pkt_dts": 3584, + "pkt_dts_time": "0.280000", + "best_effort_timestamp": 3584, + "best_effort_timestamp_time": "0.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "139177", + "pkt_size": "365", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 7, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 14336, + "pkt_pts_time": "0.298667", + "pkt_dts": 14336, + "pkt_dts_time": "0.298667", + "best_effort_timestamp": 14336, + "best_effort_timestamp_time": "0.298667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "139542", + "pkt_size": "990", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 15360, + "pkt_pts_time": "0.320000", + "pkt_dts": 15360, + "pkt_dts_time": "0.320000", + "best_effort_timestamp": 15360, + "best_effort_timestamp_time": "0.320000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "140532", + "pkt_size": "985", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 4096, + "pkt_pts_time": "0.320000", + "pkt_dts": 4096, + "pkt_dts_time": "0.320000", + "best_effort_timestamp": 4096, + "best_effort_timestamp_time": "0.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "141517", + "pkt_size": "3571", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 8, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 16384, + "pkt_pts_time": "0.341333", + "pkt_dts": 16384, + "pkt_dts_time": "0.341333", + "best_effort_timestamp": 16384, + "best_effort_timestamp_time": "0.341333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "145088", + "pkt_size": "1029", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 17408, + "pkt_pts_time": "0.362667", + "pkt_dts": 17408, + "pkt_dts_time": "0.362667", + "best_effort_timestamp": 17408, + "best_effort_timestamp_time": "0.362667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "146117", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 4608, + "pkt_pts_time": "0.360000", + "pkt_dts": 4608, + "pkt_dts_time": "0.360000", + "best_effort_timestamp": 4608, + "best_effort_timestamp_time": "0.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "147121", + "pkt_size": "3966", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 9, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 18432, + "pkt_pts_time": "0.384000", + "pkt_dts": 18432, + "pkt_dts_time": "0.384000", + "best_effort_timestamp": 18432, + "best_effort_timestamp_time": "0.384000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "151087", + "pkt_size": "971", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 19456, + "pkt_pts_time": "0.405333", + "pkt_dts": 19456, + "pkt_dts_time": "0.405333", + "best_effort_timestamp": 19456, + "best_effort_timestamp_time": "0.405333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "152058", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 5120, + "pkt_pts_time": "0.400000", + "pkt_dts": 5120, + "pkt_dts_time": "0.400000", + "best_effort_timestamp": 5120, + "best_effort_timestamp_time": "0.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "153040", + "pkt_size": "4081", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 10, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 20480, + "pkt_pts_time": "0.426667", + "pkt_dts": 20480, + "pkt_dts_time": "0.426667", + "best_effort_timestamp": 20480, + "best_effort_timestamp_time": "0.426667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "157121", + "pkt_size": "1046", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 21504, + "pkt_pts_time": "0.448000", + "pkt_dts": 21504, + "pkt_dts_time": "0.448000", + "best_effort_timestamp": 21504, + "best_effort_timestamp_time": "0.448000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "158167", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 5632, + "pkt_pts_time": "0.440000", + "pkt_dts": 5632, + "pkt_dts_time": "0.440000", + "best_effort_timestamp": 5632, + "best_effort_timestamp_time": "0.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "159179", + "pkt_size": "4631", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 11, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 22528, + "pkt_pts_time": "0.469333", + "pkt_dts": 22528, + "pkt_dts_time": "0.469333", + "best_effort_timestamp": 22528, + "best_effort_timestamp_time": "0.469333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "163810", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 23552, + "pkt_pts_time": "0.490667", + "pkt_dts": 23552, + "pkt_dts_time": "0.490667", + "best_effort_timestamp": 23552, + "best_effort_timestamp_time": "0.490667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "164790", + "pkt_size": "1013", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 6144, + "pkt_pts_time": "0.480000", + "pkt_dts": 6144, + "pkt_dts_time": "0.480000", + "best_effort_timestamp": 6144, + "best_effort_timestamp_time": "0.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "165803", + "pkt_size": "4996", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 12, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 24576, + "pkt_pts_time": "0.512000", + "pkt_dts": 24576, + "pkt_dts_time": "0.512000", + "best_effort_timestamp": 24576, + "best_effort_timestamp_time": "0.512000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "170799", + "pkt_size": "1086", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 25600, + "pkt_pts_time": "0.533333", + "pkt_dts": 25600, + "pkt_dts_time": "0.533333", + "best_effort_timestamp": 25600, + "best_effort_timestamp_time": "0.533333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "171885", + "pkt_size": "1057", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 6656, + "pkt_pts_time": "0.520000", + "pkt_dts": 6656, + "pkt_dts_time": "0.520000", + "best_effort_timestamp": 6656, + "best_effort_timestamp_time": "0.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "172942", + "pkt_size": "5909", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 13, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 26624, + "pkt_pts_time": "0.554667", + "pkt_dts": 26624, + "pkt_dts_time": "0.554667", + "best_effort_timestamp": 26624, + "best_effort_timestamp_time": "0.554667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "178851", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 27648, + "pkt_pts_time": "0.576000", + "pkt_dts": 27648, + "pkt_dts_time": "0.576000", + "best_effort_timestamp": 27648, + "best_effort_timestamp_time": "0.576000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "179838", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 7168, + "pkt_pts_time": "0.560000", + "pkt_dts": 7168, + "pkt_dts_time": "0.560000", + "best_effort_timestamp": 7168, + "best_effort_timestamp_time": "0.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "180825", + "pkt_size": "5995", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 14, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 28672, + "pkt_pts_time": "0.597333", + "pkt_dts": 28672, + "pkt_dts_time": "0.597333", + "best_effort_timestamp": 28672, + "best_effort_timestamp_time": "0.597333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "186820", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 7680, + "pkt_pts_time": "0.600000", + "pkt_dts": 7680, + "pkt_dts_time": "0.600000", + "best_effort_timestamp": 7680, + "best_effort_timestamp_time": "0.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "187798", + "pkt_size": "6419", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 15, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 29696, + "pkt_pts_time": "0.618667", + "pkt_dts": 29696, + "pkt_dts_time": "0.618667", + "best_effort_timestamp": 29696, + "best_effort_timestamp_time": "0.618667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "194217", + "pkt_size": "1050", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 30720, + "pkt_pts_time": "0.640000", + "pkt_dts": 30720, + "pkt_dts_time": "0.640000", + "best_effort_timestamp": 30720, + "best_effort_timestamp_time": "0.640000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "195267", + "pkt_size": "994", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 8192, + "pkt_pts_time": "0.640000", + "pkt_dts": 8192, + "pkt_dts_time": "0.640000", + "best_effort_timestamp": 8192, + "best_effort_timestamp_time": "0.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "196261", + "pkt_size": "6212", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 16, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 31744, + "pkt_pts_time": "0.661333", + "pkt_dts": 31744, + "pkt_dts_time": "0.661333", + "best_effort_timestamp": 31744, + "best_effort_timestamp_time": "0.661333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "202473", + "pkt_size": "968", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 32768, + "pkt_pts_time": "0.682667", + "pkt_dts": 32768, + "pkt_dts_time": "0.682667", + "best_effort_timestamp": 32768, + "best_effort_timestamp_time": "0.682667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "203441", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 8704, + "pkt_pts_time": "0.680000", + "pkt_dts": 8704, + "pkt_dts_time": "0.680000", + "best_effort_timestamp": 8704, + "best_effort_timestamp_time": "0.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "204420", + "pkt_size": "6762", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 17, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 33792, + "pkt_pts_time": "0.704000", + "pkt_dts": 33792, + "pkt_dts_time": "0.704000", + "best_effort_timestamp": 33792, + "best_effort_timestamp_time": "0.704000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "211182", + "pkt_size": "986", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 34816, + "pkt_pts_time": "0.725333", + "pkt_dts": 34816, + "pkt_dts_time": "0.725333", + "best_effort_timestamp": 34816, + "best_effort_timestamp_time": "0.725333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "212168", + "pkt_size": "1053", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 9216, + "pkt_pts_time": "0.720000", + "pkt_dts": 9216, + "pkt_dts_time": "0.720000", + "best_effort_timestamp": 9216, + "best_effort_timestamp_time": "0.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "213221", + "pkt_size": "6291", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 18, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 35840, + "pkt_pts_time": "0.746667", + "pkt_dts": 35840, + "pkt_dts_time": "0.746667", + "best_effort_timestamp": 35840, + "best_effort_timestamp_time": "0.746667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "219512", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 36864, + "pkt_pts_time": "0.768000", + "pkt_dts": 36864, + "pkt_dts_time": "0.768000", + "best_effort_timestamp": 36864, + "best_effort_timestamp_time": "0.768000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "220478", + "pkt_size": "986", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 9728, + "pkt_pts_time": "0.760000", + "pkt_dts": 9728, + "pkt_dts_time": "0.760000", + "best_effort_timestamp": 9728, + "best_effort_timestamp_time": "0.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "221464", + "pkt_size": "6902", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 19, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 37888, + "pkt_pts_time": "0.789333", + "pkt_dts": 37888, + "pkt_dts_time": "0.789333", + "best_effort_timestamp": 37888, + "best_effort_timestamp_time": "0.789333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "228366", + "pkt_size": "951", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 38912, + "pkt_pts_time": "0.810667", + "pkt_dts": 38912, + "pkt_dts_time": "0.810667", + "best_effort_timestamp": 38912, + "best_effort_timestamp_time": "0.810667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "229317", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 10240, + "pkt_pts_time": "0.800000", + "pkt_dts": 10240, + "pkt_dts_time": "0.800000", + "best_effort_timestamp": 10240, + "best_effort_timestamp_time": "0.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "230339", + "pkt_size": "6916", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 20, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 39936, + "pkt_pts_time": "0.832000", + "pkt_dts": 39936, + "pkt_dts_time": "0.832000", + "best_effort_timestamp": 39936, + "best_effort_timestamp_time": "0.832000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "237255", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 40960, + "pkt_pts_time": "0.853333", + "pkt_dts": 40960, + "pkt_dts_time": "0.853333", + "best_effort_timestamp": 40960, + "best_effort_timestamp_time": "0.853333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "238238", + "pkt_size": "975", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 10752, + "pkt_pts_time": "0.840000", + "pkt_dts": 10752, + "pkt_dts_time": "0.840000", + "best_effort_timestamp": 10752, + "best_effort_timestamp_time": "0.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "239213", + "pkt_size": "7469", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 21, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 41984, + "pkt_pts_time": "0.874667", + "pkt_dts": 41984, + "pkt_dts_time": "0.874667", + "best_effort_timestamp": 41984, + "best_effort_timestamp_time": "0.874667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "246682", + "pkt_size": "968", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 43008, + "pkt_pts_time": "0.896000", + "pkt_dts": 43008, + "pkt_dts_time": "0.896000", + "best_effort_timestamp": 43008, + "best_effort_timestamp_time": "0.896000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "247650", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 11264, + "pkt_pts_time": "0.880000", + "pkt_dts": 11264, + "pkt_dts_time": "0.880000", + "best_effort_timestamp": 11264, + "best_effort_timestamp_time": "0.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "248668", + "pkt_size": "7152", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 22, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 44032, + "pkt_pts_time": "0.917333", + "pkt_dts": 44032, + "pkt_dts_time": "0.917333", + "best_effort_timestamp": 44032, + "best_effort_timestamp_time": "0.917333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "255820", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 11776, + "pkt_pts_time": "0.920000", + "pkt_dts": 11776, + "pkt_dts_time": "0.920000", + "best_effort_timestamp": 11776, + "best_effort_timestamp_time": "0.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "256778", + "pkt_size": "7607", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 23, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 45056, + "pkt_pts_time": "0.938667", + "pkt_dts": 45056, + "pkt_dts_time": "0.938667", + "best_effort_timestamp": 45056, + "best_effort_timestamp_time": "0.938667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "264385", + "pkt_size": "940", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 46080, + "pkt_pts_time": "0.960000", + "pkt_dts": 46080, + "pkt_dts_time": "0.960000", + "best_effort_timestamp": 46080, + "best_effort_timestamp_time": "0.960000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "265325", + "pkt_size": "942", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 12288, + "pkt_pts_time": "0.960000", + "pkt_dts": 12288, + "pkt_dts_time": "0.960000", + "best_effort_timestamp": 12288, + "best_effort_timestamp_time": "0.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "266267", + "pkt_size": "7663", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 24, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 47104, + "pkt_pts_time": "0.981333", + "pkt_dts": 47104, + "pkt_dts_time": "0.981333", + "best_effort_timestamp": 47104, + "best_effort_timestamp_time": "0.981333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "273930", + "pkt_size": "960", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 48128, + "pkt_pts_time": "1.002667", + "pkt_dts": 48128, + "pkt_dts_time": "1.002667", + "best_effort_timestamp": 48128, + "best_effort_timestamp_time": "1.002667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "274890", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 12800, + "pkt_pts_time": "1.000000", + "pkt_dts": 12800, + "pkt_dts_time": "1.000000", + "best_effort_timestamp": 12800, + "best_effort_timestamp_time": "1.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "275917", + "pkt_size": "7637", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 25, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 49152, + "pkt_pts_time": "1.024000", + "pkt_dts": 49152, + "pkt_dts_time": "1.024000", + "best_effort_timestamp": 49152, + "best_effort_timestamp_time": "1.024000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "283554", + "pkt_size": "953", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 50176, + "pkt_pts_time": "1.045333", + "pkt_dts": 50176, + "pkt_dts_time": "1.045333", + "best_effort_timestamp": 50176, + "best_effort_timestamp_time": "1.045333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "284507", + "pkt_size": "906", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 13312, + "pkt_pts_time": "1.040000", + "pkt_dts": 13312, + "pkt_dts_time": "1.040000", + "best_effort_timestamp": 13312, + "best_effort_timestamp_time": "1.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "285413", + "pkt_size": "7241", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 26, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 51200, + "pkt_pts_time": "1.066667", + "pkt_dts": 51200, + "pkt_dts_time": "1.066667", + "best_effort_timestamp": 51200, + "best_effort_timestamp_time": "1.066667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "292654", + "pkt_size": "882", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 52224, + "pkt_pts_time": "1.088000", + "pkt_dts": 52224, + "pkt_dts_time": "1.088000", + "best_effort_timestamp": 52224, + "best_effort_timestamp_time": "1.088000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "293536", + "pkt_size": "943", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 13824, + "pkt_pts_time": "1.080000", + "pkt_dts": 13824, + "pkt_dts_time": "1.080000", + "best_effort_timestamp": 13824, + "best_effort_timestamp_time": "1.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "294479", + "pkt_size": "7520", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 27, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 53248, + "pkt_pts_time": "1.109333", + "pkt_dts": 53248, + "pkt_dts_time": "1.109333", + "best_effort_timestamp": 53248, + "best_effort_timestamp_time": "1.109333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "301999", + "pkt_size": "896", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 54272, + "pkt_pts_time": "1.130667", + "pkt_dts": 54272, + "pkt_dts_time": "1.130667", + "best_effort_timestamp": 54272, + "best_effort_timestamp_time": "1.130667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "302895", + "pkt_size": "901", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 14336, + "pkt_pts_time": "1.120000", + "pkt_dts": 14336, + "pkt_dts_time": "1.120000", + "best_effort_timestamp": 14336, + "best_effort_timestamp_time": "1.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "303796", + "pkt_size": "7233", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 28, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 55296, + "pkt_pts_time": "1.152000", + "pkt_dts": 55296, + "pkt_dts_time": "1.152000", + "best_effort_timestamp": 55296, + "best_effort_timestamp_time": "1.152000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "311029", + "pkt_size": "933", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 56320, + "pkt_pts_time": "1.173333", + "pkt_dts": 56320, + "pkt_dts_time": "1.173333", + "best_effort_timestamp": 56320, + "best_effort_timestamp_time": "1.173333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "311962", + "pkt_size": "961", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 14848, + "pkt_pts_time": "1.160000", + "pkt_dts": 14848, + "pkt_dts_time": "1.160000", + "best_effort_timestamp": 14848, + "best_effort_timestamp_time": "1.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "312923", + "pkt_size": "7677", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 29, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 57344, + "pkt_pts_time": "1.194667", + "pkt_dts": 57344, + "pkt_dts_time": "1.194667", + "best_effort_timestamp": 57344, + "best_effort_timestamp_time": "1.194667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "320600", + "pkt_size": "948", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 58368, + "pkt_pts_time": "1.216000", + "pkt_dts": 58368, + "pkt_dts_time": "1.216000", + "best_effort_timestamp": 58368, + "best_effort_timestamp_time": "1.216000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "321548", + "pkt_size": "946", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 15360, + "pkt_pts_time": "1.200000", + "pkt_dts": 15360, + "pkt_dts_time": "1.200000", + "best_effort_timestamp": 15360, + "best_effort_timestamp_time": "1.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "322494", + "pkt_size": "7210", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 30, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 59392, + "pkt_pts_time": "1.237333", + "pkt_dts": 59392, + "pkt_dts_time": "1.237333", + "best_effort_timestamp": 59392, + "best_effort_timestamp_time": "1.237333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "329704", + "pkt_size": "937", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 15872, + "pkt_pts_time": "1.240000", + "pkt_dts": 15872, + "pkt_dts_time": "1.240000", + "best_effort_timestamp": 15872, + "best_effort_timestamp_time": "1.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "330641", + "pkt_size": "8123", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 31, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 60416, + "pkt_pts_time": "1.258667", + "pkt_dts": 60416, + "pkt_dts_time": "1.258667", + "best_effort_timestamp": 60416, + "best_effort_timestamp_time": "1.258667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "338764", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 61440, + "pkt_pts_time": "1.280000", + "pkt_dts": 61440, + "pkt_dts_time": "1.280000", + "best_effort_timestamp": 61440, + "best_effort_timestamp_time": "1.280000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "339730", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 16384, + "pkt_pts_time": "1.280000", + "pkt_dts": 16384, + "pkt_dts_time": "1.280000", + "best_effort_timestamp": 16384, + "best_effort_timestamp_time": "1.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "340695", + "pkt_size": "791", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 32, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 62464, + "pkt_pts_time": "1.301333", + "pkt_dts": 62464, + "pkt_dts_time": "1.301333", + "best_effort_timestamp": 62464, + "best_effort_timestamp_time": "1.301333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "341486", + "pkt_size": "964", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 63488, + "pkt_pts_time": "1.322667", + "pkt_dts": 63488, + "pkt_dts_time": "1.322667", + "best_effort_timestamp": 63488, + "best_effort_timestamp_time": "1.322667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "342450", + "pkt_size": "960", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 16896, + "pkt_pts_time": "1.320000", + "pkt_dts": 16896, + "pkt_dts_time": "1.320000", + "best_effort_timestamp": 16896, + "best_effort_timestamp_time": "1.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "343410", + "pkt_size": "6174", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 33, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 64512, + "pkt_pts_time": "1.344000", + "pkt_dts": 64512, + "pkt_dts_time": "1.344000", + "best_effort_timestamp": 64512, + "best_effort_timestamp_time": "1.344000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "349584", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 65536, + "pkt_pts_time": "1.365333", + "pkt_dts": 65536, + "pkt_dts_time": "1.365333", + "best_effort_timestamp": 65536, + "best_effort_timestamp_time": "1.365333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "350567", + "pkt_size": "949", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 17408, + "pkt_pts_time": "1.360000", + "pkt_dts": 17408, + "pkt_dts_time": "1.360000", + "best_effort_timestamp": 17408, + "best_effort_timestamp_time": "1.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "351516", + "pkt_size": "6906", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 34, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 66560, + "pkt_pts_time": "1.386667", + "pkt_dts": 66560, + "pkt_dts_time": "1.386667", + "best_effort_timestamp": 66560, + "best_effort_timestamp_time": "1.386667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "358422", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 67584, + "pkt_pts_time": "1.408000", + "pkt_dts": 67584, + "pkt_dts_time": "1.408000", + "best_effort_timestamp": 67584, + "best_effort_timestamp_time": "1.408000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "359404", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 17920, + "pkt_pts_time": "1.400000", + "pkt_dts": 17920, + "pkt_dts_time": "1.400000", + "best_effort_timestamp": 17920, + "best_effort_timestamp_time": "1.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "360370", + "pkt_size": "7002", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 35, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 68608, + "pkt_pts_time": "1.429333", + "pkt_dts": 68608, + "pkt_dts_time": "1.429333", + "best_effort_timestamp": 68608, + "best_effort_timestamp_time": "1.429333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "367372", + "pkt_size": "974", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 69632, + "pkt_pts_time": "1.450667", + "pkt_dts": 69632, + "pkt_dts_time": "1.450667", + "best_effort_timestamp": 69632, + "best_effort_timestamp_time": "1.450667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "368346", + "pkt_size": "998", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 18432, + "pkt_pts_time": "1.440000", + "pkt_dts": 18432, + "pkt_dts_time": "1.440000", + "best_effort_timestamp": 18432, + "best_effort_timestamp_time": "1.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "369344", + "pkt_size": "7519", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 36, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 70656, + "pkt_pts_time": "1.472000", + "pkt_dts": 70656, + "pkt_dts_time": "1.472000", + "best_effort_timestamp": 70656, + "best_effort_timestamp_time": "1.472000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "376863", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 71680, + "pkt_pts_time": "1.493333", + "pkt_dts": 71680, + "pkt_dts_time": "1.493333", + "best_effort_timestamp": 71680, + "best_effort_timestamp_time": "1.493333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "377841", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 18944, + "pkt_pts_time": "1.480000", + "pkt_dts": 18944, + "pkt_dts_time": "1.480000", + "best_effort_timestamp": 18944, + "best_effort_timestamp_time": "1.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "378851", + "pkt_size": "7508", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 37, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 72704, + "pkt_pts_time": "1.514667", + "pkt_dts": 72704, + "pkt_dts_time": "1.514667", + "best_effort_timestamp": 72704, + "best_effort_timestamp_time": "1.514667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "386359", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 73728, + "pkt_pts_time": "1.536000", + "pkt_dts": 73728, + "pkt_dts_time": "1.536000", + "best_effort_timestamp": 73728, + "best_effort_timestamp_time": "1.536000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "387317", + "pkt_size": "1017", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 19456, + "pkt_pts_time": "1.520000", + "pkt_dts": 19456, + "pkt_dts_time": "1.520000", + "best_effort_timestamp": 19456, + "best_effort_timestamp_time": "1.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "388334", + "pkt_size": "8218", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 38, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 74752, + "pkt_pts_time": "1.557333", + "pkt_dts": 74752, + "pkt_dts_time": "1.557333", + "best_effort_timestamp": 74752, + "best_effort_timestamp_time": "1.557333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "396552", + "pkt_size": "999", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 19968, + "pkt_pts_time": "1.560000", + "pkt_dts": 19968, + "pkt_dts_time": "1.560000", + "best_effort_timestamp": 19968, + "best_effort_timestamp_time": "1.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "397551", + "pkt_size": "8257", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 39, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 75776, + "pkt_pts_time": "1.578667", + "pkt_dts": 75776, + "pkt_dts_time": "1.578667", + "best_effort_timestamp": 75776, + "best_effort_timestamp_time": "1.578667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "405808", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 76800, + "pkt_pts_time": "1.600000", + "pkt_dts": 76800, + "pkt_dts_time": "1.600000", + "best_effort_timestamp": 76800, + "best_effort_timestamp_time": "1.600000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "406788", + "pkt_size": "995", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 20480, + "pkt_pts_time": "1.600000", + "pkt_dts": 20480, + "pkt_dts_time": "1.600000", + "best_effort_timestamp": 20480, + "best_effort_timestamp_time": "1.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "407783", + "pkt_size": "8619", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 40, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 77824, + "pkt_pts_time": "1.621333", + "pkt_dts": 77824, + "pkt_dts_time": "1.621333", + "best_effort_timestamp": 77824, + "best_effort_timestamp_time": "1.621333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "416402", + "pkt_size": "1025", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 78848, + "pkt_pts_time": "1.642667", + "pkt_dts": 78848, + "pkt_dts_time": "1.642667", + "best_effort_timestamp": 78848, + "best_effort_timestamp_time": "1.642667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "417427", + "pkt_size": "1011", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 20992, + "pkt_pts_time": "1.640000", + "pkt_dts": 20992, + "pkt_dts_time": "1.640000", + "best_effort_timestamp": 20992, + "best_effort_timestamp_time": "1.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "418438", + "pkt_size": "8071", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 41, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 79872, + "pkt_pts_time": "1.664000", + "pkt_dts": 79872, + "pkt_dts_time": "1.664000", + "best_effort_timestamp": 79872, + "best_effort_timestamp_time": "1.664000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "426509", + "pkt_size": "1001", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 80896, + "pkt_pts_time": "1.685333", + "pkt_dts": 80896, + "pkt_dts_time": "1.685333", + "best_effort_timestamp": 80896, + "best_effort_timestamp_time": "1.685333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "427510", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 21504, + "pkt_pts_time": "1.680000", + "pkt_dts": 21504, + "pkt_dts_time": "1.680000", + "best_effort_timestamp": 21504, + "best_effort_timestamp_time": "1.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "428529", + "pkt_size": "8266", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 42, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 81920, + "pkt_pts_time": "1.706667", + "pkt_dts": 81920, + "pkt_dts_time": "1.706667", + "best_effort_timestamp": 81920, + "best_effort_timestamp_time": "1.706667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "436795", + "pkt_size": "1002", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 82944, + "pkt_pts_time": "1.728000", + "pkt_dts": 82944, + "pkt_dts_time": "1.728000", + "best_effort_timestamp": 82944, + "best_effort_timestamp_time": "1.728000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "437797", + "pkt_size": "1052", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 22016, + "pkt_pts_time": "1.720000", + "pkt_dts": 22016, + "pkt_dts_time": "1.720000", + "best_effort_timestamp": 22016, + "best_effort_timestamp_time": "1.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "438849", + "pkt_size": "7790", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 43, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 83968, + "pkt_pts_time": "1.749333", + "pkt_dts": 83968, + "pkt_dts_time": "1.749333", + "best_effort_timestamp": 83968, + "best_effort_timestamp_time": "1.749333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "446639", + "pkt_size": "993", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 84992, + "pkt_pts_time": "1.770667", + "pkt_dts": 84992, + "pkt_dts_time": "1.770667", + "best_effort_timestamp": 84992, + "best_effort_timestamp_time": "1.770667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "447632", + "pkt_size": "1049", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 22528, + "pkt_pts_time": "1.760000", + "pkt_dts": 22528, + "pkt_dts_time": "1.760000", + "best_effort_timestamp": 22528, + "best_effort_timestamp_time": "1.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "448681", + "pkt_size": "7989", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 44, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 86016, + "pkt_pts_time": "1.792000", + "pkt_dts": 86016, + "pkt_dts_time": "1.792000", + "best_effort_timestamp": 86016, + "best_effort_timestamp_time": "1.792000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "456670", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 87040, + "pkt_pts_time": "1.813333", + "pkt_dts": 87040, + "pkt_dts_time": "1.813333", + "best_effort_timestamp": 87040, + "best_effort_timestamp_time": "1.813333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "457698", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 23040, + "pkt_pts_time": "1.800000", + "pkt_dts": 23040, + "pkt_dts_time": "1.800000", + "best_effort_timestamp": 23040, + "best_effort_timestamp_time": "1.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "458734", + "pkt_size": "7826", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 45, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 88064, + "pkt_pts_time": "1.834667", + "pkt_dts": 88064, + "pkt_dts_time": "1.834667", + "best_effort_timestamp": 88064, + "best_effort_timestamp_time": "1.834667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "466560", + "pkt_size": "1040", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 89088, + "pkt_pts_time": "1.856000", + "pkt_dts": 89088, + "pkt_dts_time": "1.856000", + "best_effort_timestamp": 89088, + "best_effort_timestamp_time": "1.856000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "467600", + "pkt_size": "1059", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 23552, + "pkt_pts_time": "1.840000", + "pkt_dts": 23552, + "pkt_dts_time": "1.840000", + "best_effort_timestamp": 23552, + "best_effort_timestamp_time": "1.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "468659", + "pkt_size": "7649", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 46, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 90112, + "pkt_pts_time": "1.877333", + "pkt_dts": 90112, + "pkt_dts_time": "1.877333", + "best_effort_timestamp": 90112, + "best_effort_timestamp_time": "1.877333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "476308", + "pkt_size": "1068", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 24064, + "pkt_pts_time": "1.880000", + "pkt_dts": 24064, + "pkt_dts_time": "1.880000", + "best_effort_timestamp": 24064, + "best_effort_timestamp_time": "1.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "477376", + "pkt_size": "6977", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 47, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 91136, + "pkt_pts_time": "1.898667", + "pkt_dts": 91136, + "pkt_dts_time": "1.898667", + "best_effort_timestamp": 91136, + "best_effort_timestamp_time": "1.898667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "484353", + "pkt_size": "1060", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 92160, + "pkt_pts_time": "1.920000", + "pkt_dts": 92160, + "pkt_dts_time": "1.920000", + "best_effort_timestamp": 92160, + "best_effort_timestamp_time": "1.920000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "485413", + "pkt_size": "1065", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 24576, + "pkt_pts_time": "1.920000", + "pkt_dts": 24576, + "pkt_dts_time": "1.920000", + "best_effort_timestamp": 24576, + "best_effort_timestamp_time": "1.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "486478", + "pkt_size": "6978", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 48, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 93184, + "pkt_pts_time": "1.941333", + "pkt_dts": 93184, + "pkt_dts_time": "1.941333", + "best_effort_timestamp": 93184, + "best_effort_timestamp_time": "1.941333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "493456", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 94208, + "pkt_pts_time": "1.962667", + "pkt_dts": 94208, + "pkt_dts_time": "1.962667", + "best_effort_timestamp": 94208, + "best_effort_timestamp_time": "1.962667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "494525", + "pkt_size": "1071", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 25088, + "pkt_pts_time": "1.960000", + "pkt_dts": 25088, + "pkt_dts_time": "1.960000", + "best_effort_timestamp": 25088, + "best_effort_timestamp_time": "1.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "495596", + "pkt_size": "6173", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 49, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 95232, + "pkt_pts_time": "1.984000", + "pkt_dts": 95232, + "pkt_dts_time": "1.984000", + "best_effort_timestamp": 95232, + "best_effort_timestamp_time": "1.984000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "501769", + "pkt_size": "1084", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 96256, + "pkt_pts_time": "2.005333", + "pkt_dts": 96256, + "pkt_dts_time": "2.005333", + "best_effort_timestamp": 96256, + "best_effort_timestamp_time": "2.005333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "502853", + "pkt_size": "1080", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 25600, + "pkt_pts_time": "2.000000", + "pkt_dts": 25600, + "pkt_dts_time": "2.000000", + "best_effort_timestamp": 25600, + "best_effort_timestamp_time": "2.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "503933", + "pkt_size": "6451", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 50, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 97280, + "pkt_pts_time": "2.026667", + "pkt_dts": 97280, + "pkt_dts_time": "2.026667", + "best_effort_timestamp": 97280, + "best_effort_timestamp_time": "2.026667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "510384", + "pkt_size": "1051", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 98304, + "pkt_pts_time": "2.048000", + "pkt_dts": 98304, + "pkt_dts_time": "2.048000", + "best_effort_timestamp": 98304, + "best_effort_timestamp_time": "2.048000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "511435", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 26112, + "pkt_pts_time": "2.040000", + "pkt_dts": 26112, + "pkt_dts_time": "2.040000", + "best_effort_timestamp": 26112, + "best_effort_timestamp_time": "2.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "512463", + "pkt_size": "6107", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 51, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 99328, + "pkt_pts_time": "2.069333", + "pkt_dts": 99328, + "pkt_dts_time": "2.069333", + "best_effort_timestamp": 99328, + "best_effort_timestamp_time": "2.069333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "518570", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 100352, + "pkt_pts_time": "2.090667", + "pkt_dts": 100352, + "pkt_dts_time": "2.090667", + "best_effort_timestamp": 100352, + "best_effort_timestamp_time": "2.090667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "519608", + "pkt_size": "1061", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 26624, + "pkt_pts_time": "2.080000", + "pkt_dts": 26624, + "pkt_dts_time": "2.080000", + "best_effort_timestamp": 26624, + "best_effort_timestamp_time": "2.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "520669", + "pkt_size": "5965", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 52, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 101376, + "pkt_pts_time": "2.112000", + "pkt_dts": 101376, + "pkt_dts_time": "2.112000", + "best_effort_timestamp": 101376, + "best_effort_timestamp_time": "2.112000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "526634", + "pkt_size": "1043", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 102400, + "pkt_pts_time": "2.133333", + "pkt_dts": 102400, + "pkt_dts_time": "2.133333", + "best_effort_timestamp": 102400, + "best_effort_timestamp_time": "2.133333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "527677", + "pkt_size": "1040", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 27136, + "pkt_pts_time": "2.120000", + "pkt_dts": 27136, + "pkt_dts_time": "2.120000", + "best_effort_timestamp": 27136, + "best_effort_timestamp_time": "2.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "528717", + "pkt_size": "5819", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 53, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 103424, + "pkt_pts_time": "2.154667", + "pkt_dts": 103424, + "pkt_dts_time": "2.154667", + "best_effort_timestamp": 103424, + "best_effort_timestamp_time": "2.154667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "534536", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 104448, + "pkt_pts_time": "2.176000", + "pkt_dts": 104448, + "pkt_dts_time": "2.176000", + "best_effort_timestamp": 104448, + "best_effort_timestamp_time": "2.176000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "535560", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 27648, + "pkt_pts_time": "2.160000", + "pkt_dts": 27648, + "pkt_dts_time": "2.160000", + "best_effort_timestamp": 27648, + "best_effort_timestamp_time": "2.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "536596", + "pkt_size": "6114", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 54, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 105472, + "pkt_pts_time": "2.197333", + "pkt_dts": 105472, + "pkt_dts_time": "2.197333", + "best_effort_timestamp": 105472, + "best_effort_timestamp_time": "2.197333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "542710", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 28160, + "pkt_pts_time": "2.200000", + "pkt_dts": 28160, + "pkt_dts_time": "2.200000", + "best_effort_timestamp": 28160, + "best_effort_timestamp_time": "2.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "543722", + "pkt_size": "6064", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 55, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 106496, + "pkt_pts_time": "2.218667", + "pkt_dts": 106496, + "pkt_dts_time": "2.218667", + "best_effort_timestamp": 106496, + "best_effort_timestamp_time": "2.218667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "549786", + "pkt_size": "1031", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 107520, + "pkt_pts_time": "2.240000", + "pkt_dts": 107520, + "pkt_dts_time": "2.240000", + "best_effort_timestamp": 107520, + "best_effort_timestamp_time": "2.240000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "550817", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 28672, + "pkt_pts_time": "2.240000", + "pkt_dts": 28672, + "pkt_dts_time": "2.240000", + "best_effort_timestamp": 28672, + "best_effort_timestamp_time": "2.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "551827", + "pkt_size": "6639", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 56, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 108544, + "pkt_pts_time": "2.261333", + "pkt_dts": 108544, + "pkt_dts_time": "2.261333", + "best_effort_timestamp": 108544, + "best_effort_timestamp_time": "2.261333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "558466", + "pkt_size": "1032", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 109568, + "pkt_pts_time": "2.282667", + "pkt_dts": 109568, + "pkt_dts_time": "2.282667", + "best_effort_timestamp": 109568, + "best_effort_timestamp_time": "2.282667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "559498", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 29184, + "pkt_pts_time": "2.280000", + "pkt_dts": 29184, + "pkt_dts_time": "2.280000", + "best_effort_timestamp": 29184, + "best_effort_timestamp_time": "2.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "560525", + "pkt_size": "718", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 57, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 110592, + "pkt_pts_time": "2.304000", + "pkt_dts": 110592, + "pkt_dts_time": "2.304000", + "best_effort_timestamp": 110592, + "best_effort_timestamp_time": "2.304000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "561243", + "pkt_size": "1045", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 111616, + "pkt_pts_time": "2.325333", + "pkt_dts": 111616, + "pkt_dts_time": "2.325333", + "best_effort_timestamp": 111616, + "best_effort_timestamp_time": "2.325333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "562288", + "pkt_size": "1034", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 29696, + "pkt_pts_time": "2.320000", + "pkt_dts": 29696, + "pkt_dts_time": "2.320000", + "best_effort_timestamp": 29696, + "best_effort_timestamp_time": "2.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "563322", + "pkt_size": "4886", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 58, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 112640, + "pkt_pts_time": "2.346667", + "pkt_dts": 112640, + "pkt_dts_time": "2.346667", + "best_effort_timestamp": 112640, + "best_effort_timestamp_time": "2.346667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "568208", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 113664, + "pkt_pts_time": "2.368000", + "pkt_dts": 113664, + "pkt_dts_time": "2.368000", + "best_effort_timestamp": 113664, + "best_effort_timestamp_time": "2.368000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "569243", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 30208, + "pkt_pts_time": "2.360000", + "pkt_dts": 30208, + "pkt_dts_time": "2.360000", + "best_effort_timestamp": 30208, + "best_effort_timestamp_time": "2.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "570281", + "pkt_size": "5456", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 59, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 114688, + "pkt_pts_time": "2.389333", + "pkt_dts": 114688, + "pkt_dts_time": "2.389333", + "best_effort_timestamp": 114688, + "best_effort_timestamp_time": "2.389333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "575737", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 115712, + "pkt_pts_time": "2.410667", + "pkt_dts": 115712, + "pkt_dts_time": "2.410667", + "best_effort_timestamp": 115712, + "best_effort_timestamp_time": "2.410667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "576761", + "pkt_size": "1034", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 30720, + "pkt_pts_time": "2.400000", + "pkt_dts": 30720, + "pkt_dts_time": "2.400000", + "best_effort_timestamp": 30720, + "best_effort_timestamp_time": "2.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "577795", + "pkt_size": "5298", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 60, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 116736, + "pkt_pts_time": "2.432000", + "pkt_dts": 116736, + "pkt_dts_time": "2.432000", + "best_effort_timestamp": 116736, + "best_effort_timestamp_time": "2.432000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "583093", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 117760, + "pkt_pts_time": "2.453333", + "pkt_dts": 117760, + "pkt_dts_time": "2.453333", + "best_effort_timestamp": 117760, + "best_effort_timestamp_time": "2.453333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "584117", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 31232, + "pkt_pts_time": "2.440000", + "pkt_dts": 31232, + "pkt_dts_time": "2.440000", + "best_effort_timestamp": 31232, + "best_effort_timestamp_time": "2.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "585141", + "pkt_size": "5693", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 61, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 118784, + "pkt_pts_time": "2.474667", + "pkt_dts": 118784, + "pkt_dts_time": "2.474667", + "best_effort_timestamp": 118784, + "best_effort_timestamp_time": "2.474667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "590834", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 119808, + "pkt_pts_time": "2.496000", + "pkt_dts": 119808, + "pkt_dts_time": "2.496000", + "best_effort_timestamp": 119808, + "best_effort_timestamp_time": "2.496000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "591846", + "pkt_size": "1005", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 31744, + "pkt_pts_time": "2.480000", + "pkt_dts": 31744, + "pkt_dts_time": "2.480000", + "best_effort_timestamp": 31744, + "best_effort_timestamp_time": "2.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "592851", + "pkt_size": "5643", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 62, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 120832, + "pkt_pts_time": "2.517333", + "pkt_dts": 120832, + "pkt_dts_time": "2.517333", + "best_effort_timestamp": 120832, + "best_effort_timestamp_time": "2.517333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "598494", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 32256, + "pkt_pts_time": "2.520000", + "pkt_dts": 32256, + "pkt_dts_time": "2.520000", + "best_effort_timestamp": 32256, + "best_effort_timestamp_time": "2.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "599504", + "pkt_size": "5834", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 63, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 121856, + "pkt_pts_time": "2.538667", + "pkt_dts": 121856, + "pkt_dts_time": "2.538667", + "best_effort_timestamp": 121856, + "best_effort_timestamp_time": "2.538667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "605338", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 122880, + "pkt_pts_time": "2.560000", + "pkt_dts": 122880, + "pkt_dts_time": "2.560000", + "best_effort_timestamp": 122880, + "best_effort_timestamp_time": "2.560000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "606357", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 32768, + "pkt_pts_time": "2.560000", + "pkt_dts": 32768, + "pkt_dts_time": "2.560000", + "best_effort_timestamp": 32768, + "best_effort_timestamp_time": "2.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "607363", + "pkt_size": "5615", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 64, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 123904, + "pkt_pts_time": "2.581333", + "pkt_dts": 123904, + "pkt_dts_time": "2.581333", + "best_effort_timestamp": 123904, + "best_effort_timestamp_time": "2.581333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "612978", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 124928, + "pkt_pts_time": "2.602667", + "pkt_dts": 124928, + "pkt_dts_time": "2.602667", + "best_effort_timestamp": 124928, + "best_effort_timestamp_time": "2.602667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "614004", + "pkt_size": "1023", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 33280, + "pkt_pts_time": "2.600000", + "pkt_dts": 33280, + "pkt_dts_time": "2.600000", + "best_effort_timestamp": 33280, + "best_effort_timestamp_time": "2.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "615027", + "pkt_size": "5730", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 65, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 125952, + "pkt_pts_time": "2.624000", + "pkt_dts": 125952, + "pkt_dts_time": "2.624000", + "best_effort_timestamp": 125952, + "best_effort_timestamp_time": "2.624000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "620757", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 126976, + "pkt_pts_time": "2.645333", + "pkt_dts": 126976, + "pkt_dts_time": "2.645333", + "best_effort_timestamp": 126976, + "best_effort_timestamp_time": "2.645333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "621785", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 33792, + "pkt_pts_time": "2.640000", + "pkt_dts": 33792, + "pkt_dts_time": "2.640000", + "best_effort_timestamp": 33792, + "best_effort_timestamp_time": "2.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "622822", + "pkt_size": "5239", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 66, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 128000, + "pkt_pts_time": "2.666667", + "pkt_dts": 128000, + "pkt_dts_time": "2.666667", + "best_effort_timestamp": 128000, + "best_effort_timestamp_time": "2.666667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "628061", + "pkt_size": "1050", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 129024, + "pkt_pts_time": "2.688000", + "pkt_dts": 129024, + "pkt_dts_time": "2.688000", + "best_effort_timestamp": 129024, + "best_effort_timestamp_time": "2.688000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "629111", + "pkt_size": "1052", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 34304, + "pkt_pts_time": "2.680000", + "pkt_dts": 34304, + "pkt_dts_time": "2.680000", + "best_effort_timestamp": 34304, + "best_effort_timestamp_time": "2.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "630163", + "pkt_size": "6164", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 67, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 130048, + "pkt_pts_time": "2.709333", + "pkt_dts": 130048, + "pkt_dts_time": "2.709333", + "best_effort_timestamp": 130048, + "best_effort_timestamp_time": "2.709333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "636327", + "pkt_size": "1033", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 131072, + "pkt_pts_time": "2.730667", + "pkt_dts": 131072, + "pkt_dts_time": "2.730667", + "best_effort_timestamp": 131072, + "best_effort_timestamp_time": "2.730667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "637360", + "pkt_size": "1064", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 34816, + "pkt_pts_time": "2.720000", + "pkt_dts": 34816, + "pkt_dts_time": "2.720000", + "best_effort_timestamp": 34816, + "best_effort_timestamp_time": "2.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "638424", + "pkt_size": "6158", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 68, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 132096, + "pkt_pts_time": "2.752000", + "pkt_dts": 132096, + "pkt_dts_time": "2.752000", + "best_effort_timestamp": 132096, + "best_effort_timestamp_time": "2.752000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "644582", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 133120, + "pkt_pts_time": "2.773333", + "pkt_dts": 133120, + "pkt_dts_time": "2.773333", + "best_effort_timestamp": 133120, + "best_effort_timestamp_time": "2.773333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "645620", + "pkt_size": "1047", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 35328, + "pkt_pts_time": "2.760000", + "pkt_dts": 35328, + "pkt_dts_time": "2.760000", + "best_effort_timestamp": 35328, + "best_effort_timestamp_time": "2.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "646667", + "pkt_size": "6607", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 69, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 134144, + "pkt_pts_time": "2.794667", + "pkt_dts": 134144, + "pkt_dts_time": "2.794667", + "best_effort_timestamp": 134144, + "best_effort_timestamp_time": "2.794667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "653274", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 135168, + "pkt_pts_time": "2.816000", + "pkt_dts": 135168, + "pkt_dts_time": "2.816000", + "best_effort_timestamp": 135168, + "best_effort_timestamp_time": "2.816000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "654311", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 35840, + "pkt_pts_time": "2.800000", + "pkt_dts": 35840, + "pkt_dts_time": "2.800000", + "best_effort_timestamp": 35840, + "best_effort_timestamp_time": "2.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "655333", + "pkt_size": "6545", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 70, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 136192, + "pkt_pts_time": "2.837333", + "pkt_dts": 136192, + "pkt_dts_time": "2.837333", + "best_effort_timestamp": 136192, + "best_effort_timestamp_time": "2.837333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "661878", + "pkt_size": "1033", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 36352, + "pkt_pts_time": "2.840000", + "pkt_dts": 36352, + "pkt_dts_time": "2.840000", + "best_effort_timestamp": 36352, + "best_effort_timestamp_time": "2.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "662911", + "pkt_size": "6800", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 71, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 137216, + "pkt_pts_time": "2.858667", + "pkt_dts": 137216, + "pkt_dts_time": "2.858667", + "best_effort_timestamp": 137216, + "best_effort_timestamp_time": "2.858667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "669711", + "pkt_size": "1039", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 138240, + "pkt_pts_time": "2.880000", + "pkt_dts": 138240, + "pkt_dts_time": "2.880000", + "best_effort_timestamp": 138240, + "best_effort_timestamp_time": "2.880000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "670750", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 36864, + "pkt_pts_time": "2.880000", + "pkt_dts": 36864, + "pkt_dts_time": "2.880000", + "best_effort_timestamp": 36864, + "best_effort_timestamp_time": "2.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "671785", + "pkt_size": "6904", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 72, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 139264, + "pkt_pts_time": "2.901333", + "pkt_dts": 139264, + "pkt_dts_time": "2.901333", + "best_effort_timestamp": 139264, + "best_effort_timestamp_time": "2.901333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "678689", + "pkt_size": "1025", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 140288, + "pkt_pts_time": "2.922667", + "pkt_dts": 140288, + "pkt_dts_time": "2.922667", + "best_effort_timestamp": 140288, + "best_effort_timestamp_time": "2.922667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "679714", + "pkt_size": "1013", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 37376, + "pkt_pts_time": "2.920000", + "pkt_dts": 37376, + "pkt_dts_time": "2.920000", + "best_effort_timestamp": 37376, + "best_effort_timestamp_time": "2.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "680727", + "pkt_size": "7146", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 73, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 141312, + "pkt_pts_time": "2.944000", + "pkt_dts": 141312, + "pkt_dts_time": "2.944000", + "best_effort_timestamp": 141312, + "best_effort_timestamp_time": "2.944000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "687873", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 142336, + "pkt_pts_time": "2.965333", + "pkt_dts": 142336, + "pkt_dts_time": "2.965333", + "best_effort_timestamp": 142336, + "best_effort_timestamp_time": "2.965333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "688899", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 37888, + "pkt_pts_time": "2.960000", + "pkt_dts": 37888, + "pkt_dts_time": "2.960000", + "best_effort_timestamp": 37888, + "best_effort_timestamp_time": "2.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "689925", + "pkt_size": "7137", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 74, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 143360, + "pkt_pts_time": "2.986667", + "pkt_dts": 143360, + "pkt_dts_time": "2.986667", + "best_effort_timestamp": 143360, + "best_effort_timestamp_time": "2.986667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "697062", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 144384, + "pkt_pts_time": "3.008000", + "pkt_dts": 144384, + "pkt_dts_time": "3.008000", + "best_effort_timestamp": 144384, + "best_effort_timestamp_time": "3.008000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "698074", + "pkt_size": "1029", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 38400, + "pkt_pts_time": "3.000000", + "pkt_dts": 38400, + "pkt_dts_time": "3.000000", + "best_effort_timestamp": 38400, + "best_effort_timestamp_time": "3.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "699103", + "pkt_size": "7723", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 75, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 145408, + "pkt_pts_time": "3.029333", + "pkt_dts": 145408, + "pkt_dts_time": "3.029333", + "best_effort_timestamp": 145408, + "best_effort_timestamp_time": "3.029333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "706826", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 146432, + "pkt_pts_time": "3.050667", + "pkt_dts": 146432, + "pkt_dts_time": "3.050667", + "best_effort_timestamp": 146432, + "best_effort_timestamp_time": "3.050667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "707848", + "pkt_size": "1007", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 38912, + "pkt_pts_time": "3.040000", + "pkt_dts": 38912, + "pkt_dts_time": "3.040000", + "best_effort_timestamp": 38912, + "best_effort_timestamp_time": "3.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "708855", + "pkt_size": "7585", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 76, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 147456, + "pkt_pts_time": "3.072000", + "pkt_dts": 147456, + "pkt_dts_time": "3.072000", + "best_effort_timestamp": 147456, + "best_effort_timestamp_time": "3.072000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "716440", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 148480, + "pkt_pts_time": "3.093333", + "pkt_dts": 148480, + "pkt_dts_time": "3.093333", + "best_effort_timestamp": 148480, + "best_effort_timestamp_time": "3.093333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "717444", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 39424, + "pkt_pts_time": "3.080000", + "pkt_dts": 39424, + "pkt_dts_time": "3.080000", + "best_effort_timestamp": 39424, + "best_effort_timestamp_time": "3.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "718426", + "pkt_size": "8652", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 77, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 149504, + "pkt_pts_time": "3.114667", + "pkt_dts": 149504, + "pkt_dts_time": "3.114667", + "best_effort_timestamp": 149504, + "best_effort_timestamp_time": "3.114667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "727078", + "pkt_size": "1097", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 150528, + "pkt_pts_time": "3.136000", + "pkt_dts": 150528, + "pkt_dts_time": "3.136000", + "best_effort_timestamp": 150528, + "best_effort_timestamp_time": "3.136000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "728175", + "pkt_size": "1021", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 39936, + "pkt_pts_time": "3.120000", + "pkt_dts": 39936, + "pkt_dts_time": "3.120000", + "best_effort_timestamp": 39936, + "best_effort_timestamp_time": "3.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "729196", + "pkt_size": "6521", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 78, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 151552, + "pkt_pts_time": "3.157333", + "pkt_dts": 151552, + "pkt_dts_time": "3.157333", + "best_effort_timestamp": 151552, + "best_effort_timestamp_time": "3.157333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "735717", + "pkt_size": "1003", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 40448, + "pkt_pts_time": "3.160000", + "pkt_dts": 40448, + "pkt_dts_time": "3.160000", + "best_effort_timestamp": 40448, + "best_effort_timestamp_time": "3.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "736720", + "pkt_size": "8559", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 79, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 152576, + "pkt_pts_time": "3.178667", + "pkt_dts": 152576, + "pkt_dts_time": "3.178667", + "best_effort_timestamp": 152576, + "best_effort_timestamp_time": "3.178667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "745279", + "pkt_size": "1016", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 153600, + "pkt_pts_time": "3.200000", + "pkt_dts": 153600, + "pkt_dts_time": "3.200000", + "best_effort_timestamp": 153600, + "best_effort_timestamp_time": "3.200000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "746295", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 40960, + "pkt_pts_time": "3.200000", + "pkt_dts": 40960, + "pkt_dts_time": "3.200000", + "best_effort_timestamp": 40960, + "best_effort_timestamp_time": "3.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "747323", + "pkt_size": "8378", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 80, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 154624, + "pkt_pts_time": "3.221333", + "pkt_dts": 154624, + "pkt_dts_time": "3.221333", + "best_effort_timestamp": 154624, + "best_effort_timestamp_time": "3.221333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "755701", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 155648, + "pkt_pts_time": "3.242667", + "pkt_dts": 155648, + "pkt_dts_time": "3.242667", + "best_effort_timestamp": 155648, + "best_effort_timestamp_time": "3.242667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "756685", + "pkt_size": "989", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 41472, + "pkt_pts_time": "3.240000", + "pkt_dts": 41472, + "pkt_dts_time": "3.240000", + "best_effort_timestamp": 41472, + "best_effort_timestamp_time": "3.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "757674", + "pkt_size": "5619", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 81, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 156672, + "pkt_pts_time": "3.264000", + "pkt_dts": 156672, + "pkt_dts_time": "3.264000", + "best_effort_timestamp": 156672, + "best_effort_timestamp_time": "3.264000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "763293", + "pkt_size": "997", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 157696, + "pkt_pts_time": "3.285333", + "pkt_dts": 157696, + "pkt_dts_time": "3.285333", + "best_effort_timestamp": 157696, + "best_effort_timestamp_time": "3.285333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "764290", + "pkt_size": "988", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 41984, + "pkt_pts_time": "3.280000", + "pkt_dts": 41984, + "pkt_dts_time": "3.280000", + "best_effort_timestamp": 41984, + "best_effort_timestamp_time": "3.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "765278", + "pkt_size": "1678", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 82, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 158720, + "pkt_pts_time": "3.306667", + "pkt_dts": 158720, + "pkt_dts_time": "3.306667", + "best_effort_timestamp": 158720, + "best_effort_timestamp_time": "3.306667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "766956", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 159744, + "pkt_pts_time": "3.328000", + "pkt_dts": 159744, + "pkt_dts_time": "3.328000", + "best_effort_timestamp": 159744, + "best_effort_timestamp_time": "3.328000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "767960", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 42496, + "pkt_pts_time": "3.320000", + "pkt_dts": 42496, + "pkt_dts_time": "3.320000", + "best_effort_timestamp": 42496, + "best_effort_timestamp_time": "3.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "768964", + "pkt_size": "6616", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 83, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 160768, + "pkt_pts_time": "3.349333", + "pkt_dts": 160768, + "pkt_dts_time": "3.349333", + "best_effort_timestamp": 160768, + "best_effort_timestamp_time": "3.349333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "775580", + "pkt_size": "962", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 161792, + "pkt_pts_time": "3.370667", + "pkt_dts": 161792, + "pkt_dts_time": "3.370667", + "best_effort_timestamp": 161792, + "best_effort_timestamp_time": "3.370667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "776542", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 43008, + "pkt_pts_time": "3.360000", + "pkt_dts": 43008, + "pkt_dts_time": "3.360000", + "best_effort_timestamp": 43008, + "best_effort_timestamp_time": "3.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "777546", + "pkt_size": "7587", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 84, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 162816, + "pkt_pts_time": "3.392000", + "pkt_dts": 162816, + "pkt_dts_time": "3.392000", + "best_effort_timestamp": 162816, + "best_effort_timestamp_time": "3.392000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "785133", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 163840, + "pkt_pts_time": "3.413333", + "pkt_dts": 163840, + "pkt_dts_time": "3.413333", + "best_effort_timestamp": 163840, + "best_effort_timestamp_time": "3.413333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "786117", + "pkt_size": "1008", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 43520, + "pkt_pts_time": "3.400000", + "pkt_dts": 43520, + "pkt_dts_time": "3.400000", + "best_effort_timestamp": 43520, + "best_effort_timestamp_time": "3.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "787125", + "pkt_size": "3929", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 85, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 164864, + "pkt_pts_time": "3.434667", + "pkt_dts": 164864, + "pkt_dts_time": "3.434667", + "best_effort_timestamp": 164864, + "best_effort_timestamp_time": "3.434667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "791054", + "pkt_size": "1094", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 165888, + "pkt_pts_time": "3.456000", + "pkt_dts": 165888, + "pkt_dts_time": "3.456000", + "best_effort_timestamp": 165888, + "best_effort_timestamp_time": "3.456000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "792148", + "pkt_size": "1065", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 44032, + "pkt_pts_time": "3.440000", + "pkt_dts": 44032, + "pkt_dts_time": "3.440000", + "best_effort_timestamp": 44032, + "best_effort_timestamp_time": "3.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "793213", + "pkt_size": "5863", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 86, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 166912, + "pkt_pts_time": "3.477333", + "pkt_dts": 166912, + "pkt_dts_time": "3.477333", + "best_effort_timestamp": 166912, + "best_effort_timestamp_time": "3.477333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "799076", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 44544, + "pkt_pts_time": "3.480000", + "pkt_dts": 44544, + "pkt_dts_time": "3.480000", + "best_effort_timestamp": 44544, + "best_effort_timestamp_time": "3.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "800145", + "pkt_size": "5013", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 87, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 167936, + "pkt_pts_time": "3.498667", + "pkt_dts": 167936, + "pkt_dts_time": "3.498667", + "best_effort_timestamp": 167936, + "best_effort_timestamp_time": "3.498667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "805158", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 168960, + "pkt_pts_time": "3.520000", + "pkt_dts": 168960, + "pkt_dts_time": "3.520000", + "best_effort_timestamp": 168960, + "best_effort_timestamp_time": "3.520000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "806186", + "pkt_size": "1072", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 45056, + "pkt_pts_time": "3.520000", + "pkt_dts": 45056, + "pkt_dts_time": "3.520000", + "best_effort_timestamp": 45056, + "best_effort_timestamp_time": "3.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "807258", + "pkt_size": "7331", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 88, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 169984, + "pkt_pts_time": "3.541333", + "pkt_dts": 169984, + "pkt_dts_time": "3.541333", + "best_effort_timestamp": 169984, + "best_effort_timestamp_time": "3.541333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "814589", + "pkt_size": "1039", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 171008, + "pkt_pts_time": "3.562667", + "pkt_dts": 171008, + "pkt_dts_time": "3.562667", + "best_effort_timestamp": 171008, + "best_effort_timestamp_time": "3.562667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "815628", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 45568, + "pkt_pts_time": "3.560000", + "pkt_dts": 45568, + "pkt_dts_time": "3.560000", + "best_effort_timestamp": 45568, + "best_effort_timestamp_time": "3.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "816697", + "pkt_size": "2681", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 89, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 172032, + "pkt_pts_time": "3.584000", + "pkt_dts": 172032, + "pkt_dts_time": "3.584000", + "best_effort_timestamp": 172032, + "best_effort_timestamp_time": "3.584000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "819378", + "pkt_size": "1067", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 173056, + "pkt_pts_time": "3.605333", + "pkt_dts": 173056, + "pkt_dts_time": "3.605333", + "best_effort_timestamp": 173056, + "best_effort_timestamp_time": "3.605333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "820445", + "pkt_size": "1125", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 46080, + "pkt_pts_time": "3.600000", + "pkt_dts": 46080, + "pkt_dts_time": "3.600000", + "best_effort_timestamp": 46080, + "best_effort_timestamp_time": "3.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "821570", + "pkt_size": "3992", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 90, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 174080, + "pkt_pts_time": "3.626667", + "pkt_dts": 174080, + "pkt_dts_time": "3.626667", + "best_effort_timestamp": 174080, + "best_effort_timestamp_time": "3.626667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "825562", + "pkt_size": "1144", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 175104, + "pkt_pts_time": "3.648000", + "pkt_dts": 175104, + "pkt_dts_time": "3.648000", + "best_effort_timestamp": 175104, + "best_effort_timestamp_time": "3.648000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "826706", + "pkt_size": "1129", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 46592, + "pkt_pts_time": "3.640000", + "pkt_dts": 46592, + "pkt_dts_time": "3.640000", + "best_effort_timestamp": 46592, + "best_effort_timestamp_time": "3.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "827835", + "pkt_size": "2616", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 91, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 176128, + "pkt_pts_time": "3.669333", + "pkt_dts": 176128, + "pkt_dts_time": "3.669333", + "best_effort_timestamp": 176128, + "best_effort_timestamp_time": "3.669333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "830451", + "pkt_size": "1115", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 177152, + "pkt_pts_time": "3.690667", + "pkt_dts": 177152, + "pkt_dts_time": "3.690667", + "best_effort_timestamp": 177152, + "best_effort_timestamp_time": "3.690667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "831566", + "pkt_size": "1077", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 47104, + "pkt_pts_time": "3.680000", + "pkt_dts": 47104, + "pkt_dts_time": "3.680000", + "best_effort_timestamp": 47104, + "best_effort_timestamp_time": "3.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "832643", + "pkt_size": "2329", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 92, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 178176, + "pkt_pts_time": "3.712000", + "pkt_dts": 178176, + "pkt_dts_time": "3.712000", + "best_effort_timestamp": 178176, + "best_effort_timestamp_time": "3.712000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "834972", + "pkt_size": "1098", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 179200, + "pkt_pts_time": "3.733333", + "pkt_dts": 179200, + "pkt_dts_time": "3.733333", + "best_effort_timestamp": 179200, + "best_effort_timestamp_time": "3.733333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "836070", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 47616, + "pkt_pts_time": "3.720000", + "pkt_dts": 47616, + "pkt_dts_time": "3.720000", + "best_effort_timestamp": 47616, + "best_effort_timestamp_time": "3.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "837097", + "pkt_size": "2096", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 93, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 180224, + "pkt_pts_time": "3.754667", + "pkt_dts": 180224, + "pkt_dts_time": "3.754667", + "best_effort_timestamp": 180224, + "best_effort_timestamp_time": "3.754667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "839193", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 181248, + "pkt_pts_time": "3.776000", + "pkt_dts": 181248, + "pkt_dts_time": "3.776000", + "best_effort_timestamp": 181248, + "best_effort_timestamp_time": "3.776000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "840212", + "pkt_size": "1031", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 48128, + "pkt_pts_time": "3.760000", + "pkt_dts": 48128, + "pkt_dts_time": "3.760000", + "best_effort_timestamp": 48128, + "best_effort_timestamp_time": "3.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "841243", + "pkt_size": "2134", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 94, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 182272, + "pkt_pts_time": "3.797333", + "pkt_dts": 182272, + "pkt_dts_time": "3.797333", + "best_effort_timestamp": 182272, + "best_effort_timestamp_time": "3.797333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "843377", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 48640, + "pkt_pts_time": "3.800000", + "pkt_dts": 48640, + "pkt_dts_time": "3.800000", + "best_effort_timestamp": 48640, + "best_effort_timestamp_time": "3.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "844396", + "pkt_size": "1437", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 95, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 183296, + "pkt_pts_time": "3.818667", + "pkt_dts": 183296, + "pkt_dts_time": "3.818667", + "best_effort_timestamp": 183296, + "best_effort_timestamp_time": "3.818667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "845833", + "pkt_size": "1020", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 184320, + "pkt_pts_time": "3.840000", + "pkt_dts": 184320, + "pkt_dts_time": "3.840000", + "best_effort_timestamp": 184320, + "best_effort_timestamp_time": "3.840000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "846853", + "pkt_size": "1045", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 49152, + "pkt_pts_time": "3.840000", + "pkt_dts": 49152, + "pkt_dts_time": "3.840000", + "best_effort_timestamp": 49152, + "best_effort_timestamp_time": "3.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "847898", + "pkt_size": "1678", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 96, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 185344, + "pkt_pts_time": "3.861333", + "pkt_dts": 185344, + "pkt_dts_time": "3.861333", + "best_effort_timestamp": 185344, + "best_effort_timestamp_time": "3.861333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "849576", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 186368, + "pkt_pts_time": "3.882667", + "pkt_dts": 186368, + "pkt_dts_time": "3.882667", + "best_effort_timestamp": 186368, + "best_effort_timestamp_time": "3.882667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "850602", + "pkt_size": "1053", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 49664, + "pkt_pts_time": "3.880000", + "pkt_dts": 49664, + "pkt_dts_time": "3.880000", + "best_effort_timestamp": 49664, + "best_effort_timestamp_time": "3.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "851655", + "pkt_size": "3341", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 97, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 187392, + "pkt_pts_time": "3.904000", + "pkt_dts": 187392, + "pkt_dts_time": "3.904000", + "best_effort_timestamp": 187392, + "best_effort_timestamp_time": "3.904000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "854996", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 188416, + "pkt_pts_time": "3.925333", + "pkt_dts": 188416, + "pkt_dts_time": "3.925333", + "best_effort_timestamp": 188416, + "best_effort_timestamp_time": "3.925333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "856014", + "pkt_size": "956", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 50176, + "pkt_pts_time": "3.920000", + "pkt_dts": 50176, + "pkt_dts_time": "3.920000", + "best_effort_timestamp": 50176, + "best_effort_timestamp_time": "3.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "856970", + "pkt_size": "2658", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 98, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 189440, + "pkt_pts_time": "3.946667", + "pkt_dts": 189440, + "pkt_dts_time": "3.946667", + "best_effort_timestamp": 189440, + "best_effort_timestamp_time": "3.946667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "859628", + "pkt_size": "948", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 190464, + "pkt_pts_time": "3.968000", + "pkt_dts": 190464, + "pkt_dts_time": "3.968000", + "best_effort_timestamp": 190464, + "best_effort_timestamp_time": "3.968000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "860576", + "pkt_size": "942", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 50688, + "pkt_pts_time": "3.960000", + "pkt_dts": 50688, + "pkt_dts_time": "3.960000", + "best_effort_timestamp": 50688, + "best_effort_timestamp_time": "3.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "861518", + "pkt_size": "2686", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 99, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 191488, + "pkt_pts_time": "3.989333", + "pkt_dts": 191488, + "pkt_dts_time": "3.989333", + "best_effort_timestamp": 191488, + "best_effort_timestamp_time": "3.989333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "864204", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 192512, + "pkt_pts_time": "4.010667", + "pkt_dts": 192512, + "pkt_dts_time": "4.010667", + "best_effort_timestamp": 192512, + "best_effort_timestamp_time": "4.010667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "865210", + "pkt_size": "934", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 51200, + "pkt_pts_time": "4.000000", + "pkt_dts": 51200, + "pkt_dts_time": "4.000000", + "best_effort_timestamp": 51200, + "best_effort_timestamp_time": "4.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "866144", + "pkt_size": "2997", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 100, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 193536, + "pkt_pts_time": "4.032000", + "pkt_dts": 193536, + "pkt_dts_time": "4.032000", + "best_effort_timestamp": 193536, + "best_effort_timestamp_time": "4.032000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "869141", + "pkt_size": "939", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 194560, + "pkt_pts_time": "4.053333", + "pkt_dts": 194560, + "pkt_dts_time": "4.053333", + "best_effort_timestamp": 194560, + "best_effort_timestamp_time": "4.053333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "870080", + "pkt_size": "943", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 51712, + "pkt_pts_time": "4.040000", + "pkt_dts": 51712, + "pkt_dts_time": "4.040000", + "best_effort_timestamp": 51712, + "best_effort_timestamp_time": "4.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "871023", + "pkt_size": "3001", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 101, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 195584, + "pkt_pts_time": "4.074667", + "pkt_dts": 195584, + "pkt_dts_time": "4.074667", + "best_effort_timestamp": 195584, + "best_effort_timestamp_time": "4.074667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "874024", + "pkt_size": "970", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 196608, + "pkt_pts_time": "4.096000", + "pkt_dts": 196608, + "pkt_dts_time": "4.096000", + "best_effort_timestamp": 196608, + "best_effort_timestamp_time": "4.096000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "874994", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 52224, + "pkt_pts_time": "4.080000", + "pkt_dts": 52224, + "pkt_dts_time": "4.080000", + "best_effort_timestamp": 52224, + "best_effort_timestamp_time": "4.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "875959", + "pkt_size": "2614", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 102, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 197632, + "pkt_pts_time": "4.117333", + "pkt_dts": 197632, + "pkt_dts_time": "4.117333", + "best_effort_timestamp": 197632, + "best_effort_timestamp_time": "4.117333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "878573", + "pkt_size": "1098", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 52736, + "pkt_pts_time": "4.120000", + "pkt_dts": 52736, + "pkt_dts_time": "4.120000", + "best_effort_timestamp": 52736, + "best_effort_timestamp_time": "4.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "879671", + "pkt_size": "3587", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 103, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 198656, + "pkt_pts_time": "4.138667", + "pkt_dts": 198656, + "pkt_dts_time": "4.138667", + "best_effort_timestamp": 198656, + "best_effort_timestamp_time": "4.138667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "883258", + "pkt_size": "1067", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 199680, + "pkt_pts_time": "4.160000", + "pkt_dts": 199680, + "pkt_dts_time": "4.160000", + "best_effort_timestamp": 199680, + "best_effort_timestamp_time": "4.160000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "884325", + "pkt_size": "1021", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 53248, + "pkt_pts_time": "4.160000", + "pkt_dts": 53248, + "pkt_dts_time": "4.160000", + "best_effort_timestamp": 53248, + "best_effort_timestamp_time": "4.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "885346", + "pkt_size": "4599", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 104, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 200704, + "pkt_pts_time": "4.181333", + "pkt_dts": 200704, + "pkt_dts_time": "4.181333", + "best_effort_timestamp": 200704, + "best_effort_timestamp_time": "4.181333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "889945", + "pkt_size": "1009", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 201728, + "pkt_pts_time": "4.202667", + "pkt_dts": 201728, + "pkt_dts_time": "4.202667", + "best_effort_timestamp": 201728, + "best_effort_timestamp_time": "4.202667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "890954", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 53760, + "pkt_pts_time": "4.200000", + "pkt_dts": 53760, + "pkt_dts_time": "4.200000", + "best_effort_timestamp": 53760, + "best_effort_timestamp_time": "4.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "891990", + "pkt_size": "5642", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 105, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 202752, + "pkt_pts_time": "4.224000", + "pkt_dts": 202752, + "pkt_dts_time": "4.224000", + "best_effort_timestamp": 202752, + "best_effort_timestamp_time": "4.224000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "897632", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 203776, + "pkt_pts_time": "4.245333", + "pkt_dts": 203776, + "pkt_dts_time": "4.245333", + "best_effort_timestamp": 203776, + "best_effort_timestamp_time": "4.245333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "898667", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 54272, + "pkt_pts_time": "4.240000", + "pkt_dts": 54272, + "pkt_dts_time": "4.240000", + "best_effort_timestamp": 54272, + "best_effort_timestamp_time": "4.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "899691", + "pkt_size": "6757", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 106, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 204800, + "pkt_pts_time": "4.266667", + "pkt_dts": 204800, + "pkt_dts_time": "4.266667", + "best_effort_timestamp": 204800, + "best_effort_timestamp_time": "4.266667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "906448", + "pkt_size": "1074", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 205824, + "pkt_pts_time": "4.288000", + "pkt_dts": 205824, + "pkt_dts_time": "4.288000", + "best_effort_timestamp": 205824, + "best_effort_timestamp_time": "4.288000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "907522", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 54784, + "pkt_pts_time": "4.280000", + "pkt_dts": 54784, + "pkt_dts_time": "4.280000", + "best_effort_timestamp": 54784, + "best_effort_timestamp_time": "4.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "908559", + "pkt_size": "784", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 107, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 206848, + "pkt_pts_time": "4.309333", + "pkt_dts": 206848, + "pkt_dts_time": "4.309333", + "best_effort_timestamp": 206848, + "best_effort_timestamp_time": "4.309333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "909343", + "pkt_size": "1008", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 207872, + "pkt_pts_time": "4.330667", + "pkt_dts": 207872, + "pkt_dts_time": "4.330667", + "best_effort_timestamp": 207872, + "best_effort_timestamp_time": "4.330667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "910351", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 55296, + "pkt_pts_time": "4.320000", + "pkt_dts": 55296, + "pkt_dts_time": "4.320000", + "best_effort_timestamp": 55296, + "best_effort_timestamp_time": "4.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "911330", + "pkt_size": "5285", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 108, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 208896, + "pkt_pts_time": "4.352000", + "pkt_dts": 208896, + "pkt_dts_time": "4.352000", + "best_effort_timestamp": 208896, + "best_effort_timestamp_time": "4.352000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "916615", + "pkt_size": "1016", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 209920, + "pkt_pts_time": "4.373333", + "pkt_dts": 209920, + "pkt_dts_time": "4.373333", + "best_effort_timestamp": 209920, + "best_effort_timestamp_time": "4.373333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "917631", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 55808, + "pkt_pts_time": "4.360000", + "pkt_dts": 55808, + "pkt_dts_time": "4.360000", + "best_effort_timestamp": 55808, + "best_effort_timestamp_time": "4.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "918596", + "pkt_size": "5117", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 109, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 210944, + "pkt_pts_time": "4.394667", + "pkt_dts": 210944, + "pkt_dts_time": "4.394667", + "best_effort_timestamp": 210944, + "best_effort_timestamp_time": "4.394667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "923713", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 211968, + "pkt_pts_time": "4.416000", + "pkt_dts": 211968, + "pkt_dts_time": "4.416000", + "best_effort_timestamp": 211968, + "best_effort_timestamp_time": "4.416000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "924696", + "pkt_size": "976", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 56320, + "pkt_pts_time": "4.400000", + "pkt_dts": 56320, + "pkt_dts_time": "4.400000", + "best_effort_timestamp": 56320, + "best_effort_timestamp_time": "4.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "925672", + "pkt_size": "5553", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 110, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 212992, + "pkt_pts_time": "4.437333", + "pkt_dts": 212992, + "pkt_dts_time": "4.437333", + "best_effort_timestamp": 212992, + "best_effort_timestamp_time": "4.437333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "931225", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 56832, + "pkt_pts_time": "4.440000", + "pkt_dts": 56832, + "pkt_dts_time": "4.440000", + "best_effort_timestamp": 56832, + "best_effort_timestamp_time": "4.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "932205", + "pkt_size": "5601", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 111, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 214016, + "pkt_pts_time": "4.458667", + "pkt_dts": 214016, + "pkt_dts_time": "4.458667", + "best_effort_timestamp": 214016, + "best_effort_timestamp_time": "4.458667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "937806", + "pkt_size": "950", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 215040, + "pkt_pts_time": "4.480000", + "pkt_dts": 215040, + "pkt_dts_time": "4.480000", + "best_effort_timestamp": 215040, + "best_effort_timestamp_time": "4.480000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "938756", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 57344, + "pkt_pts_time": "4.480000", + "pkt_dts": 57344, + "pkt_dts_time": "4.480000", + "best_effort_timestamp": 57344, + "best_effort_timestamp_time": "4.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "939735", + "pkt_size": "5281", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 112, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 216064, + "pkt_pts_time": "4.501333", + "pkt_dts": 216064, + "pkt_dts_time": "4.501333", + "best_effort_timestamp": 216064, + "best_effort_timestamp_time": "4.501333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "945016", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 217088, + "pkt_pts_time": "4.522667", + "pkt_dts": 217088, + "pkt_dts_time": "4.522667", + "best_effort_timestamp": 217088, + "best_effort_timestamp_time": "4.522667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "945994", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 57856, + "pkt_pts_time": "4.520000", + "pkt_dts": 57856, + "pkt_dts_time": "4.520000", + "best_effort_timestamp": 57856, + "best_effort_timestamp_time": "4.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "946981", + "pkt_size": "7270", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 113, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 218112, + "pkt_pts_time": "4.544000", + "pkt_dts": 218112, + "pkt_dts_time": "4.544000", + "best_effort_timestamp": 218112, + "best_effort_timestamp_time": "4.544000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "954251", + "pkt_size": "991", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 219136, + "pkt_pts_time": "4.565333", + "pkt_dts": 219136, + "pkt_dts_time": "4.565333", + "best_effort_timestamp": 219136, + "best_effort_timestamp_time": "4.565333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "955242", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 58368, + "pkt_pts_time": "4.560000", + "pkt_dts": 58368, + "pkt_dts_time": "4.560000", + "best_effort_timestamp": 58368, + "best_effort_timestamp_time": "4.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "956226", + "pkt_size": "3146", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 114, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 220160, + "pkt_pts_time": "4.586667", + "pkt_dts": 220160, + "pkt_dts_time": "4.586667", + "best_effort_timestamp": 220160, + "best_effort_timestamp_time": "4.586667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "959372", + "pkt_size": "1121", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 221184, + "pkt_pts_time": "4.608000", + "pkt_dts": 221184, + "pkt_dts_time": "4.608000", + "best_effort_timestamp": 221184, + "best_effort_timestamp_time": "4.608000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "960493", + "pkt_size": "1137", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 58880, + "pkt_pts_time": "4.600000", + "pkt_dts": 58880, + "pkt_dts_time": "4.600000", + "best_effort_timestamp": 58880, + "best_effort_timestamp_time": "4.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "961630", + "pkt_size": "2708", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 115, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 222208, + "pkt_pts_time": "4.629333", + "pkt_dts": 222208, + "pkt_dts_time": "4.629333", + "best_effort_timestamp": 222208, + "best_effort_timestamp_time": "4.629333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "964338", + "pkt_size": "1149", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 223232, + "pkt_pts_time": "4.650667", + "pkt_dts": 223232, + "pkt_dts_time": "4.650667", + "best_effort_timestamp": 223232, + "best_effort_timestamp_time": "4.650667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "965487", + "pkt_size": "1182", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 59392, + "pkt_pts_time": "4.640000", + "pkt_dts": 59392, + "pkt_dts_time": "4.640000", + "best_effort_timestamp": 59392, + "best_effort_timestamp_time": "4.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "966669", + "pkt_size": "4652", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 116, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 224256, + "pkt_pts_time": "4.672000", + "pkt_dts": 224256, + "pkt_dts_time": "4.672000", + "best_effort_timestamp": 224256, + "best_effort_timestamp_time": "4.672000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "971321", + "pkt_size": "1150", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 225280, + "pkt_pts_time": "4.693333", + "pkt_dts": 225280, + "pkt_dts_time": "4.693333", + "best_effort_timestamp": 225280, + "best_effort_timestamp_time": "4.693333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "972471", + "pkt_size": "1097", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 59904, + "pkt_pts_time": "4.680000", + "pkt_dts": 59904, + "pkt_dts_time": "4.680000", + "best_effort_timestamp": 59904, + "best_effort_timestamp_time": "4.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "973568", + "pkt_size": "1918", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 117, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 226304, + "pkt_pts_time": "4.714667", + "pkt_dts": 226304, + "pkt_dts_time": "4.714667", + "best_effort_timestamp": 226304, + "best_effort_timestamp_time": "4.714667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "975486", + "pkt_size": "1117", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 227328, + "pkt_pts_time": "4.736000", + "pkt_dts": 227328, + "pkt_dts_time": "4.736000", + "best_effort_timestamp": 227328, + "best_effort_timestamp_time": "4.736000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "976603", + "pkt_size": "1088", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 60416, + "pkt_pts_time": "4.720000", + "pkt_dts": 60416, + "pkt_dts_time": "4.720000", + "best_effort_timestamp": 60416, + "best_effort_timestamp_time": "4.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "977691", + "pkt_size": "2144", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 118, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 228352, + "pkt_pts_time": "4.757333", + "pkt_dts": 228352, + "pkt_dts_time": "4.757333", + "best_effort_timestamp": 228352, + "best_effort_timestamp_time": "4.757333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "979835", + "pkt_size": "1063", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 60928, + "pkt_pts_time": "4.760000", + "pkt_dts": 60928, + "pkt_dts_time": "4.760000", + "best_effort_timestamp": 60928, + "best_effort_timestamp_time": "4.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "980898", + "pkt_size": "3733", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 119, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 229376, + "pkt_pts_time": "4.778667", + "pkt_dts": 229376, + "pkt_dts_time": "4.778667", + "best_effort_timestamp": 229376, + "best_effort_timestamp_time": "4.778667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "984631", + "pkt_size": "1078", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 230400, + "pkt_pts_time": "4.800000", + "pkt_dts": 230400, + "pkt_dts_time": "4.800000", + "best_effort_timestamp": 230400, + "best_effort_timestamp_time": "4.800000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "985709", + "pkt_size": "1062", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 61440, + "pkt_pts_time": "4.800000", + "pkt_dts": 61440, + "pkt_dts_time": "4.800000", + "best_effort_timestamp": 61440, + "best_effort_timestamp_time": "4.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "986771", + "pkt_size": "3473", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 120, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 231424, + "pkt_pts_time": "4.821333", + "pkt_dts": 231424, + "pkt_dts_time": "4.821333", + "best_effort_timestamp": 231424, + "best_effort_timestamp_time": "4.821333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "990244", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 232448, + "pkt_pts_time": "4.842667", + "pkt_dts": 232448, + "pkt_dts_time": "4.842667", + "best_effort_timestamp": 232448, + "best_effort_timestamp_time": "4.842667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "991313", + "pkt_size": "1150", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 61952, + "pkt_pts_time": "4.840000", + "pkt_dts": 61952, + "pkt_dts_time": "4.840000", + "best_effort_timestamp": 61952, + "best_effort_timestamp_time": "4.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "992463", + "pkt_size": "4653", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 121, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 233472, + "pkt_pts_time": "4.864000", + "pkt_dts": 233472, + "pkt_dts_time": "4.864000", + "best_effort_timestamp": 233472, + "best_effort_timestamp_time": "4.864000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "997116", + "pkt_size": "1166", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 234496, + "pkt_pts_time": "4.885333", + "pkt_dts": 234496, + "pkt_dts_time": "4.885333", + "best_effort_timestamp": 234496, + "best_effort_timestamp_time": "4.885333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "998282", + "pkt_size": "1178", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 62464, + "pkt_pts_time": "4.880000", + "pkt_dts": 62464, + "pkt_dts_time": "4.880000", + "best_effort_timestamp": 62464, + "best_effort_timestamp_time": "4.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "999460", + "pkt_size": "2332", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 122, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 235520, + "pkt_pts_time": "4.906667", + "pkt_dts": 235520, + "pkt_dts_time": "4.906667", + "best_effort_timestamp": 235520, + "best_effort_timestamp_time": "4.906667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1001792", + "pkt_size": "1133", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 236544, + "pkt_pts_time": "4.928000", + "pkt_dts": 236544, + "pkt_dts_time": "4.928000", + "best_effort_timestamp": 236544, + "best_effort_timestamp_time": "4.928000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1002925", + "pkt_size": "1185", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 62976, + "pkt_pts_time": "4.920000", + "pkt_dts": 62976, + "pkt_dts_time": "4.920000", + "best_effort_timestamp": 62976, + "best_effort_timestamp_time": "4.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1004110", + "pkt_size": "2593", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 123, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 237568, + "pkt_pts_time": "4.949333", + "pkt_dts": 237568, + "pkt_dts_time": "4.949333", + "best_effort_timestamp": 237568, + "best_effort_timestamp_time": "4.949333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1006703", + "pkt_size": "1141", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 238592, + "pkt_pts_time": "4.970667", + "pkt_dts": 238592, + "pkt_dts_time": "4.970667", + "best_effort_timestamp": 238592, + "best_effort_timestamp_time": "4.970667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1007844", + "pkt_size": "1157", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 63488, + "pkt_pts_time": "4.960000", + "pkt_dts": 63488, + "pkt_dts_time": "4.960000", + "best_effort_timestamp": 63488, + "best_effort_timestamp_time": "4.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1009001", + "pkt_size": "2488", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 124, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 239616, + "pkt_pts_time": "4.992000", + "pkt_dts": 239616, + "pkt_dts_time": "4.992000", + "best_effort_timestamp": 239616, + "best_effort_timestamp_time": "4.992000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1011489", + "pkt_size": "1106", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 240640, + "pkt_pts_time": "5.013333", + "pkt_dts": 240640, + "pkt_dts_time": "5.013333", + "best_effort_timestamp": 240640, + "best_effort_timestamp_time": "5.013333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1012595", + "pkt_size": "1104", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 64000, + "pkt_pts_time": "5.000000", + "pkt_dts": 64000, + "pkt_dts_time": "5.000000", + "best_effort_timestamp": 64000, + "best_effort_timestamp_time": "5.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1013699", + "pkt_size": "4304", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 125, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 241664, + "pkt_pts_time": "5.034667", + "pkt_dts": 241664, + "pkt_dts_time": "5.034667", + "best_effort_timestamp": 241664, + "best_effort_timestamp_time": "5.034667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1018003", + "pkt_size": "1147", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 242688, + "pkt_pts_time": "5.056000", + "pkt_dts": 242688, + "pkt_dts_time": "5.056000", + "best_effort_timestamp": 242688, + "best_effort_timestamp_time": "5.056000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1019150", + "pkt_size": "1077", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 64512, + "pkt_pts_time": "5.040000", + "pkt_dts": 64512, + "pkt_dts_time": "5.040000", + "best_effort_timestamp": 64512, + "best_effort_timestamp_time": "5.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1020227", + "pkt_size": "2883", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 126, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 243712, + "pkt_pts_time": "5.077333", + "pkt_dts": 243712, + "pkt_dts_time": "5.077333", + "best_effort_timestamp": 243712, + "best_effort_timestamp_time": "5.077333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1023110", + "pkt_size": "1085", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 65024, + "pkt_pts_time": "5.080000", + "pkt_dts": 65024, + "pkt_dts_time": "5.080000", + "best_effort_timestamp": 65024, + "best_effort_timestamp_time": "5.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1024195", + "pkt_size": "2186", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 127, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 244736, + "pkt_pts_time": "5.098667", + "pkt_dts": 244736, + "pkt_dts_time": "5.098667", + "best_effort_timestamp": 244736, + "best_effort_timestamp_time": "5.098667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1026381", + "pkt_size": "1163", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 245760, + "pkt_pts_time": "5.120000", + "pkt_dts": 245760, + "pkt_dts_time": "5.120000", + "best_effort_timestamp": 245760, + "best_effort_timestamp_time": "5.120000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1027544", + "pkt_size": "1206", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 65536, + "pkt_pts_time": "5.120000", + "pkt_dts": 65536, + "pkt_dts_time": "5.120000", + "best_effort_timestamp": 65536, + "best_effort_timestamp_time": "5.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1028750", + "pkt_size": "3380", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 128, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 246784, + "pkt_pts_time": "5.141333", + "pkt_dts": 246784, + "pkt_dts_time": "5.141333", + "best_effort_timestamp": 246784, + "best_effort_timestamp_time": "5.141333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1032130", + "pkt_size": "1193", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 247808, + "pkt_pts_time": "5.162667", + "pkt_dts": 247808, + "pkt_dts_time": "5.162667", + "best_effort_timestamp": 247808, + "best_effort_timestamp_time": "5.162667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1033323", + "pkt_size": "1185", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 66048, + "pkt_pts_time": "5.160000", + "pkt_dts": 66048, + "pkt_dts_time": "5.160000", + "best_effort_timestamp": 66048, + "best_effort_timestamp_time": "5.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1034508", + "pkt_size": "4411", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 129, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 248832, + "pkt_pts_time": "5.184000", + "pkt_dts": 248832, + "pkt_dts_time": "5.184000", + "best_effort_timestamp": 248832, + "best_effort_timestamp_time": "5.184000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1038919", + "pkt_size": "1125", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 249856, + "pkt_pts_time": "5.205333", + "pkt_dts": 249856, + "pkt_dts_time": "5.205333", + "best_effort_timestamp": 249856, + "best_effort_timestamp_time": "5.205333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1040044", + "pkt_size": "1107", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 66560, + "pkt_pts_time": "5.200000", + "pkt_dts": 66560, + "pkt_dts_time": "5.200000", + "best_effort_timestamp": 66560, + "best_effort_timestamp_time": "5.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1041151", + "pkt_size": "4714", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 130, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 250880, + "pkt_pts_time": "5.226667", + "pkt_dts": 250880, + "pkt_dts_time": "5.226667", + "best_effort_timestamp": 250880, + "best_effort_timestamp_time": "5.226667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1045865", + "pkt_size": "1108", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 251904, + "pkt_pts_time": "5.248000", + "pkt_dts": 251904, + "pkt_dts_time": "5.248000", + "best_effort_timestamp": 251904, + "best_effort_timestamp_time": "5.248000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1046973", + "pkt_size": "1066", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 67072, + "pkt_pts_time": "5.240000", + "pkt_dts": 67072, + "pkt_dts_time": "5.240000", + "best_effort_timestamp": 67072, + "best_effort_timestamp_time": "5.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1048039", + "pkt_size": "5496", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 131, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 252928, + "pkt_pts_time": "5.269333", + "pkt_dts": 252928, + "pkt_dts_time": "5.269333", + "best_effort_timestamp": 252928, + "best_effort_timestamp_time": "5.269333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1053535", + "pkt_size": "1074", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 253952, + "pkt_pts_time": "5.290667", + "pkt_dts": 253952, + "pkt_dts_time": "5.290667", + "best_effort_timestamp": 253952, + "best_effort_timestamp_time": "5.290667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1054609", + "pkt_size": "1111", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + } + ] +} diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets.mp4 b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets.mp4 new file mode 100644 index 00000000..3001a3b8 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets.mp4 @@ -0,0 +1,4957 @@ +{ + "packets": [ + { + "codec_type": "audio", + "stream_index": 1, + "pts": 0, + "pts_time": "0.000000", + "dts": 0, + "dts_time": "0.000000", + "duration": 1024, + "duration_time": "0.021333", + "size": "967", + "pos": "4261", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 0, + "pts_time": "0.000000", + "dts": 0, + "dts_time": "0.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "105222", + "pos": "5228", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 1024, + "pts_time": "0.021333", + "dts": 1024, + "dts_time": "0.021333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1011", + "pos": "110450", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 2048, + "pts_time": "0.042667", + "dts": 2048, + "dts_time": "0.042667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "111461", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 512, + "pts_time": "0.040000", + "dts": 512, + "dts_time": "0.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "1554", + "pos": "112487", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 3072, + "pts_time": "0.064000", + "dts": 3072, + "dts_time": "0.064000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1030", + "pos": "114041", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 4096, + "pts_time": "0.085333", + "dts": 4096, + "dts_time": "0.085333", + "duration": 1024, + "duration_time": "0.021333", + "size": "990", + "pos": "115071", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 1024, + "pts_time": "0.080000", + "dts": 1024, + "dts_time": "0.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2153", + "pos": "116061", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 5120, + "pts_time": "0.106667", + "dts": 5120, + "dts_time": "0.106667", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "118214", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 6144, + "pts_time": "0.128000", + "dts": 6144, + "dts_time": "0.128000", + "duration": 1024, + "duration_time": "0.021333", + "size": "973", + "pos": "119172", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 1536, + "pts_time": "0.120000", + "dts": 1536, + "dts_time": "0.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "2208", + "pos": "120145", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 7168, + "pts_time": "0.149333", + "dts": 7168, + "dts_time": "0.149333", + "duration": 1024, + "duration_time": "0.021333", + "size": "989", + "pos": "122353", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 8192, + "pts_time": "0.170667", + "dts": 8192, + "dts_time": "0.170667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1009", + "pos": "123342", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 2048, + "pts_time": "0.160000", + "dts": 2048, + "dts_time": "0.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "2523", + "pos": "124351", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 9216, + "pts_time": "0.192000", + "dts": 9216, + "dts_time": "0.192000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1000", + "pos": "126874", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 10240, + "pts_time": "0.213333", + "dts": 10240, + "dts_time": "0.213333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "127874", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 2560, + "pts_time": "0.200000", + "dts": 2560, + "dts_time": "0.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "3088", + "pos": "128892", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 11264, + "pts_time": "0.234667", + "dts": 11264, + "dts_time": "0.234667", + "duration": 1024, + "duration_time": "0.021333", + "size": "991", + "pos": "131980", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 12288, + "pts_time": "0.256000", + "dts": 12288, + "dts_time": "0.256000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "132971", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 3072, + "pts_time": "0.240000", + "dts": 3072, + "dts_time": "0.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "4188", + "pos": "133977", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 13312, + "pts_time": "0.277333", + "dts": 13312, + "dts_time": "0.277333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "138165", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 3584, + "pts_time": "0.280000", + "dts": 3584, + "dts_time": "0.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "365", + "pos": "139177", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 14336, + "pts_time": "0.298667", + "dts": 14336, + "dts_time": "0.298667", + "duration": 1024, + "duration_time": "0.021333", + "size": "990", + "pos": "139542", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 15360, + "pts_time": "0.320000", + "dts": 15360, + "dts_time": "0.320000", + "duration": 1024, + "duration_time": "0.021333", + "size": "985", + "pos": "140532", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 4096, + "pts_time": "0.320000", + "dts": 4096, + "dts_time": "0.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "3571", + "pos": "141517", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 16384, + "pts_time": "0.341333", + "dts": 16384, + "dts_time": "0.341333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1029", + "pos": "145088", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 17408, + "pts_time": "0.362667", + "dts": 17408, + "dts_time": "0.362667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "146117", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 4608, + "pts_time": "0.360000", + "dts": 4608, + "dts_time": "0.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "3966", + "pos": "147121", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 18432, + "pts_time": "0.384000", + "dts": 18432, + "dts_time": "0.384000", + "duration": 1024, + "duration_time": "0.021333", + "size": "971", + "pos": "151087", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 19456, + "pts_time": "0.405333", + "dts": 19456, + "dts_time": "0.405333", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "152058", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 5120, + "pts_time": "0.400000", + "dts": 5120, + "dts_time": "0.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "4081", + "pos": "153040", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 20480, + "pts_time": "0.426667", + "dts": 20480, + "dts_time": "0.426667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1046", + "pos": "157121", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 21504, + "pts_time": "0.448000", + "dts": 21504, + "dts_time": "0.448000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "158167", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 5632, + "pts_time": "0.440000", + "dts": 5632, + "dts_time": "0.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "4631", + "pos": "159179", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 22528, + "pts_time": "0.469333", + "dts": 22528, + "dts_time": "0.469333", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "163810", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 23552, + "pts_time": "0.490667", + "dts": 23552, + "dts_time": "0.490667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1013", + "pos": "164790", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 6144, + "pts_time": "0.480000", + "dts": 6144, + "dts_time": "0.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "4996", + "pos": "165803", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 24576, + "pts_time": "0.512000", + "dts": 24576, + "dts_time": "0.512000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1086", + "pos": "170799", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 25600, + "pts_time": "0.533333", + "dts": 25600, + "dts_time": "0.533333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1057", + "pos": "171885", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 6656, + "pts_time": "0.520000", + "dts": 6656, + "dts_time": "0.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "5909", + "pos": "172942", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 26624, + "pts_time": "0.554667", + "dts": 26624, + "dts_time": "0.554667", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "178851", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 27648, + "pts_time": "0.576000", + "dts": 27648, + "dts_time": "0.576000", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "179838", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 7168, + "pts_time": "0.560000", + "dts": 7168, + "dts_time": "0.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "5995", + "pos": "180825", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 28672, + "pts_time": "0.597333", + "dts": 28672, + "dts_time": "0.597333", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "186820", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 7680, + "pts_time": "0.600000", + "dts": 7680, + "dts_time": "0.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "6419", + "pos": "187798", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 29696, + "pts_time": "0.618667", + "dts": 29696, + "dts_time": "0.618667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1050", + "pos": "194217", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 30720, + "pts_time": "0.640000", + "dts": 30720, + "dts_time": "0.640000", + "duration": 1024, + "duration_time": "0.021333", + "size": "994", + "pos": "195267", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 8192, + "pts_time": "0.640000", + "dts": 8192, + "dts_time": "0.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "6212", + "pos": "196261", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 31744, + "pts_time": "0.661333", + "dts": 31744, + "dts_time": "0.661333", + "duration": 1024, + "duration_time": "0.021333", + "size": "968", + "pos": "202473", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 32768, + "pts_time": "0.682667", + "dts": 32768, + "dts_time": "0.682667", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "203441", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 8704, + "pts_time": "0.680000", + "dts": 8704, + "dts_time": "0.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "6762", + "pos": "204420", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 33792, + "pts_time": "0.704000", + "dts": 33792, + "dts_time": "0.704000", + "duration": 1024, + "duration_time": "0.021333", + "size": "986", + "pos": "211182", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 34816, + "pts_time": "0.725333", + "dts": 34816, + "dts_time": "0.725333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1053", + "pos": "212168", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 9216, + "pts_time": "0.720000", + "dts": 9216, + "dts_time": "0.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "6291", + "pos": "213221", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 35840, + "pts_time": "0.746667", + "dts": 35840, + "dts_time": "0.746667", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "219512", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 36864, + "pts_time": "0.768000", + "dts": 36864, + "dts_time": "0.768000", + "duration": 1024, + "duration_time": "0.021333", + "size": "986", + "pos": "220478", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 9728, + "pts_time": "0.760000", + "dts": 9728, + "dts_time": "0.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "6902", + "pos": "221464", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 37888, + "pts_time": "0.789333", + "dts": 37888, + "dts_time": "0.789333", + "duration": 1024, + "duration_time": "0.021333", + "size": "951", + "pos": "228366", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 38912, + "pts_time": "0.810667", + "dts": 38912, + "dts_time": "0.810667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "229317", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 10240, + "pts_time": "0.800000", + "dts": 10240, + "dts_time": "0.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "6916", + "pos": "230339", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 39936, + "pts_time": "0.832000", + "dts": 39936, + "dts_time": "0.832000", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "237255", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 40960, + "pts_time": "0.853333", + "dts": 40960, + "dts_time": "0.853333", + "duration": 1024, + "duration_time": "0.021333", + "size": "975", + "pos": "238238", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 10752, + "pts_time": "0.840000", + "dts": 10752, + "dts_time": "0.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "7469", + "pos": "239213", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 41984, + "pts_time": "0.874667", + "dts": 41984, + "dts_time": "0.874667", + "duration": 1024, + "duration_time": "0.021333", + "size": "968", + "pos": "246682", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 43008, + "pts_time": "0.896000", + "dts": 43008, + "dts_time": "0.896000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "247650", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 11264, + "pts_time": "0.880000", + "dts": 11264, + "dts_time": "0.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "7152", + "pos": "248668", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 44032, + "pts_time": "0.917333", + "dts": 44032, + "dts_time": "0.917333", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "255820", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 11776, + "pts_time": "0.920000", + "dts": 11776, + "dts_time": "0.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "7607", + "pos": "256778", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 45056, + "pts_time": "0.938667", + "dts": 45056, + "dts_time": "0.938667", + "duration": 1024, + "duration_time": "0.021333", + "size": "940", + "pos": "264385", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 46080, + "pts_time": "0.960000", + "dts": 46080, + "dts_time": "0.960000", + "duration": 1024, + "duration_time": "0.021333", + "size": "942", + "pos": "265325", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 12288, + "pts_time": "0.960000", + "dts": 12288, + "dts_time": "0.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "7663", + "pos": "266267", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 47104, + "pts_time": "0.981333", + "dts": 47104, + "dts_time": "0.981333", + "duration": 1024, + "duration_time": "0.021333", + "size": "960", + "pos": "273930", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 48128, + "pts_time": "1.002667", + "dts": 48128, + "dts_time": "1.002667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "274890", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 12800, + "pts_time": "1.000000", + "dts": 12800, + "dts_time": "1.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "7637", + "pos": "275917", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 49152, + "pts_time": "1.024000", + "dts": 49152, + "dts_time": "1.024000", + "duration": 1024, + "duration_time": "0.021333", + "size": "953", + "pos": "283554", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 50176, + "pts_time": "1.045333", + "dts": 50176, + "dts_time": "1.045333", + "duration": 1024, + "duration_time": "0.021333", + "size": "906", + "pos": "284507", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 13312, + "pts_time": "1.040000", + "dts": 13312, + "dts_time": "1.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "7241", + "pos": "285413", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 51200, + "pts_time": "1.066667", + "dts": 51200, + "dts_time": "1.066667", + "duration": 1024, + "duration_time": "0.021333", + "size": "882", + "pos": "292654", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 52224, + "pts_time": "1.088000", + "dts": 52224, + "dts_time": "1.088000", + "duration": 1024, + "duration_time": "0.021333", + "size": "943", + "pos": "293536", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 13824, + "pts_time": "1.080000", + "dts": 13824, + "dts_time": "1.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "7520", + "pos": "294479", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 53248, + "pts_time": "1.109333", + "dts": 53248, + "dts_time": "1.109333", + "duration": 1024, + "duration_time": "0.021333", + "size": "896", + "pos": "301999", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 54272, + "pts_time": "1.130667", + "dts": 54272, + "dts_time": "1.130667", + "duration": 1024, + "duration_time": "0.021333", + "size": "901", + "pos": "302895", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 14336, + "pts_time": "1.120000", + "dts": 14336, + "dts_time": "1.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "7233", + "pos": "303796", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 55296, + "pts_time": "1.152000", + "dts": 55296, + "dts_time": "1.152000", + "duration": 1024, + "duration_time": "0.021333", + "size": "933", + "pos": "311029", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 56320, + "pts_time": "1.173333", + "dts": 56320, + "dts_time": "1.173333", + "duration": 1024, + "duration_time": "0.021333", + "size": "961", + "pos": "311962", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 14848, + "pts_time": "1.160000", + "dts": 14848, + "dts_time": "1.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "7677", + "pos": "312923", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 57344, + "pts_time": "1.194667", + "dts": 57344, + "dts_time": "1.194667", + "duration": 1024, + "duration_time": "0.021333", + "size": "948", + "pos": "320600", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 58368, + "pts_time": "1.216000", + "dts": 58368, + "dts_time": "1.216000", + "duration": 1024, + "duration_time": "0.021333", + "size": "946", + "pos": "321548", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 15360, + "pts_time": "1.200000", + "dts": 15360, + "dts_time": "1.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "7210", + "pos": "322494", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 59392, + "pts_time": "1.237333", + "dts": 59392, + "dts_time": "1.237333", + "duration": 1024, + "duration_time": "0.021333", + "size": "937", + "pos": "329704", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 15872, + "pts_time": "1.240000", + "dts": 15872, + "dts_time": "1.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "8123", + "pos": "330641", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 60416, + "pts_time": "1.258667", + "dts": 60416, + "dts_time": "1.258667", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "338764", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 61440, + "pts_time": "1.280000", + "dts": 61440, + "dts_time": "1.280000", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "339730", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 16384, + "pts_time": "1.280000", + "dts": 16384, + "dts_time": "1.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "791", + "pos": "340695", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 62464, + "pts_time": "1.301333", + "dts": 62464, + "dts_time": "1.301333", + "duration": 1024, + "duration_time": "0.021333", + "size": "964", + "pos": "341486", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 63488, + "pts_time": "1.322667", + "dts": 63488, + "dts_time": "1.322667", + "duration": 1024, + "duration_time": "0.021333", + "size": "960", + "pos": "342450", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 16896, + "pts_time": "1.320000", + "dts": 16896, + "dts_time": "1.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "6174", + "pos": "343410", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 64512, + "pts_time": "1.344000", + "dts": 64512, + "dts_time": "1.344000", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "349584", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 65536, + "pts_time": "1.365333", + "dts": 65536, + "dts_time": "1.365333", + "duration": 1024, + "duration_time": "0.021333", + "size": "949", + "pos": "350567", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 17408, + "pts_time": "1.360000", + "dts": 17408, + "dts_time": "1.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "6906", + "pos": "351516", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 66560, + "pts_time": "1.386667", + "dts": 66560, + "dts_time": "1.386667", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "358422", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 67584, + "pts_time": "1.408000", + "dts": 67584, + "dts_time": "1.408000", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "359404", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 17920, + "pts_time": "1.400000", + "dts": 17920, + "dts_time": "1.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "7002", + "pos": "360370", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 68608, + "pts_time": "1.429333", + "dts": 68608, + "dts_time": "1.429333", + "duration": 1024, + "duration_time": "0.021333", + "size": "974", + "pos": "367372", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 69632, + "pts_time": "1.450667", + "dts": 69632, + "dts_time": "1.450667", + "duration": 1024, + "duration_time": "0.021333", + "size": "998", + "pos": "368346", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 18432, + "pts_time": "1.440000", + "dts": 18432, + "dts_time": "1.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "7519", + "pos": "369344", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 70656, + "pts_time": "1.472000", + "dts": 70656, + "dts_time": "1.472000", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "376863", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 71680, + "pts_time": "1.493333", + "dts": 71680, + "dts_time": "1.493333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "377841", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 18944, + "pts_time": "1.480000", + "dts": 18944, + "dts_time": "1.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "7508", + "pos": "378851", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 72704, + "pts_time": "1.514667", + "dts": 72704, + "dts_time": "1.514667", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "386359", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 73728, + "pts_time": "1.536000", + "dts": 73728, + "dts_time": "1.536000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1017", + "pos": "387317", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 19456, + "pts_time": "1.520000", + "dts": 19456, + "dts_time": "1.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "8218", + "pos": "388334", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 74752, + "pts_time": "1.557333", + "dts": 74752, + "dts_time": "1.557333", + "duration": 1024, + "duration_time": "0.021333", + "size": "999", + "pos": "396552", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 19968, + "pts_time": "1.560000", + "dts": 19968, + "dts_time": "1.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "8257", + "pos": "397551", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 75776, + "pts_time": "1.578667", + "dts": 75776, + "dts_time": "1.578667", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "405808", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 76800, + "pts_time": "1.600000", + "dts": 76800, + "dts_time": "1.600000", + "duration": 1024, + "duration_time": "0.021333", + "size": "995", + "pos": "406788", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 20480, + "pts_time": "1.600000", + "dts": 20480, + "dts_time": "1.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "8619", + "pos": "407783", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 77824, + "pts_time": "1.621333", + "dts": 77824, + "dts_time": "1.621333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1025", + "pos": "416402", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 78848, + "pts_time": "1.642667", + "dts": 78848, + "dts_time": "1.642667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1011", + "pos": "417427", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 20992, + "pts_time": "1.640000", + "dts": 20992, + "dts_time": "1.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "8071", + "pos": "418438", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 79872, + "pts_time": "1.664000", + "dts": 79872, + "dts_time": "1.664000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1001", + "pos": "426509", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 80896, + "pts_time": "1.685333", + "dts": 80896, + "dts_time": "1.685333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "427510", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 21504, + "pts_time": "1.680000", + "dts": 21504, + "dts_time": "1.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "8266", + "pos": "428529", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 81920, + "pts_time": "1.706667", + "dts": 81920, + "dts_time": "1.706667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1002", + "pos": "436795", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 82944, + "pts_time": "1.728000", + "dts": 82944, + "dts_time": "1.728000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1052", + "pos": "437797", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 22016, + "pts_time": "1.720000", + "dts": 22016, + "dts_time": "1.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "7790", + "pos": "438849", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 83968, + "pts_time": "1.749333", + "dts": 83968, + "dts_time": "1.749333", + "duration": 1024, + "duration_time": "0.021333", + "size": "993", + "pos": "446639", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 84992, + "pts_time": "1.770667", + "dts": 84992, + "dts_time": "1.770667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1049", + "pos": "447632", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 22528, + "pts_time": "1.760000", + "dts": 22528, + "dts_time": "1.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "7989", + "pos": "448681", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 86016, + "pts_time": "1.792000", + "dts": 86016, + "dts_time": "1.792000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "456670", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 87040, + "pts_time": "1.813333", + "dts": 87040, + "dts_time": "1.813333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "457698", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 23040, + "pts_time": "1.800000", + "dts": 23040, + "dts_time": "1.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "7826", + "pos": "458734", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 88064, + "pts_time": "1.834667", + "dts": 88064, + "dts_time": "1.834667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1040", + "pos": "466560", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 89088, + "pts_time": "1.856000", + "dts": 89088, + "dts_time": "1.856000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1059", + "pos": "467600", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 23552, + "pts_time": "1.840000", + "dts": 23552, + "dts_time": "1.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "7649", + "pos": "468659", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 90112, + "pts_time": "1.877333", + "dts": 90112, + "dts_time": "1.877333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1068", + "pos": "476308", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 24064, + "pts_time": "1.880000", + "dts": 24064, + "dts_time": "1.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "6977", + "pos": "477376", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 91136, + "pts_time": "1.898667", + "dts": 91136, + "dts_time": "1.898667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1060", + "pos": "484353", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 92160, + "pts_time": "1.920000", + "dts": 92160, + "dts_time": "1.920000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1065", + "pos": "485413", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 24576, + "pts_time": "1.920000", + "dts": 24576, + "dts_time": "1.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "6978", + "pos": "486478", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 93184, + "pts_time": "1.941333", + "dts": 93184, + "dts_time": "1.941333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "493456", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 94208, + "pts_time": "1.962667", + "dts": 94208, + "dts_time": "1.962667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1071", + "pos": "494525", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 25088, + "pts_time": "1.960000", + "dts": 25088, + "dts_time": "1.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "6173", + "pos": "495596", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 95232, + "pts_time": "1.984000", + "dts": 95232, + "dts_time": "1.984000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1084", + "pos": "501769", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 96256, + "pts_time": "2.005333", + "dts": 96256, + "dts_time": "2.005333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1080", + "pos": "502853", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 25600, + "pts_time": "2.000000", + "dts": 25600, + "dts_time": "2.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "6451", + "pos": "503933", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 97280, + "pts_time": "2.026667", + "dts": 97280, + "dts_time": "2.026667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1051", + "pos": "510384", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 98304, + "pts_time": "2.048000", + "dts": 98304, + "dts_time": "2.048000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "511435", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 26112, + "pts_time": "2.040000", + "dts": 26112, + "dts_time": "2.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "6107", + "pos": "512463", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 99328, + "pts_time": "2.069333", + "dts": 99328, + "dts_time": "2.069333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "518570", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 100352, + "pts_time": "2.090667", + "dts": 100352, + "dts_time": "2.090667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1061", + "pos": "519608", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 26624, + "pts_time": "2.080000", + "dts": 26624, + "dts_time": "2.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "5965", + "pos": "520669", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 101376, + "pts_time": "2.112000", + "dts": 101376, + "dts_time": "2.112000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1043", + "pos": "526634", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 102400, + "pts_time": "2.133333", + "dts": 102400, + "dts_time": "2.133333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1040", + "pos": "527677", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 27136, + "pts_time": "2.120000", + "dts": 27136, + "dts_time": "2.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "5819", + "pos": "528717", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 103424, + "pts_time": "2.154667", + "dts": 103424, + "dts_time": "2.154667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "534536", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 104448, + "pts_time": "2.176000", + "dts": 104448, + "dts_time": "2.176000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "535560", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 27648, + "pts_time": "2.160000", + "dts": 27648, + "dts_time": "2.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "6114", + "pos": "536596", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 105472, + "pts_time": "2.197333", + "dts": 105472, + "dts_time": "2.197333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "542710", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 28160, + "pts_time": "2.200000", + "dts": 28160, + "dts_time": "2.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "6064", + "pos": "543722", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 106496, + "pts_time": "2.218667", + "dts": 106496, + "dts_time": "2.218667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1031", + "pos": "549786", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 107520, + "pts_time": "2.240000", + "dts": 107520, + "dts_time": "2.240000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "550817", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 28672, + "pts_time": "2.240000", + "dts": 28672, + "dts_time": "2.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "6639", + "pos": "551827", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 108544, + "pts_time": "2.261333", + "dts": 108544, + "dts_time": "2.261333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1032", + "pos": "558466", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 109568, + "pts_time": "2.282667", + "dts": 109568, + "dts_time": "2.282667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "559498", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 29184, + "pts_time": "2.280000", + "dts": 29184, + "dts_time": "2.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "718", + "pos": "560525", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 110592, + "pts_time": "2.304000", + "dts": 110592, + "dts_time": "2.304000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1045", + "pos": "561243", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 111616, + "pts_time": "2.325333", + "dts": 111616, + "dts_time": "2.325333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1034", + "pos": "562288", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 29696, + "pts_time": "2.320000", + "dts": 29696, + "dts_time": "2.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "4886", + "pos": "563322", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 112640, + "pts_time": "2.346667", + "dts": 112640, + "dts_time": "2.346667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "568208", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 113664, + "pts_time": "2.368000", + "dts": 113664, + "dts_time": "2.368000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "569243", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 30208, + "pts_time": "2.360000", + "dts": 30208, + "dts_time": "2.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "5456", + "pos": "570281", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 114688, + "pts_time": "2.389333", + "dts": 114688, + "dts_time": "2.389333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "575737", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 115712, + "pts_time": "2.410667", + "dts": 115712, + "dts_time": "2.410667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1034", + "pos": "576761", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 30720, + "pts_time": "2.400000", + "dts": 30720, + "dts_time": "2.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "5298", + "pos": "577795", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 116736, + "pts_time": "2.432000", + "dts": 116736, + "dts_time": "2.432000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "583093", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 117760, + "pts_time": "2.453333", + "dts": 117760, + "dts_time": "2.453333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "584117", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 31232, + "pts_time": "2.440000", + "dts": 31232, + "dts_time": "2.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5693", + "pos": "585141", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 118784, + "pts_time": "2.474667", + "dts": 118784, + "dts_time": "2.474667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "590834", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 119808, + "pts_time": "2.496000", + "dts": 119808, + "dts_time": "2.496000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1005", + "pos": "591846", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 31744, + "pts_time": "2.480000", + "dts": 31744, + "dts_time": "2.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5643", + "pos": "592851", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 120832, + "pts_time": "2.517333", + "dts": 120832, + "dts_time": "2.517333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "598494", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 32256, + "pts_time": "2.520000", + "dts": 32256, + "dts_time": "2.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "5834", + "pos": "599504", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 121856, + "pts_time": "2.538667", + "dts": 121856, + "dts_time": "2.538667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "605338", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 122880, + "pts_time": "2.560000", + "dts": 122880, + "dts_time": "2.560000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "606357", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 32768, + "pts_time": "2.560000", + "dts": 32768, + "dts_time": "2.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "5615", + "pos": "607363", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 123904, + "pts_time": "2.581333", + "dts": 123904, + "dts_time": "2.581333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "612978", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 124928, + "pts_time": "2.602667", + "dts": 124928, + "dts_time": "2.602667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1023", + "pos": "614004", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 33280, + "pts_time": "2.600000", + "dts": 33280, + "dts_time": "2.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "5730", + "pos": "615027", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 125952, + "pts_time": "2.624000", + "dts": 125952, + "dts_time": "2.624000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "620757", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 126976, + "pts_time": "2.645333", + "dts": 126976, + "dts_time": "2.645333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "621785", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 33792, + "pts_time": "2.640000", + "dts": 33792, + "dts_time": "2.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "5239", + "pos": "622822", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 128000, + "pts_time": "2.666667", + "dts": 128000, + "dts_time": "2.666667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1050", + "pos": "628061", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 129024, + "pts_time": "2.688000", + "dts": 129024, + "dts_time": "2.688000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1052", + "pos": "629111", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 34304, + "pts_time": "2.680000", + "dts": 34304, + "dts_time": "2.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "6164", + "pos": "630163", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 130048, + "pts_time": "2.709333", + "dts": 130048, + "dts_time": "2.709333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1033", + "pos": "636327", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 131072, + "pts_time": "2.730667", + "dts": 131072, + "dts_time": "2.730667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1064", + "pos": "637360", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 34816, + "pts_time": "2.720000", + "dts": 34816, + "dts_time": "2.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "6158", + "pos": "638424", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 132096, + "pts_time": "2.752000", + "dts": 132096, + "dts_time": "2.752000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "644582", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 133120, + "pts_time": "2.773333", + "dts": 133120, + "dts_time": "2.773333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1047", + "pos": "645620", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 35328, + "pts_time": "2.760000", + "dts": 35328, + "dts_time": "2.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "6607", + "pos": "646667", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 134144, + "pts_time": "2.794667", + "dts": 134144, + "dts_time": "2.794667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "653274", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 135168, + "pts_time": "2.816000", + "dts": 135168, + "dts_time": "2.816000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "654311", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 35840, + "pts_time": "2.800000", + "dts": 35840, + "dts_time": "2.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "6545", + "pos": "655333", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 136192, + "pts_time": "2.837333", + "dts": 136192, + "dts_time": "2.837333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1033", + "pos": "661878", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 36352, + "pts_time": "2.840000", + "dts": 36352, + "dts_time": "2.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "6800", + "pos": "662911", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 137216, + "pts_time": "2.858667", + "dts": 137216, + "dts_time": "2.858667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1039", + "pos": "669711", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 138240, + "pts_time": "2.880000", + "dts": 138240, + "dts_time": "2.880000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "670750", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 36864, + "pts_time": "2.880000", + "dts": 36864, + "dts_time": "2.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "6904", + "pos": "671785", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 139264, + "pts_time": "2.901333", + "dts": 139264, + "dts_time": "2.901333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1025", + "pos": "678689", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 140288, + "pts_time": "2.922667", + "dts": 140288, + "dts_time": "2.922667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1013", + "pos": "679714", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 37376, + "pts_time": "2.920000", + "dts": 37376, + "dts_time": "2.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "7146", + "pos": "680727", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 141312, + "pts_time": "2.944000", + "dts": 141312, + "dts_time": "2.944000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "687873", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 142336, + "pts_time": "2.965333", + "dts": 142336, + "dts_time": "2.965333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "688899", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 37888, + "pts_time": "2.960000", + "dts": 37888, + "dts_time": "2.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "7137", + "pos": "689925", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 143360, + "pts_time": "2.986667", + "dts": 143360, + "dts_time": "2.986667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "697062", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 144384, + "pts_time": "3.008000", + "dts": 144384, + "dts_time": "3.008000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1029", + "pos": "698074", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 38400, + "pts_time": "3.000000", + "dts": 38400, + "dts_time": "3.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "7723", + "pos": "699103", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 145408, + "pts_time": "3.029333", + "dts": 145408, + "dts_time": "3.029333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "706826", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 146432, + "pts_time": "3.050667", + "dts": 146432, + "dts_time": "3.050667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1007", + "pos": "707848", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 38912, + "pts_time": "3.040000", + "dts": 38912, + "dts_time": "3.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "7585", + "pos": "708855", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 147456, + "pts_time": "3.072000", + "dts": 147456, + "dts_time": "3.072000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "716440", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 148480, + "pts_time": "3.093333", + "dts": 148480, + "dts_time": "3.093333", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "717444", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 39424, + "pts_time": "3.080000", + "dts": 39424, + "dts_time": "3.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "8652", + "pos": "718426", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 149504, + "pts_time": "3.114667", + "dts": 149504, + "dts_time": "3.114667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1097", + "pos": "727078", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 150528, + "pts_time": "3.136000", + "dts": 150528, + "dts_time": "3.136000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1021", + "pos": "728175", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 39936, + "pts_time": "3.120000", + "dts": 39936, + "dts_time": "3.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "6521", + "pos": "729196", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 151552, + "pts_time": "3.157333", + "dts": 151552, + "dts_time": "3.157333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1003", + "pos": "735717", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 40448, + "pts_time": "3.160000", + "dts": 40448, + "dts_time": "3.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "8559", + "pos": "736720", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 152576, + "pts_time": "3.178667", + "dts": 152576, + "dts_time": "3.178667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1016", + "pos": "745279", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 153600, + "pts_time": "3.200000", + "dts": 153600, + "dts_time": "3.200000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "746295", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 40960, + "pts_time": "3.200000", + "dts": 40960, + "dts_time": "3.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "8378", + "pos": "747323", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 154624, + "pts_time": "3.221333", + "dts": 154624, + "dts_time": "3.221333", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "755701", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 155648, + "pts_time": "3.242667", + "dts": 155648, + "dts_time": "3.242667", + "duration": 1024, + "duration_time": "0.021333", + "size": "989", + "pos": "756685", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 41472, + "pts_time": "3.240000", + "dts": 41472, + "dts_time": "3.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "5619", + "pos": "757674", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 156672, + "pts_time": "3.264000", + "dts": 156672, + "dts_time": "3.264000", + "duration": 1024, + "duration_time": "0.021333", + "size": "997", + "pos": "763293", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 157696, + "pts_time": "3.285333", + "dts": 157696, + "dts_time": "3.285333", + "duration": 1024, + "duration_time": "0.021333", + "size": "988", + "pos": "764290", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 41984, + "pts_time": "3.280000", + "dts": 41984, + "dts_time": "3.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "1678", + "pos": "765278", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 158720, + "pts_time": "3.306667", + "dts": 158720, + "dts_time": "3.306667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "766956", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 159744, + "pts_time": "3.328000", + "dts": 159744, + "dts_time": "3.328000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "767960", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 42496, + "pts_time": "3.320000", + "dts": 42496, + "dts_time": "3.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "6616", + "pos": "768964", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 160768, + "pts_time": "3.349333", + "dts": 160768, + "dts_time": "3.349333", + "duration": 1024, + "duration_time": "0.021333", + "size": "962", + "pos": "775580", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 161792, + "pts_time": "3.370667", + "dts": 161792, + "dts_time": "3.370667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "776542", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 43008, + "pts_time": "3.360000", + "dts": 43008, + "dts_time": "3.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "7587", + "pos": "777546", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 162816, + "pts_time": "3.392000", + "dts": 162816, + "dts_time": "3.392000", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "785133", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 163840, + "pts_time": "3.413333", + "dts": 163840, + "dts_time": "3.413333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1008", + "pos": "786117", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 43520, + "pts_time": "3.400000", + "dts": 43520, + "dts_time": "3.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "3929", + "pos": "787125", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 164864, + "pts_time": "3.434667", + "dts": 164864, + "dts_time": "3.434667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1094", + "pos": "791054", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 165888, + "pts_time": "3.456000", + "dts": 165888, + "dts_time": "3.456000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1065", + "pos": "792148", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 44032, + "pts_time": "3.440000", + "dts": 44032, + "dts_time": "3.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5863", + "pos": "793213", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 166912, + "pts_time": "3.477333", + "dts": 166912, + "dts_time": "3.477333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "799076", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 44544, + "pts_time": "3.480000", + "dts": 44544, + "dts_time": "3.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5013", + "pos": "800145", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 167936, + "pts_time": "3.498667", + "dts": 167936, + "dts_time": "3.498667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "805158", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 168960, + "pts_time": "3.520000", + "dts": 168960, + "dts_time": "3.520000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1072", + "pos": "806186", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 45056, + "pts_time": "3.520000", + "dts": 45056, + "dts_time": "3.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "7331", + "pos": "807258", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 169984, + "pts_time": "3.541333", + "dts": 169984, + "dts_time": "3.541333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1039", + "pos": "814589", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 171008, + "pts_time": "3.562667", + "dts": 171008, + "dts_time": "3.562667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "815628", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 45568, + "pts_time": "3.560000", + "dts": 45568, + "dts_time": "3.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "2681", + "pos": "816697", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 172032, + "pts_time": "3.584000", + "dts": 172032, + "dts_time": "3.584000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1067", + "pos": "819378", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 173056, + "pts_time": "3.605333", + "dts": 173056, + "dts_time": "3.605333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1125", + "pos": "820445", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 46080, + "pts_time": "3.600000", + "dts": 46080, + "dts_time": "3.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "3992", + "pos": "821570", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 174080, + "pts_time": "3.626667", + "dts": 174080, + "dts_time": "3.626667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1144", + "pos": "825562", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 175104, + "pts_time": "3.648000", + "dts": 175104, + "dts_time": "3.648000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1129", + "pos": "826706", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 46592, + "pts_time": "3.640000", + "dts": 46592, + "dts_time": "3.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "2616", + "pos": "827835", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 176128, + "pts_time": "3.669333", + "dts": 176128, + "dts_time": "3.669333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1115", + "pos": "830451", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 177152, + "pts_time": "3.690667", + "dts": 177152, + "dts_time": "3.690667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1077", + "pos": "831566", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 47104, + "pts_time": "3.680000", + "dts": 47104, + "dts_time": "3.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "2329", + "pos": "832643", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 178176, + "pts_time": "3.712000", + "dts": 178176, + "dts_time": "3.712000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1098", + "pos": "834972", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 179200, + "pts_time": "3.733333", + "dts": 179200, + "dts_time": "3.733333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "836070", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 47616, + "pts_time": "3.720000", + "dts": 47616, + "dts_time": "3.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "2096", + "pos": "837097", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 180224, + "pts_time": "3.754667", + "dts": 180224, + "dts_time": "3.754667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "839193", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 181248, + "pts_time": "3.776000", + "dts": 181248, + "dts_time": "3.776000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1031", + "pos": "840212", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 48128, + "pts_time": "3.760000", + "dts": 48128, + "dts_time": "3.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "2134", + "pos": "841243", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 182272, + "pts_time": "3.797333", + "dts": 182272, + "dts_time": "3.797333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "843377", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 48640, + "pts_time": "3.800000", + "dts": 48640, + "dts_time": "3.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "1437", + "pos": "844396", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 183296, + "pts_time": "3.818667", + "dts": 183296, + "dts_time": "3.818667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1020", + "pos": "845833", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 184320, + "pts_time": "3.840000", + "dts": 184320, + "dts_time": "3.840000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1045", + "pos": "846853", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 49152, + "pts_time": "3.840000", + "dts": 49152, + "dts_time": "3.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "1678", + "pos": "847898", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 185344, + "pts_time": "3.861333", + "dts": 185344, + "dts_time": "3.861333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "849576", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 186368, + "pts_time": "3.882667", + "dts": 186368, + "dts_time": "3.882667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1053", + "pos": "850602", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 49664, + "pts_time": "3.880000", + "dts": 49664, + "dts_time": "3.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "3341", + "pos": "851655", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 187392, + "pts_time": "3.904000", + "dts": 187392, + "dts_time": "3.904000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "854996", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 188416, + "pts_time": "3.925333", + "dts": 188416, + "dts_time": "3.925333", + "duration": 1024, + "duration_time": "0.021333", + "size": "956", + "pos": "856014", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 50176, + "pts_time": "3.920000", + "dts": 50176, + "dts_time": "3.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "2658", + "pos": "856970", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 189440, + "pts_time": "3.946667", + "dts": 189440, + "dts_time": "3.946667", + "duration": 1024, + "duration_time": "0.021333", + "size": "948", + "pos": "859628", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 190464, + "pts_time": "3.968000", + "dts": 190464, + "dts_time": "3.968000", + "duration": 1024, + "duration_time": "0.021333", + "size": "942", + "pos": "860576", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 50688, + "pts_time": "3.960000", + "dts": 50688, + "dts_time": "3.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "2686", + "pos": "861518", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 191488, + "pts_time": "3.989333", + "dts": 191488, + "dts_time": "3.989333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "864204", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 192512, + "pts_time": "4.010667", + "dts": 192512, + "dts_time": "4.010667", + "duration": 1024, + "duration_time": "0.021333", + "size": "934", + "pos": "865210", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 51200, + "pts_time": "4.000000", + "dts": 51200, + "dts_time": "4.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "2997", + "pos": "866144", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 193536, + "pts_time": "4.032000", + "dts": 193536, + "dts_time": "4.032000", + "duration": 1024, + "duration_time": "0.021333", + "size": "939", + "pos": "869141", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 194560, + "pts_time": "4.053333", + "dts": 194560, + "dts_time": "4.053333", + "duration": 1024, + "duration_time": "0.021333", + "size": "943", + "pos": "870080", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 51712, + "pts_time": "4.040000", + "dts": 51712, + "dts_time": "4.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "3001", + "pos": "871023", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 195584, + "pts_time": "4.074667", + "dts": 195584, + "dts_time": "4.074667", + "duration": 1024, + "duration_time": "0.021333", + "size": "970", + "pos": "874024", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 196608, + "pts_time": "4.096000", + "dts": 196608, + "dts_time": "4.096000", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "874994", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 52224, + "pts_time": "4.080000", + "dts": 52224, + "dts_time": "4.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2614", + "pos": "875959", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 197632, + "pts_time": "4.117333", + "dts": 197632, + "dts_time": "4.117333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1098", + "pos": "878573", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 52736, + "pts_time": "4.120000", + "dts": 52736, + "dts_time": "4.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "3587", + "pos": "879671", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 198656, + "pts_time": "4.138667", + "dts": 198656, + "dts_time": "4.138667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1067", + "pos": "883258", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 199680, + "pts_time": "4.160000", + "dts": 199680, + "dts_time": "4.160000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1021", + "pos": "884325", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 53248, + "pts_time": "4.160000", + "dts": 53248, + "dts_time": "4.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "4599", + "pos": "885346", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 200704, + "pts_time": "4.181333", + "dts": 200704, + "dts_time": "4.181333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1009", + "pos": "889945", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 201728, + "pts_time": "4.202667", + "dts": 201728, + "dts_time": "4.202667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "890954", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 53760, + "pts_time": "4.200000", + "dts": 53760, + "dts_time": "4.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "5642", + "pos": "891990", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 202752, + "pts_time": "4.224000", + "dts": 202752, + "dts_time": "4.224000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "897632", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 203776, + "pts_time": "4.245333", + "dts": 203776, + "dts_time": "4.245333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "898667", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 54272, + "pts_time": "4.240000", + "dts": 54272, + "dts_time": "4.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "6757", + "pos": "899691", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 204800, + "pts_time": "4.266667", + "dts": 204800, + "dts_time": "4.266667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1074", + "pos": "906448", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 205824, + "pts_time": "4.288000", + "dts": 205824, + "dts_time": "4.288000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "907522", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 54784, + "pts_time": "4.280000", + "dts": 54784, + "dts_time": "4.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "784", + "pos": "908559", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 206848, + "pts_time": "4.309333", + "dts": 206848, + "dts_time": "4.309333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1008", + "pos": "909343", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 207872, + "pts_time": "4.330667", + "dts": 207872, + "dts_time": "4.330667", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "910351", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 55296, + "pts_time": "4.320000", + "dts": 55296, + "dts_time": "4.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "5285", + "pos": "911330", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 208896, + "pts_time": "4.352000", + "dts": 208896, + "dts_time": "4.352000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1016", + "pos": "916615", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 209920, + "pts_time": "4.373333", + "dts": 209920, + "dts_time": "4.373333", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "917631", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 55808, + "pts_time": "4.360000", + "dts": 55808, + "dts_time": "4.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "5117", + "pos": "918596", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 210944, + "pts_time": "4.394667", + "dts": 210944, + "dts_time": "4.394667", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "923713", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 211968, + "pts_time": "4.416000", + "dts": 211968, + "dts_time": "4.416000", + "duration": 1024, + "duration_time": "0.021333", + "size": "976", + "pos": "924696", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 56320, + "pts_time": "4.400000", + "dts": 56320, + "dts_time": "4.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "5553", + "pos": "925672", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 212992, + "pts_time": "4.437333", + "dts": 212992, + "dts_time": "4.437333", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "931225", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 56832, + "pts_time": "4.440000", + "dts": 56832, + "dts_time": "4.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5601", + "pos": "932205", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 214016, + "pts_time": "4.458667", + "dts": 214016, + "dts_time": "4.458667", + "duration": 1024, + "duration_time": "0.021333", + "size": "950", + "pos": "937806", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 215040, + "pts_time": "4.480000", + "dts": 215040, + "dts_time": "4.480000", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "938756", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 57344, + "pts_time": "4.480000", + "dts": 57344, + "dts_time": "4.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5281", + "pos": "939735", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 216064, + "pts_time": "4.501333", + "dts": 216064, + "dts_time": "4.501333", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "945016", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 217088, + "pts_time": "4.522667", + "dts": 217088, + "dts_time": "4.522667", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "945994", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 57856, + "pts_time": "4.520000", + "dts": 57856, + "dts_time": "4.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "7270", + "pos": "946981", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 218112, + "pts_time": "4.544000", + "dts": 218112, + "dts_time": "4.544000", + "duration": 1024, + "duration_time": "0.021333", + "size": "991", + "pos": "954251", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 219136, + "pts_time": "4.565333", + "dts": 219136, + "dts_time": "4.565333", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "955242", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 58368, + "pts_time": "4.560000", + "dts": 58368, + "dts_time": "4.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "3146", + "pos": "956226", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 220160, + "pts_time": "4.586667", + "dts": 220160, + "dts_time": "4.586667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1121", + "pos": "959372", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 221184, + "pts_time": "4.608000", + "dts": 221184, + "dts_time": "4.608000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1137", + "pos": "960493", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 58880, + "pts_time": "4.600000", + "dts": 58880, + "dts_time": "4.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "2708", + "pos": "961630", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 222208, + "pts_time": "4.629333", + "dts": 222208, + "dts_time": "4.629333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1149", + "pos": "964338", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 223232, + "pts_time": "4.650667", + "dts": 223232, + "dts_time": "4.650667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1182", + "pos": "965487", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 59392, + "pts_time": "4.640000", + "dts": 59392, + "dts_time": "4.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "4652", + "pos": "966669", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 224256, + "pts_time": "4.672000", + "dts": 224256, + "dts_time": "4.672000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1150", + "pos": "971321", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 225280, + "pts_time": "4.693333", + "dts": 225280, + "dts_time": "4.693333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1097", + "pos": "972471", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 59904, + "pts_time": "4.680000", + "dts": 59904, + "dts_time": "4.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "1918", + "pos": "973568", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 226304, + "pts_time": "4.714667", + "dts": 226304, + "dts_time": "4.714667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1117", + "pos": "975486", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 227328, + "pts_time": "4.736000", + "dts": 227328, + "dts_time": "4.736000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1088", + "pos": "976603", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 60416, + "pts_time": "4.720000", + "dts": 60416, + "dts_time": "4.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "2144", + "pos": "977691", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 228352, + "pts_time": "4.757333", + "dts": 228352, + "dts_time": "4.757333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1063", + "pos": "979835", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 60928, + "pts_time": "4.760000", + "dts": 60928, + "dts_time": "4.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "3733", + "pos": "980898", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 229376, + "pts_time": "4.778667", + "dts": 229376, + "dts_time": "4.778667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1078", + "pos": "984631", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 230400, + "pts_time": "4.800000", + "dts": 230400, + "dts_time": "4.800000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1062", + "pos": "985709", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 61440, + "pts_time": "4.800000", + "dts": 61440, + "dts_time": "4.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "3473", + "pos": "986771", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 231424, + "pts_time": "4.821333", + "dts": 231424, + "dts_time": "4.821333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "990244", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 232448, + "pts_time": "4.842667", + "dts": 232448, + "dts_time": "4.842667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1150", + "pos": "991313", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 61952, + "pts_time": "4.840000", + "dts": 61952, + "dts_time": "4.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "4653", + "pos": "992463", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 233472, + "pts_time": "4.864000", + "dts": 233472, + "dts_time": "4.864000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1166", + "pos": "997116", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 234496, + "pts_time": "4.885333", + "dts": 234496, + "dts_time": "4.885333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1178", + "pos": "998282", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 62464, + "pts_time": "4.880000", + "dts": 62464, + "dts_time": "4.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "2332", + "pos": "999460", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 235520, + "pts_time": "4.906667", + "dts": 235520, + "dts_time": "4.906667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1133", + "pos": "1001792", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 236544, + "pts_time": "4.928000", + "dts": 236544, + "dts_time": "4.928000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1185", + "pos": "1002925", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 62976, + "pts_time": "4.920000", + "dts": 62976, + "dts_time": "4.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "2593", + "pos": "1004110", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 237568, + "pts_time": "4.949333", + "dts": 237568, + "dts_time": "4.949333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1141", + "pos": "1006703", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 238592, + "pts_time": "4.970667", + "dts": 238592, + "dts_time": "4.970667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1157", + "pos": "1007844", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 63488, + "pts_time": "4.960000", + "dts": 63488, + "dts_time": "4.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "2488", + "pos": "1009001", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 239616, + "pts_time": "4.992000", + "dts": 239616, + "dts_time": "4.992000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1106", + "pos": "1011489", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 240640, + "pts_time": "5.013333", + "dts": 240640, + "dts_time": "5.013333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1104", + "pos": "1012595", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 64000, + "pts_time": "5.000000", + "dts": 64000, + "dts_time": "5.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "4304", + "pos": "1013699", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 241664, + "pts_time": "5.034667", + "dts": 241664, + "dts_time": "5.034667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1147", + "pos": "1018003", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 242688, + "pts_time": "5.056000", + "dts": 242688, + "dts_time": "5.056000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1077", + "pos": "1019150", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 64512, + "pts_time": "5.040000", + "dts": 64512, + "dts_time": "5.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "2883", + "pos": "1020227", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 243712, + "pts_time": "5.077333", + "dts": 243712, + "dts_time": "5.077333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1085", + "pos": "1023110", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 65024, + "pts_time": "5.080000", + "dts": 65024, + "dts_time": "5.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2186", + "pos": "1024195", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 244736, + "pts_time": "5.098667", + "dts": 244736, + "dts_time": "5.098667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1163", + "pos": "1026381", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 245760, + "pts_time": "5.120000", + "dts": 245760, + "dts_time": "5.120000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1206", + "pos": "1027544", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 65536, + "pts_time": "5.120000", + "dts": 65536, + "dts_time": "5.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "3380", + "pos": "1028750", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 246784, + "pts_time": "5.141333", + "dts": 246784, + "dts_time": "5.141333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1193", + "pos": "1032130", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 247808, + "pts_time": "5.162667", + "dts": 247808, + "dts_time": "5.162667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1185", + "pos": "1033323", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 66048, + "pts_time": "5.160000", + "dts": 66048, + "dts_time": "5.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "4411", + "pos": "1034508", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 248832, + "pts_time": "5.184000", + "dts": 248832, + "dts_time": "5.184000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1125", + "pos": "1038919", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 249856, + "pts_time": "5.205333", + "dts": 249856, + "dts_time": "5.205333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1107", + "pos": "1040044", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 66560, + "pts_time": "5.200000", + "dts": 66560, + "dts_time": "5.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "4714", + "pos": "1041151", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 250880, + "pts_time": "5.226667", + "dts": 250880, + "dts_time": "5.226667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1108", + "pos": "1045865", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 251904, + "pts_time": "5.248000", + "dts": 251904, + "dts_time": "5.248000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1066", + "pos": "1046973", + "flags": "K_" + }, + { + "codec_type": "video", + "stream_index": 0, + "pts": 67072, + "pts_time": "5.240000", + "dts": 67072, + "dts_time": "5.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "5496", + "pos": "1048039", + "flags": "__" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 252928, + "pts_time": "5.269333", + "dts": 252928, + "dts_time": "5.269333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1074", + "pos": "1053535", + "flags": "K_" + }, + { + "codec_type": "audio", + "stream_index": 1, + "pts": 253952, + "pts_time": "5.290667", + "dts": 253952, + "dts_time": "5.290667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1111", + "pos": "1054609", + "flags": "K_" + } + ] +} diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4 b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4 new file mode 100644 index 00000000..c6d9f739 --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4 @@ -0,0 +1,13882 @@ +{ + "packets_and_frames": [ + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 0, + "pts_time": "0.000000", + "dts": 0, + "dts_time": "0.000000", + "duration": 1024, + "duration_time": "0.021333", + "size": "967", + "pos": "4261", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 0, + "pkt_pts_time": "0.000000", + "pkt_dts": 0, + "pkt_dts_time": "0.000000", + "best_effort_timestamp": 0, + "best_effort_timestamp_time": "0.000000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "4261", + "pkt_size": "967", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 0, + "pts_time": "0.000000", + "dts": 0, + "dts_time": "0.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "105222", + "pos": "5228", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 1, + "pkt_pts": 0, + "pkt_pts_time": "0.000000", + "pkt_dts": 0, + "pkt_dts_time": "0.000000", + "best_effort_timestamp": 0, + "best_effort_timestamp_time": "0.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "5228", + "pkt_size": "105222", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "I", + "coded_picture_number": 0, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 1024, + "pts_time": "0.021333", + "dts": 1024, + "dts_time": "0.021333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1011", + "pos": "110450", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 1024, + "pkt_pts_time": "0.021333", + "pkt_dts": 1024, + "pkt_dts_time": "0.021333", + "best_effort_timestamp": 1024, + "best_effort_timestamp_time": "0.021333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "110450", + "pkt_size": "1011", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 2048, + "pts_time": "0.042667", + "dts": 2048, + "dts_time": "0.042667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "111461", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 2048, + "pkt_pts_time": "0.042667", + "pkt_dts": 2048, + "pkt_dts_time": "0.042667", + "best_effort_timestamp": 2048, + "best_effort_timestamp_time": "0.042667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "111461", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 512, + "pts_time": "0.040000", + "dts": 512, + "dts_time": "0.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "1554", + "pos": "112487", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 512, + "pkt_pts_time": "0.040000", + "pkt_dts": 512, + "pkt_dts_time": "0.040000", + "best_effort_timestamp": 512, + "best_effort_timestamp_time": "0.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "112487", + "pkt_size": "1554", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 1, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 3072, + "pts_time": "0.064000", + "dts": 3072, + "dts_time": "0.064000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1030", + "pos": "114041", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 3072, + "pkt_pts_time": "0.064000", + "pkt_dts": 3072, + "pkt_dts_time": "0.064000", + "best_effort_timestamp": 3072, + "best_effort_timestamp_time": "0.064000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "114041", + "pkt_size": "1030", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 4096, + "pts_time": "0.085333", + "dts": 4096, + "dts_time": "0.085333", + "duration": 1024, + "duration_time": "0.021333", + "size": "990", + "pos": "115071", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 4096, + "pkt_pts_time": "0.085333", + "pkt_dts": 4096, + "pkt_dts_time": "0.085333", + "best_effort_timestamp": 4096, + "best_effort_timestamp_time": "0.085333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "115071", + "pkt_size": "990", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 1024, + "pts_time": "0.080000", + "dts": 1024, + "dts_time": "0.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2153", + "pos": "116061", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 1024, + "pkt_pts_time": "0.080000", + "pkt_dts": 1024, + "pkt_dts_time": "0.080000", + "best_effort_timestamp": 1024, + "best_effort_timestamp_time": "0.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "116061", + "pkt_size": "2153", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 2, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 5120, + "pts_time": "0.106667", + "dts": 5120, + "dts_time": "0.106667", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "118214", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 5120, + "pkt_pts_time": "0.106667", + "pkt_dts": 5120, + "pkt_dts_time": "0.106667", + "best_effort_timestamp": 5120, + "best_effort_timestamp_time": "0.106667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "118214", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 6144, + "pts_time": "0.128000", + "dts": 6144, + "dts_time": "0.128000", + "duration": 1024, + "duration_time": "0.021333", + "size": "973", + "pos": "119172", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 6144, + "pkt_pts_time": "0.128000", + "pkt_dts": 6144, + "pkt_dts_time": "0.128000", + "best_effort_timestamp": 6144, + "best_effort_timestamp_time": "0.128000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "119172", + "pkt_size": "973", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 1536, + "pts_time": "0.120000", + "dts": 1536, + "dts_time": "0.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "2208", + "pos": "120145", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 1536, + "pkt_pts_time": "0.120000", + "pkt_dts": 1536, + "pkt_dts_time": "0.120000", + "best_effort_timestamp": 1536, + "best_effort_timestamp_time": "0.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "120145", + "pkt_size": "2208", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 3, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 7168, + "pts_time": "0.149333", + "dts": 7168, + "dts_time": "0.149333", + "duration": 1024, + "duration_time": "0.021333", + "size": "989", + "pos": "122353", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 7168, + "pkt_pts_time": "0.149333", + "pkt_dts": 7168, + "pkt_dts_time": "0.149333", + "best_effort_timestamp": 7168, + "best_effort_timestamp_time": "0.149333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "122353", + "pkt_size": "989", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 8192, + "pts_time": "0.170667", + "dts": 8192, + "dts_time": "0.170667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1009", + "pos": "123342", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 8192, + "pkt_pts_time": "0.170667", + "pkt_dts": 8192, + "pkt_dts_time": "0.170667", + "best_effort_timestamp": 8192, + "best_effort_timestamp_time": "0.170667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "123342", + "pkt_size": "1009", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 2048, + "pts_time": "0.160000", + "dts": 2048, + "dts_time": "0.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "2523", + "pos": "124351", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 2048, + "pkt_pts_time": "0.160000", + "pkt_dts": 2048, + "pkt_dts_time": "0.160000", + "best_effort_timestamp": 2048, + "best_effort_timestamp_time": "0.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "124351", + "pkt_size": "2523", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 4, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 9216, + "pts_time": "0.192000", + "dts": 9216, + "dts_time": "0.192000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1000", + "pos": "126874", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 9216, + "pkt_pts_time": "0.192000", + "pkt_dts": 9216, + "pkt_dts_time": "0.192000", + "best_effort_timestamp": 9216, + "best_effort_timestamp_time": "0.192000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "126874", + "pkt_size": "1000", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 10240, + "pts_time": "0.213333", + "dts": 10240, + "dts_time": "0.213333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "127874", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 10240, + "pkt_pts_time": "0.213333", + "pkt_dts": 10240, + "pkt_dts_time": "0.213333", + "best_effort_timestamp": 10240, + "best_effort_timestamp_time": "0.213333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "127874", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 2560, + "pts_time": "0.200000", + "dts": 2560, + "dts_time": "0.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "3088", + "pos": "128892", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 2560, + "pkt_pts_time": "0.200000", + "pkt_dts": 2560, + "pkt_dts_time": "0.200000", + "best_effort_timestamp": 2560, + "best_effort_timestamp_time": "0.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "128892", + "pkt_size": "3088", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 5, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 11264, + "pts_time": "0.234667", + "dts": 11264, + "dts_time": "0.234667", + "duration": 1024, + "duration_time": "0.021333", + "size": "991", + "pos": "131980", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 11264, + "pkt_pts_time": "0.234667", + "pkt_dts": 11264, + "pkt_dts_time": "0.234667", + "best_effort_timestamp": 11264, + "best_effort_timestamp_time": "0.234667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "131980", + "pkt_size": "991", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 12288, + "pts_time": "0.256000", + "dts": 12288, + "dts_time": "0.256000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "132971", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 12288, + "pkt_pts_time": "0.256000", + "pkt_dts": 12288, + "pkt_dts_time": "0.256000", + "best_effort_timestamp": 12288, + "best_effort_timestamp_time": "0.256000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "132971", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 3072, + "pts_time": "0.240000", + "dts": 3072, + "dts_time": "0.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "4188", + "pos": "133977", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 3072, + "pkt_pts_time": "0.240000", + "pkt_dts": 3072, + "pkt_dts_time": "0.240000", + "best_effort_timestamp": 3072, + "best_effort_timestamp_time": "0.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "133977", + "pkt_size": "4188", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 6, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 13312, + "pts_time": "0.277333", + "dts": 13312, + "dts_time": "0.277333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "138165", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 13312, + "pkt_pts_time": "0.277333", + "pkt_dts": 13312, + "pkt_dts_time": "0.277333", + "best_effort_timestamp": 13312, + "best_effort_timestamp_time": "0.277333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "138165", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 3584, + "pts_time": "0.280000", + "dts": 3584, + "dts_time": "0.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "365", + "pos": "139177", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 3584, + "pkt_pts_time": "0.280000", + "pkt_dts": 3584, + "pkt_dts_time": "0.280000", + "best_effort_timestamp": 3584, + "best_effort_timestamp_time": "0.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "139177", + "pkt_size": "365", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 7, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 14336, + "pts_time": "0.298667", + "dts": 14336, + "dts_time": "0.298667", + "duration": 1024, + "duration_time": "0.021333", + "size": "990", + "pos": "139542", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 14336, + "pkt_pts_time": "0.298667", + "pkt_dts": 14336, + "pkt_dts_time": "0.298667", + "best_effort_timestamp": 14336, + "best_effort_timestamp_time": "0.298667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "139542", + "pkt_size": "990", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 15360, + "pts_time": "0.320000", + "dts": 15360, + "dts_time": "0.320000", + "duration": 1024, + "duration_time": "0.021333", + "size": "985", + "pos": "140532", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 15360, + "pkt_pts_time": "0.320000", + "pkt_dts": 15360, + "pkt_dts_time": "0.320000", + "best_effort_timestamp": 15360, + "best_effort_timestamp_time": "0.320000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "140532", + "pkt_size": "985", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 4096, + "pts_time": "0.320000", + "dts": 4096, + "dts_time": "0.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "3571", + "pos": "141517", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 4096, + "pkt_pts_time": "0.320000", + "pkt_dts": 4096, + "pkt_dts_time": "0.320000", + "best_effort_timestamp": 4096, + "best_effort_timestamp_time": "0.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "141517", + "pkt_size": "3571", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 8, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 16384, + "pts_time": "0.341333", + "dts": 16384, + "dts_time": "0.341333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1029", + "pos": "145088", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 16384, + "pkt_pts_time": "0.341333", + "pkt_dts": 16384, + "pkt_dts_time": "0.341333", + "best_effort_timestamp": 16384, + "best_effort_timestamp_time": "0.341333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "145088", + "pkt_size": "1029", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 17408, + "pts_time": "0.362667", + "dts": 17408, + "dts_time": "0.362667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "146117", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 17408, + "pkt_pts_time": "0.362667", + "pkt_dts": 17408, + "pkt_dts_time": "0.362667", + "best_effort_timestamp": 17408, + "best_effort_timestamp_time": "0.362667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "146117", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 4608, + "pts_time": "0.360000", + "dts": 4608, + "dts_time": "0.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "3966", + "pos": "147121", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 4608, + "pkt_pts_time": "0.360000", + "pkt_dts": 4608, + "pkt_dts_time": "0.360000", + "best_effort_timestamp": 4608, + "best_effort_timestamp_time": "0.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "147121", + "pkt_size": "3966", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 9, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 18432, + "pts_time": "0.384000", + "dts": 18432, + "dts_time": "0.384000", + "duration": 1024, + "duration_time": "0.021333", + "size": "971", + "pos": "151087", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 18432, + "pkt_pts_time": "0.384000", + "pkt_dts": 18432, + "pkt_dts_time": "0.384000", + "best_effort_timestamp": 18432, + "best_effort_timestamp_time": "0.384000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "151087", + "pkt_size": "971", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 19456, + "pts_time": "0.405333", + "dts": 19456, + "dts_time": "0.405333", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "152058", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 19456, + "pkt_pts_time": "0.405333", + "pkt_dts": 19456, + "pkt_dts_time": "0.405333", + "best_effort_timestamp": 19456, + "best_effort_timestamp_time": "0.405333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "152058", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 5120, + "pts_time": "0.400000", + "dts": 5120, + "dts_time": "0.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "4081", + "pos": "153040", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 5120, + "pkt_pts_time": "0.400000", + "pkt_dts": 5120, + "pkt_dts_time": "0.400000", + "best_effort_timestamp": 5120, + "best_effort_timestamp_time": "0.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "153040", + "pkt_size": "4081", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 10, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 20480, + "pts_time": "0.426667", + "dts": 20480, + "dts_time": "0.426667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1046", + "pos": "157121", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 20480, + "pkt_pts_time": "0.426667", + "pkt_dts": 20480, + "pkt_dts_time": "0.426667", + "best_effort_timestamp": 20480, + "best_effort_timestamp_time": "0.426667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "157121", + "pkt_size": "1046", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 21504, + "pts_time": "0.448000", + "dts": 21504, + "dts_time": "0.448000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "158167", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 21504, + "pkt_pts_time": "0.448000", + "pkt_dts": 21504, + "pkt_dts_time": "0.448000", + "best_effort_timestamp": 21504, + "best_effort_timestamp_time": "0.448000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "158167", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 5632, + "pts_time": "0.440000", + "dts": 5632, + "dts_time": "0.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "4631", + "pos": "159179", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 5632, + "pkt_pts_time": "0.440000", + "pkt_dts": 5632, + "pkt_dts_time": "0.440000", + "best_effort_timestamp": 5632, + "best_effort_timestamp_time": "0.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "159179", + "pkt_size": "4631", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 11, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 22528, + "pts_time": "0.469333", + "dts": 22528, + "dts_time": "0.469333", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "163810", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 22528, + "pkt_pts_time": "0.469333", + "pkt_dts": 22528, + "pkt_dts_time": "0.469333", + "best_effort_timestamp": 22528, + "best_effort_timestamp_time": "0.469333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "163810", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 23552, + "pts_time": "0.490667", + "dts": 23552, + "dts_time": "0.490667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1013", + "pos": "164790", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 23552, + "pkt_pts_time": "0.490667", + "pkt_dts": 23552, + "pkt_dts_time": "0.490667", + "best_effort_timestamp": 23552, + "best_effort_timestamp_time": "0.490667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "164790", + "pkt_size": "1013", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 6144, + "pts_time": "0.480000", + "dts": 6144, + "dts_time": "0.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "4996", + "pos": "165803", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 6144, + "pkt_pts_time": "0.480000", + "pkt_dts": 6144, + "pkt_dts_time": "0.480000", + "best_effort_timestamp": 6144, + "best_effort_timestamp_time": "0.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "165803", + "pkt_size": "4996", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 12, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 24576, + "pts_time": "0.512000", + "dts": 24576, + "dts_time": "0.512000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1086", + "pos": "170799", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 24576, + "pkt_pts_time": "0.512000", + "pkt_dts": 24576, + "pkt_dts_time": "0.512000", + "best_effort_timestamp": 24576, + "best_effort_timestamp_time": "0.512000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "170799", + "pkt_size": "1086", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 25600, + "pts_time": "0.533333", + "dts": 25600, + "dts_time": "0.533333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1057", + "pos": "171885", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 25600, + "pkt_pts_time": "0.533333", + "pkt_dts": 25600, + "pkt_dts_time": "0.533333", + "best_effort_timestamp": 25600, + "best_effort_timestamp_time": "0.533333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "171885", + "pkt_size": "1057", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 6656, + "pts_time": "0.520000", + "dts": 6656, + "dts_time": "0.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "5909", + "pos": "172942", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 6656, + "pkt_pts_time": "0.520000", + "pkt_dts": 6656, + "pkt_dts_time": "0.520000", + "best_effort_timestamp": 6656, + "best_effort_timestamp_time": "0.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "172942", + "pkt_size": "5909", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 13, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 26624, + "pts_time": "0.554667", + "dts": 26624, + "dts_time": "0.554667", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "178851", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 26624, + "pkt_pts_time": "0.554667", + "pkt_dts": 26624, + "pkt_dts_time": "0.554667", + "best_effort_timestamp": 26624, + "best_effort_timestamp_time": "0.554667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "178851", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 27648, + "pts_time": "0.576000", + "dts": 27648, + "dts_time": "0.576000", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "179838", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 27648, + "pkt_pts_time": "0.576000", + "pkt_dts": 27648, + "pkt_dts_time": "0.576000", + "best_effort_timestamp": 27648, + "best_effort_timestamp_time": "0.576000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "179838", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 7168, + "pts_time": "0.560000", + "dts": 7168, + "dts_time": "0.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "5995", + "pos": "180825", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 7168, + "pkt_pts_time": "0.560000", + "pkt_dts": 7168, + "pkt_dts_time": "0.560000", + "best_effort_timestamp": 7168, + "best_effort_timestamp_time": "0.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "180825", + "pkt_size": "5995", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 14, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 28672, + "pts_time": "0.597333", + "dts": 28672, + "dts_time": "0.597333", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "186820", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 28672, + "pkt_pts_time": "0.597333", + "pkt_dts": 28672, + "pkt_dts_time": "0.597333", + "best_effort_timestamp": 28672, + "best_effort_timestamp_time": "0.597333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "186820", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 7680, + "pts_time": "0.600000", + "dts": 7680, + "dts_time": "0.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "6419", + "pos": "187798", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 7680, + "pkt_pts_time": "0.600000", + "pkt_dts": 7680, + "pkt_dts_time": "0.600000", + "best_effort_timestamp": 7680, + "best_effort_timestamp_time": "0.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "187798", + "pkt_size": "6419", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 15, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 29696, + "pts_time": "0.618667", + "dts": 29696, + "dts_time": "0.618667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1050", + "pos": "194217", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 29696, + "pkt_pts_time": "0.618667", + "pkt_dts": 29696, + "pkt_dts_time": "0.618667", + "best_effort_timestamp": 29696, + "best_effort_timestamp_time": "0.618667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "194217", + "pkt_size": "1050", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 30720, + "pts_time": "0.640000", + "dts": 30720, + "dts_time": "0.640000", + "duration": 1024, + "duration_time": "0.021333", + "size": "994", + "pos": "195267", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 30720, + "pkt_pts_time": "0.640000", + "pkt_dts": 30720, + "pkt_dts_time": "0.640000", + "best_effort_timestamp": 30720, + "best_effort_timestamp_time": "0.640000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "195267", + "pkt_size": "994", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 8192, + "pts_time": "0.640000", + "dts": 8192, + "dts_time": "0.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "6212", + "pos": "196261", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 8192, + "pkt_pts_time": "0.640000", + "pkt_dts": 8192, + "pkt_dts_time": "0.640000", + "best_effort_timestamp": 8192, + "best_effort_timestamp_time": "0.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "196261", + "pkt_size": "6212", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 16, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 31744, + "pts_time": "0.661333", + "dts": 31744, + "dts_time": "0.661333", + "duration": 1024, + "duration_time": "0.021333", + "size": "968", + "pos": "202473", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 31744, + "pkt_pts_time": "0.661333", + "pkt_dts": 31744, + "pkt_dts_time": "0.661333", + "best_effort_timestamp": 31744, + "best_effort_timestamp_time": "0.661333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "202473", + "pkt_size": "968", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 32768, + "pts_time": "0.682667", + "dts": 32768, + "dts_time": "0.682667", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "203441", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 32768, + "pkt_pts_time": "0.682667", + "pkt_dts": 32768, + "pkt_dts_time": "0.682667", + "best_effort_timestamp": 32768, + "best_effort_timestamp_time": "0.682667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "203441", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 8704, + "pts_time": "0.680000", + "dts": 8704, + "dts_time": "0.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "6762", + "pos": "204420", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 8704, + "pkt_pts_time": "0.680000", + "pkt_dts": 8704, + "pkt_dts_time": "0.680000", + "best_effort_timestamp": 8704, + "best_effort_timestamp_time": "0.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "204420", + "pkt_size": "6762", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 17, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 33792, + "pts_time": "0.704000", + "dts": 33792, + "dts_time": "0.704000", + "duration": 1024, + "duration_time": "0.021333", + "size": "986", + "pos": "211182", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 33792, + "pkt_pts_time": "0.704000", + "pkt_dts": 33792, + "pkt_dts_time": "0.704000", + "best_effort_timestamp": 33792, + "best_effort_timestamp_time": "0.704000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "211182", + "pkt_size": "986", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 34816, + "pts_time": "0.725333", + "dts": 34816, + "dts_time": "0.725333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1053", + "pos": "212168", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 34816, + "pkt_pts_time": "0.725333", + "pkt_dts": 34816, + "pkt_dts_time": "0.725333", + "best_effort_timestamp": 34816, + "best_effort_timestamp_time": "0.725333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "212168", + "pkt_size": "1053", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 9216, + "pts_time": "0.720000", + "dts": 9216, + "dts_time": "0.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "6291", + "pos": "213221", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 9216, + "pkt_pts_time": "0.720000", + "pkt_dts": 9216, + "pkt_dts_time": "0.720000", + "best_effort_timestamp": 9216, + "best_effort_timestamp_time": "0.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "213221", + "pkt_size": "6291", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 18, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 35840, + "pts_time": "0.746667", + "dts": 35840, + "dts_time": "0.746667", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "219512", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 35840, + "pkt_pts_time": "0.746667", + "pkt_dts": 35840, + "pkt_dts_time": "0.746667", + "best_effort_timestamp": 35840, + "best_effort_timestamp_time": "0.746667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "219512", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 36864, + "pts_time": "0.768000", + "dts": 36864, + "dts_time": "0.768000", + "duration": 1024, + "duration_time": "0.021333", + "size": "986", + "pos": "220478", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 36864, + "pkt_pts_time": "0.768000", + "pkt_dts": 36864, + "pkt_dts_time": "0.768000", + "best_effort_timestamp": 36864, + "best_effort_timestamp_time": "0.768000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "220478", + "pkt_size": "986", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 9728, + "pts_time": "0.760000", + "dts": 9728, + "dts_time": "0.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "6902", + "pos": "221464", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 9728, + "pkt_pts_time": "0.760000", + "pkt_dts": 9728, + "pkt_dts_time": "0.760000", + "best_effort_timestamp": 9728, + "best_effort_timestamp_time": "0.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "221464", + "pkt_size": "6902", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 19, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 37888, + "pts_time": "0.789333", + "dts": 37888, + "dts_time": "0.789333", + "duration": 1024, + "duration_time": "0.021333", + "size": "951", + "pos": "228366", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 37888, + "pkt_pts_time": "0.789333", + "pkt_dts": 37888, + "pkt_dts_time": "0.789333", + "best_effort_timestamp": 37888, + "best_effort_timestamp_time": "0.789333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "228366", + "pkt_size": "951", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 38912, + "pts_time": "0.810667", + "dts": 38912, + "dts_time": "0.810667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "229317", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 38912, + "pkt_pts_time": "0.810667", + "pkt_dts": 38912, + "pkt_dts_time": "0.810667", + "best_effort_timestamp": 38912, + "best_effort_timestamp_time": "0.810667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "229317", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 10240, + "pts_time": "0.800000", + "dts": 10240, + "dts_time": "0.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "6916", + "pos": "230339", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 10240, + "pkt_pts_time": "0.800000", + "pkt_dts": 10240, + "pkt_dts_time": "0.800000", + "best_effort_timestamp": 10240, + "best_effort_timestamp_time": "0.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "230339", + "pkt_size": "6916", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 20, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 39936, + "pts_time": "0.832000", + "dts": 39936, + "dts_time": "0.832000", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "237255", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 39936, + "pkt_pts_time": "0.832000", + "pkt_dts": 39936, + "pkt_dts_time": "0.832000", + "best_effort_timestamp": 39936, + "best_effort_timestamp_time": "0.832000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "237255", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 40960, + "pts_time": "0.853333", + "dts": 40960, + "dts_time": "0.853333", + "duration": 1024, + "duration_time": "0.021333", + "size": "975", + "pos": "238238", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 40960, + "pkt_pts_time": "0.853333", + "pkt_dts": 40960, + "pkt_dts_time": "0.853333", + "best_effort_timestamp": 40960, + "best_effort_timestamp_time": "0.853333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "238238", + "pkt_size": "975", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 10752, + "pts_time": "0.840000", + "dts": 10752, + "dts_time": "0.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "7469", + "pos": "239213", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 10752, + "pkt_pts_time": "0.840000", + "pkt_dts": 10752, + "pkt_dts_time": "0.840000", + "best_effort_timestamp": 10752, + "best_effort_timestamp_time": "0.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "239213", + "pkt_size": "7469", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 21, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 41984, + "pts_time": "0.874667", + "dts": 41984, + "dts_time": "0.874667", + "duration": 1024, + "duration_time": "0.021333", + "size": "968", + "pos": "246682", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 41984, + "pkt_pts_time": "0.874667", + "pkt_dts": 41984, + "pkt_dts_time": "0.874667", + "best_effort_timestamp": 41984, + "best_effort_timestamp_time": "0.874667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "246682", + "pkt_size": "968", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 43008, + "pts_time": "0.896000", + "dts": 43008, + "dts_time": "0.896000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "247650", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 43008, + "pkt_pts_time": "0.896000", + "pkt_dts": 43008, + "pkt_dts_time": "0.896000", + "best_effort_timestamp": 43008, + "best_effort_timestamp_time": "0.896000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "247650", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 11264, + "pts_time": "0.880000", + "dts": 11264, + "dts_time": "0.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "7152", + "pos": "248668", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 11264, + "pkt_pts_time": "0.880000", + "pkt_dts": 11264, + "pkt_dts_time": "0.880000", + "best_effort_timestamp": 11264, + "best_effort_timestamp_time": "0.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "248668", + "pkt_size": "7152", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 22, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 44032, + "pts_time": "0.917333", + "dts": 44032, + "dts_time": "0.917333", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "255820", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 44032, + "pkt_pts_time": "0.917333", + "pkt_dts": 44032, + "pkt_dts_time": "0.917333", + "best_effort_timestamp": 44032, + "best_effort_timestamp_time": "0.917333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "255820", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 11776, + "pts_time": "0.920000", + "dts": 11776, + "dts_time": "0.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "7607", + "pos": "256778", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 11776, + "pkt_pts_time": "0.920000", + "pkt_dts": 11776, + "pkt_dts_time": "0.920000", + "best_effort_timestamp": 11776, + "best_effort_timestamp_time": "0.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "256778", + "pkt_size": "7607", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 23, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 45056, + "pts_time": "0.938667", + "dts": 45056, + "dts_time": "0.938667", + "duration": 1024, + "duration_time": "0.021333", + "size": "940", + "pos": "264385", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 45056, + "pkt_pts_time": "0.938667", + "pkt_dts": 45056, + "pkt_dts_time": "0.938667", + "best_effort_timestamp": 45056, + "best_effort_timestamp_time": "0.938667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "264385", + "pkt_size": "940", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 46080, + "pts_time": "0.960000", + "dts": 46080, + "dts_time": "0.960000", + "duration": 1024, + "duration_time": "0.021333", + "size": "942", + "pos": "265325", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 46080, + "pkt_pts_time": "0.960000", + "pkt_dts": 46080, + "pkt_dts_time": "0.960000", + "best_effort_timestamp": 46080, + "best_effort_timestamp_time": "0.960000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "265325", + "pkt_size": "942", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 12288, + "pts_time": "0.960000", + "dts": 12288, + "dts_time": "0.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "7663", + "pos": "266267", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 12288, + "pkt_pts_time": "0.960000", + "pkt_dts": 12288, + "pkt_dts_time": "0.960000", + "best_effort_timestamp": 12288, + "best_effort_timestamp_time": "0.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "266267", + "pkt_size": "7663", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 24, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 47104, + "pts_time": "0.981333", + "dts": 47104, + "dts_time": "0.981333", + "duration": 1024, + "duration_time": "0.021333", + "size": "960", + "pos": "273930", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 47104, + "pkt_pts_time": "0.981333", + "pkt_dts": 47104, + "pkt_dts_time": "0.981333", + "best_effort_timestamp": 47104, + "best_effort_timestamp_time": "0.981333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "273930", + "pkt_size": "960", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 48128, + "pts_time": "1.002667", + "dts": 48128, + "dts_time": "1.002667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "274890", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 48128, + "pkt_pts_time": "1.002667", + "pkt_dts": 48128, + "pkt_dts_time": "1.002667", + "best_effort_timestamp": 48128, + "best_effort_timestamp_time": "1.002667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "274890", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 12800, + "pts_time": "1.000000", + "dts": 12800, + "dts_time": "1.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "7637", + "pos": "275917", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 12800, + "pkt_pts_time": "1.000000", + "pkt_dts": 12800, + "pkt_dts_time": "1.000000", + "best_effort_timestamp": 12800, + "best_effort_timestamp_time": "1.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "275917", + "pkt_size": "7637", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 25, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 49152, + "pts_time": "1.024000", + "dts": 49152, + "dts_time": "1.024000", + "duration": 1024, + "duration_time": "0.021333", + "size": "953", + "pos": "283554", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 49152, + "pkt_pts_time": "1.024000", + "pkt_dts": 49152, + "pkt_dts_time": "1.024000", + "best_effort_timestamp": 49152, + "best_effort_timestamp_time": "1.024000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "283554", + "pkt_size": "953", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 50176, + "pts_time": "1.045333", + "dts": 50176, + "dts_time": "1.045333", + "duration": 1024, + "duration_time": "0.021333", + "size": "906", + "pos": "284507", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 50176, + "pkt_pts_time": "1.045333", + "pkt_dts": 50176, + "pkt_dts_time": "1.045333", + "best_effort_timestamp": 50176, + "best_effort_timestamp_time": "1.045333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "284507", + "pkt_size": "906", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 13312, + "pts_time": "1.040000", + "dts": 13312, + "dts_time": "1.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "7241", + "pos": "285413", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 13312, + "pkt_pts_time": "1.040000", + "pkt_dts": 13312, + "pkt_dts_time": "1.040000", + "best_effort_timestamp": 13312, + "best_effort_timestamp_time": "1.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "285413", + "pkt_size": "7241", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 26, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 51200, + "pts_time": "1.066667", + "dts": 51200, + "dts_time": "1.066667", + "duration": 1024, + "duration_time": "0.021333", + "size": "882", + "pos": "292654", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 51200, + "pkt_pts_time": "1.066667", + "pkt_dts": 51200, + "pkt_dts_time": "1.066667", + "best_effort_timestamp": 51200, + "best_effort_timestamp_time": "1.066667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "292654", + "pkt_size": "882", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 52224, + "pts_time": "1.088000", + "dts": 52224, + "dts_time": "1.088000", + "duration": 1024, + "duration_time": "0.021333", + "size": "943", + "pos": "293536", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 52224, + "pkt_pts_time": "1.088000", + "pkt_dts": 52224, + "pkt_dts_time": "1.088000", + "best_effort_timestamp": 52224, + "best_effort_timestamp_time": "1.088000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "293536", + "pkt_size": "943", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 13824, + "pts_time": "1.080000", + "dts": 13824, + "dts_time": "1.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "7520", + "pos": "294479", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 13824, + "pkt_pts_time": "1.080000", + "pkt_dts": 13824, + "pkt_dts_time": "1.080000", + "best_effort_timestamp": 13824, + "best_effort_timestamp_time": "1.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "294479", + "pkt_size": "7520", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 27, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 53248, + "pts_time": "1.109333", + "dts": 53248, + "dts_time": "1.109333", + "duration": 1024, + "duration_time": "0.021333", + "size": "896", + "pos": "301999", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 53248, + "pkt_pts_time": "1.109333", + "pkt_dts": 53248, + "pkt_dts_time": "1.109333", + "best_effort_timestamp": 53248, + "best_effort_timestamp_time": "1.109333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "301999", + "pkt_size": "896", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 54272, + "pts_time": "1.130667", + "dts": 54272, + "dts_time": "1.130667", + "duration": 1024, + "duration_time": "0.021333", + "size": "901", + "pos": "302895", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 54272, + "pkt_pts_time": "1.130667", + "pkt_dts": 54272, + "pkt_dts_time": "1.130667", + "best_effort_timestamp": 54272, + "best_effort_timestamp_time": "1.130667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "302895", + "pkt_size": "901", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 14336, + "pts_time": "1.120000", + "dts": 14336, + "dts_time": "1.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "7233", + "pos": "303796", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 14336, + "pkt_pts_time": "1.120000", + "pkt_dts": 14336, + "pkt_dts_time": "1.120000", + "best_effort_timestamp": 14336, + "best_effort_timestamp_time": "1.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "303796", + "pkt_size": "7233", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 28, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 55296, + "pts_time": "1.152000", + "dts": 55296, + "dts_time": "1.152000", + "duration": 1024, + "duration_time": "0.021333", + "size": "933", + "pos": "311029", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 55296, + "pkt_pts_time": "1.152000", + "pkt_dts": 55296, + "pkt_dts_time": "1.152000", + "best_effort_timestamp": 55296, + "best_effort_timestamp_time": "1.152000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "311029", + "pkt_size": "933", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 56320, + "pts_time": "1.173333", + "dts": 56320, + "dts_time": "1.173333", + "duration": 1024, + "duration_time": "0.021333", + "size": "961", + "pos": "311962", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 56320, + "pkt_pts_time": "1.173333", + "pkt_dts": 56320, + "pkt_dts_time": "1.173333", + "best_effort_timestamp": 56320, + "best_effort_timestamp_time": "1.173333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "311962", + "pkt_size": "961", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 14848, + "pts_time": "1.160000", + "dts": 14848, + "dts_time": "1.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "7677", + "pos": "312923", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 14848, + "pkt_pts_time": "1.160000", + "pkt_dts": 14848, + "pkt_dts_time": "1.160000", + "best_effort_timestamp": 14848, + "best_effort_timestamp_time": "1.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "312923", + "pkt_size": "7677", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 29, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 57344, + "pts_time": "1.194667", + "dts": 57344, + "dts_time": "1.194667", + "duration": 1024, + "duration_time": "0.021333", + "size": "948", + "pos": "320600", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 57344, + "pkt_pts_time": "1.194667", + "pkt_dts": 57344, + "pkt_dts_time": "1.194667", + "best_effort_timestamp": 57344, + "best_effort_timestamp_time": "1.194667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "320600", + "pkt_size": "948", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 58368, + "pts_time": "1.216000", + "dts": 58368, + "dts_time": "1.216000", + "duration": 1024, + "duration_time": "0.021333", + "size": "946", + "pos": "321548", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 58368, + "pkt_pts_time": "1.216000", + "pkt_dts": 58368, + "pkt_dts_time": "1.216000", + "best_effort_timestamp": 58368, + "best_effort_timestamp_time": "1.216000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "321548", + "pkt_size": "946", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 15360, + "pts_time": "1.200000", + "dts": 15360, + "dts_time": "1.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "7210", + "pos": "322494", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 15360, + "pkt_pts_time": "1.200000", + "pkt_dts": 15360, + "pkt_dts_time": "1.200000", + "best_effort_timestamp": 15360, + "best_effort_timestamp_time": "1.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "322494", + "pkt_size": "7210", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 30, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 59392, + "pts_time": "1.237333", + "dts": 59392, + "dts_time": "1.237333", + "duration": 1024, + "duration_time": "0.021333", + "size": "937", + "pos": "329704", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 59392, + "pkt_pts_time": "1.237333", + "pkt_dts": 59392, + "pkt_dts_time": "1.237333", + "best_effort_timestamp": 59392, + "best_effort_timestamp_time": "1.237333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "329704", + "pkt_size": "937", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 15872, + "pts_time": "1.240000", + "dts": 15872, + "dts_time": "1.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "8123", + "pos": "330641", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 15872, + "pkt_pts_time": "1.240000", + "pkt_dts": 15872, + "pkt_dts_time": "1.240000", + "best_effort_timestamp": 15872, + "best_effort_timestamp_time": "1.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "330641", + "pkt_size": "8123", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 31, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 60416, + "pts_time": "1.258667", + "dts": 60416, + "dts_time": "1.258667", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "338764", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 60416, + "pkt_pts_time": "1.258667", + "pkt_dts": 60416, + "pkt_dts_time": "1.258667", + "best_effort_timestamp": 60416, + "best_effort_timestamp_time": "1.258667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "338764", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 61440, + "pts_time": "1.280000", + "dts": 61440, + "dts_time": "1.280000", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "339730", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 61440, + "pkt_pts_time": "1.280000", + "pkt_dts": 61440, + "pkt_dts_time": "1.280000", + "best_effort_timestamp": 61440, + "best_effort_timestamp_time": "1.280000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "339730", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 16384, + "pts_time": "1.280000", + "dts": 16384, + "dts_time": "1.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "791", + "pos": "340695", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 16384, + "pkt_pts_time": "1.280000", + "pkt_dts": 16384, + "pkt_dts_time": "1.280000", + "best_effort_timestamp": 16384, + "best_effort_timestamp_time": "1.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "340695", + "pkt_size": "791", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 32, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 62464, + "pts_time": "1.301333", + "dts": 62464, + "dts_time": "1.301333", + "duration": 1024, + "duration_time": "0.021333", + "size": "964", + "pos": "341486", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 62464, + "pkt_pts_time": "1.301333", + "pkt_dts": 62464, + "pkt_dts_time": "1.301333", + "best_effort_timestamp": 62464, + "best_effort_timestamp_time": "1.301333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "341486", + "pkt_size": "964", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 63488, + "pts_time": "1.322667", + "dts": 63488, + "dts_time": "1.322667", + "duration": 1024, + "duration_time": "0.021333", + "size": "960", + "pos": "342450", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 63488, + "pkt_pts_time": "1.322667", + "pkt_dts": 63488, + "pkt_dts_time": "1.322667", + "best_effort_timestamp": 63488, + "best_effort_timestamp_time": "1.322667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "342450", + "pkt_size": "960", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 16896, + "pts_time": "1.320000", + "dts": 16896, + "dts_time": "1.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "6174", + "pos": "343410", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 16896, + "pkt_pts_time": "1.320000", + "pkt_dts": 16896, + "pkt_dts_time": "1.320000", + "best_effort_timestamp": 16896, + "best_effort_timestamp_time": "1.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "343410", + "pkt_size": "6174", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 33, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 64512, + "pts_time": "1.344000", + "dts": 64512, + "dts_time": "1.344000", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "349584", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 64512, + "pkt_pts_time": "1.344000", + "pkt_dts": 64512, + "pkt_dts_time": "1.344000", + "best_effort_timestamp": 64512, + "best_effort_timestamp_time": "1.344000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "349584", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 65536, + "pts_time": "1.365333", + "dts": 65536, + "dts_time": "1.365333", + "duration": 1024, + "duration_time": "0.021333", + "size": "949", + "pos": "350567", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 65536, + "pkt_pts_time": "1.365333", + "pkt_dts": 65536, + "pkt_dts_time": "1.365333", + "best_effort_timestamp": 65536, + "best_effort_timestamp_time": "1.365333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "350567", + "pkt_size": "949", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 17408, + "pts_time": "1.360000", + "dts": 17408, + "dts_time": "1.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "6906", + "pos": "351516", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 17408, + "pkt_pts_time": "1.360000", + "pkt_dts": 17408, + "pkt_dts_time": "1.360000", + "best_effort_timestamp": 17408, + "best_effort_timestamp_time": "1.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "351516", + "pkt_size": "6906", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 34, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 66560, + "pts_time": "1.386667", + "dts": 66560, + "dts_time": "1.386667", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "358422", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 66560, + "pkt_pts_time": "1.386667", + "pkt_dts": 66560, + "pkt_dts_time": "1.386667", + "best_effort_timestamp": 66560, + "best_effort_timestamp_time": "1.386667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "358422", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 67584, + "pts_time": "1.408000", + "dts": 67584, + "dts_time": "1.408000", + "duration": 1024, + "duration_time": "0.021333", + "size": "966", + "pos": "359404", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 67584, + "pkt_pts_time": "1.408000", + "pkt_dts": 67584, + "pkt_dts_time": "1.408000", + "best_effort_timestamp": 67584, + "best_effort_timestamp_time": "1.408000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "359404", + "pkt_size": "966", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 17920, + "pts_time": "1.400000", + "dts": 17920, + "dts_time": "1.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "7002", + "pos": "360370", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 17920, + "pkt_pts_time": "1.400000", + "pkt_dts": 17920, + "pkt_dts_time": "1.400000", + "best_effort_timestamp": 17920, + "best_effort_timestamp_time": "1.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "360370", + "pkt_size": "7002", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 35, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 68608, + "pts_time": "1.429333", + "dts": 68608, + "dts_time": "1.429333", + "duration": 1024, + "duration_time": "0.021333", + "size": "974", + "pos": "367372", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 68608, + "pkt_pts_time": "1.429333", + "pkt_dts": 68608, + "pkt_dts_time": "1.429333", + "best_effort_timestamp": 68608, + "best_effort_timestamp_time": "1.429333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "367372", + "pkt_size": "974", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 69632, + "pts_time": "1.450667", + "dts": 69632, + "dts_time": "1.450667", + "duration": 1024, + "duration_time": "0.021333", + "size": "998", + "pos": "368346", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 69632, + "pkt_pts_time": "1.450667", + "pkt_dts": 69632, + "pkt_dts_time": "1.450667", + "best_effort_timestamp": 69632, + "best_effort_timestamp_time": "1.450667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "368346", + "pkt_size": "998", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 18432, + "pts_time": "1.440000", + "dts": 18432, + "dts_time": "1.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "7519", + "pos": "369344", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 18432, + "pkt_pts_time": "1.440000", + "pkt_dts": 18432, + "pkt_dts_time": "1.440000", + "best_effort_timestamp": 18432, + "best_effort_timestamp_time": "1.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "369344", + "pkt_size": "7519", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 36, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 70656, + "pts_time": "1.472000", + "dts": 70656, + "dts_time": "1.472000", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "376863", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 70656, + "pkt_pts_time": "1.472000", + "pkt_dts": 70656, + "pkt_dts_time": "1.472000", + "best_effort_timestamp": 70656, + "best_effort_timestamp_time": "1.472000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "376863", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 71680, + "pts_time": "1.493333", + "dts": 71680, + "dts_time": "1.493333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "377841", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 71680, + "pkt_pts_time": "1.493333", + "pkt_dts": 71680, + "pkt_dts_time": "1.493333", + "best_effort_timestamp": 71680, + "best_effort_timestamp_time": "1.493333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "377841", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 18944, + "pts_time": "1.480000", + "dts": 18944, + "dts_time": "1.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "7508", + "pos": "378851", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 18944, + "pkt_pts_time": "1.480000", + "pkt_dts": 18944, + "pkt_dts_time": "1.480000", + "best_effort_timestamp": 18944, + "best_effort_timestamp_time": "1.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "378851", + "pkt_size": "7508", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 37, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 72704, + "pts_time": "1.514667", + "dts": 72704, + "dts_time": "1.514667", + "duration": 1024, + "duration_time": "0.021333", + "size": "958", + "pos": "386359", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 72704, + "pkt_pts_time": "1.514667", + "pkt_dts": 72704, + "pkt_dts_time": "1.514667", + "best_effort_timestamp": 72704, + "best_effort_timestamp_time": "1.514667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "386359", + "pkt_size": "958", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 73728, + "pts_time": "1.536000", + "dts": 73728, + "dts_time": "1.536000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1017", + "pos": "387317", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 73728, + "pkt_pts_time": "1.536000", + "pkt_dts": 73728, + "pkt_dts_time": "1.536000", + "best_effort_timestamp": 73728, + "best_effort_timestamp_time": "1.536000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "387317", + "pkt_size": "1017", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 19456, + "pts_time": "1.520000", + "dts": 19456, + "dts_time": "1.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "8218", + "pos": "388334", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 19456, + "pkt_pts_time": "1.520000", + "pkt_dts": 19456, + "pkt_dts_time": "1.520000", + "best_effort_timestamp": 19456, + "best_effort_timestamp_time": "1.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "388334", + "pkt_size": "8218", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 38, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 74752, + "pts_time": "1.557333", + "dts": 74752, + "dts_time": "1.557333", + "duration": 1024, + "duration_time": "0.021333", + "size": "999", + "pos": "396552", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 74752, + "pkt_pts_time": "1.557333", + "pkt_dts": 74752, + "pkt_dts_time": "1.557333", + "best_effort_timestamp": 74752, + "best_effort_timestamp_time": "1.557333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "396552", + "pkt_size": "999", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 19968, + "pts_time": "1.560000", + "dts": 19968, + "dts_time": "1.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "8257", + "pos": "397551", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 19968, + "pkt_pts_time": "1.560000", + "pkt_dts": 19968, + "pkt_dts_time": "1.560000", + "best_effort_timestamp": 19968, + "best_effort_timestamp_time": "1.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "397551", + "pkt_size": "8257", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 39, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 75776, + "pts_time": "1.578667", + "dts": 75776, + "dts_time": "1.578667", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "405808", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 75776, + "pkt_pts_time": "1.578667", + "pkt_dts": 75776, + "pkt_dts_time": "1.578667", + "best_effort_timestamp": 75776, + "best_effort_timestamp_time": "1.578667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "405808", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 76800, + "pts_time": "1.600000", + "dts": 76800, + "dts_time": "1.600000", + "duration": 1024, + "duration_time": "0.021333", + "size": "995", + "pos": "406788", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 76800, + "pkt_pts_time": "1.600000", + "pkt_dts": 76800, + "pkt_dts_time": "1.600000", + "best_effort_timestamp": 76800, + "best_effort_timestamp_time": "1.600000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "406788", + "pkt_size": "995", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 20480, + "pts_time": "1.600000", + "dts": 20480, + "dts_time": "1.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "8619", + "pos": "407783", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 20480, + "pkt_pts_time": "1.600000", + "pkt_dts": 20480, + "pkt_dts_time": "1.600000", + "best_effort_timestamp": 20480, + "best_effort_timestamp_time": "1.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "407783", + "pkt_size": "8619", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 40, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 77824, + "pts_time": "1.621333", + "dts": 77824, + "dts_time": "1.621333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1025", + "pos": "416402", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 77824, + "pkt_pts_time": "1.621333", + "pkt_dts": 77824, + "pkt_dts_time": "1.621333", + "best_effort_timestamp": 77824, + "best_effort_timestamp_time": "1.621333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "416402", + "pkt_size": "1025", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 78848, + "pts_time": "1.642667", + "dts": 78848, + "dts_time": "1.642667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1011", + "pos": "417427", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 78848, + "pkt_pts_time": "1.642667", + "pkt_dts": 78848, + "pkt_dts_time": "1.642667", + "best_effort_timestamp": 78848, + "best_effort_timestamp_time": "1.642667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "417427", + "pkt_size": "1011", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 20992, + "pts_time": "1.640000", + "dts": 20992, + "dts_time": "1.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "8071", + "pos": "418438", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 20992, + "pkt_pts_time": "1.640000", + "pkt_dts": 20992, + "pkt_dts_time": "1.640000", + "best_effort_timestamp": 20992, + "best_effort_timestamp_time": "1.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "418438", + "pkt_size": "8071", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 41, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 79872, + "pts_time": "1.664000", + "dts": 79872, + "dts_time": "1.664000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1001", + "pos": "426509", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 79872, + "pkt_pts_time": "1.664000", + "pkt_dts": 79872, + "pkt_dts_time": "1.664000", + "best_effort_timestamp": 79872, + "best_effort_timestamp_time": "1.664000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "426509", + "pkt_size": "1001", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 80896, + "pts_time": "1.685333", + "dts": 80896, + "dts_time": "1.685333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "427510", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 80896, + "pkt_pts_time": "1.685333", + "pkt_dts": 80896, + "pkt_dts_time": "1.685333", + "best_effort_timestamp": 80896, + "best_effort_timestamp_time": "1.685333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "427510", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 21504, + "pts_time": "1.680000", + "dts": 21504, + "dts_time": "1.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "8266", + "pos": "428529", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 21504, + "pkt_pts_time": "1.680000", + "pkt_dts": 21504, + "pkt_dts_time": "1.680000", + "best_effort_timestamp": 21504, + "best_effort_timestamp_time": "1.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "428529", + "pkt_size": "8266", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 42, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 81920, + "pts_time": "1.706667", + "dts": 81920, + "dts_time": "1.706667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1002", + "pos": "436795", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 81920, + "pkt_pts_time": "1.706667", + "pkt_dts": 81920, + "pkt_dts_time": "1.706667", + "best_effort_timestamp": 81920, + "best_effort_timestamp_time": "1.706667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "436795", + "pkt_size": "1002", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 82944, + "pts_time": "1.728000", + "dts": 82944, + "dts_time": "1.728000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1052", + "pos": "437797", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 82944, + "pkt_pts_time": "1.728000", + "pkt_dts": 82944, + "pkt_dts_time": "1.728000", + "best_effort_timestamp": 82944, + "best_effort_timestamp_time": "1.728000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "437797", + "pkt_size": "1052", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 22016, + "pts_time": "1.720000", + "dts": 22016, + "dts_time": "1.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "7790", + "pos": "438849", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 22016, + "pkt_pts_time": "1.720000", + "pkt_dts": 22016, + "pkt_dts_time": "1.720000", + "best_effort_timestamp": 22016, + "best_effort_timestamp_time": "1.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "438849", + "pkt_size": "7790", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 43, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 83968, + "pts_time": "1.749333", + "dts": 83968, + "dts_time": "1.749333", + "duration": 1024, + "duration_time": "0.021333", + "size": "993", + "pos": "446639", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 83968, + "pkt_pts_time": "1.749333", + "pkt_dts": 83968, + "pkt_dts_time": "1.749333", + "best_effort_timestamp": 83968, + "best_effort_timestamp_time": "1.749333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "446639", + "pkt_size": "993", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 84992, + "pts_time": "1.770667", + "dts": 84992, + "dts_time": "1.770667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1049", + "pos": "447632", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 84992, + "pkt_pts_time": "1.770667", + "pkt_dts": 84992, + "pkt_dts_time": "1.770667", + "best_effort_timestamp": 84992, + "best_effort_timestamp_time": "1.770667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "447632", + "pkt_size": "1049", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 22528, + "pts_time": "1.760000", + "dts": 22528, + "dts_time": "1.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "7989", + "pos": "448681", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 22528, + "pkt_pts_time": "1.760000", + "pkt_dts": 22528, + "pkt_dts_time": "1.760000", + "best_effort_timestamp": 22528, + "best_effort_timestamp_time": "1.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "448681", + "pkt_size": "7989", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 44, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 86016, + "pts_time": "1.792000", + "dts": 86016, + "dts_time": "1.792000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "456670", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 86016, + "pkt_pts_time": "1.792000", + "pkt_dts": 86016, + "pkt_dts_time": "1.792000", + "best_effort_timestamp": 86016, + "best_effort_timestamp_time": "1.792000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "456670", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 87040, + "pts_time": "1.813333", + "dts": 87040, + "dts_time": "1.813333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "457698", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 87040, + "pkt_pts_time": "1.813333", + "pkt_dts": 87040, + "pkt_dts_time": "1.813333", + "best_effort_timestamp": 87040, + "best_effort_timestamp_time": "1.813333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "457698", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 23040, + "pts_time": "1.800000", + "dts": 23040, + "dts_time": "1.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "7826", + "pos": "458734", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 23040, + "pkt_pts_time": "1.800000", + "pkt_dts": 23040, + "pkt_dts_time": "1.800000", + "best_effort_timestamp": 23040, + "best_effort_timestamp_time": "1.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "458734", + "pkt_size": "7826", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 45, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 88064, + "pts_time": "1.834667", + "dts": 88064, + "dts_time": "1.834667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1040", + "pos": "466560", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 88064, + "pkt_pts_time": "1.834667", + "pkt_dts": 88064, + "pkt_dts_time": "1.834667", + "best_effort_timestamp": 88064, + "best_effort_timestamp_time": "1.834667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "466560", + "pkt_size": "1040", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 89088, + "pts_time": "1.856000", + "dts": 89088, + "dts_time": "1.856000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1059", + "pos": "467600", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 89088, + "pkt_pts_time": "1.856000", + "pkt_dts": 89088, + "pkt_dts_time": "1.856000", + "best_effort_timestamp": 89088, + "best_effort_timestamp_time": "1.856000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "467600", + "pkt_size": "1059", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 23552, + "pts_time": "1.840000", + "dts": 23552, + "dts_time": "1.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "7649", + "pos": "468659", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 23552, + "pkt_pts_time": "1.840000", + "pkt_dts": 23552, + "pkt_dts_time": "1.840000", + "best_effort_timestamp": 23552, + "best_effort_timestamp_time": "1.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "468659", + "pkt_size": "7649", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 46, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 90112, + "pts_time": "1.877333", + "dts": 90112, + "dts_time": "1.877333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1068", + "pos": "476308", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 90112, + "pkt_pts_time": "1.877333", + "pkt_dts": 90112, + "pkt_dts_time": "1.877333", + "best_effort_timestamp": 90112, + "best_effort_timestamp_time": "1.877333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "476308", + "pkt_size": "1068", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 24064, + "pts_time": "1.880000", + "dts": 24064, + "dts_time": "1.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "6977", + "pos": "477376", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 24064, + "pkt_pts_time": "1.880000", + "pkt_dts": 24064, + "pkt_dts_time": "1.880000", + "best_effort_timestamp": 24064, + "best_effort_timestamp_time": "1.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "477376", + "pkt_size": "6977", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 47, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 91136, + "pts_time": "1.898667", + "dts": 91136, + "dts_time": "1.898667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1060", + "pos": "484353", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 91136, + "pkt_pts_time": "1.898667", + "pkt_dts": 91136, + "pkt_dts_time": "1.898667", + "best_effort_timestamp": 91136, + "best_effort_timestamp_time": "1.898667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "484353", + "pkt_size": "1060", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 92160, + "pts_time": "1.920000", + "dts": 92160, + "dts_time": "1.920000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1065", + "pos": "485413", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 92160, + "pkt_pts_time": "1.920000", + "pkt_dts": 92160, + "pkt_dts_time": "1.920000", + "best_effort_timestamp": 92160, + "best_effort_timestamp_time": "1.920000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "485413", + "pkt_size": "1065", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 24576, + "pts_time": "1.920000", + "dts": 24576, + "dts_time": "1.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "6978", + "pos": "486478", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 24576, + "pkt_pts_time": "1.920000", + "pkt_dts": 24576, + "pkt_dts_time": "1.920000", + "best_effort_timestamp": 24576, + "best_effort_timestamp_time": "1.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "486478", + "pkt_size": "6978", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 48, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 93184, + "pts_time": "1.941333", + "dts": 93184, + "dts_time": "1.941333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "493456", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 93184, + "pkt_pts_time": "1.941333", + "pkt_dts": 93184, + "pkt_dts_time": "1.941333", + "best_effort_timestamp": 93184, + "best_effort_timestamp_time": "1.941333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "493456", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 94208, + "pts_time": "1.962667", + "dts": 94208, + "dts_time": "1.962667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1071", + "pos": "494525", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 94208, + "pkt_pts_time": "1.962667", + "pkt_dts": 94208, + "pkt_dts_time": "1.962667", + "best_effort_timestamp": 94208, + "best_effort_timestamp_time": "1.962667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "494525", + "pkt_size": "1071", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 25088, + "pts_time": "1.960000", + "dts": 25088, + "dts_time": "1.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "6173", + "pos": "495596", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 25088, + "pkt_pts_time": "1.960000", + "pkt_dts": 25088, + "pkt_dts_time": "1.960000", + "best_effort_timestamp": 25088, + "best_effort_timestamp_time": "1.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "495596", + "pkt_size": "6173", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 49, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 95232, + "pts_time": "1.984000", + "dts": 95232, + "dts_time": "1.984000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1084", + "pos": "501769", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 95232, + "pkt_pts_time": "1.984000", + "pkt_dts": 95232, + "pkt_dts_time": "1.984000", + "best_effort_timestamp": 95232, + "best_effort_timestamp_time": "1.984000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "501769", + "pkt_size": "1084", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 96256, + "pts_time": "2.005333", + "dts": 96256, + "dts_time": "2.005333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1080", + "pos": "502853", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 96256, + "pkt_pts_time": "2.005333", + "pkt_dts": 96256, + "pkt_dts_time": "2.005333", + "best_effort_timestamp": 96256, + "best_effort_timestamp_time": "2.005333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "502853", + "pkt_size": "1080", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 25600, + "pts_time": "2.000000", + "dts": 25600, + "dts_time": "2.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "6451", + "pos": "503933", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 25600, + "pkt_pts_time": "2.000000", + "pkt_dts": 25600, + "pkt_dts_time": "2.000000", + "best_effort_timestamp": 25600, + "best_effort_timestamp_time": "2.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "503933", + "pkt_size": "6451", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 50, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 97280, + "pts_time": "2.026667", + "dts": 97280, + "dts_time": "2.026667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1051", + "pos": "510384", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 97280, + "pkt_pts_time": "2.026667", + "pkt_dts": 97280, + "pkt_dts_time": "2.026667", + "best_effort_timestamp": 97280, + "best_effort_timestamp_time": "2.026667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "510384", + "pkt_size": "1051", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 98304, + "pts_time": "2.048000", + "dts": 98304, + "dts_time": "2.048000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "511435", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 98304, + "pkt_pts_time": "2.048000", + "pkt_dts": 98304, + "pkt_dts_time": "2.048000", + "best_effort_timestamp": 98304, + "best_effort_timestamp_time": "2.048000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "511435", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 26112, + "pts_time": "2.040000", + "dts": 26112, + "dts_time": "2.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "6107", + "pos": "512463", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 26112, + "pkt_pts_time": "2.040000", + "pkt_dts": 26112, + "pkt_dts_time": "2.040000", + "best_effort_timestamp": 26112, + "best_effort_timestamp_time": "2.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "512463", + "pkt_size": "6107", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 51, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 99328, + "pts_time": "2.069333", + "dts": 99328, + "dts_time": "2.069333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "518570", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 99328, + "pkt_pts_time": "2.069333", + "pkt_dts": 99328, + "pkt_dts_time": "2.069333", + "best_effort_timestamp": 99328, + "best_effort_timestamp_time": "2.069333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "518570", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 100352, + "pts_time": "2.090667", + "dts": 100352, + "dts_time": "2.090667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1061", + "pos": "519608", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 100352, + "pkt_pts_time": "2.090667", + "pkt_dts": 100352, + "pkt_dts_time": "2.090667", + "best_effort_timestamp": 100352, + "best_effort_timestamp_time": "2.090667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "519608", + "pkt_size": "1061", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 26624, + "pts_time": "2.080000", + "dts": 26624, + "dts_time": "2.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "5965", + "pos": "520669", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 26624, + "pkt_pts_time": "2.080000", + "pkt_dts": 26624, + "pkt_dts_time": "2.080000", + "best_effort_timestamp": 26624, + "best_effort_timestamp_time": "2.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "520669", + "pkt_size": "5965", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 52, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 101376, + "pts_time": "2.112000", + "dts": 101376, + "dts_time": "2.112000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1043", + "pos": "526634", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 101376, + "pkt_pts_time": "2.112000", + "pkt_dts": 101376, + "pkt_dts_time": "2.112000", + "best_effort_timestamp": 101376, + "best_effort_timestamp_time": "2.112000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "526634", + "pkt_size": "1043", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 102400, + "pts_time": "2.133333", + "dts": 102400, + "dts_time": "2.133333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1040", + "pos": "527677", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 102400, + "pkt_pts_time": "2.133333", + "pkt_dts": 102400, + "pkt_dts_time": "2.133333", + "best_effort_timestamp": 102400, + "best_effort_timestamp_time": "2.133333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "527677", + "pkt_size": "1040", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 27136, + "pts_time": "2.120000", + "dts": 27136, + "dts_time": "2.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "5819", + "pos": "528717", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 27136, + "pkt_pts_time": "2.120000", + "pkt_dts": 27136, + "pkt_dts_time": "2.120000", + "best_effort_timestamp": 27136, + "best_effort_timestamp_time": "2.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "528717", + "pkt_size": "5819", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 53, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 103424, + "pts_time": "2.154667", + "dts": 103424, + "dts_time": "2.154667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "534536", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 103424, + "pkt_pts_time": "2.154667", + "pkt_dts": 103424, + "pkt_dts_time": "2.154667", + "best_effort_timestamp": 103424, + "best_effort_timestamp_time": "2.154667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "534536", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 104448, + "pts_time": "2.176000", + "dts": 104448, + "dts_time": "2.176000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "535560", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 104448, + "pkt_pts_time": "2.176000", + "pkt_dts": 104448, + "pkt_dts_time": "2.176000", + "best_effort_timestamp": 104448, + "best_effort_timestamp_time": "2.176000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "535560", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 27648, + "pts_time": "2.160000", + "dts": 27648, + "dts_time": "2.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "6114", + "pos": "536596", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 27648, + "pkt_pts_time": "2.160000", + "pkt_dts": 27648, + "pkt_dts_time": "2.160000", + "best_effort_timestamp": 27648, + "best_effort_timestamp_time": "2.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "536596", + "pkt_size": "6114", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 54, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 105472, + "pts_time": "2.197333", + "dts": 105472, + "dts_time": "2.197333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "542710", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 105472, + "pkt_pts_time": "2.197333", + "pkt_dts": 105472, + "pkt_dts_time": "2.197333", + "best_effort_timestamp": 105472, + "best_effort_timestamp_time": "2.197333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "542710", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 28160, + "pts_time": "2.200000", + "dts": 28160, + "dts_time": "2.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "6064", + "pos": "543722", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 28160, + "pkt_pts_time": "2.200000", + "pkt_dts": 28160, + "pkt_dts_time": "2.200000", + "best_effort_timestamp": 28160, + "best_effort_timestamp_time": "2.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "543722", + "pkt_size": "6064", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 55, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 106496, + "pts_time": "2.218667", + "dts": 106496, + "dts_time": "2.218667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1031", + "pos": "549786", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 106496, + "pkt_pts_time": "2.218667", + "pkt_dts": 106496, + "pkt_dts_time": "2.218667", + "best_effort_timestamp": 106496, + "best_effort_timestamp_time": "2.218667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "549786", + "pkt_size": "1031", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 107520, + "pts_time": "2.240000", + "dts": 107520, + "dts_time": "2.240000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "550817", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 107520, + "pkt_pts_time": "2.240000", + "pkt_dts": 107520, + "pkt_dts_time": "2.240000", + "best_effort_timestamp": 107520, + "best_effort_timestamp_time": "2.240000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "550817", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 28672, + "pts_time": "2.240000", + "dts": 28672, + "dts_time": "2.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "6639", + "pos": "551827", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 28672, + "pkt_pts_time": "2.240000", + "pkt_dts": 28672, + "pkt_dts_time": "2.240000", + "best_effort_timestamp": 28672, + "best_effort_timestamp_time": "2.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "551827", + "pkt_size": "6639", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 56, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 108544, + "pts_time": "2.261333", + "dts": 108544, + "dts_time": "2.261333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1032", + "pos": "558466", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 108544, + "pkt_pts_time": "2.261333", + "pkt_dts": 108544, + "pkt_dts_time": "2.261333", + "best_effort_timestamp": 108544, + "best_effort_timestamp_time": "2.261333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "558466", + "pkt_size": "1032", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 109568, + "pts_time": "2.282667", + "dts": 109568, + "dts_time": "2.282667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "559498", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 109568, + "pkt_pts_time": "2.282667", + "pkt_dts": 109568, + "pkt_dts_time": "2.282667", + "best_effort_timestamp": 109568, + "best_effort_timestamp_time": "2.282667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "559498", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 29184, + "pts_time": "2.280000", + "dts": 29184, + "dts_time": "2.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "718", + "pos": "560525", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 29184, + "pkt_pts_time": "2.280000", + "pkt_dts": 29184, + "pkt_dts_time": "2.280000", + "best_effort_timestamp": 29184, + "best_effort_timestamp_time": "2.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "560525", + "pkt_size": "718", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 57, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 110592, + "pts_time": "2.304000", + "dts": 110592, + "dts_time": "2.304000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1045", + "pos": "561243", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 110592, + "pkt_pts_time": "2.304000", + "pkt_dts": 110592, + "pkt_dts_time": "2.304000", + "best_effort_timestamp": 110592, + "best_effort_timestamp_time": "2.304000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "561243", + "pkt_size": "1045", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 111616, + "pts_time": "2.325333", + "dts": 111616, + "dts_time": "2.325333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1034", + "pos": "562288", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 111616, + "pkt_pts_time": "2.325333", + "pkt_dts": 111616, + "pkt_dts_time": "2.325333", + "best_effort_timestamp": 111616, + "best_effort_timestamp_time": "2.325333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "562288", + "pkt_size": "1034", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 29696, + "pts_time": "2.320000", + "dts": 29696, + "dts_time": "2.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "4886", + "pos": "563322", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 29696, + "pkt_pts_time": "2.320000", + "pkt_dts": 29696, + "pkt_dts_time": "2.320000", + "best_effort_timestamp": 29696, + "best_effort_timestamp_time": "2.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "563322", + "pkt_size": "4886", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 58, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 112640, + "pts_time": "2.346667", + "dts": 112640, + "dts_time": "2.346667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "568208", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 112640, + "pkt_pts_time": "2.346667", + "pkt_dts": 112640, + "pkt_dts_time": "2.346667", + "best_effort_timestamp": 112640, + "best_effort_timestamp_time": "2.346667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "568208", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 113664, + "pts_time": "2.368000", + "dts": 113664, + "dts_time": "2.368000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "569243", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 113664, + "pkt_pts_time": "2.368000", + "pkt_dts": 113664, + "pkt_dts_time": "2.368000", + "best_effort_timestamp": 113664, + "best_effort_timestamp_time": "2.368000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "569243", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 30208, + "pts_time": "2.360000", + "dts": 30208, + "dts_time": "2.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "5456", + "pos": "570281", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 30208, + "pkt_pts_time": "2.360000", + "pkt_dts": 30208, + "pkt_dts_time": "2.360000", + "best_effort_timestamp": 30208, + "best_effort_timestamp_time": "2.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "570281", + "pkt_size": "5456", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 59, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 114688, + "pts_time": "2.389333", + "dts": 114688, + "dts_time": "2.389333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "575737", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 114688, + "pkt_pts_time": "2.389333", + "pkt_dts": 114688, + "pkt_dts_time": "2.389333", + "best_effort_timestamp": 114688, + "best_effort_timestamp_time": "2.389333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "575737", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 115712, + "pts_time": "2.410667", + "dts": 115712, + "dts_time": "2.410667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1034", + "pos": "576761", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 115712, + "pkt_pts_time": "2.410667", + "pkt_dts": 115712, + "pkt_dts_time": "2.410667", + "best_effort_timestamp": 115712, + "best_effort_timestamp_time": "2.410667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "576761", + "pkt_size": "1034", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 30720, + "pts_time": "2.400000", + "dts": 30720, + "dts_time": "2.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "5298", + "pos": "577795", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 30720, + "pkt_pts_time": "2.400000", + "pkt_dts": 30720, + "pkt_dts_time": "2.400000", + "best_effort_timestamp": 30720, + "best_effort_timestamp_time": "2.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "577795", + "pkt_size": "5298", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 60, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 116736, + "pts_time": "2.432000", + "dts": 116736, + "dts_time": "2.432000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "583093", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 116736, + "pkt_pts_time": "2.432000", + "pkt_dts": 116736, + "pkt_dts_time": "2.432000", + "best_effort_timestamp": 116736, + "best_effort_timestamp_time": "2.432000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "583093", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 117760, + "pts_time": "2.453333", + "dts": 117760, + "dts_time": "2.453333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "584117", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 117760, + "pkt_pts_time": "2.453333", + "pkt_dts": 117760, + "pkt_dts_time": "2.453333", + "best_effort_timestamp": 117760, + "best_effort_timestamp_time": "2.453333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "584117", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 31232, + "pts_time": "2.440000", + "dts": 31232, + "dts_time": "2.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5693", + "pos": "585141", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 31232, + "pkt_pts_time": "2.440000", + "pkt_dts": 31232, + "pkt_dts_time": "2.440000", + "best_effort_timestamp": 31232, + "best_effort_timestamp_time": "2.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "585141", + "pkt_size": "5693", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 61, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 118784, + "pts_time": "2.474667", + "dts": 118784, + "dts_time": "2.474667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "590834", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 118784, + "pkt_pts_time": "2.474667", + "pkt_dts": 118784, + "pkt_dts_time": "2.474667", + "best_effort_timestamp": 118784, + "best_effort_timestamp_time": "2.474667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "590834", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 119808, + "pts_time": "2.496000", + "dts": 119808, + "dts_time": "2.496000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1005", + "pos": "591846", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 119808, + "pkt_pts_time": "2.496000", + "pkt_dts": 119808, + "pkt_dts_time": "2.496000", + "best_effort_timestamp": 119808, + "best_effort_timestamp_time": "2.496000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "591846", + "pkt_size": "1005", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 31744, + "pts_time": "2.480000", + "dts": 31744, + "dts_time": "2.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5643", + "pos": "592851", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 31744, + "pkt_pts_time": "2.480000", + "pkt_dts": 31744, + "pkt_dts_time": "2.480000", + "best_effort_timestamp": 31744, + "best_effort_timestamp_time": "2.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "592851", + "pkt_size": "5643", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 62, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 120832, + "pts_time": "2.517333", + "dts": 120832, + "dts_time": "2.517333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1010", + "pos": "598494", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 120832, + "pkt_pts_time": "2.517333", + "pkt_dts": 120832, + "pkt_dts_time": "2.517333", + "best_effort_timestamp": 120832, + "best_effort_timestamp_time": "2.517333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "598494", + "pkt_size": "1010", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 32256, + "pts_time": "2.520000", + "dts": 32256, + "dts_time": "2.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "5834", + "pos": "599504", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 32256, + "pkt_pts_time": "2.520000", + "pkt_dts": 32256, + "pkt_dts_time": "2.520000", + "best_effort_timestamp": 32256, + "best_effort_timestamp_time": "2.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "599504", + "pkt_size": "5834", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 63, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 121856, + "pts_time": "2.538667", + "dts": 121856, + "dts_time": "2.538667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "605338", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 121856, + "pkt_pts_time": "2.538667", + "pkt_dts": 121856, + "pkt_dts_time": "2.538667", + "best_effort_timestamp": 121856, + "best_effort_timestamp_time": "2.538667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "605338", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 122880, + "pts_time": "2.560000", + "dts": 122880, + "dts_time": "2.560000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "606357", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 122880, + "pkt_pts_time": "2.560000", + "pkt_dts": 122880, + "pkt_dts_time": "2.560000", + "best_effort_timestamp": 122880, + "best_effort_timestamp_time": "2.560000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "606357", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 32768, + "pts_time": "2.560000", + "dts": 32768, + "dts_time": "2.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "5615", + "pos": "607363", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 32768, + "pkt_pts_time": "2.560000", + "pkt_dts": 32768, + "pkt_dts_time": "2.560000", + "best_effort_timestamp": 32768, + "best_effort_timestamp_time": "2.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "607363", + "pkt_size": "5615", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 64, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 123904, + "pts_time": "2.581333", + "dts": 123904, + "dts_time": "2.581333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "612978", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 123904, + "pkt_pts_time": "2.581333", + "pkt_dts": 123904, + "pkt_dts_time": "2.581333", + "best_effort_timestamp": 123904, + "best_effort_timestamp_time": "2.581333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "612978", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 124928, + "pts_time": "2.602667", + "dts": 124928, + "dts_time": "2.602667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1023", + "pos": "614004", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 124928, + "pkt_pts_time": "2.602667", + "pkt_dts": 124928, + "pkt_dts_time": "2.602667", + "best_effort_timestamp": 124928, + "best_effort_timestamp_time": "2.602667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "614004", + "pkt_size": "1023", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 33280, + "pts_time": "2.600000", + "dts": 33280, + "dts_time": "2.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "5730", + "pos": "615027", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 33280, + "pkt_pts_time": "2.600000", + "pkt_dts": 33280, + "pkt_dts_time": "2.600000", + "best_effort_timestamp": 33280, + "best_effort_timestamp_time": "2.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "615027", + "pkt_size": "5730", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 65, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 125952, + "pts_time": "2.624000", + "dts": 125952, + "dts_time": "2.624000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "620757", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 125952, + "pkt_pts_time": "2.624000", + "pkt_dts": 125952, + "pkt_dts_time": "2.624000", + "best_effort_timestamp": 125952, + "best_effort_timestamp_time": "2.624000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "620757", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 126976, + "pts_time": "2.645333", + "dts": 126976, + "dts_time": "2.645333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "621785", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 126976, + "pkt_pts_time": "2.645333", + "pkt_dts": 126976, + "pkt_dts_time": "2.645333", + "best_effort_timestamp": 126976, + "best_effort_timestamp_time": "2.645333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "621785", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 33792, + "pts_time": "2.640000", + "dts": 33792, + "dts_time": "2.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "5239", + "pos": "622822", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 33792, + "pkt_pts_time": "2.640000", + "pkt_dts": 33792, + "pkt_dts_time": "2.640000", + "best_effort_timestamp": 33792, + "best_effort_timestamp_time": "2.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "622822", + "pkt_size": "5239", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 66, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 128000, + "pts_time": "2.666667", + "dts": 128000, + "dts_time": "2.666667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1050", + "pos": "628061", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 128000, + "pkt_pts_time": "2.666667", + "pkt_dts": 128000, + "pkt_dts_time": "2.666667", + "best_effort_timestamp": 128000, + "best_effort_timestamp_time": "2.666667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "628061", + "pkt_size": "1050", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 129024, + "pts_time": "2.688000", + "dts": 129024, + "dts_time": "2.688000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1052", + "pos": "629111", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 129024, + "pkt_pts_time": "2.688000", + "pkt_dts": 129024, + "pkt_dts_time": "2.688000", + "best_effort_timestamp": 129024, + "best_effort_timestamp_time": "2.688000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "629111", + "pkt_size": "1052", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 34304, + "pts_time": "2.680000", + "dts": 34304, + "dts_time": "2.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "6164", + "pos": "630163", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 34304, + "pkt_pts_time": "2.680000", + "pkt_dts": 34304, + "pkt_dts_time": "2.680000", + "best_effort_timestamp": 34304, + "best_effort_timestamp_time": "2.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "630163", + "pkt_size": "6164", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 67, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 130048, + "pts_time": "2.709333", + "dts": 130048, + "dts_time": "2.709333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1033", + "pos": "636327", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 130048, + "pkt_pts_time": "2.709333", + "pkt_dts": 130048, + "pkt_dts_time": "2.709333", + "best_effort_timestamp": 130048, + "best_effort_timestamp_time": "2.709333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "636327", + "pkt_size": "1033", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 131072, + "pts_time": "2.730667", + "dts": 131072, + "dts_time": "2.730667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1064", + "pos": "637360", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 131072, + "pkt_pts_time": "2.730667", + "pkt_dts": 131072, + "pkt_dts_time": "2.730667", + "best_effort_timestamp": 131072, + "best_effort_timestamp_time": "2.730667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "637360", + "pkt_size": "1064", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 34816, + "pts_time": "2.720000", + "dts": 34816, + "dts_time": "2.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "6158", + "pos": "638424", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 34816, + "pkt_pts_time": "2.720000", + "pkt_dts": 34816, + "pkt_dts_time": "2.720000", + "best_effort_timestamp": 34816, + "best_effort_timestamp_time": "2.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "638424", + "pkt_size": "6158", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 68, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 132096, + "pts_time": "2.752000", + "dts": 132096, + "dts_time": "2.752000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1038", + "pos": "644582", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 132096, + "pkt_pts_time": "2.752000", + "pkt_dts": 132096, + "pkt_dts_time": "2.752000", + "best_effort_timestamp": 132096, + "best_effort_timestamp_time": "2.752000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "644582", + "pkt_size": "1038", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 133120, + "pts_time": "2.773333", + "dts": 133120, + "dts_time": "2.773333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1047", + "pos": "645620", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 133120, + "pkt_pts_time": "2.773333", + "pkt_dts": 133120, + "pkt_dts_time": "2.773333", + "best_effort_timestamp": 133120, + "best_effort_timestamp_time": "2.773333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "645620", + "pkt_size": "1047", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 35328, + "pts_time": "2.760000", + "dts": 35328, + "dts_time": "2.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "6607", + "pos": "646667", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 35328, + "pkt_pts_time": "2.760000", + "pkt_dts": 35328, + "pkt_dts_time": "2.760000", + "best_effort_timestamp": 35328, + "best_effort_timestamp_time": "2.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "646667", + "pkt_size": "6607", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 69, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 134144, + "pts_time": "2.794667", + "dts": 134144, + "dts_time": "2.794667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "653274", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 134144, + "pkt_pts_time": "2.794667", + "pkt_dts": 134144, + "pkt_dts_time": "2.794667", + "best_effort_timestamp": 134144, + "best_effort_timestamp_time": "2.794667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "653274", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 135168, + "pts_time": "2.816000", + "dts": 135168, + "dts_time": "2.816000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "654311", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 135168, + "pkt_pts_time": "2.816000", + "pkt_dts": 135168, + "pkt_dts_time": "2.816000", + "best_effort_timestamp": 135168, + "best_effort_timestamp_time": "2.816000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "654311", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 35840, + "pts_time": "2.800000", + "dts": 35840, + "dts_time": "2.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "6545", + "pos": "655333", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 35840, + "pkt_pts_time": "2.800000", + "pkt_dts": 35840, + "pkt_dts_time": "2.800000", + "best_effort_timestamp": 35840, + "best_effort_timestamp_time": "2.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "655333", + "pkt_size": "6545", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 70, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 136192, + "pts_time": "2.837333", + "dts": 136192, + "dts_time": "2.837333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1033", + "pos": "661878", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 136192, + "pkt_pts_time": "2.837333", + "pkt_dts": 136192, + "pkt_dts_time": "2.837333", + "best_effort_timestamp": 136192, + "best_effort_timestamp_time": "2.837333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "661878", + "pkt_size": "1033", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 36352, + "pts_time": "2.840000", + "dts": 36352, + "dts_time": "2.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "6800", + "pos": "662911", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 36352, + "pkt_pts_time": "2.840000", + "pkt_dts": 36352, + "pkt_dts_time": "2.840000", + "best_effort_timestamp": 36352, + "best_effort_timestamp_time": "2.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "662911", + "pkt_size": "6800", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 71, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 137216, + "pts_time": "2.858667", + "dts": 137216, + "dts_time": "2.858667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1039", + "pos": "669711", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 137216, + "pkt_pts_time": "2.858667", + "pkt_dts": 137216, + "pkt_dts_time": "2.858667", + "best_effort_timestamp": 137216, + "best_effort_timestamp_time": "2.858667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "669711", + "pkt_size": "1039", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 138240, + "pts_time": "2.880000", + "dts": 138240, + "dts_time": "2.880000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "670750", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 138240, + "pkt_pts_time": "2.880000", + "pkt_dts": 138240, + "pkt_dts_time": "2.880000", + "best_effort_timestamp": 138240, + "best_effort_timestamp_time": "2.880000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "670750", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 36864, + "pts_time": "2.880000", + "dts": 36864, + "dts_time": "2.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "6904", + "pos": "671785", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 36864, + "pkt_pts_time": "2.880000", + "pkt_dts": 36864, + "pkt_dts_time": "2.880000", + "best_effort_timestamp": 36864, + "best_effort_timestamp_time": "2.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "671785", + "pkt_size": "6904", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 72, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 139264, + "pts_time": "2.901333", + "dts": 139264, + "dts_time": "2.901333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1025", + "pos": "678689", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 139264, + "pkt_pts_time": "2.901333", + "pkt_dts": 139264, + "pkt_dts_time": "2.901333", + "best_effort_timestamp": 139264, + "best_effort_timestamp_time": "2.901333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "678689", + "pkt_size": "1025", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 140288, + "pts_time": "2.922667", + "dts": 140288, + "dts_time": "2.922667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1013", + "pos": "679714", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 140288, + "pkt_pts_time": "2.922667", + "pkt_dts": 140288, + "pkt_dts_time": "2.922667", + "best_effort_timestamp": 140288, + "best_effort_timestamp_time": "2.922667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "679714", + "pkt_size": "1013", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 37376, + "pts_time": "2.920000", + "dts": 37376, + "dts_time": "2.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "7146", + "pos": "680727", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 37376, + "pkt_pts_time": "2.920000", + "pkt_dts": 37376, + "pkt_dts_time": "2.920000", + "best_effort_timestamp": 37376, + "best_effort_timestamp_time": "2.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "680727", + "pkt_size": "7146", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 73, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 141312, + "pts_time": "2.944000", + "dts": 141312, + "dts_time": "2.944000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "687873", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 141312, + "pkt_pts_time": "2.944000", + "pkt_dts": 141312, + "pkt_dts_time": "2.944000", + "best_effort_timestamp": 141312, + "best_effort_timestamp_time": "2.944000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "687873", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 142336, + "pts_time": "2.965333", + "dts": 142336, + "dts_time": "2.965333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "688899", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 142336, + "pkt_pts_time": "2.965333", + "pkt_dts": 142336, + "pkt_dts_time": "2.965333", + "best_effort_timestamp": 142336, + "best_effort_timestamp_time": "2.965333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "688899", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 37888, + "pts_time": "2.960000", + "dts": 37888, + "dts_time": "2.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "7137", + "pos": "689925", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 37888, + "pkt_pts_time": "2.960000", + "pkt_dts": 37888, + "pkt_dts_time": "2.960000", + "best_effort_timestamp": 37888, + "best_effort_timestamp_time": "2.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "689925", + "pkt_size": "7137", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 74, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 143360, + "pts_time": "2.986667", + "dts": 143360, + "dts_time": "2.986667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1012", + "pos": "697062", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 143360, + "pkt_pts_time": "2.986667", + "pkt_dts": 143360, + "pkt_dts_time": "2.986667", + "best_effort_timestamp": 143360, + "best_effort_timestamp_time": "2.986667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "697062", + "pkt_size": "1012", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 144384, + "pts_time": "3.008000", + "dts": 144384, + "dts_time": "3.008000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1029", + "pos": "698074", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 144384, + "pkt_pts_time": "3.008000", + "pkt_dts": 144384, + "pkt_dts_time": "3.008000", + "best_effort_timestamp": 144384, + "best_effort_timestamp_time": "3.008000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "698074", + "pkt_size": "1029", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 38400, + "pts_time": "3.000000", + "dts": 38400, + "dts_time": "3.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "7723", + "pos": "699103", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 38400, + "pkt_pts_time": "3.000000", + "pkt_dts": 38400, + "pkt_dts_time": "3.000000", + "best_effort_timestamp": 38400, + "best_effort_timestamp_time": "3.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "699103", + "pkt_size": "7723", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 75, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 145408, + "pts_time": "3.029333", + "dts": 145408, + "dts_time": "3.029333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1022", + "pos": "706826", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 145408, + "pkt_pts_time": "3.029333", + "pkt_dts": 145408, + "pkt_dts_time": "3.029333", + "best_effort_timestamp": 145408, + "best_effort_timestamp_time": "3.029333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "706826", + "pkt_size": "1022", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 146432, + "pts_time": "3.050667", + "dts": 146432, + "dts_time": "3.050667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1007", + "pos": "707848", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 146432, + "pkt_pts_time": "3.050667", + "pkt_dts": 146432, + "pkt_dts_time": "3.050667", + "best_effort_timestamp": 146432, + "best_effort_timestamp_time": "3.050667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "707848", + "pkt_size": "1007", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 38912, + "pts_time": "3.040000", + "dts": 38912, + "dts_time": "3.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "7585", + "pos": "708855", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 38912, + "pkt_pts_time": "3.040000", + "pkt_dts": 38912, + "pkt_dts_time": "3.040000", + "best_effort_timestamp": 38912, + "best_effort_timestamp_time": "3.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "708855", + "pkt_size": "7585", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 76, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 147456, + "pts_time": "3.072000", + "dts": 147456, + "dts_time": "3.072000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "716440", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 147456, + "pkt_pts_time": "3.072000", + "pkt_dts": 147456, + "pkt_dts_time": "3.072000", + "best_effort_timestamp": 147456, + "best_effort_timestamp_time": "3.072000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "716440", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 148480, + "pts_time": "3.093333", + "dts": 148480, + "dts_time": "3.093333", + "duration": 1024, + "duration_time": "0.021333", + "size": "982", + "pos": "717444", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 148480, + "pkt_pts_time": "3.093333", + "pkt_dts": 148480, + "pkt_dts_time": "3.093333", + "best_effort_timestamp": 148480, + "best_effort_timestamp_time": "3.093333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "717444", + "pkt_size": "982", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 39424, + "pts_time": "3.080000", + "dts": 39424, + "dts_time": "3.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "8652", + "pos": "718426", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 39424, + "pkt_pts_time": "3.080000", + "pkt_dts": 39424, + "pkt_dts_time": "3.080000", + "best_effort_timestamp": 39424, + "best_effort_timestamp_time": "3.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "718426", + "pkt_size": "8652", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 77, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 149504, + "pts_time": "3.114667", + "dts": 149504, + "dts_time": "3.114667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1097", + "pos": "727078", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 149504, + "pkt_pts_time": "3.114667", + "pkt_dts": 149504, + "pkt_dts_time": "3.114667", + "best_effort_timestamp": 149504, + "best_effort_timestamp_time": "3.114667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "727078", + "pkt_size": "1097", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 150528, + "pts_time": "3.136000", + "dts": 150528, + "dts_time": "3.136000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1021", + "pos": "728175", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 150528, + "pkt_pts_time": "3.136000", + "pkt_dts": 150528, + "pkt_dts_time": "3.136000", + "best_effort_timestamp": 150528, + "best_effort_timestamp_time": "3.136000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "728175", + "pkt_size": "1021", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 39936, + "pts_time": "3.120000", + "dts": 39936, + "dts_time": "3.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "6521", + "pos": "729196", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 39936, + "pkt_pts_time": "3.120000", + "pkt_dts": 39936, + "pkt_dts_time": "3.120000", + "best_effort_timestamp": 39936, + "best_effort_timestamp_time": "3.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "729196", + "pkt_size": "6521", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 78, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 151552, + "pts_time": "3.157333", + "dts": 151552, + "dts_time": "3.157333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1003", + "pos": "735717", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 151552, + "pkt_pts_time": "3.157333", + "pkt_dts": 151552, + "pkt_dts_time": "3.157333", + "best_effort_timestamp": 151552, + "best_effort_timestamp_time": "3.157333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "735717", + "pkt_size": "1003", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 40448, + "pts_time": "3.160000", + "dts": 40448, + "dts_time": "3.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "8559", + "pos": "736720", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 40448, + "pkt_pts_time": "3.160000", + "pkt_dts": 40448, + "pkt_dts_time": "3.160000", + "best_effort_timestamp": 40448, + "best_effort_timestamp_time": "3.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "736720", + "pkt_size": "8559", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 79, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 152576, + "pts_time": "3.178667", + "dts": 152576, + "dts_time": "3.178667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1016", + "pos": "745279", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 152576, + "pkt_pts_time": "3.178667", + "pkt_dts": 152576, + "pkt_dts_time": "3.178667", + "best_effort_timestamp": 152576, + "best_effort_timestamp_time": "3.178667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "745279", + "pkt_size": "1016", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 153600, + "pts_time": "3.200000", + "dts": 153600, + "dts_time": "3.200000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "746295", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 153600, + "pkt_pts_time": "3.200000", + "pkt_dts": 153600, + "pkt_dts_time": "3.200000", + "best_effort_timestamp": 153600, + "best_effort_timestamp_time": "3.200000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "746295", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 40960, + "pts_time": "3.200000", + "dts": 40960, + "dts_time": "3.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "8378", + "pos": "747323", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 40960, + "pkt_pts_time": "3.200000", + "pkt_dts": 40960, + "pkt_dts_time": "3.200000", + "best_effort_timestamp": 40960, + "best_effort_timestamp_time": "3.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "747323", + "pkt_size": "8378", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 80, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 154624, + "pts_time": "3.221333", + "dts": 154624, + "dts_time": "3.221333", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "755701", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 154624, + "pkt_pts_time": "3.221333", + "pkt_dts": 154624, + "pkt_dts_time": "3.221333", + "best_effort_timestamp": 154624, + "best_effort_timestamp_time": "3.221333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "755701", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 155648, + "pts_time": "3.242667", + "dts": 155648, + "dts_time": "3.242667", + "duration": 1024, + "duration_time": "0.021333", + "size": "989", + "pos": "756685", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 155648, + "pkt_pts_time": "3.242667", + "pkt_dts": 155648, + "pkt_dts_time": "3.242667", + "best_effort_timestamp": 155648, + "best_effort_timestamp_time": "3.242667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "756685", + "pkt_size": "989", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 41472, + "pts_time": "3.240000", + "dts": 41472, + "dts_time": "3.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "5619", + "pos": "757674", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 41472, + "pkt_pts_time": "3.240000", + "pkt_dts": 41472, + "pkt_dts_time": "3.240000", + "best_effort_timestamp": 41472, + "best_effort_timestamp_time": "3.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "757674", + "pkt_size": "5619", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 81, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 156672, + "pts_time": "3.264000", + "dts": 156672, + "dts_time": "3.264000", + "duration": 1024, + "duration_time": "0.021333", + "size": "997", + "pos": "763293", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 156672, + "pkt_pts_time": "3.264000", + "pkt_dts": 156672, + "pkt_dts_time": "3.264000", + "best_effort_timestamp": 156672, + "best_effort_timestamp_time": "3.264000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "763293", + "pkt_size": "997", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 157696, + "pts_time": "3.285333", + "dts": 157696, + "dts_time": "3.285333", + "duration": 1024, + "duration_time": "0.021333", + "size": "988", + "pos": "764290", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 157696, + "pkt_pts_time": "3.285333", + "pkt_dts": 157696, + "pkt_dts_time": "3.285333", + "best_effort_timestamp": 157696, + "best_effort_timestamp_time": "3.285333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "764290", + "pkt_size": "988", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 41984, + "pts_time": "3.280000", + "dts": 41984, + "dts_time": "3.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "1678", + "pos": "765278", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 41984, + "pkt_pts_time": "3.280000", + "pkt_dts": 41984, + "pkt_dts_time": "3.280000", + "best_effort_timestamp": 41984, + "best_effort_timestamp_time": "3.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "765278", + "pkt_size": "1678", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 82, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 158720, + "pts_time": "3.306667", + "dts": 158720, + "dts_time": "3.306667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "766956", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 158720, + "pkt_pts_time": "3.306667", + "pkt_dts": 158720, + "pkt_dts_time": "3.306667", + "best_effort_timestamp": 158720, + "best_effort_timestamp_time": "3.306667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "766956", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 159744, + "pts_time": "3.328000", + "dts": 159744, + "dts_time": "3.328000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "767960", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 159744, + "pkt_pts_time": "3.328000", + "pkt_dts": 159744, + "pkt_dts_time": "3.328000", + "best_effort_timestamp": 159744, + "best_effort_timestamp_time": "3.328000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "767960", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 42496, + "pts_time": "3.320000", + "dts": 42496, + "dts_time": "3.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "6616", + "pos": "768964", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 42496, + "pkt_pts_time": "3.320000", + "pkt_dts": 42496, + "pkt_dts_time": "3.320000", + "best_effort_timestamp": 42496, + "best_effort_timestamp_time": "3.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "768964", + "pkt_size": "6616", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 83, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 160768, + "pts_time": "3.349333", + "dts": 160768, + "dts_time": "3.349333", + "duration": 1024, + "duration_time": "0.021333", + "size": "962", + "pos": "775580", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 160768, + "pkt_pts_time": "3.349333", + "pkt_dts": 160768, + "pkt_dts_time": "3.349333", + "best_effort_timestamp": 160768, + "best_effort_timestamp_time": "3.349333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "775580", + "pkt_size": "962", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 161792, + "pts_time": "3.370667", + "dts": 161792, + "dts_time": "3.370667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1004", + "pos": "776542", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 161792, + "pkt_pts_time": "3.370667", + "pkt_dts": 161792, + "pkt_dts_time": "3.370667", + "best_effort_timestamp": 161792, + "best_effort_timestamp_time": "3.370667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "776542", + "pkt_size": "1004", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 43008, + "pts_time": "3.360000", + "dts": 43008, + "dts_time": "3.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "7587", + "pos": "777546", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 43008, + "pkt_pts_time": "3.360000", + "pkt_dts": 43008, + "pkt_dts_time": "3.360000", + "best_effort_timestamp": 43008, + "best_effort_timestamp_time": "3.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "777546", + "pkt_size": "7587", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 84, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 162816, + "pts_time": "3.392000", + "dts": 162816, + "dts_time": "3.392000", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "785133", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 162816, + "pkt_pts_time": "3.392000", + "pkt_dts": 162816, + "pkt_dts_time": "3.392000", + "best_effort_timestamp": 162816, + "best_effort_timestamp_time": "3.392000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "785133", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 163840, + "pts_time": "3.413333", + "dts": 163840, + "dts_time": "3.413333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1008", + "pos": "786117", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 163840, + "pkt_pts_time": "3.413333", + "pkt_dts": 163840, + "pkt_dts_time": "3.413333", + "best_effort_timestamp": 163840, + "best_effort_timestamp_time": "3.413333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "786117", + "pkt_size": "1008", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 43520, + "pts_time": "3.400000", + "dts": 43520, + "dts_time": "3.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "3929", + "pos": "787125", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 43520, + "pkt_pts_time": "3.400000", + "pkt_dts": 43520, + "pkt_dts_time": "3.400000", + "best_effort_timestamp": 43520, + "best_effort_timestamp_time": "3.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "787125", + "pkt_size": "3929", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 85, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 164864, + "pts_time": "3.434667", + "dts": 164864, + "dts_time": "3.434667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1094", + "pos": "791054", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 164864, + "pkt_pts_time": "3.434667", + "pkt_dts": 164864, + "pkt_dts_time": "3.434667", + "best_effort_timestamp": 164864, + "best_effort_timestamp_time": "3.434667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "791054", + "pkt_size": "1094", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 165888, + "pts_time": "3.456000", + "dts": 165888, + "dts_time": "3.456000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1065", + "pos": "792148", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 165888, + "pkt_pts_time": "3.456000", + "pkt_dts": 165888, + "pkt_dts_time": "3.456000", + "best_effort_timestamp": 165888, + "best_effort_timestamp_time": "3.456000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "792148", + "pkt_size": "1065", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 44032, + "pts_time": "3.440000", + "dts": 44032, + "dts_time": "3.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5863", + "pos": "793213", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 44032, + "pkt_pts_time": "3.440000", + "pkt_dts": 44032, + "pkt_dts_time": "3.440000", + "best_effort_timestamp": 44032, + "best_effort_timestamp_time": "3.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "793213", + "pkt_size": "5863", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 86, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 166912, + "pts_time": "3.477333", + "dts": 166912, + "dts_time": "3.477333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "799076", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 166912, + "pkt_pts_time": "3.477333", + "pkt_dts": 166912, + "pkt_dts_time": "3.477333", + "best_effort_timestamp": 166912, + "best_effort_timestamp_time": "3.477333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "799076", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 44544, + "pts_time": "3.480000", + "dts": 44544, + "dts_time": "3.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5013", + "pos": "800145", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 44544, + "pkt_pts_time": "3.480000", + "pkt_dts": 44544, + "pkt_dts_time": "3.480000", + "best_effort_timestamp": 44544, + "best_effort_timestamp_time": "3.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "800145", + "pkt_size": "5013", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 87, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 167936, + "pts_time": "3.498667", + "dts": 167936, + "dts_time": "3.498667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1028", + "pos": "805158", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 167936, + "pkt_pts_time": "3.498667", + "pkt_dts": 167936, + "pkt_dts_time": "3.498667", + "best_effort_timestamp": 167936, + "best_effort_timestamp_time": "3.498667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "805158", + "pkt_size": "1028", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 168960, + "pts_time": "3.520000", + "dts": 168960, + "dts_time": "3.520000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1072", + "pos": "806186", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 168960, + "pkt_pts_time": "3.520000", + "pkt_dts": 168960, + "pkt_dts_time": "3.520000", + "best_effort_timestamp": 168960, + "best_effort_timestamp_time": "3.520000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "806186", + "pkt_size": "1072", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 45056, + "pts_time": "3.520000", + "dts": 45056, + "dts_time": "3.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "7331", + "pos": "807258", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 45056, + "pkt_pts_time": "3.520000", + "pkt_dts": 45056, + "pkt_dts_time": "3.520000", + "best_effort_timestamp": 45056, + "best_effort_timestamp_time": "3.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "807258", + "pkt_size": "7331", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 88, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 169984, + "pts_time": "3.541333", + "dts": 169984, + "dts_time": "3.541333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1039", + "pos": "814589", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 169984, + "pkt_pts_time": "3.541333", + "pkt_dts": 169984, + "pkt_dts_time": "3.541333", + "best_effort_timestamp": 169984, + "best_effort_timestamp_time": "3.541333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "814589", + "pkt_size": "1039", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 171008, + "pts_time": "3.562667", + "dts": 171008, + "dts_time": "3.562667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "815628", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 171008, + "pkt_pts_time": "3.562667", + "pkt_dts": 171008, + "pkt_dts_time": "3.562667", + "best_effort_timestamp": 171008, + "best_effort_timestamp_time": "3.562667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "815628", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 45568, + "pts_time": "3.560000", + "dts": 45568, + "dts_time": "3.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "2681", + "pos": "816697", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 45568, + "pkt_pts_time": "3.560000", + "pkt_dts": 45568, + "pkt_dts_time": "3.560000", + "best_effort_timestamp": 45568, + "best_effort_timestamp_time": "3.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "816697", + "pkt_size": "2681", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 89, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 172032, + "pts_time": "3.584000", + "dts": 172032, + "dts_time": "3.584000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1067", + "pos": "819378", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 172032, + "pkt_pts_time": "3.584000", + "pkt_dts": 172032, + "pkt_dts_time": "3.584000", + "best_effort_timestamp": 172032, + "best_effort_timestamp_time": "3.584000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "819378", + "pkt_size": "1067", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 173056, + "pts_time": "3.605333", + "dts": 173056, + "dts_time": "3.605333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1125", + "pos": "820445", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 173056, + "pkt_pts_time": "3.605333", + "pkt_dts": 173056, + "pkt_dts_time": "3.605333", + "best_effort_timestamp": 173056, + "best_effort_timestamp_time": "3.605333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "820445", + "pkt_size": "1125", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 46080, + "pts_time": "3.600000", + "dts": 46080, + "dts_time": "3.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "3992", + "pos": "821570", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 46080, + "pkt_pts_time": "3.600000", + "pkt_dts": 46080, + "pkt_dts_time": "3.600000", + "best_effort_timestamp": 46080, + "best_effort_timestamp_time": "3.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "821570", + "pkt_size": "3992", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 90, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 174080, + "pts_time": "3.626667", + "dts": 174080, + "dts_time": "3.626667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1144", + "pos": "825562", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 174080, + "pkt_pts_time": "3.626667", + "pkt_dts": 174080, + "pkt_dts_time": "3.626667", + "best_effort_timestamp": 174080, + "best_effort_timestamp_time": "3.626667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "825562", + "pkt_size": "1144", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 175104, + "pts_time": "3.648000", + "dts": 175104, + "dts_time": "3.648000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1129", + "pos": "826706", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 175104, + "pkt_pts_time": "3.648000", + "pkt_dts": 175104, + "pkt_dts_time": "3.648000", + "best_effort_timestamp": 175104, + "best_effort_timestamp_time": "3.648000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "826706", + "pkt_size": "1129", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 46592, + "pts_time": "3.640000", + "dts": 46592, + "dts_time": "3.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "2616", + "pos": "827835", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 46592, + "pkt_pts_time": "3.640000", + "pkt_dts": 46592, + "pkt_dts_time": "3.640000", + "best_effort_timestamp": 46592, + "best_effort_timestamp_time": "3.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "827835", + "pkt_size": "2616", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 91, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 176128, + "pts_time": "3.669333", + "dts": 176128, + "dts_time": "3.669333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1115", + "pos": "830451", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 176128, + "pkt_pts_time": "3.669333", + "pkt_dts": 176128, + "pkt_dts_time": "3.669333", + "best_effort_timestamp": 176128, + "best_effort_timestamp_time": "3.669333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "830451", + "pkt_size": "1115", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 177152, + "pts_time": "3.690667", + "dts": 177152, + "dts_time": "3.690667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1077", + "pos": "831566", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 177152, + "pkt_pts_time": "3.690667", + "pkt_dts": 177152, + "pkt_dts_time": "3.690667", + "best_effort_timestamp": 177152, + "best_effort_timestamp_time": "3.690667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "831566", + "pkt_size": "1077", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 47104, + "pts_time": "3.680000", + "dts": 47104, + "dts_time": "3.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "2329", + "pos": "832643", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 47104, + "pkt_pts_time": "3.680000", + "pkt_dts": 47104, + "pkt_dts_time": "3.680000", + "best_effort_timestamp": 47104, + "best_effort_timestamp_time": "3.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "832643", + "pkt_size": "2329", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 92, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 178176, + "pts_time": "3.712000", + "dts": 178176, + "dts_time": "3.712000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1098", + "pos": "834972", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 178176, + "pkt_pts_time": "3.712000", + "pkt_dts": 178176, + "pkt_dts_time": "3.712000", + "best_effort_timestamp": 178176, + "best_effort_timestamp_time": "3.712000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "834972", + "pkt_size": "1098", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 179200, + "pts_time": "3.733333", + "dts": 179200, + "dts_time": "3.733333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1027", + "pos": "836070", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 179200, + "pkt_pts_time": "3.733333", + "pkt_dts": 179200, + "pkt_dts_time": "3.733333", + "best_effort_timestamp": 179200, + "best_effort_timestamp_time": "3.733333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "836070", + "pkt_size": "1027", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 47616, + "pts_time": "3.720000", + "dts": 47616, + "dts_time": "3.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "2096", + "pos": "837097", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 47616, + "pkt_pts_time": "3.720000", + "pkt_dts": 47616, + "pkt_dts_time": "3.720000", + "best_effort_timestamp": 47616, + "best_effort_timestamp_time": "3.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "837097", + "pkt_size": "2096", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 93, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 180224, + "pts_time": "3.754667", + "dts": 180224, + "dts_time": "3.754667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "839193", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 180224, + "pkt_pts_time": "3.754667", + "pkt_dts": 180224, + "pkt_dts_time": "3.754667", + "best_effort_timestamp": 180224, + "best_effort_timestamp_time": "3.754667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "839193", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 181248, + "pts_time": "3.776000", + "dts": 181248, + "dts_time": "3.776000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1031", + "pos": "840212", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 181248, + "pkt_pts_time": "3.776000", + "pkt_dts": 181248, + "pkt_dts_time": "3.776000", + "best_effort_timestamp": 181248, + "best_effort_timestamp_time": "3.776000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "840212", + "pkt_size": "1031", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 48128, + "pts_time": "3.760000", + "dts": 48128, + "dts_time": "3.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "2134", + "pos": "841243", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 48128, + "pkt_pts_time": "3.760000", + "pkt_dts": 48128, + "pkt_dts_time": "3.760000", + "best_effort_timestamp": 48128, + "best_effort_timestamp_time": "3.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "841243", + "pkt_size": "2134", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 94, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 182272, + "pts_time": "3.797333", + "dts": 182272, + "dts_time": "3.797333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1019", + "pos": "843377", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 182272, + "pkt_pts_time": "3.797333", + "pkt_dts": 182272, + "pkt_dts_time": "3.797333", + "best_effort_timestamp": 182272, + "best_effort_timestamp_time": "3.797333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "843377", + "pkt_size": "1019", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 48640, + "pts_time": "3.800000", + "dts": 48640, + "dts_time": "3.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "1437", + "pos": "844396", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 48640, + "pkt_pts_time": "3.800000", + "pkt_dts": 48640, + "pkt_dts_time": "3.800000", + "best_effort_timestamp": 48640, + "best_effort_timestamp_time": "3.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "844396", + "pkt_size": "1437", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 95, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 183296, + "pts_time": "3.818667", + "dts": 183296, + "dts_time": "3.818667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1020", + "pos": "845833", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 183296, + "pkt_pts_time": "3.818667", + "pkt_dts": 183296, + "pkt_dts_time": "3.818667", + "best_effort_timestamp": 183296, + "best_effort_timestamp_time": "3.818667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "845833", + "pkt_size": "1020", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 184320, + "pts_time": "3.840000", + "dts": 184320, + "dts_time": "3.840000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1045", + "pos": "846853", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 184320, + "pkt_pts_time": "3.840000", + "pkt_dts": 184320, + "pkt_dts_time": "3.840000", + "best_effort_timestamp": 184320, + "best_effort_timestamp_time": "3.840000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "846853", + "pkt_size": "1045", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 49152, + "pts_time": "3.840000", + "dts": 49152, + "dts_time": "3.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "1678", + "pos": "847898", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 49152, + "pkt_pts_time": "3.840000", + "pkt_dts": 49152, + "pkt_dts_time": "3.840000", + "best_effort_timestamp": 49152, + "best_effort_timestamp_time": "3.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "847898", + "pkt_size": "1678", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 96, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 185344, + "pts_time": "3.861333", + "dts": 185344, + "dts_time": "3.861333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1026", + "pos": "849576", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 185344, + "pkt_pts_time": "3.861333", + "pkt_dts": 185344, + "pkt_dts_time": "3.861333", + "best_effort_timestamp": 185344, + "best_effort_timestamp_time": "3.861333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "849576", + "pkt_size": "1026", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 186368, + "pts_time": "3.882667", + "dts": 186368, + "dts_time": "3.882667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1053", + "pos": "850602", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 186368, + "pkt_pts_time": "3.882667", + "pkt_dts": 186368, + "pkt_dts_time": "3.882667", + "best_effort_timestamp": 186368, + "best_effort_timestamp_time": "3.882667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "850602", + "pkt_size": "1053", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 49664, + "pts_time": "3.880000", + "dts": 49664, + "dts_time": "3.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "3341", + "pos": "851655", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 49664, + "pkt_pts_time": "3.880000", + "pkt_dts": 49664, + "pkt_dts_time": "3.880000", + "best_effort_timestamp": 49664, + "best_effort_timestamp_time": "3.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "851655", + "pkt_size": "3341", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 97, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 187392, + "pts_time": "3.904000", + "dts": 187392, + "dts_time": "3.904000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1018", + "pos": "854996", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 187392, + "pkt_pts_time": "3.904000", + "pkt_dts": 187392, + "pkt_dts_time": "3.904000", + "best_effort_timestamp": 187392, + "best_effort_timestamp_time": "3.904000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "854996", + "pkt_size": "1018", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 188416, + "pts_time": "3.925333", + "dts": 188416, + "dts_time": "3.925333", + "duration": 1024, + "duration_time": "0.021333", + "size": "956", + "pos": "856014", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 188416, + "pkt_pts_time": "3.925333", + "pkt_dts": 188416, + "pkt_dts_time": "3.925333", + "best_effort_timestamp": 188416, + "best_effort_timestamp_time": "3.925333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "856014", + "pkt_size": "956", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 50176, + "pts_time": "3.920000", + "dts": 50176, + "dts_time": "3.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "2658", + "pos": "856970", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 50176, + "pkt_pts_time": "3.920000", + "pkt_dts": 50176, + "pkt_dts_time": "3.920000", + "best_effort_timestamp": 50176, + "best_effort_timestamp_time": "3.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "856970", + "pkt_size": "2658", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 98, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 189440, + "pts_time": "3.946667", + "dts": 189440, + "dts_time": "3.946667", + "duration": 1024, + "duration_time": "0.021333", + "size": "948", + "pos": "859628", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 189440, + "pkt_pts_time": "3.946667", + "pkt_dts": 189440, + "pkt_dts_time": "3.946667", + "best_effort_timestamp": 189440, + "best_effort_timestamp_time": "3.946667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "859628", + "pkt_size": "948", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 190464, + "pts_time": "3.968000", + "dts": 190464, + "dts_time": "3.968000", + "duration": 1024, + "duration_time": "0.021333", + "size": "942", + "pos": "860576", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 190464, + "pkt_pts_time": "3.968000", + "pkt_dts": 190464, + "pkt_dts_time": "3.968000", + "best_effort_timestamp": 190464, + "best_effort_timestamp_time": "3.968000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "860576", + "pkt_size": "942", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 50688, + "pts_time": "3.960000", + "dts": 50688, + "dts_time": "3.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "2686", + "pos": "861518", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 50688, + "pkt_pts_time": "3.960000", + "pkt_dts": 50688, + "pkt_dts_time": "3.960000", + "best_effort_timestamp": 50688, + "best_effort_timestamp_time": "3.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "861518", + "pkt_size": "2686", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 99, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 191488, + "pts_time": "3.989333", + "dts": 191488, + "dts_time": "3.989333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1006", + "pos": "864204", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 191488, + "pkt_pts_time": "3.989333", + "pkt_dts": 191488, + "pkt_dts_time": "3.989333", + "best_effort_timestamp": 191488, + "best_effort_timestamp_time": "3.989333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "864204", + "pkt_size": "1006", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 192512, + "pts_time": "4.010667", + "dts": 192512, + "dts_time": "4.010667", + "duration": 1024, + "duration_time": "0.021333", + "size": "934", + "pos": "865210", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 192512, + "pkt_pts_time": "4.010667", + "pkt_dts": 192512, + "pkt_dts_time": "4.010667", + "best_effort_timestamp": 192512, + "best_effort_timestamp_time": "4.010667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "865210", + "pkt_size": "934", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 51200, + "pts_time": "4.000000", + "dts": 51200, + "dts_time": "4.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "2997", + "pos": "866144", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 51200, + "pkt_pts_time": "4.000000", + "pkt_dts": 51200, + "pkt_dts_time": "4.000000", + "best_effort_timestamp": 51200, + "best_effort_timestamp_time": "4.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "866144", + "pkt_size": "2997", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 100, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 193536, + "pts_time": "4.032000", + "dts": 193536, + "dts_time": "4.032000", + "duration": 1024, + "duration_time": "0.021333", + "size": "939", + "pos": "869141", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 193536, + "pkt_pts_time": "4.032000", + "pkt_dts": 193536, + "pkt_dts_time": "4.032000", + "best_effort_timestamp": 193536, + "best_effort_timestamp_time": "4.032000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "869141", + "pkt_size": "939", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 194560, + "pts_time": "4.053333", + "dts": 194560, + "dts_time": "4.053333", + "duration": 1024, + "duration_time": "0.021333", + "size": "943", + "pos": "870080", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 194560, + "pkt_pts_time": "4.053333", + "pkt_dts": 194560, + "pkt_dts_time": "4.053333", + "best_effort_timestamp": 194560, + "best_effort_timestamp_time": "4.053333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "870080", + "pkt_size": "943", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 51712, + "pts_time": "4.040000", + "dts": 51712, + "dts_time": "4.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "3001", + "pos": "871023", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 51712, + "pkt_pts_time": "4.040000", + "pkt_dts": 51712, + "pkt_dts_time": "4.040000", + "best_effort_timestamp": 51712, + "best_effort_timestamp_time": "4.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "871023", + "pkt_size": "3001", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 101, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 195584, + "pts_time": "4.074667", + "dts": 195584, + "dts_time": "4.074667", + "duration": 1024, + "duration_time": "0.021333", + "size": "970", + "pos": "874024", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 195584, + "pkt_pts_time": "4.074667", + "pkt_dts": 195584, + "pkt_dts_time": "4.074667", + "best_effort_timestamp": 195584, + "best_effort_timestamp_time": "4.074667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "874024", + "pkt_size": "970", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 196608, + "pts_time": "4.096000", + "dts": 196608, + "dts_time": "4.096000", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "874994", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 196608, + "pkt_pts_time": "4.096000", + "pkt_dts": 196608, + "pkt_dts_time": "4.096000", + "best_effort_timestamp": 196608, + "best_effort_timestamp_time": "4.096000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "874994", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 52224, + "pts_time": "4.080000", + "dts": 52224, + "dts_time": "4.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2614", + "pos": "875959", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 52224, + "pkt_pts_time": "4.080000", + "pkt_dts": 52224, + "pkt_dts_time": "4.080000", + "best_effort_timestamp": 52224, + "best_effort_timestamp_time": "4.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "875959", + "pkt_size": "2614", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 102, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 197632, + "pts_time": "4.117333", + "dts": 197632, + "dts_time": "4.117333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1098", + "pos": "878573", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 197632, + "pkt_pts_time": "4.117333", + "pkt_dts": 197632, + "pkt_dts_time": "4.117333", + "best_effort_timestamp": 197632, + "best_effort_timestamp_time": "4.117333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "878573", + "pkt_size": "1098", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 52736, + "pts_time": "4.120000", + "dts": 52736, + "dts_time": "4.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "3587", + "pos": "879671", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 52736, + "pkt_pts_time": "4.120000", + "pkt_dts": 52736, + "pkt_dts_time": "4.120000", + "best_effort_timestamp": 52736, + "best_effort_timestamp_time": "4.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "879671", + "pkt_size": "3587", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 103, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 198656, + "pts_time": "4.138667", + "dts": 198656, + "dts_time": "4.138667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1067", + "pos": "883258", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 198656, + "pkt_pts_time": "4.138667", + "pkt_dts": 198656, + "pkt_dts_time": "4.138667", + "best_effort_timestamp": 198656, + "best_effort_timestamp_time": "4.138667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "883258", + "pkt_size": "1067", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 199680, + "pts_time": "4.160000", + "dts": 199680, + "dts_time": "4.160000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1021", + "pos": "884325", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 199680, + "pkt_pts_time": "4.160000", + "pkt_dts": 199680, + "pkt_dts_time": "4.160000", + "best_effort_timestamp": 199680, + "best_effort_timestamp_time": "4.160000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "884325", + "pkt_size": "1021", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 53248, + "pts_time": "4.160000", + "dts": 53248, + "dts_time": "4.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "4599", + "pos": "885346", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 53248, + "pkt_pts_time": "4.160000", + "pkt_dts": 53248, + "pkt_dts_time": "4.160000", + "best_effort_timestamp": 53248, + "best_effort_timestamp_time": "4.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "885346", + "pkt_size": "4599", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 104, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 200704, + "pts_time": "4.181333", + "dts": 200704, + "dts_time": "4.181333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1009", + "pos": "889945", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 200704, + "pkt_pts_time": "4.181333", + "pkt_dts": 200704, + "pkt_dts_time": "4.181333", + "best_effort_timestamp": 200704, + "best_effort_timestamp_time": "4.181333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "889945", + "pkt_size": "1009", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 201728, + "pts_time": "4.202667", + "dts": 201728, + "dts_time": "4.202667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1036", + "pos": "890954", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 201728, + "pkt_pts_time": "4.202667", + "pkt_dts": 201728, + "pkt_dts_time": "4.202667", + "best_effort_timestamp": 201728, + "best_effort_timestamp_time": "4.202667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "890954", + "pkt_size": "1036", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 53760, + "pts_time": "4.200000", + "dts": 53760, + "dts_time": "4.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "5642", + "pos": "891990", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 53760, + "pkt_pts_time": "4.200000", + "pkt_dts": 53760, + "pkt_dts_time": "4.200000", + "best_effort_timestamp": 53760, + "best_effort_timestamp_time": "4.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "891990", + "pkt_size": "5642", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 105, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 202752, + "pts_time": "4.224000", + "dts": 202752, + "dts_time": "4.224000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1035", + "pos": "897632", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 202752, + "pkt_pts_time": "4.224000", + "pkt_dts": 202752, + "pkt_dts_time": "4.224000", + "best_effort_timestamp": 202752, + "best_effort_timestamp_time": "4.224000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "897632", + "pkt_size": "1035", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 203776, + "pts_time": "4.245333", + "dts": 203776, + "dts_time": "4.245333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1024", + "pos": "898667", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 203776, + "pkt_pts_time": "4.245333", + "pkt_dts": 203776, + "pkt_dts_time": "4.245333", + "best_effort_timestamp": 203776, + "best_effort_timestamp_time": "4.245333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "898667", + "pkt_size": "1024", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 54272, + "pts_time": "4.240000", + "dts": 54272, + "dts_time": "4.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "6757", + "pos": "899691", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 54272, + "pkt_pts_time": "4.240000", + "pkt_dts": 54272, + "pkt_dts_time": "4.240000", + "best_effort_timestamp": 54272, + "best_effort_timestamp_time": "4.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "899691", + "pkt_size": "6757", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 106, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 204800, + "pts_time": "4.266667", + "dts": 204800, + "dts_time": "4.266667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1074", + "pos": "906448", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 204800, + "pkt_pts_time": "4.266667", + "pkt_dts": 204800, + "pkt_dts_time": "4.266667", + "best_effort_timestamp": 204800, + "best_effort_timestamp_time": "4.266667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "906448", + "pkt_size": "1074", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 205824, + "pts_time": "4.288000", + "dts": 205824, + "dts_time": "4.288000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1037", + "pos": "907522", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 205824, + "pkt_pts_time": "4.288000", + "pkt_dts": 205824, + "pkt_dts_time": "4.288000", + "best_effort_timestamp": 205824, + "best_effort_timestamp_time": "4.288000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "907522", + "pkt_size": "1037", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 54784, + "pts_time": "4.280000", + "dts": 54784, + "dts_time": "4.280000", + "duration": 512, + "duration_time": "0.040000", + "size": "784", + "pos": "908559", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 54784, + "pkt_pts_time": "4.280000", + "pkt_dts": 54784, + "pkt_dts_time": "4.280000", + "best_effort_timestamp": 54784, + "best_effort_timestamp_time": "4.280000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "908559", + "pkt_size": "784", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 107, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 206848, + "pts_time": "4.309333", + "dts": 206848, + "dts_time": "4.309333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1008", + "pos": "909343", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 206848, + "pkt_pts_time": "4.309333", + "pkt_dts": 206848, + "pkt_dts_time": "4.309333", + "best_effort_timestamp": 206848, + "best_effort_timestamp_time": "4.309333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "909343", + "pkt_size": "1008", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 207872, + "pts_time": "4.330667", + "dts": 207872, + "dts_time": "4.330667", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "910351", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 207872, + "pkt_pts_time": "4.330667", + "pkt_dts": 207872, + "pkt_dts_time": "4.330667", + "best_effort_timestamp": 207872, + "best_effort_timestamp_time": "4.330667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "910351", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 55296, + "pts_time": "4.320000", + "dts": 55296, + "dts_time": "4.320000", + "duration": 512, + "duration_time": "0.040000", + "size": "5285", + "pos": "911330", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 55296, + "pkt_pts_time": "4.320000", + "pkt_dts": 55296, + "pkt_dts_time": "4.320000", + "best_effort_timestamp": 55296, + "best_effort_timestamp_time": "4.320000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "911330", + "pkt_size": "5285", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 108, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 208896, + "pts_time": "4.352000", + "dts": 208896, + "dts_time": "4.352000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1016", + "pos": "916615", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 208896, + "pkt_pts_time": "4.352000", + "pkt_dts": 208896, + "pkt_dts_time": "4.352000", + "best_effort_timestamp": 208896, + "best_effort_timestamp_time": "4.352000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "916615", + "pkt_size": "1016", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 209920, + "pts_time": "4.373333", + "dts": 209920, + "dts_time": "4.373333", + "duration": 1024, + "duration_time": "0.021333", + "size": "965", + "pos": "917631", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 209920, + "pkt_pts_time": "4.373333", + "pkt_dts": 209920, + "pkt_dts_time": "4.373333", + "best_effort_timestamp": 209920, + "best_effort_timestamp_time": "4.373333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "917631", + "pkt_size": "965", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 55808, + "pts_time": "4.360000", + "dts": 55808, + "dts_time": "4.360000", + "duration": 512, + "duration_time": "0.040000", + "size": "5117", + "pos": "918596", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 55808, + "pkt_pts_time": "4.360000", + "pkt_dts": 55808, + "pkt_dts_time": "4.360000", + "best_effort_timestamp": 55808, + "best_effort_timestamp_time": "4.360000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "918596", + "pkt_size": "5117", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 109, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 210944, + "pts_time": "4.394667", + "dts": 210944, + "dts_time": "4.394667", + "duration": 1024, + "duration_time": "0.021333", + "size": "983", + "pos": "923713", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 210944, + "pkt_pts_time": "4.394667", + "pkt_dts": 210944, + "pkt_dts_time": "4.394667", + "best_effort_timestamp": 210944, + "best_effort_timestamp_time": "4.394667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "923713", + "pkt_size": "983", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 211968, + "pts_time": "4.416000", + "dts": 211968, + "dts_time": "4.416000", + "duration": 1024, + "duration_time": "0.021333", + "size": "976", + "pos": "924696", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 211968, + "pkt_pts_time": "4.416000", + "pkt_dts": 211968, + "pkt_dts_time": "4.416000", + "best_effort_timestamp": 211968, + "best_effort_timestamp_time": "4.416000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "924696", + "pkt_size": "976", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 56320, + "pts_time": "4.400000", + "dts": 56320, + "dts_time": "4.400000", + "duration": 512, + "duration_time": "0.040000", + "size": "5553", + "pos": "925672", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 56320, + "pkt_pts_time": "4.400000", + "pkt_dts": 56320, + "pkt_dts_time": "4.400000", + "best_effort_timestamp": 56320, + "best_effort_timestamp_time": "4.400000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "925672", + "pkt_size": "5553", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 110, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 212992, + "pts_time": "4.437333", + "dts": 212992, + "dts_time": "4.437333", + "duration": 1024, + "duration_time": "0.021333", + "size": "980", + "pos": "931225", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 212992, + "pkt_pts_time": "4.437333", + "pkt_dts": 212992, + "pkt_dts_time": "4.437333", + "best_effort_timestamp": 212992, + "best_effort_timestamp_time": "4.437333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "931225", + "pkt_size": "980", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 56832, + "pts_time": "4.440000", + "dts": 56832, + "dts_time": "4.440000", + "duration": 512, + "duration_time": "0.040000", + "size": "5601", + "pos": "932205", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 56832, + "pkt_pts_time": "4.440000", + "pkt_dts": 56832, + "pkt_dts_time": "4.440000", + "best_effort_timestamp": 56832, + "best_effort_timestamp_time": "4.440000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "932205", + "pkt_size": "5601", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 111, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 214016, + "pts_time": "4.458667", + "dts": 214016, + "dts_time": "4.458667", + "duration": 1024, + "duration_time": "0.021333", + "size": "950", + "pos": "937806", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 214016, + "pkt_pts_time": "4.458667", + "pkt_dts": 214016, + "pkt_dts_time": "4.458667", + "best_effort_timestamp": 214016, + "best_effort_timestamp_time": "4.458667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "937806", + "pkt_size": "950", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 215040, + "pts_time": "4.480000", + "dts": 215040, + "dts_time": "4.480000", + "duration": 1024, + "duration_time": "0.021333", + "size": "979", + "pos": "938756", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 215040, + "pkt_pts_time": "4.480000", + "pkt_dts": 215040, + "pkt_dts_time": "4.480000", + "best_effort_timestamp": 215040, + "best_effort_timestamp_time": "4.480000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "938756", + "pkt_size": "979", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 57344, + "pts_time": "4.480000", + "dts": 57344, + "dts_time": "4.480000", + "duration": 512, + "duration_time": "0.040000", + "size": "5281", + "pos": "939735", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 57344, + "pkt_pts_time": "4.480000", + "pkt_dts": 57344, + "pkt_dts_time": "4.480000", + "best_effort_timestamp": 57344, + "best_effort_timestamp_time": "4.480000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "939735", + "pkt_size": "5281", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 112, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 216064, + "pts_time": "4.501333", + "dts": 216064, + "dts_time": "4.501333", + "duration": 1024, + "duration_time": "0.021333", + "size": "978", + "pos": "945016", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 216064, + "pkt_pts_time": "4.501333", + "pkt_dts": 216064, + "pkt_dts_time": "4.501333", + "best_effort_timestamp": 216064, + "best_effort_timestamp_time": "4.501333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "945016", + "pkt_size": "978", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 217088, + "pts_time": "4.522667", + "dts": 217088, + "dts_time": "4.522667", + "duration": 1024, + "duration_time": "0.021333", + "size": "987", + "pos": "945994", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 217088, + "pkt_pts_time": "4.522667", + "pkt_dts": 217088, + "pkt_dts_time": "4.522667", + "best_effort_timestamp": 217088, + "best_effort_timestamp_time": "4.522667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "945994", + "pkt_size": "987", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 57856, + "pts_time": "4.520000", + "dts": 57856, + "dts_time": "4.520000", + "duration": 512, + "duration_time": "0.040000", + "size": "7270", + "pos": "946981", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 57856, + "pkt_pts_time": "4.520000", + "pkt_dts": 57856, + "pkt_dts_time": "4.520000", + "best_effort_timestamp": 57856, + "best_effort_timestamp_time": "4.520000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "946981", + "pkt_size": "7270", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 113, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 218112, + "pts_time": "4.544000", + "dts": 218112, + "dts_time": "4.544000", + "duration": 1024, + "duration_time": "0.021333", + "size": "991", + "pos": "954251", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 218112, + "pkt_pts_time": "4.544000", + "pkt_dts": 218112, + "pkt_dts_time": "4.544000", + "best_effort_timestamp": 218112, + "best_effort_timestamp_time": "4.544000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "954251", + "pkt_size": "991", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 219136, + "pts_time": "4.565333", + "dts": 219136, + "dts_time": "4.565333", + "duration": 1024, + "duration_time": "0.021333", + "size": "984", + "pos": "955242", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 219136, + "pkt_pts_time": "4.565333", + "pkt_dts": 219136, + "pkt_dts_time": "4.565333", + "best_effort_timestamp": 219136, + "best_effort_timestamp_time": "4.565333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "955242", + "pkt_size": "984", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 58368, + "pts_time": "4.560000", + "dts": 58368, + "dts_time": "4.560000", + "duration": 512, + "duration_time": "0.040000", + "size": "3146", + "pos": "956226", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 58368, + "pkt_pts_time": "4.560000", + "pkt_dts": 58368, + "pkt_dts_time": "4.560000", + "best_effort_timestamp": 58368, + "best_effort_timestamp_time": "4.560000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "956226", + "pkt_size": "3146", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 114, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 220160, + "pts_time": "4.586667", + "dts": 220160, + "dts_time": "4.586667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1121", + "pos": "959372", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 220160, + "pkt_pts_time": "4.586667", + "pkt_dts": 220160, + "pkt_dts_time": "4.586667", + "best_effort_timestamp": 220160, + "best_effort_timestamp_time": "4.586667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "959372", + "pkt_size": "1121", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 221184, + "pts_time": "4.608000", + "dts": 221184, + "dts_time": "4.608000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1137", + "pos": "960493", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 221184, + "pkt_pts_time": "4.608000", + "pkt_dts": 221184, + "pkt_dts_time": "4.608000", + "best_effort_timestamp": 221184, + "best_effort_timestamp_time": "4.608000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "960493", + "pkt_size": "1137", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 58880, + "pts_time": "4.600000", + "dts": 58880, + "dts_time": "4.600000", + "duration": 512, + "duration_time": "0.040000", + "size": "2708", + "pos": "961630", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 58880, + "pkt_pts_time": "4.600000", + "pkt_dts": 58880, + "pkt_dts_time": "4.600000", + "best_effort_timestamp": 58880, + "best_effort_timestamp_time": "4.600000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "961630", + "pkt_size": "2708", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 115, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 222208, + "pts_time": "4.629333", + "dts": 222208, + "dts_time": "4.629333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1149", + "pos": "964338", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 222208, + "pkt_pts_time": "4.629333", + "pkt_dts": 222208, + "pkt_dts_time": "4.629333", + "best_effort_timestamp": 222208, + "best_effort_timestamp_time": "4.629333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "964338", + "pkt_size": "1149", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 223232, + "pts_time": "4.650667", + "dts": 223232, + "dts_time": "4.650667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1182", + "pos": "965487", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 223232, + "pkt_pts_time": "4.650667", + "pkt_dts": 223232, + "pkt_dts_time": "4.650667", + "best_effort_timestamp": 223232, + "best_effort_timestamp_time": "4.650667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "965487", + "pkt_size": "1182", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 59392, + "pts_time": "4.640000", + "dts": 59392, + "dts_time": "4.640000", + "duration": 512, + "duration_time": "0.040000", + "size": "4652", + "pos": "966669", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 59392, + "pkt_pts_time": "4.640000", + "pkt_dts": 59392, + "pkt_dts_time": "4.640000", + "best_effort_timestamp": 59392, + "best_effort_timestamp_time": "4.640000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "966669", + "pkt_size": "4652", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 116, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 224256, + "pts_time": "4.672000", + "dts": 224256, + "dts_time": "4.672000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1150", + "pos": "971321", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 224256, + "pkt_pts_time": "4.672000", + "pkt_dts": 224256, + "pkt_dts_time": "4.672000", + "best_effort_timestamp": 224256, + "best_effort_timestamp_time": "4.672000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "971321", + "pkt_size": "1150", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 225280, + "pts_time": "4.693333", + "dts": 225280, + "dts_time": "4.693333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1097", + "pos": "972471", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 225280, + "pkt_pts_time": "4.693333", + "pkt_dts": 225280, + "pkt_dts_time": "4.693333", + "best_effort_timestamp": 225280, + "best_effort_timestamp_time": "4.693333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "972471", + "pkt_size": "1097", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 59904, + "pts_time": "4.680000", + "dts": 59904, + "dts_time": "4.680000", + "duration": 512, + "duration_time": "0.040000", + "size": "1918", + "pos": "973568", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 59904, + "pkt_pts_time": "4.680000", + "pkt_dts": 59904, + "pkt_dts_time": "4.680000", + "best_effort_timestamp": 59904, + "best_effort_timestamp_time": "4.680000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "973568", + "pkt_size": "1918", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 117, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 226304, + "pts_time": "4.714667", + "dts": 226304, + "dts_time": "4.714667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1117", + "pos": "975486", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 226304, + "pkt_pts_time": "4.714667", + "pkt_dts": 226304, + "pkt_dts_time": "4.714667", + "best_effort_timestamp": 226304, + "best_effort_timestamp_time": "4.714667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "975486", + "pkt_size": "1117", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 227328, + "pts_time": "4.736000", + "dts": 227328, + "dts_time": "4.736000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1088", + "pos": "976603", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 227328, + "pkt_pts_time": "4.736000", + "pkt_dts": 227328, + "pkt_dts_time": "4.736000", + "best_effort_timestamp": 227328, + "best_effort_timestamp_time": "4.736000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "976603", + "pkt_size": "1088", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 60416, + "pts_time": "4.720000", + "dts": 60416, + "dts_time": "4.720000", + "duration": 512, + "duration_time": "0.040000", + "size": "2144", + "pos": "977691", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 60416, + "pkt_pts_time": "4.720000", + "pkt_dts": 60416, + "pkt_dts_time": "4.720000", + "best_effort_timestamp": 60416, + "best_effort_timestamp_time": "4.720000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "977691", + "pkt_size": "2144", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 118, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 228352, + "pts_time": "4.757333", + "dts": 228352, + "dts_time": "4.757333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1063", + "pos": "979835", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 228352, + "pkt_pts_time": "4.757333", + "pkt_dts": 228352, + "pkt_dts_time": "4.757333", + "best_effort_timestamp": 228352, + "best_effort_timestamp_time": "4.757333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "979835", + "pkt_size": "1063", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 60928, + "pts_time": "4.760000", + "dts": 60928, + "dts_time": "4.760000", + "duration": 512, + "duration_time": "0.040000", + "size": "3733", + "pos": "980898", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 60928, + "pkt_pts_time": "4.760000", + "pkt_dts": 60928, + "pkt_dts_time": "4.760000", + "best_effort_timestamp": 60928, + "best_effort_timestamp_time": "4.760000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "980898", + "pkt_size": "3733", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 119, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 229376, + "pts_time": "4.778667", + "dts": 229376, + "dts_time": "4.778667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1078", + "pos": "984631", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 229376, + "pkt_pts_time": "4.778667", + "pkt_dts": 229376, + "pkt_dts_time": "4.778667", + "best_effort_timestamp": 229376, + "best_effort_timestamp_time": "4.778667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "984631", + "pkt_size": "1078", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 230400, + "pts_time": "4.800000", + "dts": 230400, + "dts_time": "4.800000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1062", + "pos": "985709", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 230400, + "pkt_pts_time": "4.800000", + "pkt_dts": 230400, + "pkt_dts_time": "4.800000", + "best_effort_timestamp": 230400, + "best_effort_timestamp_time": "4.800000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "985709", + "pkt_size": "1062", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 61440, + "pts_time": "4.800000", + "dts": 61440, + "dts_time": "4.800000", + "duration": 512, + "duration_time": "0.040000", + "size": "3473", + "pos": "986771", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 61440, + "pkt_pts_time": "4.800000", + "pkt_dts": 61440, + "pkt_dts_time": "4.800000", + "best_effort_timestamp": 61440, + "best_effort_timestamp_time": "4.800000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "986771", + "pkt_size": "3473", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 120, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 231424, + "pts_time": "4.821333", + "dts": 231424, + "dts_time": "4.821333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1069", + "pos": "990244", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 231424, + "pkt_pts_time": "4.821333", + "pkt_dts": 231424, + "pkt_dts_time": "4.821333", + "best_effort_timestamp": 231424, + "best_effort_timestamp_time": "4.821333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "990244", + "pkt_size": "1069", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 232448, + "pts_time": "4.842667", + "dts": 232448, + "dts_time": "4.842667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1150", + "pos": "991313", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 232448, + "pkt_pts_time": "4.842667", + "pkt_dts": 232448, + "pkt_dts_time": "4.842667", + "best_effort_timestamp": 232448, + "best_effort_timestamp_time": "4.842667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "991313", + "pkt_size": "1150", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 61952, + "pts_time": "4.840000", + "dts": 61952, + "dts_time": "4.840000", + "duration": 512, + "duration_time": "0.040000", + "size": "4653", + "pos": "992463", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 61952, + "pkt_pts_time": "4.840000", + "pkt_dts": 61952, + "pkt_dts_time": "4.840000", + "best_effort_timestamp": 61952, + "best_effort_timestamp_time": "4.840000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "992463", + "pkt_size": "4653", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 121, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 233472, + "pts_time": "4.864000", + "dts": 233472, + "dts_time": "4.864000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1166", + "pos": "997116", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 233472, + "pkt_pts_time": "4.864000", + "pkt_dts": 233472, + "pkt_dts_time": "4.864000", + "best_effort_timestamp": 233472, + "best_effort_timestamp_time": "4.864000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "997116", + "pkt_size": "1166", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 234496, + "pts_time": "4.885333", + "dts": 234496, + "dts_time": "4.885333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1178", + "pos": "998282", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 234496, + "pkt_pts_time": "4.885333", + "pkt_dts": 234496, + "pkt_dts_time": "4.885333", + "best_effort_timestamp": 234496, + "best_effort_timestamp_time": "4.885333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "998282", + "pkt_size": "1178", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 62464, + "pts_time": "4.880000", + "dts": 62464, + "dts_time": "4.880000", + "duration": 512, + "duration_time": "0.040000", + "size": "2332", + "pos": "999460", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 62464, + "pkt_pts_time": "4.880000", + "pkt_dts": 62464, + "pkt_dts_time": "4.880000", + "best_effort_timestamp": 62464, + "best_effort_timestamp_time": "4.880000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "999460", + "pkt_size": "2332", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 122, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 235520, + "pts_time": "4.906667", + "dts": 235520, + "dts_time": "4.906667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1133", + "pos": "1001792", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 235520, + "pkt_pts_time": "4.906667", + "pkt_dts": 235520, + "pkt_dts_time": "4.906667", + "best_effort_timestamp": 235520, + "best_effort_timestamp_time": "4.906667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1001792", + "pkt_size": "1133", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 236544, + "pts_time": "4.928000", + "dts": 236544, + "dts_time": "4.928000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1185", + "pos": "1002925", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 236544, + "pkt_pts_time": "4.928000", + "pkt_dts": 236544, + "pkt_dts_time": "4.928000", + "best_effort_timestamp": 236544, + "best_effort_timestamp_time": "4.928000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1002925", + "pkt_size": "1185", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 62976, + "pts_time": "4.920000", + "dts": 62976, + "dts_time": "4.920000", + "duration": 512, + "duration_time": "0.040000", + "size": "2593", + "pos": "1004110", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 62976, + "pkt_pts_time": "4.920000", + "pkt_dts": 62976, + "pkt_dts_time": "4.920000", + "best_effort_timestamp": 62976, + "best_effort_timestamp_time": "4.920000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1004110", + "pkt_size": "2593", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 123, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 237568, + "pts_time": "4.949333", + "dts": 237568, + "dts_time": "4.949333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1141", + "pos": "1006703", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 237568, + "pkt_pts_time": "4.949333", + "pkt_dts": 237568, + "pkt_dts_time": "4.949333", + "best_effort_timestamp": 237568, + "best_effort_timestamp_time": "4.949333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1006703", + "pkt_size": "1141", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 238592, + "pts_time": "4.970667", + "dts": 238592, + "dts_time": "4.970667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1157", + "pos": "1007844", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 238592, + "pkt_pts_time": "4.970667", + "pkt_dts": 238592, + "pkt_dts_time": "4.970667", + "best_effort_timestamp": 238592, + "best_effort_timestamp_time": "4.970667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1007844", + "pkt_size": "1157", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 63488, + "pts_time": "4.960000", + "dts": 63488, + "dts_time": "4.960000", + "duration": 512, + "duration_time": "0.040000", + "size": "2488", + "pos": "1009001", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 63488, + "pkt_pts_time": "4.960000", + "pkt_dts": 63488, + "pkt_dts_time": "4.960000", + "best_effort_timestamp": 63488, + "best_effort_timestamp_time": "4.960000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1009001", + "pkt_size": "2488", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 124, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 239616, + "pts_time": "4.992000", + "dts": 239616, + "dts_time": "4.992000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1106", + "pos": "1011489", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 239616, + "pkt_pts_time": "4.992000", + "pkt_dts": 239616, + "pkt_dts_time": "4.992000", + "best_effort_timestamp": 239616, + "best_effort_timestamp_time": "4.992000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1011489", + "pkt_size": "1106", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 240640, + "pts_time": "5.013333", + "dts": 240640, + "dts_time": "5.013333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1104", + "pos": "1012595", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 240640, + "pkt_pts_time": "5.013333", + "pkt_dts": 240640, + "pkt_dts_time": "5.013333", + "best_effort_timestamp": 240640, + "best_effort_timestamp_time": "5.013333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1012595", + "pkt_size": "1104", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 64000, + "pts_time": "5.000000", + "dts": 64000, + "dts_time": "5.000000", + "duration": 512, + "duration_time": "0.040000", + "size": "4304", + "pos": "1013699", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 64000, + "pkt_pts_time": "5.000000", + "pkt_dts": 64000, + "pkt_dts_time": "5.000000", + "best_effort_timestamp": 64000, + "best_effort_timestamp_time": "5.000000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1013699", + "pkt_size": "4304", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 125, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 241664, + "pts_time": "5.034667", + "dts": 241664, + "dts_time": "5.034667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1147", + "pos": "1018003", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 241664, + "pkt_pts_time": "5.034667", + "pkt_dts": 241664, + "pkt_dts_time": "5.034667", + "best_effort_timestamp": 241664, + "best_effort_timestamp_time": "5.034667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1018003", + "pkt_size": "1147", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 242688, + "pts_time": "5.056000", + "dts": 242688, + "dts_time": "5.056000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1077", + "pos": "1019150", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 242688, + "pkt_pts_time": "5.056000", + "pkt_dts": 242688, + "pkt_dts_time": "5.056000", + "best_effort_timestamp": 242688, + "best_effort_timestamp_time": "5.056000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1019150", + "pkt_size": "1077", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 64512, + "pts_time": "5.040000", + "dts": 64512, + "dts_time": "5.040000", + "duration": 512, + "duration_time": "0.040000", + "size": "2883", + "pos": "1020227", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 64512, + "pkt_pts_time": "5.040000", + "pkt_dts": 64512, + "pkt_dts_time": "5.040000", + "best_effort_timestamp": 64512, + "best_effort_timestamp_time": "5.040000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1020227", + "pkt_size": "2883", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 126, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 243712, + "pts_time": "5.077333", + "dts": 243712, + "dts_time": "5.077333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1085", + "pos": "1023110", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 243712, + "pkt_pts_time": "5.077333", + "pkt_dts": 243712, + "pkt_dts_time": "5.077333", + "best_effort_timestamp": 243712, + "best_effort_timestamp_time": "5.077333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1023110", + "pkt_size": "1085", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 65024, + "pts_time": "5.080000", + "dts": 65024, + "dts_time": "5.080000", + "duration": 512, + "duration_time": "0.040000", + "size": "2186", + "pos": "1024195", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 65024, + "pkt_pts_time": "5.080000", + "pkt_dts": 65024, + "pkt_dts_time": "5.080000", + "best_effort_timestamp": 65024, + "best_effort_timestamp_time": "5.080000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1024195", + "pkt_size": "2186", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 127, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 244736, + "pts_time": "5.098667", + "dts": 244736, + "dts_time": "5.098667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1163", + "pos": "1026381", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 244736, + "pkt_pts_time": "5.098667", + "pkt_dts": 244736, + "pkt_dts_time": "5.098667", + "best_effort_timestamp": 244736, + "best_effort_timestamp_time": "5.098667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1026381", + "pkt_size": "1163", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 245760, + "pts_time": "5.120000", + "dts": 245760, + "dts_time": "5.120000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1206", + "pos": "1027544", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 245760, + "pkt_pts_time": "5.120000", + "pkt_dts": 245760, + "pkt_dts_time": "5.120000", + "best_effort_timestamp": 245760, + "best_effort_timestamp_time": "5.120000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1027544", + "pkt_size": "1206", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 65536, + "pts_time": "5.120000", + "dts": 65536, + "dts_time": "5.120000", + "duration": 512, + "duration_time": "0.040000", + "size": "3380", + "pos": "1028750", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 65536, + "pkt_pts_time": "5.120000", + "pkt_dts": 65536, + "pkt_dts_time": "5.120000", + "best_effort_timestamp": 65536, + "best_effort_timestamp_time": "5.120000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1028750", + "pkt_size": "3380", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 128, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 246784, + "pts_time": "5.141333", + "dts": 246784, + "dts_time": "5.141333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1193", + "pos": "1032130", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 246784, + "pkt_pts_time": "5.141333", + "pkt_dts": 246784, + "pkt_dts_time": "5.141333", + "best_effort_timestamp": 246784, + "best_effort_timestamp_time": "5.141333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1032130", + "pkt_size": "1193", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 247808, + "pts_time": "5.162667", + "dts": 247808, + "dts_time": "5.162667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1185", + "pos": "1033323", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 247808, + "pkt_pts_time": "5.162667", + "pkt_dts": 247808, + "pkt_dts_time": "5.162667", + "best_effort_timestamp": 247808, + "best_effort_timestamp_time": "5.162667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1033323", + "pkt_size": "1185", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 66048, + "pts_time": "5.160000", + "dts": 66048, + "dts_time": "5.160000", + "duration": 512, + "duration_time": "0.040000", + "size": "4411", + "pos": "1034508", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 66048, + "pkt_pts_time": "5.160000", + "pkt_dts": 66048, + "pkt_dts_time": "5.160000", + "best_effort_timestamp": 66048, + "best_effort_timestamp_time": "5.160000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1034508", + "pkt_size": "4411", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 129, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 248832, + "pts_time": "5.184000", + "dts": 248832, + "dts_time": "5.184000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1125", + "pos": "1038919", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 248832, + "pkt_pts_time": "5.184000", + "pkt_dts": 248832, + "pkt_dts_time": "5.184000", + "best_effort_timestamp": 248832, + "best_effort_timestamp_time": "5.184000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1038919", + "pkt_size": "1125", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 249856, + "pts_time": "5.205333", + "dts": 249856, + "dts_time": "5.205333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1107", + "pos": "1040044", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 249856, + "pkt_pts_time": "5.205333", + "pkt_dts": 249856, + "pkt_dts_time": "5.205333", + "best_effort_timestamp": 249856, + "best_effort_timestamp_time": "5.205333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1040044", + "pkt_size": "1107", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 66560, + "pts_time": "5.200000", + "dts": 66560, + "dts_time": "5.200000", + "duration": 512, + "duration_time": "0.040000", + "size": "4714", + "pos": "1041151", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 66560, + "pkt_pts_time": "5.200000", + "pkt_dts": 66560, + "pkt_dts_time": "5.200000", + "best_effort_timestamp": 66560, + "best_effort_timestamp_time": "5.200000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1041151", + "pkt_size": "4714", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 130, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 250880, + "pts_time": "5.226667", + "dts": 250880, + "dts_time": "5.226667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1108", + "pos": "1045865", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 250880, + "pkt_pts_time": "5.226667", + "pkt_dts": 250880, + "pkt_dts_time": "5.226667", + "best_effort_timestamp": 250880, + "best_effort_timestamp_time": "5.226667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1045865", + "pkt_size": "1108", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 251904, + "pts_time": "5.248000", + "dts": 251904, + "dts_time": "5.248000", + "duration": 1024, + "duration_time": "0.021333", + "size": "1066", + "pos": "1046973", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 251904, + "pkt_pts_time": "5.248000", + "pkt_dts": 251904, + "pkt_dts_time": "5.248000", + "best_effort_timestamp": 251904, + "best_effort_timestamp_time": "5.248000", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1046973", + "pkt_size": "1066", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "video", + "stream_index": 0, + "pts": 67072, + "pts_time": "5.240000", + "dts": 67072, + "dts_time": "5.240000", + "duration": 512, + "duration_time": "0.040000", + "size": "5496", + "pos": "1048039", + "flags": "__" + }, + { + "type": "frame", + "media_type": "video", + "stream_index": 0, + "key_frame": 0, + "pkt_pts": 67072, + "pkt_pts_time": "5.240000", + "pkt_dts": 67072, + "pkt_dts_time": "5.240000", + "best_effort_timestamp": 67072, + "best_effort_timestamp_time": "5.240000", + "pkt_duration": 512, + "pkt_duration_time": "0.040000", + "pkt_pos": "1048039", + "pkt_size": "5496", + "width": 1280, + "height": 720, + "pix_fmt": "yuv420p", + "sample_aspect_ratio": "1:1", + "pict_type": "P", + "coded_picture_number": 131, + "display_picture_number": 0, + "interlaced_frame": 0, + "top_field_first": 0, + "repeat_pict": 0, + "chroma_location": "left" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 252928, + "pts_time": "5.269333", + "dts": 252928, + "dts_time": "5.269333", + "duration": 1024, + "duration_time": "0.021333", + "size": "1074", + "pos": "1053535", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 252928, + "pkt_pts_time": "5.269333", + "pkt_dts": 252928, + "pkt_dts_time": "5.269333", + "best_effort_timestamp": 252928, + "best_effort_timestamp_time": "5.269333", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1053535", + "pkt_size": "1074", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + }, + { + "type": "packet", + "codec_type": "audio", + "stream_index": 1, + "pts": 253952, + "pts_time": "5.290667", + "dts": 253952, + "dts_time": "5.290667", + "duration": 1024, + "duration_time": "0.021333", + "size": "1111", + "pos": "1054609", + "flags": "K_" + }, + { + "type": "frame", + "media_type": "audio", + "stream_index": 1, + "key_frame": 1, + "pkt_pts": 253952, + "pkt_pts_time": "5.290667", + "pkt_dts": 253952, + "pkt_dts_time": "5.290667", + "best_effort_timestamp": 253952, + "best_effort_timestamp_time": "5.290667", + "pkt_duration": 1024, + "pkt_duration_time": "0.021333", + "pkt_pos": "1054609", + "pkt_size": "1111", + "sample_fmt": "fltp", + "nb_samples": 1024, + "channels": 6, + "channel_layout": "5.1" + } + ] +} From faedc821e27a5c8cb00b1d96a2f6d45eac6cdd29 Mon Sep 17 00:00:00 2001 From: Euklios Date: Wed, 20 Mar 2024 15:47:50 +0100 Subject: [PATCH 055/101] Add getters to FFmpegOutputBuilder and deprecate property access (#320) * Add getters to Builders and Options and deprecate property access * Make package-private fields private where unused by other classes * Update usage and documentation * Make AbstractFFmpegStreamBuilder#getMetaTags() return Immutable copy --- .../builder/AbstractFFmpegStreamBuilder.java | 183 +++++++++++++++++- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 2 +- .../ffmpeg/builder/FFmpegOutputBuilder.java | 67 +++++++ .../ffmpeg/builder/MetadataSpecifier.java | 2 +- .../bramp/ffmpeg/builder/StreamSpecifier.java | 2 +- .../java/net/bramp/ffmpeg/info/Codec.java | 10 +- .../java/net/bramp/ffmpeg/info/Format.java | 8 +- .../net/bramp/ffmpeg/modelmapper/Mapper.java | 4 +- .../ffmpeg/options/AudioEncodingOptions.java | 43 +++- .../bramp/ffmpeg/options/EncodingOptions.java | 7 +- .../ffmpeg/options/MainEncodingOptions.java | 18 ++ .../ffmpeg/options/VideoEncodingOptions.java | 54 ++++++ .../net/bramp/ffmpeg/probe/FFmpegChapter.java | 29 ++- .../bramp/ffmpeg/probe/FFmpegChapterTag.java | 4 + .../bramp/ffmpeg/probe/FFmpegDisposition.java | 56 ++++++ .../net/bramp/ffmpeg/probe/FFmpegError.java | 8 + .../net/bramp/ffmpeg/probe/FFmpegFormat.java | 57 +++++- .../bramp/ffmpeg/probe/FFmpegProbeResult.java | 5 +- .../net/bramp/ffmpeg/probe/FFmpegStream.java | 177 ++++++++++++++++- .../net/bramp/ffmpeg/progress/Progress.java | 69 ++++++- .../net/bramp/ffmpeg/FFmpegExecutorTest.java | 2 +- .../java/net/bramp/ffmpeg/FFprobeTest.java | 12 +- 22 files changed, 775 insertions(+), 44 deletions(-) diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index ea7721a5..a8b90d8e 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -53,54 +53,117 @@ * * @param A concrete class that extends from the AbstractFFmpegStreamBuilder */ +@SuppressWarnings({"DeprecatedIsStillUsed"}) public abstract class AbstractFFmpegStreamBuilder> { private static final String DEVNULL = SystemUtils.IS_OS_WINDOWS ? "NUL" : "/dev/null"; - final FFmpegBuilder parent; + protected final FFmpegBuilder parent; - /** Output filename or uri. Only one may be set */ + /* Output filename or uri. Only one may be set */ + /** @deprecated Use {@link #getFilename()} instead */ + @Deprecated public String filename; + /** @deprecated Use {@link #getUri()} instead */ + @Deprecated public URI uri; + /** @deprecated Use {@link #getFormat()} instead */ + @Deprecated public String format; + /** @deprecated Use {@link #getStartOffset()} instead */ + @Deprecated public Long startOffset; // in milliseconds + /** @deprecated Use {@link #getDuration()} instead */ + @Deprecated public Long duration; // in milliseconds + /** @deprecated Use {@link #getMetaTags()} instead */ + @Deprecated public final List meta_tags = new ArrayList<>(); + /** @deprecated Use {@link #isAudioEnabled()} instead */ + @Deprecated public boolean audio_enabled = true; + /** @deprecated Use {@link #getAudioCodec()} instead */ + @Deprecated public String audio_codec; + /** @deprecated Use {@link #getAudioChannels()} instead */ + @Deprecated public int audio_channels; + /** @deprecated Use {@link #getAudioSampleRate()} instead */ + @Deprecated public int audio_sample_rate; + /** @deprecated Use {@link #getAudioPreset()} instead */ + @Deprecated public String audio_preset; + /** @deprecated Use {@link #isVideoEnabled()} instead */ + @Deprecated public boolean video_enabled = true; + /** @deprecated Use {@link #getVideoCodec()} instead */ + @Deprecated public String video_codec; + /** @deprecated Use {@link #isVideoCopyinkf()} instead */ + @Deprecated public boolean video_copyinkf; + /** @deprecated Use {@link #getVideoFrameRate()} instead */ + @Deprecated public Fraction video_frame_rate; + /** @deprecated Use {@link #getVideoWidth()} instead */ + @Deprecated public int video_width; + /** @deprecated Use {@link #getVideoHeight()} instead */ + @Deprecated public int video_height; + /** @deprecated Use {@link #getVideoSize()} instead */ + @Deprecated public String video_size; + /** @deprecated Use {@link #getVideoMovflags()} instead */ + @Deprecated public String video_movflags; + /** @deprecated Use {@link #getVideoFrames()} instead */ + @Deprecated public Integer video_frames; + /** @deprecated Use {@link #getVideoPixelFormat()} instead */ + @Deprecated public String video_pixel_format; + /** @deprecated Use {@link #isSubtitleEnabled()} instead */ + @Deprecated public boolean subtitle_enabled = true; + /** @deprecated Use {@link #getSubtitlePreset()} instead */ + @Deprecated public String subtitle_preset; + /** @deprecated Use {@link #getSubtitleCodec()} instead */ + @Deprecated private String subtitle_codec; + /** @deprecated Use {@link #getPreset()} instead */ + @Deprecated public String preset; + /** @deprecated Use {@link #getPresetFilename()} instead */ + @Deprecated public String presetFilename; + /** @deprecated Use {@link #getExtraArgs()} instead */ + @Deprecated public final List extra_args = new ArrayList<>(); + /** @deprecated Use {@link #getStrict()} instead */ + @Deprecated public FFmpegBuilder.Strict strict = FFmpegBuilder.Strict.NORMAL; + /** @deprecated Use {@link #getTargetSize()} instead */ + @Deprecated public long targetSize = 0; // in bytes + /** @deprecated Use {@link #getPassPaddingBitrate()} instead */ + @Deprecated public long pass_padding_bitrate = 1024; // in bits per second + /** @deprecated Use {@link #isThrowWarnings()} instead */ + @Deprecated public boolean throwWarnings = true; // TODO Either delete this, or apply it consistently protected AbstractFFmpegStreamBuilder() { @@ -686,4 +749,120 @@ protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder args.add("-r", video_frame_rate.toString()); } } + + public String getFormat() { + return format; + } + + public Long getStartOffset() { + return startOffset; + } + + public Long getDuration() { + return duration; + } + + public List getMetaTags() { + return ImmutableList.copyOf(meta_tags); + } + + public boolean isAudioEnabled() { + return audio_enabled; + } + + public String getAudioCodec() { + return audio_codec; + } + + public int getAudioChannels() { + return audio_channels; + } + + public int getAudioSampleRate() { + return audio_sample_rate; + } + + public String getAudioPreset() { + return audio_preset; + } + + public boolean isVideoEnabled() { + return video_enabled; + } + + public String getVideoCodec() { + return video_codec; + } + + public boolean isVideoCopyinkf() { + return video_copyinkf; + } + + public Fraction getVideoFrameRate() { + return video_frame_rate; + } + + public int getVideoWidth() { + return video_width; + } + + public int getVideoHeight() { + return video_height; + } + + public String getVideoSize() { + return video_size; + } + + public String getVideoMovflags() { + return video_movflags; + } + + public Integer getVideoFrames() { + return video_frames; + } + + public String getVideoPixelFormat() { + return video_pixel_format; + } + + public boolean isSubtitleEnabled() { + return subtitle_enabled; + } + + public String getSubtitlePreset() { + return subtitle_preset; + } + + public String getSubtitleCodec() { + return subtitle_codec; + } + + public String getPreset() { + return preset; + } + + public String getPresetFilename() { + return presetFilename; + } + + public List getExtraArgs() { + return extra_args; + } + + public FFmpegBuilder.Strict getStrict() { + return strict; + } + + public long getTargetSize() { + return targetSize; + } + + public long getPassPaddingBitrate() { + return pass_padding_bitrate; + } + + public boolean isThrowWarnings() { + return throwWarnings; + } } diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index 3cf4913a..b80401fa 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -128,7 +128,7 @@ public FFmpegBuilder readAtNativeFrameRate() { public FFmpegBuilder addInput(FFmpegProbeResult result) { checkNotNull(result); - String filename = checkNotNull(result.format).filename; + String filename = checkNotNull(result.getFormat()).getFilename(); inputProbes.put(filename, result); return addInput(filename); } diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java index 939b05c9..08b4cd98 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java @@ -19,22 +19,45 @@ import net.bramp.ffmpeg.probe.FFmpegProbeResult; /** Builds a representation of a single output/encoding setting */ +@SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) public class FFmpegOutputBuilder extends AbstractFFmpegStreamBuilder { static final Pattern trailingZero = Pattern.compile("\\.0*$"); + /** @deprecated Use {@link #getConstantRateFactor()} instead*/ + @Deprecated public Double constantRateFactor; + /** @deprecated Use {@link #getAudioSampleFormat()} instead*/ + @Deprecated public String audio_sample_format; + /** @deprecated Use {@link #getAudioBitRate()} instead*/ + @Deprecated public long audio_bit_rate; + /** @deprecated Use {@link #getAudioQuality()} instead*/ + @Deprecated public Double audio_quality; + /** @deprecated Use {@link #getAudioBitStreamFilter()} instead*/ + @Deprecated public String audio_bit_stream_filter; + /** @deprecated Use {@link #getAudioFilter()} instead*/ + @Deprecated public String audio_filter; + /** @deprecated Use {@link #getVideoBitRate()} instead*/ + @Deprecated public long video_bit_rate; + /** @deprecated Use {@link #getVideoQuality()} instead*/ + @Deprecated public Double video_quality; + /** @deprecated Use {@link #getVideoPreset()} instead*/ + @Deprecated public String video_preset; + /** @deprecated Use {@link #getVideoFilter()} instead*/ + @Deprecated public String video_filter; + /** @deprecated Use {@link #getVideoBitStreamFilter()} instead*/ + @Deprecated public String video_bit_stream_filter; public FFmpegOutputBuilder() { @@ -356,4 +379,48 @@ protected void addAudioFlags(ImmutableList.Builder args) { protected FFmpegOutputBuilder getThis() { return this; } + + public Double getConstantRateFactor() { + return constantRateFactor; + } + + public String getAudioSampleFormat() { + return audio_sample_format; + } + + public long getAudioBitRate() { + return audio_bit_rate; + } + + public Double getAudioQuality() { + return audio_quality; + } + + public String getAudioBitStreamFilter() { + return audio_bit_stream_filter; + } + + public String getAudioFilter() { + return audio_filter; + } + + public long getVideoBitRate() { + return video_bit_rate; + } + + public Double getVideoQuality() { + return video_quality; + } + + public String getVideoPreset() { + return video_preset; + } + + public String getVideoFilter() { + return video_filter; + } + + public String getVideoBitStreamFilter() { + return video_bit_stream_filter; + } } diff --git a/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java b/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java index b9906f58..58708b42 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java +++ b/src/main/java/net/bramp/ffmpeg/builder/MetadataSpecifier.java @@ -19,7 +19,7 @@ @Immutable public class MetadataSpecifier { - final String spec; + private final String spec; private MetadataSpecifier(String spec) { this.spec = checkNotNull(spec); diff --git a/src/main/java/net/bramp/ffmpeg/builder/StreamSpecifier.java b/src/main/java/net/bramp/ffmpeg/builder/StreamSpecifier.java index 5e3d0f9b..40482d86 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/StreamSpecifier.java +++ b/src/main/java/net/bramp/ffmpeg/builder/StreamSpecifier.java @@ -6,7 +6,7 @@ /** https://ffmpeg.org/ffmpeg.html#Stream-specifiers */ public class StreamSpecifier { - final String spec; + private final String spec; private StreamSpecifier(String spec) { this.spec = spec; diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index c94a0bc2..6f41f45a 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -13,17 +13,17 @@ */ @Immutable public class Codec { - final String name; - final String longName; + private final String name; + private final String longName; /** Can I decode with this codec */ - final boolean canDecode; + private final boolean canDecode; /** Can I encode with this codec */ - final boolean canEncode; + private final boolean canEncode; /** What type of codec is this */ - final CodecType type; + private final CodecType type; /** * @param name short codec name diff --git a/src/main/java/net/bramp/ffmpeg/info/Format.java b/src/main/java/net/bramp/ffmpeg/info/Format.java index 64bbd82a..4b51ac74 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Format.java +++ b/src/main/java/net/bramp/ffmpeg/info/Format.java @@ -12,11 +12,11 @@ */ @Immutable public class Format { - final String name; - final String longName; + private final String name; + private final String longName; - final boolean canDemux; - final boolean canMux; + private final boolean canDemux; + private final boolean canMux; /** * @param name short format name diff --git a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java index f9d77336..6d7c5ecb 100644 --- a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java +++ b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java @@ -91,10 +91,10 @@ public static > void map( EncodingOptions opts, AbstractFFmpegStreamBuilder dest) { map(opts.getMain(), dest); - if (opts.getAudio().enabled) { + if (opts.getAudio().isEnabled()) { map(opts.getAudio(), dest); } - if (opts.getVideo().enabled) { + if (opts.getVideo().isEnabled()) { map(opts.getVideo(), dest); } } diff --git a/src/main/java/net/bramp/ffmpeg/options/AudioEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/AudioEncodingOptions.java index 5bfdea5a..f75c5067 100644 --- a/src/main/java/net/bramp/ffmpeg/options/AudioEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/AudioEncodingOptions.java @@ -8,13 +8,26 @@ * @author bramp */ public class AudioEncodingOptions { - + /** @deprecated Use {@link #isEnabled()} instead */ + @Deprecated public final boolean enabled; + /** @deprecated Use {@link #getCodec()} instead */ + @Deprecated public final String codec; + /** @deprecated Use {@link #getChannels()} instead */ + @Deprecated public final int channels; + /** @deprecated Use {@link #getSampleRate()} instead */ + @Deprecated public final int sample_rate; + /** @deprecated Use {@link #getSampleFormat()} instead */ + @Deprecated public final String sample_format; + /** @deprecated Use {@link #getBitRate()} instead */ + @Deprecated public final long bit_rate; + /** @deprecated Use {@link #getQuality()} instead */ + @Deprecated public final Double quality; @ConstructorProperties({ @@ -42,4 +55,32 @@ public AudioEncodingOptions( this.bit_rate = bit_rate; this.quality = quality; } + + public boolean isEnabled() { + return enabled; + } + + public String getCodec() { + return codec; + } + + public int getChannels() { + return channels; + } + + public int getSampleRate() { + return sample_rate; + } + + public String getSampleFormat() { + return sample_format; + } + + public long getBitRate() { + return bit_rate; + } + + public Double getQuality() { + return quality; + } } diff --git a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java index b93f4f47..b25ba1b2 100644 --- a/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/EncodingOptions.java @@ -8,9 +8,14 @@ * @author bramp */ public class EncodingOptions { - + /** @deprecated Use {@link #getMain()} instead */ + @Deprecated public final MainEncodingOptions main; + /** @deprecated Use {@link #getAudio()} instead */ + @Deprecated public final AudioEncodingOptions audio; + /** @deprecated Use {@link #getVideo()} instead */ + @Deprecated public final VideoEncodingOptions video; @ConstructorProperties({"main", "audio", "video"}) diff --git a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java index 86547267..a72d8aec 100644 --- a/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/MainEncodingOptions.java @@ -8,8 +8,14 @@ * @author bramp */ public class MainEncodingOptions { + /** @deprecated Use {@link #getFormat()} instead */ + @Deprecated public final String format; + /** @deprecated Use {@link #getStartOffset()} instead */ + @Deprecated public final Long startOffset; + /** @deprecated Use {@link #getDuration()} instead */ + @Deprecated public final Long duration; @ConstructorProperties({"format", "startOffset", "duration"}) @@ -18,4 +24,16 @@ public MainEncodingOptions(String format, Long startOffset, Long duration) { this.startOffset = startOffset; this.duration = duration; } + + public String getFormat() { + return format; + } + + public Long getStartOffset() { + return startOffset; + } + + public Long getDuration() { + return duration; + } } diff --git a/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java b/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java index 2176104e..21942850 100644 --- a/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java +++ b/src/main/java/net/bramp/ffmpeg/options/VideoEncodingOptions.java @@ -9,14 +9,32 @@ * @author bramp */ public class VideoEncodingOptions { + /** @deprecated Use {@link #isEnabled()} instead */ + @Deprecated public final boolean enabled; + /** @deprecated Use {@link #getCodec()} instead */ + @Deprecated public final String codec; + /** @deprecated Use {@link #getFrameRate()} instead */ + @Deprecated public final Fraction frame_rate; + /** @deprecated Use {@link #getWidth()} instead */ + @Deprecated public final int width; + /** @deprecated Use {@link #getHeight()} instead */ + @Deprecated public final int height; + /** @deprecated Use {@link #getBitRate()} instead */ + @Deprecated public final long bit_rate; + /** @deprecated Use {@link #getFrames()} instead */ + @Deprecated public final Integer frames; + /** @deprecated Use {@link #getFilter()} instead */ + @Deprecated public final String filter; + /** @deprecated Use {@link #getPreset()} instead */ + @Deprecated public final String preset; @ConstructorProperties({ @@ -50,4 +68,40 @@ public VideoEncodingOptions( this.filter = filter; this.preset = preset; } + + public boolean isEnabled() { + return enabled; + } + + public String getCodec() { + return codec; + } + + public Fraction getFrameRate() { + return frame_rate; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public long getBitRate() { + return bit_rate; + } + + public Integer getFrames() { + return frames; + } + + public String getFilter() { + return filter; + } + + public String getPreset() { + return preset; + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java index ba658616..b3d76517 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapter.java @@ -6,7 +6,6 @@ value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, justification = "POJO objects where the fields are populated by gson") public class FFmpegChapter { - public long id; public String time_base; public long start; @@ -14,4 +13,32 @@ public class FFmpegChapter { public long end; public String end_time; public FFmpegChapterTag tags; + + public long getId() { + return id; + } + + public String getTimeBase() { + return time_base; + } + + public long getStart() { + return start; + } + + public String getStartTime() { + return start_time; + } + + public long getEnd() { + return end; + } + + public String getEndTime() { + return end_time; + } + + public FFmpegChapterTag getTags() { + return tags; + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java index 3da69970..78d6e925 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegChapterTag.java @@ -7,4 +7,8 @@ justification = "POJO objects where the fields are populated by gson") public class FFmpegChapterTag { public String title; + + public String getTitle() { + return title; + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java index 215668e4..96238ba7 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegDisposition.java @@ -21,4 +21,60 @@ public class FFmpegDisposition { public boolean captions; public boolean descriptions; public boolean metadata; + + public boolean isDefault() { + return _default; + } + + public boolean isDub() { + return dub; + } + + public boolean isOriginal() { + return original; + } + + public boolean isComment() { + return comment; + } + + public boolean isLyrics() { + return lyrics; + } + + public boolean isKaraoke() { + return karaoke; + } + + public boolean isForced() { + return forced; + } + + public boolean isHearingImpaired() { + return hearing_impaired; + } + + public boolean isVisualImpaired() { + return visual_impaired; + } + + public boolean isCleanEffects() { + return clean_effects; + } + + public boolean isAttachedPic() { + return attached_pic; + } + + public boolean isCaptions() { + return captions; + } + + public boolean isDescriptions() { + return descriptions; + } + + public boolean isMetadata() { + return metadata; + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java index a20cce83..13b49c99 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegError.java @@ -8,4 +8,12 @@ public class FFmpegError { public int code; public String string; + + public int getCode() { + return code; + } + + public String getString() { + return string; + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java index 0cdc0bb3..2d153a54 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegFormat.java @@ -1,5 +1,6 @@ package net.bramp.ffmpeg.probe; +import com.google.common.collect.ImmutableMap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Map; @@ -15,17 +16,67 @@ public class FFmpegFormat { public String format_long_name; public double start_time; - /** Duration in seconds */ // TODO Change this to java.time.Duration + /** + * Duration in seconds + */ public double duration; - /** File size in bytes */ + /** + * File size in bytes + */ public long size; - /** Bitrate */ + /** + * Bitrate + */ public long bit_rate; public int probe_score; public Map tags; + + public String getFilename() { + return filename; + } + + public int getNbStreams() { + return nb_streams; + } + + public int getNbPrograms() { + return nb_programs; + } + + public String getFormatName() { + return format_name; + } + + public String getFormatLongName() { + return format_long_name; + } + + public double getStartTime() { + return start_time; + } + + public double getDuration() { + return duration; + } + + public long getSize() { + return size; + } + + public long getBitRate() { + return bit_rate; + } + + public int getProbeScore() { + return probe_score; + } + + public Map getTags() { + return ImmutableMap.copyOf(tags); + } } diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java index 08a5d459..ccf3ead6 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegProbeResult.java @@ -16,8 +16,9 @@ public class FFmpegProbeResult { public FFmpegFormat format; public List streams; public List chapters; - public List packets; - public List frames; + + private List packets; + private List frames; public List packets_and_frames; public FFmpegError getError() { diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index 84891842..a2785837 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -1,6 +1,10 @@ package net.bramp.ffmpeg.probe; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import java.util.List; import java.util.Map; import net.bramp.ffmpeg.shared.CodecType; @@ -10,8 +14,6 @@ value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"}, justification = "POJO objects where the fields are populated by gson") public class FFmpegStream { - - public int index; public String codec_name; public String codec_long_name; @@ -22,7 +24,8 @@ public class FFmpegStream { public String codec_tag_string; public String codec_tag; - public int width, height; + public int width; + public int height; public int has_b_frames; @@ -59,13 +62,179 @@ public class FFmpegStream { public FFmpegDisposition disposition; + // TODO: Make Map immutable public Map tags; + + // TODO: Convert array to immutable List public SideData[] side_data_list; - public static class SideData { + public int getIndex() { + return index; + } + + public String getCodecName() { + return codec_name; + } + + public String getCodecLongName() { + return codec_long_name; + } + + public String getProfile() { + return profile; + } + + public CodecType getCodecType() { + return codec_type; + } + + public Fraction getCodecTimeBase() { + return codec_time_base; + } + + public String getCodecTagString() { + return codec_tag_string; + } + + public String getCodecTag() { + return codec_tag; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getHasBFrames() { + return has_b_frames; + } + + public String getSampleAspectRatio() { + return sample_aspect_ratio; + } + + public String getDisplayAspectRatio() { + return display_aspect_ratio; + } + + public String getPixFmt() { + return pix_fmt; + } + + public int getLevel() { + return level; + } + + public String getChromaLocation() { + return chroma_location; + } + + public int getRefs() { + return refs; + } + + public String getIsAvc() { + return is_avc; + } + + public String getNalLengthSize() { + return nal_length_size; + } + public Fraction getRFrameRate() { + return r_frame_rate; + } + + public Fraction getAvgFrameRate() { + return avg_frame_rate; + } + + public Fraction getTimeBase() { + return time_base; + } + + public long getStartPts() { + return start_pts; + } + + public double getStartTime() { + return start_time; + } + + public long getDurationTs() { + return duration_ts; + } + + public double getDuration() { + return duration; + } + + public long getBitRate() { + return bit_rate; + } + + public long getMaxBitRate() { + return max_bit_rate; + } + + public int getBitsPerRawSample() { + return bits_per_raw_sample; + } + + public int getBitsPerSample() { + return bits_per_sample; + } + + public long getNbFrames() { + return nb_frames; + } + + public String getSampleFmt() { + return sample_fmt; + } + + public int getSampleRate() { + return sample_rate; + } + + public int getChannels() { + return channels; + } + + public String getChannelLayout() { + return channel_layout; + } + + public FFmpegDisposition getDisposition() { + return disposition; + } + + public Map getTags() { + return ImmutableMap.copyOf(tags); + } + + public List getSideDataList() { + return ImmutableList.copyOf(side_data_list); + } + + public static class SideData { public String side_data_type; public String displaymatrix; public int rotation; + + public String getSideDataType() { + return side_data_type; + } + + public String getDisplaymatrix() { + return displaymatrix; + } + + public int getRotation() { + return rotation; + } } } diff --git a/src/main/java/net/bramp/ffmpeg/progress/Progress.java b/src/main/java/net/bramp/ffmpeg/progress/Progress.java index e97e133c..dc31ad7b 100644 --- a/src/main/java/net/bramp/ffmpeg/progress/Progress.java +++ b/src/main/java/net/bramp/ffmpeg/progress/Progress.java @@ -13,7 +13,6 @@ // TODO Change to be immutable public class Progress { - static final Logger LOG = LoggerFactory.getLogger(Progress.class); public enum Status { @@ -49,31 +48,47 @@ public static Status of(String status) { } } - /** The frame number being processed */ + /** + * The frame number being processed + */ public long frame = 0; - /** The current frames per second */ + /** + * The current frames per second + */ public Fraction fps = Fraction.ZERO; - /** Current bitrate */ + /** + * Current bitrate + */ public long bitrate = 0; - /** Output file size (in bytes) */ + /** + * Output file size (in bytes) + */ public long total_size = 0; - /** Output time (in nanoseconds) */ // TODO Change this to a java.time.Duration + /** + * Output time (in nanoseconds) + */ public long out_time_ns = 0; public long dup_frames = 0; - /** Number of frames dropped */ + /** + * Number of frames dropped + */ public long drop_frames = 0; - /** Speed of transcoding. 1 means realtime, 2 means twice realtime. */ + /** + * Speed of transcoding. 1 means realtime, 2 means twice realtime. + */ public float speed = 0; - /** Current status, can be one of "continue", or "end" */ + /** + * Current status, can be one of "continue", or "end" + */ public Status status = null; public Progress() { @@ -242,4 +257,40 @@ public String toString() { .add("status", status) .toString(); } + + public long getFrame() { + return frame; + } + + public Fraction getFps() { + return fps; + } + + public long getBitrate() { + return bitrate; + } + + public long getTotalSize() { + return total_size; + } + + public long getOutTimeNs() { + return out_time_ns; + } + + public long getDupFrames() { + return dup_frames; + } + + public long getDropFrames() { + return drop_frames; + } + + public float getSpeed() { + return speed; + } + + public Status getStatus() { + return status; + } } diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java index 31106c62..8b996283 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java @@ -237,7 +237,7 @@ public void testProgress() throws InterruptedException, ExecutionException, IOEx } @Test - public void testIssue112() throws IOException { + public void testIssue112() { FFmpegBuilder builder = new FFmpegBuilder() .setInput(Samples.testscreen_jpg) diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index c040325f..c01ce529 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -115,7 +115,7 @@ public void testProbeBookWithChapters() throws IOException { assertThat(firstChapter.start_time, is("0.000000")); assertThat(firstChapter.end, is(11951309L)); assertThat(firstChapter.end_time, is("271.004739")); - assertThat(firstChapter.tags.title, is("01 - Sammy Jay Makes a Fuss")); + assertThat(firstChapter.getTags().title, is("01 - Sammy Jay Makes a Fuss")); FFmpegChapter lastChapter = info.getChapters().get(info.getChapters().size() - 1); assertThat(lastChapter.time_base, is("1/44100")); @@ -123,7 +123,7 @@ public void testProbeBookWithChapters() throws IOException { assertThat(lastChapter.start_time, is("5394.008844")); assertThat(lastChapter.end, is(248628224L)); assertThat(lastChapter.end_time, is("5637.828209")); - assertThat(lastChapter.tags.title, is("24 - Chatterer Has His Turn to Laugh")); + assertThat(lastChapter.getTags().title, is("24 - Chatterer Has His Turn to Laugh")); } @Test @@ -400,13 +400,13 @@ public void testProbeSideDataList() throws IOException { FFmpegProbeResult info = ffprobe.probe(Samples.side_data_list); // Check edge case with a time larger than an integer - assertThat(info.getStreams().get(0).side_data_list.length, is(1)); - assertThat(info.getStreams().get(0).side_data_list[0].side_data_type, is("Display Matrix")); + assertThat(info.getStreams().get(0).getSideDataList().size(), is(1)); + assertThat(info.getStreams().get(0).getSideDataList().get(0).side_data_type, is("Display Matrix")); assertThat( - info.getStreams().get(0).side_data_list[0].displaymatrix, + info.getStreams().get(0).getSideDataList().get(0).displaymatrix, is( "\n00000000: 0 -65536 0\n00000001: 65536 0 0\n00000002: 0 0 1073741824\n")); - assertThat(info.getStreams().get(0).side_data_list[0].rotation, is(90)); + assertThat(info.getStreams().get(0).getSideDataList().get(0).rotation, is(90)); } @Test From 4569a57337628097930d89c4b0c0667d85bf4f89 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 20 Mar 2024 10:38:30 -0700 Subject: [PATCH 056/101] Enable debug logging on github action To help debug a issue with the ffmpeg fetch. --- .github/workflows/maven.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 56478613..1db77236 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -12,6 +12,9 @@ on: jobs: build: runs-on: ubuntu-latest + # Enable debugging to help resolve: + # https://github.com/federicocarboni/setup-ffmpeg/issues/19 + environment: debug strategy: matrix: # Long term supported versions From 7d17f11175a52e663e76f5d732e207f0641e860a Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Wed, 20 Mar 2024 10:39:17 -0700 Subject: [PATCH 057/101] Add support for parsing all the codec flags * Add support for parsing all the codec flags, e.g IntraFrameOnly, Lossy and Lossless. --- .../java/net/bramp/ffmpeg/info/Codec.java | 59 ++++++++++++- .../java/net/bramp/ffmpeg/info/CodecTest.java | 82 +++++++++++++++++++ 2 files changed, 137 insertions(+), 4 deletions(-) create mode 100644 src/test/java/net/bramp/ffmpeg/info/CodecTest.java diff --git a/src/main/java/net/bramp/ffmpeg/info/Codec.java b/src/main/java/net/bramp/ffmpeg/info/Codec.java index 6f41f45a..3b244c02 100644 --- a/src/main/java/net/bramp/ffmpeg/info/Codec.java +++ b/src/main/java/net/bramp/ffmpeg/info/Codec.java @@ -25,6 +25,15 @@ public class Codec { /** What type of codec is this */ private final CodecType type; + /** Intra frame only codec */ + final boolean intraFrameOnly; + + /** Codec supports lossy compression */ + final boolean lossyCompression; + + /** Codeco supports lessless compression */ + final boolean losslessCompression; + /** * @param name short codec name * @param longName long codec name @@ -35,6 +44,8 @@ public class Codec { * ..V... = Video codec * ..A... = Audio codec * ..S... = Subtitle codec + * ..D... = Data codec + * ..T... = Attachment codec * ...I.. = Intra frame-only codec * ....L. = Lossy compression * .....S = Lossless compression @@ -45,9 +56,19 @@ public Codec(String name, String longName, String flags) { this.longName = Preconditions.checkNotNull(longName).trim(); Preconditions.checkNotNull(flags); - Preconditions.checkArgument(flags.length() == 6, "Format flags is invalid '%s'", flags); - this.canDecode = flags.charAt(0) == 'D'; - this.canEncode = flags.charAt(1) == 'E'; + Preconditions.checkArgument(flags.length() == 6, "Codec flags is invalid '%s'", flags); + + switch (flags.charAt(0)) { + case 'D': this.canDecode = true; break; + case '.': this.canDecode = false; break; + default: throw new IllegalArgumentException("Invalid decoding value '" + flags.charAt(0) + "'"); + } + + switch (flags.charAt(1)) { + case 'E': this.canEncode = true; break; + case '.': this.canEncode = false; break; + default: throw new IllegalArgumentException("Invalid encoding value '" + flags.charAt(1) + "'"); + } switch (flags.charAt(2)) { case 'V': @@ -69,7 +90,24 @@ public Codec(String name, String longName, String flags) { throw new IllegalArgumentException("Invalid codec type '" + flags.charAt(2) + "'"); } - // TODO There are more flags to parse + switch (flags.charAt(3)) { + case 'I': this.intraFrameOnly = true; break; + case '.': this.intraFrameOnly = false; break; + default: throw new IllegalArgumentException("Invalid encoding value '" + flags.charAt(3) + "'"); + } + + switch (flags.charAt(4)) { + case 'L': this.lossyCompression = true; break; + case '.': this.lossyCompression = false; break; + default: throw new IllegalArgumentException("Invalid lossy compression value '" + flags.charAt(4) + "'"); + } + + switch (flags.charAt(5)) { + case 'S': this.losslessCompression = true; break; + case '.': this.losslessCompression = false; break; + default: throw new IllegalArgumentException("Invalid lossless compression value '" + flags.charAt(5) + "'"); + } + } @Override @@ -106,4 +144,17 @@ public boolean getCanEncode() { public CodecType getType() { return type; } + + public boolean isIntraFrameOnly() { + return intraFrameOnly; + } + + public boolean supportsLossyCompression() { + return lossyCompression; + } + + public boolean supportsLosslessCompression() { + return losslessCompression; + } + } diff --git a/src/test/java/net/bramp/ffmpeg/info/CodecTest.java b/src/test/java/net/bramp/ffmpeg/info/CodecTest.java new file mode 100644 index 00000000..428087c9 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/info/CodecTest.java @@ -0,0 +1,82 @@ +package net.bramp.ffmpeg.info; + +import static org.hamcrest.Matchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; + +import net.bramp.ffmpeg.shared.CodecType; + +public class CodecTest { + @Test + public void testCodecConstructor() { + Codec c1 = new Codec("012v", "Uncompressed 4:2:2 10-bit", "D.VI.S"); + assertThat(c1.getName(), is("012v")); + assertThat(c1.getLongName(), is("Uncompressed 4:2:2 10-bit")); + assertThat(c1.getCanDecode(), is(true)); + assertThat(c1.getCanEncode(), is(false)); + assertThat(c1.getType(), is(CodecType.VIDEO)); + assertThat(c1.isIntraFrameOnly(), is(true)); + assertThat(c1.supportsLossyCompression(), is(false)); + assertThat(c1.losslessCompression, is(true)); + + Codec c2 = new Codec("4xm", "4X Movie", "D.V.L."); + assertThat(c2.getName(), is("4xm")); + assertThat(c2.getLongName(), is("4X Movie")); + assertThat(c2.getCanDecode(), is(true)); + assertThat(c2.getCanEncode(), is(false)); + assertThat(c2.getType(), is(CodecType.VIDEO)); + assertThat(c2.isIntraFrameOnly(), is(false)); + assertThat(c2.supportsLossyCompression(), is(true)); + assertThat(c2.supportsLosslessCompression(), is(false)); + + Codec c3 = new Codec("alias_pix", "Alias/Wavefront PIX image", "DEVI.S"); + assertThat(c3.getName(), is("alias_pix")); + assertThat(c3.getLongName(), is("Alias/Wavefront PIX image")); + assertThat(c3.getCanDecode(), is(true)); + assertThat(c3.getCanEncode(), is(true)); + assertThat(c3.getType(), is(CodecType.VIDEO)); + assertThat(c3.isIntraFrameOnly(), is(true)); + assertThat(c3.supportsLossyCompression(), is(false)); + assertThat(c3.supportsLosslessCompression(), is(true)); + + Codec c4 = new Codec("binkaudio_rdft", "Bink Audio (RDFT)", "D.AIL."); + assertThat(c4.getType(), is(CodecType.AUDIO)); + + Codec c6 = new Codec("mov_text", "MOV text", "DES..."); + assertThat(c6.getType(), is(CodecType.SUBTITLE)); + + Codec c7 = new Codec("bin_data", "binary data", "..D..."); + assertThat(c7.getType(), is(CodecType.DATA)); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadDecodeValue() { + new Codec("test", "test", "X.V..."); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadEncodeValue() { + new Codec("test", "test", ".XV..."); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadCodecValue() { + new Codec("test", "test", "..X..."); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadIntraFrameOnlyValue() { + new Codec("test", "test", "..VX.."); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadLossyValue() { + new Codec("test", "test", "..V.X."); + } + + @Test(expected = IllegalArgumentException.class) + public void testBadLosslessValue() { + new Codec("test", "test", "..V..X"); + } +} From 6ecaef8a875562761efa94e7f85c31afa7381399 Mon Sep 17 00:00:00 2001 From: Sihwan Kim Date: Fri, 5 Apr 2024 02:18:34 +0900 Subject: [PATCH 058/101] Add enum for video and audio codecs. (#321) add enum for common video and audio codecs to make it easier for developers to access codecs. --- .../net/bramp/ffmpeg/builder/AudioCodec.java | 425 +++++++++++++ .../net/bramp/ffmpeg/builder/VideoCodec.java | 559 ++++++++++++++++++ .../ffmpeg/builder/FFmpegBuilderTest.java | 23 + tools/codec_enum_generator.py | 74 +++ 4 files changed, 1081 insertions(+) create mode 100644 src/main/java/net/bramp/ffmpeg/builder/AudioCodec.java create mode 100644 src/main/java/net/bramp/ffmpeg/builder/VideoCodec.java create mode 100644 tools/codec_enum_generator.py diff --git a/src/main/java/net/bramp/ffmpeg/builder/AudioCodec.java b/src/main/java/net/bramp/ffmpeg/builder/AudioCodec.java new file mode 100644 index 00000000..c83e5e5a --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/AudioCodec.java @@ -0,0 +1,425 @@ +package net.bramp.ffmpeg.builder; +/**The available codecs may vary depending on the version of FFmpeg. + *
    + * you can get a list of available codecs through use {@link net.bramp.ffmpeg.FFmpeg#codecs()}. + * + * @see net.bramp.ffmpeg.FFmpeg#codecs() + * @author van1164 + * */ +public class AudioCodec { + + /**4GV (Fourth Generation Vocoder)*/ + public static final String GV = "4gv"; + /**8SVX exponential*/ + public static final String SVX_EXP = "8svx_exp"; + /**8SVX fibonacci*/ + public static final String SVX_FIB = "8svx_fib"; + /**AAC (Advanced Audio Coding) (decoders: aac aac_fixed) (encoders: aac aac_mf)*/ + public static final String AAC = "aac"; + /**AAC LATM (Advanced Audio Coding LATM syntax)*/ + public static final String AAC_LATM = "aac_latm"; + /**ATSC A/52A (AC-3) (decoders: ac3 ac3_fixed) (encoders: ac3 ac3_fixed ac3_mf)*/ + public static final String AC3 = "ac3"; + /**AC-4*/ + public static final String AC4 = "ac4"; + /**Sipro ACELP.KELVIN*/ + public static final String ACELP_KELVIN = "acelp.kelvin"; + /**ADPCM 4X Movie*/ + public static final String ADPCM_4XM = "adpcm_4xm"; + /**SEGA CRI ADX ADPCM*/ + public static final String ADPCM_ADX = "adpcm_adx"; + /**ADPCM Nintendo Gamecube AFC*/ + public static final String ADPCM_AFC = "adpcm_afc"; + /**ADPCM AmuseGraphics Movie AGM*/ + public static final String ADPCM_AGM = "adpcm_agm"; + /**ADPCM Yamaha AICA*/ + public static final String ADPCM_AICA = "adpcm_aica"; + /**ADPCM Argonaut Games*/ + public static final String ADPCM_ARGO = "adpcm_argo"; + /**ADPCM Creative Technology*/ + public static final String ADPCM_CT = "adpcm_ct"; + /**ADPCM Nintendo Gamecube DTK*/ + public static final String ADPCM_DTK = "adpcm_dtk"; + /**ADPCM Electronic Arts*/ + public static final String ADPCM_EA = "adpcm_ea"; + /**ADPCM Electronic Arts Maxis CDROM XA*/ + public static final String ADPCM_EA_MAXIS_XA = "adpcm_ea_maxis_xa"; + /**ADPCM Electronic Arts R1*/ + public static final String ADPCM_EA_R1 = "adpcm_ea_r1"; + /**ADPCM Electronic Arts R2*/ + public static final String ADPCM_EA_R2 = "adpcm_ea_r2"; + /**ADPCM Electronic Arts R3*/ + public static final String ADPCM_EA_R3 = "adpcm_ea_r3"; + /**ADPCM Electronic Arts XAS*/ + public static final String ADPCM_EA_XAS = "adpcm_ea_xas"; + /**G.722 ADPCM (decoders: g722) (encoders: g722)*/ + public static final String ADPCM_G722 = "adpcm_g722"; + /**G.726 ADPCM (decoders: g726) (encoders: g726)*/ + public static final String ADPCM_G726 = "adpcm_g726"; + /**G.726 ADPCM little-endian (decoders: g726le) (encoders: g726le)*/ + public static final String ADPCM_G726LE = "adpcm_g726le"; + /**ADPCM IMA Acorn Replay*/ + public static final String ADPCM_IMA_ACORN = "adpcm_ima_acorn"; + /**ADPCM IMA High Voltage Software ALP*/ + public static final String ADPCM_IMA_ALP = "adpcm_ima_alp"; + /**ADPCM IMA AMV*/ + public static final String ADPCM_IMA_AMV = "adpcm_ima_amv"; + /**ADPCM IMA CRYO APC*/ + public static final String ADPCM_IMA_APC = "adpcm_ima_apc"; + /**ADPCM IMA Ubisoft APM*/ + public static final String ADPCM_IMA_APM = "adpcm_ima_apm"; + /**ADPCM IMA Cunning Developments*/ + public static final String ADPCM_IMA_CUNNING = "adpcm_ima_cunning"; + /**ADPCM IMA Eurocom DAT4*/ + public static final String ADPCM_IMA_DAT4 = "adpcm_ima_dat4"; + /**ADPCM IMA Duck DK3*/ + public static final String ADPCM_IMA_DK3 = "adpcm_ima_dk3"; + /**ADPCM IMA Duck DK4*/ + public static final String ADPCM_IMA_DK4 = "adpcm_ima_dk4"; + /**ADPCM IMA Electronic Arts EACS*/ + public static final String ADPCM_IMA_EA_EACS = "adpcm_ima_ea_eacs"; + /**ADPCM IMA Electronic Arts SEAD*/ + public static final String ADPCM_IMA_EA_SEAD = "adpcm_ima_ea_sead"; + /**ADPCM IMA Funcom ISS*/ + public static final String ADPCM_IMA_ISS = "adpcm_ima_iss"; + /**ADPCM IMA MobiClip MOFLEX*/ + public static final String ADPCM_IMA_MOFLEX = "adpcm_ima_moflex"; + /**ADPCM IMA Capcom's MT Framework*/ + public static final String ADPCM_IMA_MTF = "adpcm_ima_mtf"; + /**ADPCM IMA Dialogic OKI*/ + public static final String ADPCM_IMA_OKI = "adpcm_ima_oki"; + /**ADPCM IMA QuickTime*/ + public static final String ADPCM_IMA_QT = "adpcm_ima_qt"; + /**ADPCM IMA Radical*/ + public static final String ADPCM_IMA_RAD = "adpcm_ima_rad"; + /**ADPCM IMA Loki SDL MJPEG*/ + public static final String ADPCM_IMA_SMJPEG = "adpcm_ima_smjpeg"; + /**ADPCM IMA Simon & Schuster Interactive*/ + public static final String ADPCM_IMA_SSI = "adpcm_ima_ssi"; + /**ADPCM IMA WAV*/ + public static final String ADPCM_IMA_WAV = "adpcm_ima_wav"; + /**ADPCM IMA Westwood*/ + public static final String ADPCM_IMA_WS = "adpcm_ima_ws"; + /**ADPCM Microsoft*/ + public static final String ADPCM_MS = "adpcm_ms"; + /**ADPCM MTAF*/ + public static final String ADPCM_MTAF = "adpcm_mtaf"; + /**ADPCM Playstation*/ + public static final String ADPCM_PSX = "adpcm_psx"; + /**ADPCM Sound Blaster Pro 2-bit*/ + public static final String ADPCM_SBPRO_2 = "adpcm_sbpro_2"; + /**ADPCM Sound Blaster Pro 2.6-bit*/ + public static final String ADPCM_SBPRO_3 = "adpcm_sbpro_3"; + /**ADPCM Sound Blaster Pro 4-bit*/ + public static final String ADPCM_SBPRO_4 = "adpcm_sbpro_4"; + /**ADPCM Shockwave Flash*/ + public static final String ADPCM_SWF = "adpcm_swf"; + /**ADPCM Nintendo THP*/ + public static final String ADPCM_THP = "adpcm_thp"; + /**ADPCM Nintendo THP (Little-Endian)*/ + public static final String ADPCM_THP_LE = "adpcm_thp_le"; + /**LucasArts VIMA audio*/ + public static final String ADPCM_VIMA = "adpcm_vima"; + /**ADPCM CDROM XA*/ + public static final String ADPCM_XA = "adpcm_xa"; + /**ADPCM Konami XMD*/ + public static final String ADPCM_XMD = "adpcm_xmd"; + /**ADPCM Yamaha*/ + public static final String ADPCM_YAMAHA = "adpcm_yamaha"; + /**ADPCM Zork*/ + public static final String ADPCM_ZORK = "adpcm_zork"; + /**ALAC (Apple Lossless Audio Codec)*/ + public static final String ALAC = "alac"; + /**AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb) (encoders: libopencore_amrnb)*/ + public static final String AMR_NB = "amr_nb"; + /**AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb) (encoders: libvo_amrwbenc)*/ + public static final String AMR_WB = "amr_wb"; + /**Null audio codec*/ + public static final String ANULL = "anull"; + /**Marian's A-pac audio*/ + public static final String APAC = "apac"; + /**Monkey's Audio*/ + public static final String APE = "ape"; + /**aptX (Audio Processing Technology for Bluetooth)*/ + public static final String APTX = "aptx"; + /**aptX HD (Audio Processing Technology for Bluetooth)*/ + public static final String APTX_HD = "aptx_hd"; + /**ATRAC1 (Adaptive TRansform Acoustic Coding)*/ + public static final String ATRAC1 = "atrac1"; + /**ATRAC3 (Adaptive TRansform Acoustic Coding 3)*/ + public static final String ATRAC3 = "atrac3"; + /**ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless)*/ + public static final String ATRAC3AL = "atrac3al"; + /**ATRAC3+ (Adaptive TRansform Acoustic Coding 3+) (decoders: atrac3plus)*/ + public static final String ATRAC3P = "atrac3p"; + /**ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless) (decoders: atrac3plusal)*/ + public static final String ATRAC3PAL = "atrac3pal"; + /**ATRAC9 (Adaptive TRansform Acoustic Coding 9)*/ + public static final String ATRAC9 = "atrac9"; + /**On2 Audio for Video Codec (decoders: on2avc)*/ + public static final String AVC = "avc"; + /**Bink Audio (DCT)*/ + public static final String BINKAUDIO_DCT = "binkaudio_dct"; + /**Bink Audio (RDFT)*/ + public static final String BINKAUDIO_RDFT = "binkaudio_rdft"; + /**Discworld II BMV audio*/ + public static final String BMV_AUDIO = "bmv_audio"; + /**Bonk audio*/ + public static final String BONK = "bonk"; + /**DPCM Cuberoot-Delta-Exact*/ + public static final String CBD2_DPCM = "cbd2_dpcm"; + /**Constrained Energy Lapped Transform (CELT)*/ + public static final String CELT = "celt"; + /**codec2 (very low bitrate speech codec)*/ + public static final String CODEC2 = "codec2"; + /**RFC 3389 Comfort Noise*/ + public static final String COMFORTNOISE = "comfortnoise"; + /**Cook / Cooker / Gecko (RealAudio G2)*/ + public static final String COOK = "cook"; + /**DPCM Xilam DERF*/ + public static final String DERF_DPCM = "derf_dpcm"; + /**DFPWM (Dynamic Filter Pulse Width Modulation)*/ + public static final String DFPWM = "dfpwm"; + /**Dolby E*/ + public static final String DOLBY_E = "dolby_e"; + /**DSD (Direct Stream Digital), least significant bit first*/ + public static final String DSD_LSBF = "dsd_lsbf"; + /**DSD (Direct Stream Digital), least significant bit first, planar*/ + public static final String DSD_LSBF_PLANAR = "dsd_lsbf_planar"; + /**DSD (Direct Stream Digital), most significant bit first*/ + public static final String DSD_MSBF = "dsd_msbf"; + /**DSD (Direct Stream Digital), most significant bit first, planar*/ + public static final String DSD_MSBF_PLANAR = "dsd_msbf_planar"; + /**Delphine Software International CIN audio*/ + public static final String DSICINAUDIO = "dsicinaudio"; + /**Digital Speech Standard - Standard Play mode (DSS SP)*/ + public static final String DSS_SP = "dss_sp"; + /**DST (Direct Stream Transfer)*/ + public static final String DST = "dst"; + /**DCA (DTS Coherent Acoustics) (decoders: dca) (encoders: dca)*/ + public static final String DTS = "dts"; + /**DV audio*/ + public static final String DVAUDIO = "dvaudio"; + /**ATSC A/52B (AC-3, E-AC-3)*/ + public static final String EAC3 = "eac3"; + /**EVRC (Enhanced Variable Rate Codec)*/ + public static final String EVRC = "evrc"; + /**MobiClip FastAudio*/ + public static final String FASTAUDIO = "fastaudio"; + /**FLAC (Free Lossless Audio Codec)*/ + public static final String FLAC = "flac"; + /**FTR Voice*/ + public static final String FTR = "ftr"; + /**G.723.1*/ + public static final String G723_1 = "g723_1"; + /**G.729*/ + public static final String G729 = "g729"; + /**DPCM Gremlin*/ + public static final String GREMLIN_DPCM = "gremlin_dpcm"; + /**GSM (decoders: gsm libgsm) (encoders: libgsm)*/ + public static final String GSM = "gsm"; + /**GSM Microsoft variant (decoders: gsm_ms libgsm_ms) (encoders: libgsm_ms)*/ + public static final String GSM_MS = "gsm_ms"; + /**CRI HCA*/ + public static final String HCA = "hca"; + /**HCOM Audio*/ + public static final String HCOM = "hcom"; + /**IAC (Indeo Audio Coder)*/ + public static final String IAC = "iac"; + /**iLBC (Internet Low Bitrate Codec)*/ + public static final String ILBC = "ilbc"; + /**IMC (Intel Music Coder)*/ + public static final String IMC = "imc"; + /**DPCM Interplay*/ + public static final String INTERPLAY_DPCM = "interplay_dpcm"; + /**Interplay ACM*/ + public static final String INTERPLAYACM = "interplayacm"; + /**MACE (Macintosh Audio Compression/Expansion) 3:1*/ + public static final String MACE3 = "mace3"; + /**MACE (Macintosh Audio Compression/Expansion) 6:1*/ + public static final String MACE6 = "mace6"; + /**Voxware MetaSound*/ + public static final String METASOUND = "metasound"; + /**Micronas SC-4 Audio*/ + public static final String MISC4 = "misc4"; + /**MLP (Meridian Lossless Packing)*/ + public static final String MLP = "mlp"; + /**MP1 (MPEG audio layer 1) (decoders: mp1 mp1float)*/ + public static final String MP1 = "mp1"; + /**MP2 (MPEG audio layer 2) (decoders: mp2 mp2float) (encoders: mp2 mp2fixed)*/ + public static final String MP2 = "mp2"; + /**MP3 (MPEG audio layer 3) (decoders: mp3float mp3) (encoders: libmp3lame mp3_mf)*/ + public static final String MP3 = "mp3"; + /**ADU (Application Data Unit) MP3 (MPEG audio layer 3) (decoders: mp3adufloat mp3adu)*/ + public static final String MP3ADU = "mp3adu"; + /**MP3onMP4 (decoders: mp3on4float mp3on4)*/ + public static final String MP3ON4 = "mp3on4"; + /**MPEG-4 Audio Lossless Coding (ALS) (decoders: als)*/ + public static final String MP4ALS = "mp4als"; + /**MPEG-H 3D Audio*/ + public static final String MPEGH_3D_AUDIO = "mpegh_3d_audio"; + /**MSN Siren*/ + public static final String MSNSIREN = "msnsiren"; + /**Musepack SV7 (decoders: mpc7)*/ + public static final String MUSEPACK7 = "musepack7"; + /**Musepack SV8 (decoders: mpc8)*/ + public static final String MUSEPACK8 = "musepack8"; + /**Nellymoser Asao*/ + public static final String NELLYMOSER = "nellymoser"; + /**Opus (Opus Interactive Audio Codec) (decoders: opus libopus) (encoders: opus libopus)*/ + public static final String OPUS = "opus"; + /**OSQ (Original Sound Quality)*/ + public static final String OSQ = "osq"; + /**Amazing Studio Packed Animation File Audio*/ + public static final String PAF_AUDIO = "paf_audio"; + /**PCM A-law / G.711 A-law*/ + public static final String PCM_ALAW = "pcm_alaw"; + /**PCM signed 16|20|24-bit big-endian for Blu-ray media*/ + public static final String PCM_BLURAY = "pcm_bluray"; + /**PCM signed 20|24-bit big-endian*/ + public static final String PCM_DVD = "pcm_dvd"; + /**PCM 16.8 floating point little-endian*/ + public static final String PCM_F16LE = "pcm_f16le"; + /**PCM 24.0 floating point little-endian*/ + public static final String PCM_F24LE = "pcm_f24le"; + /**PCM 32-bit floating point big-endian*/ + public static final String PCM_F32BE = "pcm_f32be"; + /**PCM 32-bit floating point little-endian*/ + public static final String PCM_F32LE = "pcm_f32le"; + /**PCM 64-bit floating point big-endian*/ + public static final String PCM_F64BE = "pcm_f64be"; + /**PCM 64-bit floating point little-endian*/ + public static final String PCM_F64LE = "pcm_f64le"; + /**PCM signed 20-bit little-endian planar*/ + public static final String PCM_LXF = "pcm_lxf"; + /**PCM mu-law / G.711 mu-law*/ + public static final String PCM_MULAW = "pcm_mulaw"; + /**PCM signed 16-bit big-endian*/ + public static final String PCM_S16BE = "pcm_s16be"; + /**PCM signed 16-bit big-endian planar*/ + public static final String PCM_S16BE_PLANAR = "pcm_s16be_planar"; + /**PCM signed 16-bit little-endian*/ + public static final String PCM_S16LE = "pcm_s16le"; + /**PCM signed 16-bit little-endian planar*/ + public static final String PCM_S16LE_PLANAR = "pcm_s16le_planar"; + /**PCM signed 24-bit big-endian*/ + public static final String PCM_S24BE = "pcm_s24be"; + /**PCM D-Cinema audio signed 24-bit*/ + public static final String PCM_S24DAUD = "pcm_s24daud"; + /**PCM signed 24-bit little-endian*/ + public static final String PCM_S24LE = "pcm_s24le"; + /**PCM signed 24-bit little-endian planar*/ + public static final String PCM_S24LE_PLANAR = "pcm_s24le_planar"; + /**PCM signed 32-bit big-endian*/ + public static final String PCM_S32BE = "pcm_s32be"; + /**PCM signed 32-bit little-endian*/ + public static final String PCM_S32LE = "pcm_s32le"; + /**PCM signed 32-bit little-endian planar*/ + public static final String PCM_S32LE_PLANAR = "pcm_s32le_planar"; + /**PCM signed 64-bit big-endian*/ + public static final String PCM_S64BE = "pcm_s64be"; + /**PCM signed 64-bit little-endian*/ + public static final String PCM_S64LE = "pcm_s64le"; + /**PCM signed 8-bit*/ + public static final String PCM_S8 = "pcm_s8"; + /**PCM signed 8-bit planar*/ + public static final String PCM_S8_PLANAR = "pcm_s8_planar"; + /**PCM SGA*/ + public static final String PCM_SGA = "pcm_sga"; + /**PCM unsigned 16-bit big-endian*/ + public static final String PCM_U16BE = "pcm_u16be"; + /**PCM unsigned 16-bit little-endian*/ + public static final String PCM_U16LE = "pcm_u16le"; + /**PCM unsigned 24-bit big-endian*/ + public static final String PCM_U24BE = "pcm_u24be"; + /**PCM unsigned 24-bit little-endian*/ + public static final String PCM_U24LE = "pcm_u24le"; + /**PCM unsigned 32-bit big-endian*/ + public static final String PCM_U32BE = "pcm_u32be"; + /**PCM unsigned 32-bit little-endian*/ + public static final String PCM_U32LE = "pcm_u32le"; + /**PCM unsigned 8-bit*/ + public static final String PCM_U8 = "pcm_u8"; + /**PCM Archimedes VIDC*/ + public static final String PCM_VIDC = "pcm_vidc"; + /**QCELP / PureVoice*/ + public static final String QCELP = "qcelp"; + /**QDesign Music Codec 2*/ + public static final String QDM2 = "qdm2"; + /**QDesign Music*/ + public static final String QDMC = "qdmc"; + /**RealAudio 1.0 (14.4K) (decoders: real_144) (encoders: real_144)*/ + public static final String RA_144 = "ra_144"; + /**RealAudio 2.0 (28.8K) (decoders: real_288)*/ + public static final String RA_288 = "ra_288"; + /**RealAudio Lossless*/ + public static final String RALF = "ralf"; + /**RKA (RK Audio)*/ + public static final String RKA = "rka"; + /**DPCM id RoQ*/ + public static final String ROQ_DPCM = "roq_dpcm"; + /**SMPTE 302M*/ + public static final String S302M = "s302m"; + /**SBC (low-complexity subband codec)*/ + public static final String SBC = "sbc"; + /**DPCM Squareroot-Delta-Exact*/ + public static final String SDX2_DPCM = "sdx2_dpcm"; + /**Shorten*/ + public static final String SHORTEN = "shorten"; + /**RealAudio SIPR / ACELP.NET*/ + public static final String SIPR = "sipr"; + /**Siren*/ + public static final String SIREN = "siren"; + /**Smacker audio (decoders: smackaud)*/ + public static final String SMACKAUDIO = "smackaudio"; + /**SMV (Selectable Mode Vocoder)*/ + public static final String SMV = "smv"; + /**DPCM Sol*/ + public static final String SOL_DPCM = "sol_dpcm"; + /**Sonic*/ + public static final String SONIC = "sonic"; + /**Sonic lossless*/ + public static final String SONICLS = "sonicls"; + /**Speex (decoders: speex libspeex) (encoders: libspeex)*/ + public static final String SPEEX = "speex"; + /**TAK (Tom's lossless Audio Kompressor)*/ + public static final String TAK = "tak"; + /**TrueHD*/ + public static final String TRUEHD = "truehd"; + /**DSP Group TrueSpeech*/ + public static final String TRUESPEECH = "truespeech"; + /**TTA (True Audio)*/ + public static final String TTA = "tta"; + /**VQF TwinVQ*/ + public static final String TWINVQ = "twinvq"; + /**Sierra VMD audio*/ + public static final String VMDAUDIO = "vmdaudio"; + /**Vorbis (decoders: vorbis libvorbis) (encoders: vorbis libvorbis)*/ + public static final String VORBIS = "vorbis"; + /**DPCM Marble WADY*/ + public static final String WADY_DPCM = "wady_dpcm"; + /**Waveform Archiver*/ + public static final String WAVARC = "wavarc"; + /**Wave synthesis pseudo-codec*/ + public static final String WAVESYNTH = "wavesynth"; + /**WavPack*/ + public static final String WAVPACK = "wavpack"; + /**Westwood Audio (SND1) (decoders: ws_snd1)*/ + public static final String WESTWOOD_SND1 = "westwood_snd1"; + /**Windows Media Audio Lossless*/ + public static final String WMALOSSLESS = "wmalossless"; + /**Windows Media Audio 9 Professional*/ + public static final String WMAPRO = "wmapro"; + /**Windows Media Audio 1*/ + public static final String WMAV1 = "wmav1"; + /**Windows Media Audio 2*/ + public static final String WMAV2 = "wmav2"; + /**Windows Media Audio Voice*/ + public static final String WMAVOICE = "wmavoice"; + /**DPCM Xan*/ + public static final String XAN_DPCM = "xan_dpcm"; + /**Xbox Media Audio 1*/ + public static final String XMA1 = "xma1"; + /**Xbox Media Audio 2*/ + public static final String XMA2 = "xma2"; +} \ No newline at end of file diff --git a/src/main/java/net/bramp/ffmpeg/builder/VideoCodec.java b/src/main/java/net/bramp/ffmpeg/builder/VideoCodec.java new file mode 100644 index 00000000..7447c1e7 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/VideoCodec.java @@ -0,0 +1,559 @@ +package net.bramp.ffmpeg.builder; +/**The available codecs may vary depending on the version of FFmpeg. + *
    + * you can get a list of available codecs through use {@link net.bramp.ffmpeg.FFmpeg#codecs()}. + * + * @see net.bramp.ffmpeg.FFmpeg#codecs() + * @author van1164 + * */ +public class VideoCodec { + + /**Uncompressed 4:2:2 10-bit*/ + public static final String V = "012v"; + /**4X Movie*/ + public static final String XM = "4xm"; + /**QuickTime 8BPS video*/ + public static final String BPS = "8bps"; + /**Multicolor charset for Commodore 64 (encoders: a64multi)*/ + public static final String A64_MULTI = "a64_multi"; + /**Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5)*/ + public static final String A64_MULTI5 = "a64_multi5"; + /**Autodesk RLE*/ + public static final String AASC = "aasc"; + /**Amuse Graphics Movie*/ + public static final String AGM = "agm"; + /**Apple Intermediate Codec*/ + public static final String AIC = "aic"; + /**Alias/Wavefront PIX image*/ + public static final String ALIAS_PIX = "alias_pix"; + /**AMV Video*/ + public static final String AMV = "amv"; + /**Deluxe Paint Animation*/ + public static final String ANM = "anm"; + /**ASCII/ANSI art*/ + public static final String ANSI = "ansi"; + /**APNG (Animated Portable Network Graphics) image*/ + public static final String APNG = "apng"; + /**Gryphon's Anim Compressor*/ + public static final String ARBC = "arbc"; + /**Argonaut Games Video*/ + public static final String ARGO = "argo"; + /**ASUS V1*/ + public static final String ASV1 = "asv1"; + /**ASUS V2*/ + public static final String ASV2 = "asv2"; + /**Auravision AURA*/ + public static final String AURA = "aura"; + /**Auravision Aura 2*/ + public static final String AURA2 = "aura2"; + /**Alliance for Open Media AV1 (decoders: libaom-av1 av1 av1_cuvid av1_qsv) (encoders: libaom-av1 av1_nvenc av1_qsv av1_amf)*/ + public static final String AV1 = "av1"; + /**Avid AVI Codec*/ + public static final String AVRN = "avrn"; + /**Avid 1:1 10-bit RGB Packer*/ + public static final String AVRP = "avrp"; + /**AVS (Audio Video Standard) video*/ + public static final String AVS = "avs"; + /**AVS2-P2/IEEE1857.4*/ + public static final String AVS2 = "avs2"; + /**AVS3-P2/IEEE1857.10*/ + public static final String AVS3 = "avs3"; + /**Avid Meridien Uncompressed*/ + public static final String AVUI = "avui"; + /**Uncompressed packed MS 4:4:4:4*/ + public static final String AYUV = "ayuv"; + /**Bethesda VID video*/ + public static final String BETHSOFTVID = "bethsoftvid"; + /**Brute Force & Ignorance*/ + public static final String BFI = "bfi"; + /**Bink video*/ + public static final String BINKVIDEO = "binkvideo"; + /**Binary text*/ + public static final String BINTEXT = "bintext"; + /**Bitpacked*/ + public static final String BITPACKED = "bitpacked"; + /**BMP (Windows and OS/2 bitmap)*/ + public static final String BMP = "bmp"; + /**Discworld II BMV video*/ + public static final String BMV_VIDEO = "bmv_video"; + /**BRender PIX image*/ + public static final String BRENDER_PIX = "brender_pix"; + /**Interplay C93*/ + public static final String C93 = "c93"; + /**Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)*/ + public static final String CAVS = "cavs"; + /**CD Graphics video*/ + public static final String CDGRAPHICS = "cdgraphics"; + /**CDToons video*/ + public static final String CDTOONS = "cdtoons"; + /**Commodore CDXL video*/ + public static final String CDXL = "cdxl"; + /**GoPro CineForm HD*/ + public static final String CFHD = "cfhd"; + /**Cinepak*/ + public static final String CINEPAK = "cinepak"; + /**Iterated Systems ClearVideo*/ + public static final String CLEARVIDEO = "clearvideo"; + /**Cirrus Logic AccuPak*/ + public static final String CLJR = "cljr"; + /**Canopus Lossless Codec*/ + public static final String CLLC = "cllc"; + /**Electronic Arts CMV video (decoders: eacmv)*/ + public static final String CMV = "cmv"; + /**CPiA video format*/ + public static final String CPIA = "cpia"; + /**Cintel RAW*/ + public static final String CRI = "cri"; + /**CamStudio (decoders: camstudio)*/ + public static final String CSCD = "cscd"; + /**Creative YUV (CYUV)*/ + public static final String CYUV = "cyuv"; + /**Daala*/ + public static final String DAALA = "daala"; + /**DirectDraw Surface image decoder*/ + public static final String DDS = "dds"; + /**Chronomaster DFA*/ + public static final String DFA = "dfa"; + /**Dirac (encoders: vc2)*/ + public static final String DIRAC = "dirac"; + /**VC3/DNxHD*/ + public static final String DNXHD = "dnxhd"; + /**DPX (Digital Picture Exchange) image*/ + public static final String DPX = "dpx"; + /**Delphine Software International CIN video*/ + public static final String DSICINVIDEO = "dsicinvideo"; + /**DV (Digital Video)*/ + public static final String DVVIDEO = "dvvideo"; + /**Feeble Files/ScummVM DXA*/ + public static final String DXA = "dxa"; + /**Dxtory*/ + public static final String DXTORY = "dxtory"; + /**Resolume DXV*/ + public static final String DXV = "dxv"; + /**Escape 124*/ + public static final String ESCAPE124 = "escape124"; + /**Escape 130*/ + public static final String ESCAPE130 = "escape130"; + /**MPEG-5 EVC (Essential Video Coding)*/ + public static final String EVC = "evc"; + /**OpenEXR image*/ + public static final String EXR = "exr"; + /**FFmpeg video codec #1*/ + public static final String FFV1 = "ffv1"; + /**Huffyuv FFmpeg variant*/ + public static final String FFVHUFF = "ffvhuff"; + /**Mirillis FIC*/ + public static final String FIC = "fic"; + /**FITS (Flexible Image Transport System)*/ + public static final String FITS = "fits"; + /**Flash Screen Video v1*/ + public static final String FLASHSV = "flashsv"; + /**Flash Screen Video v2*/ + public static final String FLASHSV2 = "flashsv2"; + /**Autodesk Animator Flic video*/ + public static final String FLIC = "flic"; + /**FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv) (encoders: flv)*/ + public static final String FLV1 = "flv1"; + /**FM Screen Capture Codec*/ + public static final String FMVC = "fmvc"; + /**Fraps*/ + public static final String FRAPS = "fraps"; + /**Forward Uncompressed*/ + public static final String FRWU = "frwu"; + /**Go2Meeting*/ + public static final String G2M = "g2m"; + /**Gremlin Digital Video*/ + public static final String GDV = "gdv"; + /**GEM Raster image*/ + public static final String GEM = "gem"; + /**CompuServe GIF (Graphics Interchange Format)*/ + public static final String GIF = "gif"; + /**H.261*/ + public static final String H261 = "h261"; + /**H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2*/ + public static final String H263 = "h263"; + /**Intel H.263*/ + public static final String H263I = "h263i"; + /**H.263+ / H.263-1998 / H.263 version 2*/ + public static final String H263P = "h263p"; + /**H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid) (encoders: libx264 libx264rgb h264_amf h264_mf h264_nvenc h264_qsv)*/ + public static final String H264 = "h264"; + /**Vidvox Hap*/ + public static final String HAP = "hap"; + /**HDR (Radiance RGBE format) image*/ + public static final String HDR = "hdr"; + /**H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid) (encoders: libx265 hevc_amf hevc_mf hevc_nvenc hevc_qsv)*/ + public static final String HEVC = "hevc"; + /**HNM 4 video*/ + public static final String HNM4VIDEO = "hnm4video"; + /**Canopus HQ/HQA*/ + public static final String HQ_HQA = "hq_hqa"; + /**Canopus HQX*/ + public static final String HQX = "hqx"; + /**HuffYUV*/ + public static final String HUFFYUV = "huffyuv"; + /**HuffYUV MT*/ + public static final String HYMT = "hymt"; + /**id Quake II CIN video (decoders: idcinvideo)*/ + public static final String IDCIN = "idcin"; + /**iCEDraw text*/ + public static final String IDF = "idf"; + /**IFF ACBM/ANIM/DEEP/ILBM/PBM/RGB8/RGBN (decoders: iff)*/ + public static final String IFF_ILBM = "iff_ilbm"; + /**Infinity IMM4*/ + public static final String IMM4 = "imm4"; + /**Infinity IMM5*/ + public static final String IMM5 = "imm5"; + /**Intel Indeo 2*/ + public static final String INDEO2 = "indeo2"; + /**Intel Indeo 3*/ + public static final String INDEO3 = "indeo3"; + /**Intel Indeo Video Interactive 4*/ + public static final String INDEO4 = "indeo4"; + /**Intel Indeo Video Interactive 5*/ + public static final String INDEO5 = "indeo5"; + /**Interplay MVE video*/ + public static final String INTERPLAYVIDEO = "interplayvideo"; + /**IPU Video*/ + public static final String IPU = "ipu"; + /**JPEG 2000 (encoders: jpeg2000 libopenjpeg)*/ + public static final String JPEG2000 = "jpeg2000"; + /**JPEG-LS*/ + public static final String JPEGLS = "jpegls"; + /**JPEG XL*/ + public static final String JPEGXL = "jpegxl"; + /**Bitmap Brothers JV video*/ + public static final String JV = "jv"; + /**Kega Game Video*/ + public static final String KGV1 = "kgv1"; + /**Karl Morton's video codec*/ + public static final String KMVC = "kmvc"; + /**Lagarith lossless*/ + public static final String LAGARITH = "lagarith"; + /**Lossless JPEG*/ + public static final String LJPEG = "ljpeg"; + /**LOCO*/ + public static final String LOCO = "loco"; + /**LEAD Screen Capture*/ + public static final String LSCR = "lscr"; + /**Matrox Uncompressed SD*/ + public static final String M101 = "m101"; + /**Electronic Arts Madcow Video (decoders: eamad)*/ + public static final String MAD = "mad"; + /**MagicYUV video*/ + public static final String MAGICYUV = "magicyuv"; + /**Sony PlayStation MDEC (Motion DECoder)*/ + public static final String MDEC = "mdec"; + /**Media 100i*/ + public static final String MEDIA100 = "media100"; + /**Mimic*/ + public static final String MIMIC = "mimic"; + /**Motion JPEG (decoders: mjpeg mjpeg_cuvid mjpeg_qsv) (encoders: mjpeg mjpeg_qsv)*/ + public static final String MJPEG = "mjpeg"; + /**Apple MJPEG-B*/ + public static final String MJPEGB = "mjpegb"; + /**American Laser Games MM Video*/ + public static final String MMVIDEO = "mmvideo"; + /**MobiClip Video*/ + public static final String MOBICLIP = "mobiclip"; + /**Motion Pixels video*/ + public static final String MOTIONPIXELS = "motionpixels"; + /**MPEG-1 video (decoders: mpeg1video mpeg1_cuvid)*/ + public static final String MPEG1VIDEO = "mpeg1video"; + /**MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv mpeg2_cuvid) (encoders: mpeg2video mpeg2_qsv)*/ + public static final String MPEG2VIDEO = "mpeg2video"; + /**MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid) (encoders: mpeg4 libxvid)*/ + public static final String MPEG4 = "mpeg4"; + /**MS ATC Screen*/ + public static final String MSA1 = "msa1"; + /**Mandsoft Screen Capture Codec*/ + public static final String MSCC = "mscc"; + /**MPEG-4 part 2 Microsoft variant version 1*/ + public static final String MSMPEG4V1 = "msmpeg4v1"; + /**MPEG-4 part 2 Microsoft variant version 2*/ + public static final String MSMPEG4V2 = "msmpeg4v2"; + /**MPEG-4 part 2 Microsoft variant version 3 (decoders: msmpeg4) (encoders: msmpeg4)*/ + public static final String MSMPEG4V3 = "msmpeg4v3"; + /**Microsoft Paint (MSP) version 2*/ + public static final String MSP2 = "msp2"; + /**Microsoft RLE*/ + public static final String MSRLE = "msrle"; + /**MS Screen 1*/ + public static final String MSS1 = "mss1"; + /**MS Windows Media Video V9 Screen*/ + public static final String MSS2 = "mss2"; + /**Microsoft Video 1*/ + public static final String MSVIDEO1 = "msvideo1"; + /**LCL (LossLess Codec Library) MSZH*/ + public static final String MSZH = "mszh"; + /**MS Expression Encoder Screen*/ + public static final String MTS2 = "mts2"; + /**MidiVid 3.0*/ + public static final String MV30 = "mv30"; + /**Silicon Graphics Motion Video Compressor 1*/ + public static final String MVC1 = "mvc1"; + /**Silicon Graphics Motion Video Compressor 2*/ + public static final String MVC2 = "mvc2"; + /**MidiVid VQ*/ + public static final String MVDV = "mvdv"; + /**MidiVid Archive Codec*/ + public static final String MVHA = "mvha"; + /**MatchWare Screen Capture Codec*/ + public static final String MWSC = "mwsc"; + /**Mobotix MxPEG video*/ + public static final String MXPEG = "mxpeg"; + /**NotchLC*/ + public static final String NOTCHLC = "notchlc"; + /**NuppelVideo/RTJPEG*/ + public static final String NUV = "nuv"; + /**Amazing Studio Packed Animation File Video*/ + public static final String PAF_VIDEO = "paf_video"; + /**PAM (Portable AnyMap) image*/ + public static final String PAM = "pam"; + /**PBM (Portable BitMap) image*/ + public static final String PBM = "pbm"; + /**PC Paintbrush PCX image*/ + public static final String PCX = "pcx"; + /**PDV (PlayDate Video)*/ + public static final String PDV = "pdv"; + /**PFM (Portable FloatMap) image*/ + public static final String PFM = "pfm"; + /**PGM (Portable GrayMap) image*/ + public static final String PGM = "pgm"; + /**PGMYUV (Portable GrayMap YUV) image*/ + public static final String PGMYUV = "pgmyuv"; + /**PGX (JPEG2000 Test Format)*/ + public static final String PGX = "pgx"; + /**PHM (Portable HalfFloatMap) image*/ + public static final String PHM = "phm"; + /**Kodak Photo CD*/ + public static final String PHOTOCD = "photocd"; + /**Pictor/PC Paint*/ + public static final String PICTOR = "pictor"; + /**Apple Pixlet*/ + public static final String PIXLET = "pixlet"; + /**PNG (Portable Network Graphics) image*/ + public static final String PNG = "png"; + /**PPM (Portable PixelMap) image*/ + public static final String PPM = "ppm"; + /**Apple ProRes (iCodec Pro) (encoders: prores prores_aw prores_ks)*/ + public static final String PRORES = "prores"; + /**Brooktree ProSumer Video*/ + public static final String PROSUMER = "prosumer"; + /**Photoshop PSD file*/ + public static final String PSD = "psd"; + /**V.Flash PTX image*/ + public static final String PTX = "ptx"; + /**Apple QuickDraw*/ + public static final String QDRAW = "qdraw"; + /**QOI (Quite OK Image)*/ + public static final String QOI = "qoi"; + /**Q-team QPEG*/ + public static final String QPEG = "qpeg"; + /**QuickTime Animation (RLE) video*/ + public static final String QTRLE = "qtrle"; + /**AJA Kona 10-bit RGB Codec*/ + public static final String R10K = "r10k"; + /**Uncompressed RGB 10-bit*/ + public static final String R210 = "r210"; + /**RemotelyAnywhere Screen Capture*/ + public static final String RASC = "rasc"; + /**raw video*/ + public static final String RAWVIDEO = "rawvideo"; + /**RL2 video*/ + public static final String RL2 = "rl2"; + /**id RoQ video (decoders: roqvideo) (encoders: roqvideo)*/ + public static final String ROQ = "roq"; + /**QuickTime video (RPZA)*/ + public static final String RPZA = "rpza"; + /**innoHeim/Rsupport Screen Capture Codec*/ + public static final String RSCC = "rscc"; + /**RTV1 (RivaTuner Video)*/ + public static final String RTV1 = "rtv1"; + /**RealVideo 1.0*/ + public static final String RV10 = "rv10"; + /**RealVideo 2.0*/ + public static final String RV20 = "rv20"; + /**RealVideo 3.0*/ + public static final String RV30 = "rv30"; + /**RealVideo 4.0*/ + public static final String RV40 = "rv40"; + /**LucasArts SANM/SMUSH video*/ + public static final String SANM = "sanm"; + /**ScreenPressor*/ + public static final String SCPR = "scpr"; + /**Screenpresso*/ + public static final String SCREENPRESSO = "screenpresso"; + /**Digital Pictures SGA Video*/ + public static final String SGA = "sga"; + /**SGI image*/ + public static final String SGI = "sgi"; + /**SGI RLE 8-bit*/ + public static final String SGIRLE = "sgirle"; + /**BitJazz SheerVideo*/ + public static final String SHEERVIDEO = "sheervideo"; + /**Simbiosis Interactive IMX Video*/ + public static final String SIMBIOSIS_IMX = "simbiosis_imx"; + /**Smacker video (decoders: smackvid)*/ + public static final String SMACKVIDEO = "smackvideo"; + /**QuickTime Graphics (SMC)*/ + public static final String SMC = "smc"; + /**Sigmatel Motion Video*/ + public static final String SMVJPEG = "smvjpeg"; + /**Snow*/ + public static final String SNOW = "snow"; + /**Sunplus JPEG (SP5X)*/ + public static final String SP5X = "sp5x"; + /**NewTek SpeedHQ*/ + public static final String SPEEDHQ = "speedhq"; + /**Screen Recorder Gold Codec*/ + public static final String SRGC = "srgc"; + /**Sun Rasterfile image*/ + public static final String SUNRAST = "sunrast"; + /**Scalable Vector Graphics*/ + public static final String SVG = "svg"; + /**Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1*/ + public static final String SVQ1 = "svq1"; + /**Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3*/ + public static final String SVQ3 = "svq3"; + /**Truevision Targa image*/ + public static final String TARGA = "targa"; + /**Pinnacle TARGA CineWave YUV16*/ + public static final String TARGA_Y216 = "targa_y216"; + /**TDSC*/ + public static final String TDSC = "tdsc"; + /**Electronic Arts TGQ video (decoders: eatgq)*/ + public static final String TGQ = "tgq"; + /**Electronic Arts TGV video (decoders: eatgv)*/ + public static final String TGV = "tgv"; + /**Theora (encoders: libtheora)*/ + public static final String THEORA = "theora"; + /**Nintendo Gamecube THP video*/ + public static final String THP = "thp"; + /**Tiertex Limited SEQ video*/ + public static final String TIERTEXSEQVIDEO = "tiertexseqvideo"; + /**TIFF image*/ + public static final String TIFF = "tiff"; + /**8088flex TMV*/ + public static final String TMV = "tmv"; + /**Electronic Arts TQI video (decoders: eatqi)*/ + public static final String TQI = "tqi"; + /**Duck TrueMotion 1.0*/ + public static final String TRUEMOTION1 = "truemotion1"; + /**Duck TrueMotion 2.0*/ + public static final String TRUEMOTION2 = "truemotion2"; + /**Duck TrueMotion 2.0 Real Time*/ + public static final String TRUEMOTION2RT = "truemotion2rt"; + /**TechSmith Screen Capture Codec (decoders: camtasia)*/ + public static final String TSCC = "tscc"; + /**TechSmith Screen Codec 2*/ + public static final String TSCC2 = "tscc2"; + /**Renderware TXD (TeXture Dictionary) image*/ + public static final String TXD = "txd"; + /**IBM UltiMotion (decoders: ultimotion)*/ + public static final String ULTI = "ulti"; + /**Ut Video*/ + public static final String UTVIDEO = "utvideo"; + /**Uncompressed 4:2:2 10-bit*/ + public static final String V210 = "v210"; + /**Uncompressed 4:2:2 10-bit*/ + public static final String V210X = "v210x"; + /**Uncompressed packed 4:4:4*/ + public static final String V308 = "v308"; + /**Uncompressed packed QT 4:4:4:4*/ + public static final String V408 = "v408"; + /**Uncompressed 4:4:4 10-bit*/ + public static final String V410 = "v410"; + /**Beam Software VB*/ + public static final String VB = "vb"; + /**VBLE Lossless Codec*/ + public static final String VBLE = "vble"; + /**Vizrt Binary Image*/ + public static final String VBN = "vbn"; + /**SMPTE VC-1 (decoders: vc1 vc1_qsv vc1_cuvid)*/ + public static final String VC1 = "vc1"; + /**Windows Media Video 9 Image v2*/ + public static final String VC1IMAGE = "vc1image"; + /**ATI VCR1*/ + public static final String VCR1 = "vcr1"; + /**Miro VideoXL (decoders: xl)*/ + public static final String VIXL = "vixl"; + /**Sierra VMD video*/ + public static final String VMDVIDEO = "vmdvideo"; + /**vMix Video*/ + public static final String VMIX = "vmix"; + /**VMware Screen Codec / VMware Video*/ + public static final String VMNC = "vmnc"; + /**Null video codec*/ + public static final String VNULL = "vnull"; + /**On2 VP3*/ + public static final String VP3 = "vp3"; + /**On2 VP4*/ + public static final String VP4 = "vp4"; + /**On2 VP5*/ + public static final String VP5 = "vp5"; + /**On2 VP6*/ + public static final String VP6 = "vp6"; + /**On2 VP6 (Flash version, with alpha channel)*/ + public static final String VP6A = "vp6a"; + /**On2 VP6 (Flash version)*/ + public static final String VP6F = "vp6f"; + /**On2 VP7*/ + public static final String VP7 = "vp7"; + /**On2 VP8 (decoders: vp8 libvpx vp8_cuvid vp8_qsv) (encoders: libvpx)*/ + public static final String VP8 = "vp8"; + /**Google VP9 (decoders: vp9 libvpx-vp9 vp9_cuvid vp9_qsv) (encoders: libvpx-vp9 vp9_qsv)*/ + public static final String VP9 = "vp9"; + /**ViewQuest VQC*/ + public static final String VQC = "vqc"; + /**H.266 / VVC (Versatile Video Coding)*/ + public static final String VVC = "vvc"; + /**WBMP (Wireless Application Protocol Bitmap) image*/ + public static final String WBMP = "wbmp"; + /**WinCAM Motion Video*/ + public static final String WCMV = "wcmv"; + /**WebP (encoders: libwebp_anim libwebp)*/ + public static final String WEBP = "webp"; + /**Windows Media Video 7*/ + public static final String WMV1 = "wmv1"; + /**Windows Media Video 8*/ + public static final String WMV2 = "wmv2"; + /**Windows Media Video 9*/ + public static final String WMV3 = "wmv3"; + /**Windows Media Video 9 Image*/ + public static final String WMV3IMAGE = "wmv3image"; + /**Winnov WNV1*/ + public static final String WNV1 = "wnv1"; + /**AVFrame to AVPacket passthrough*/ + public static final String WRAPPED_AVFRAME = "wrapped_avframe"; + /**Westwood Studios VQA (Vector Quantized Animation) video (decoders: vqavideo)*/ + public static final String WS_VQA = "ws_vqa"; + /**Wing Commander III / Xan*/ + public static final String XAN_WC3 = "xan_wc3"; + /**Wing Commander IV / Xxan*/ + public static final String XAN_WC4 = "xan_wc4"; + /**eXtended BINary text*/ + public static final String XBIN = "xbin"; + /**XBM (X BitMap) image*/ + public static final String XBM = "xbm"; + /**X-face image*/ + public static final String XFACE = "xface"; + /**XPM (X PixMap) image*/ + public static final String XPM = "xpm"; + /**XWD (X Window Dump) image*/ + public static final String XWD = "xwd"; + /**Uncompressed YUV 4:1:1 12-bit*/ + public static final String Y41P = "y41p"; + /**YUY2 Lossless Codec*/ + public static final String YLC = "ylc"; + /**Psygnosis YOP Video*/ + public static final String YOP = "yop"; + /**Uncompressed packed 4:2:0*/ + public static final String YUV4 = "yuv4"; + /**ZeroCodec Lossless Video*/ + public static final String ZEROCODEC = "zerocodec"; + /**LCL (LossLess Codec Library) ZLIB*/ + public static final String ZLIB = "zlib"; + /**Zip Motion Blocks Video*/ + public static final String ZMBV = "zmbv"; +} \ No newline at end of file diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index 43f49e31..483ca688 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -191,6 +191,29 @@ public void testSetOptions() { assertThat(video, reflectEquals(options.getVideo())); } + /** Tests if all the various encoding options actually get stored and used correctly */ + @Test + public void testVideoCodecWithEnum() { + MainEncodingOptions main = new MainEncodingOptions("mp4", 1500L, 2L); + AudioEncodingOptions audio = + new AudioEncodingOptions(true, AudioCodec.AAC, 1, AUDIO_SAMPLE_48000, AUDIO_FORMAT_S16, 1, 2.0); + VideoEncodingOptions video = + new VideoEncodingOptions(true, VideoCodec.H264, FPS_30, 320, 240, 1, null, null, null); + + EncodingOptions options = + new FFmpegBuilder() + .setInput("input") + .addOutput("output") + .useOptions(main) + .useOptions(audio) + .useOptions(video) + .buildOptions(); + + assertThat(main, reflectEquals(options.getMain())); + assertThat(audio, reflectEquals(options.getAudio())); + assertThat(video, reflectEquals(options.getVideo())); + } + @Test public void testMultipleOutputs() { diff --git a/tools/codec_enum_generator.py b/tools/codec_enum_generator.py new file mode 100644 index 00000000..49498f24 --- /dev/null +++ b/tools/codec_enum_generator.py @@ -0,0 +1,74 @@ +""" +First of all, FFmpeg should be installed on your local PC. +Running "python codec_enum_generator.py" in the shell creates Audioodec and VideooCodec. +You can update the codec file by putting these two files within the net.bramp.ffmpeg.builder package. +""" +import subprocess +import re + +CODECS_REGEX = re.compile("^ ([.D][.E][VASD][.I][.L][.S]) (\S{2,})\s+(.*)$") + +def removeLeadingNumbers(text): + index = 0 + while index < len(text) and text[index].isdigit(): + index += 1 + return text[index:] + +def writeCodec(m,codec): + document = "\t"+"/**"+ m.group(3).replace("&","&").rstrip() +"*/\n" + enumCode = "\t" +"public static final String " +removeLeadingNumbers(m.group(2).replace(".","_")).upper() +' = "'+ m.group(2) +'";' +'\n' + codec.write(document) + codec.write(enumCode) + + +output = subprocess.check_output("ffmpeg -codecs", shell=True).decode('utf-8') + +print(output) + +output = output.split("\n") + +videoCodec = open("VideoCodec.java", 'w') +audioCodec = open("AudioCodec.java", 'w') + +# write header +videoCodec.write( +"""package net.bramp.ffmpeg.builder; +/**The available codecs may vary depending on the version of FFmpeg. + *
    + * you can get a list of available codecs through use {@link net.bramp.ffmpeg.FFmpeg#codecs()}. + * + * @see net.bramp.ffmpeg.FFmpeg#codecs() + * @author van1164 + * */ +public class VideoCodec { + +""") +audioCodec.write( +"""package net.bramp.ffmpeg.builder; +/**The available codecs may vary depending on the version of FFmpeg. + *
    + * you can get a list of available codecs through use {@link net.bramp.ffmpeg.FFmpeg#codecs()}. + * + * @see net.bramp.ffmpeg.FFmpeg#codecs() + * @author van1164 + * */ +public class AudioCodec { + +""") +for item in output: + m = CODECS_REGEX.match(item) + if not m : continue + + lst = item.split() + if 'A' in m.group(1): + writeCodec(m,audioCodec) + + if 'V' in m.group(1): + writeCodec(m,videoCodec) + + +videoCodec.write("}") +audioCodec.write("}") + +videoCodec.close() +audioCodec.close() From a1f78a106857dd3e678573a58779e20bd6641a32 Mon Sep 17 00:00:00 2001 From: Euklios Date: Thu, 8 Aug 2024 13:49:13 +0200 Subject: [PATCH 059/101] feature/update-logback (#335) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 211c649c..8d772e6d 100644 --- a/pom.xml +++ b/pom.xml @@ -96,7 +96,7 @@ ch.qos.logback logback-classic - 1.5.3 + 1.5.6 From a6e82136539c4944cd15d128ecf228659489642b Mon Sep 17 00:00:00 2001 From: Sihwan Kim Date: Thu, 8 Aug 2024 21:29:23 +0900 Subject: [PATCH 060/101] Add FFmpegHlsOutputBuilder for HLS user (#322) * feat: add hls output builder * form: modify addHlsOutput comment * fix : fix condition for size * feat: check format "hls" in addHlsOutput() * fix: duration type change to long * test: fix test code to match the code * test: fix test code to match the code * feat: add addFormatArgs() for hls argument * form: add hls format check error mesaage * form: add hls_time unit * refactor: remove an unnecessary condition addFormatArgs * refactor: change return value getThis() to this * feat: add AbstractFFmpegOutputBuilder * test: test mixed argument with hls, default * fix: modify generic in AbstractFFmpegStreamBuilder * Move the changes to the outputbuilder to AbstractFFmpegOutputBuilder * merge abstractFFmpegStreamBuilder * fix: add docs unit parameter * fix: javadoc parameter error --- .../builder/AbstractFFmpegOutputBuilder.java | 434 ++++++++++++++++++ .../builder/AbstractFFmpegStreamBuilder.java | 193 +------- .../bramp/ffmpeg/builder/FFmpegBuilder.java | 39 +- .../builder/FFmpegHlsOutputBuilder.java | 125 +++++ .../ffmpeg/builder/FFmpegOutputBuilder.java | 421 +---------------- .../net/bramp/ffmpeg/modelmapper/Mapper.java | 17 +- .../builder/FFmpegHlsOutputBuilderTest.java | 56 +++ 7 files changed, 672 insertions(+), 613 deletions(-) create mode 100644 src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegOutputBuilder.java create mode 100644 src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java create mode 100644 src/test/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilderTest.java diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegOutputBuilder.java new file mode 100644 index 00000000..19b4be98 --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegOutputBuilder.java @@ -0,0 +1,434 @@ +package net.bramp.ffmpeg.builder; + +import static com.google.common.base.Preconditions.*; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; + +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import com.google.errorprone.annotations.InlineMe; + +import java.net.URI; +import java.util.List; +import java.util.regex.Pattern; +import javax.annotation.CheckReturnValue; +import net.bramp.ffmpeg.options.AudioEncodingOptions; +import net.bramp.ffmpeg.options.EncodingOptions; +import net.bramp.ffmpeg.options.MainEncodingOptions; +import net.bramp.ffmpeg.options.VideoEncodingOptions; +import net.bramp.ffmpeg.probe.FFmpegProbeResult; + +/** Builds a representation of a single output/encoding setting */ +@SuppressWarnings({"DeprecatedIsStillUsed", "deprecation","unchecked"}) +public abstract class AbstractFFmpegOutputBuilder> extends AbstractFFmpegStreamBuilder { + + static final Pattern trailingZero = Pattern.compile("\\.0*$"); + /** @deprecated Use {@link #getConstantRateFactor()} instead*/ + @Deprecated + public Double constantRateFactor; + + /** @deprecated Use {@link #getAudioSampleFormat()} instead*/ + @Deprecated + public String audio_sample_format; + + /** @deprecated Use {@link #getAudioBitRate()} instead*/ + @Deprecated + public long audio_bit_rate; + + /** @deprecated Use {@link #getAudioQuality()} instead*/ + @Deprecated + public Double audio_quality; + + /** @deprecated Use {@link #getVideoBitStreamFilter()} instead*/ + @Deprecated + public String audio_bit_stream_filter; + + /** @deprecated Use {@link #getAudioFilter()} instead*/ + @Deprecated + public String audio_filter; + + /** @deprecated Use {@link #getVideoBitRate()} instead*/ + @Deprecated + public long video_bit_rate; + + /** @deprecated Use {@link #getVideoQuality()} instead*/ + @Deprecated + public Double video_quality; + + /** @deprecated Use {@link #getVideoPreset()} instead*/ + @Deprecated + public String video_preset; + + /** @deprecated Use {@link #getVideoFilter()} instead*/ + @Deprecated + public String video_filter; + + /** @deprecated Use {@link #getVideoBitStreamFilter()} instead*/ + @Deprecated + public String video_bit_stream_filter; + + public AbstractFFmpegOutputBuilder() { + super(); + } + + protected AbstractFFmpegOutputBuilder(FFmpegBuilder parent, String filename) { + super(parent, filename); + } + + protected AbstractFFmpegOutputBuilder(FFmpegBuilder parent, URI uri) { + super(parent, uri); + } + + public T setConstantRateFactor(double factor) { + checkArgument(factor >= 0, "constant rate factor must be greater or equal to zero"); + this.constantRateFactor = factor; + return (T) this; + } + + public T setVideoBitRate(long bit_rate) { + checkArgument(bit_rate > 0, "bit rate must be positive"); + this.video_enabled = true; + this.video_bit_rate = bit_rate; + return (T) this; + } + + public T setVideoQuality(double quality) { + checkArgument(quality > 0, "quality must be positive"); + this.video_enabled = true; + this.video_quality = quality; + return (T) this; + } + + public T setVideoBitStreamFilter(String filter) { + this.video_bit_stream_filter = checkNotEmpty(filter, "filter must not be empty"); + return (T) this; + } + + /** + * Sets a video preset to use. + * + *

    Uses `-vpre`. + * + * @param preset the preset + * @return this + */ + public T setVideoPreset(String preset) { + this.video_enabled = true; + this.video_preset = checkNotEmpty(preset, "video preset must not be empty"); + return (T) this; + } + + /** + * Sets Video Filter + * + *

    TODO Build a fluent Filter builder + * + * @param filter The video filter. + * @return this + */ + public T setVideoFilter(String filter) { + this.video_enabled = true; + this.video_filter = checkNotEmpty(filter, "filter must not be empty"); + return (T) this; + } + + /** + * Sets the audio bit depth. + * + * @param bit_depth The sample format, one of the net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_* constants. + * @return this + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_U8 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_S16 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_S32 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_FLT + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_DBL + * @deprecated use {@link #setAudioSampleFormat} instead. + */ + @Deprecated + @InlineMe(replacement = "this.setAudioSampleFormat(bit_depth)") + final public T setAudioBitDepth(String bit_depth) { + return setAudioSampleFormat(bit_depth); + } + + /** + * Sets the audio sample format. + * + * @param sample_format The sample format, one of the net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_* + * constants. + * @return this + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_U8 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_S16 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_S32 + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_FLT + * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_DBL + */ + public T setAudioSampleFormat(String sample_format) { + this.audio_enabled = true; + this.audio_sample_format = checkNotEmpty(sample_format, "sample format must not be empty"); + return (T) this; + } + + /** + * Sets the Audio bit rate + * + * @param bit_rate Audio bitrate in bits per second. + * @return this + */ + public T setAudioBitRate(long bit_rate) { + checkArgument(bit_rate > 0, "bit rate must be positive"); + this.audio_enabled = true; + this.audio_bit_rate = bit_rate; + return (T) this; + } + + public T setAudioQuality(double quality) { + checkArgument(quality > 0, "quality must be positive"); + this.audio_enabled = true; + this.audio_quality = quality; + return (T) this; + } + + public T setAudioBitStreamFilter(String filter) { + this.audio_enabled = true; + this.audio_bit_stream_filter = checkNotEmpty(filter, "filter must not be empty"); + return (T) this; + } + + /** + * Sets Audio Filter + * + *

    TODO Build a fluent Filter builder + * + * @param filter The audio filter. + * @return this + */ + public T setAudioFilter(String filter) { + this.audio_enabled = true; + this.audio_filter = checkNotEmpty(filter, "filter must not be empty"); + return (T) this; + } + + /** + * Returns a representation of this Builder that can be safely serialised. + * + *

    NOTE: This method is horribly out of date, and its use should be rethought. + * + * @return A new EncodingOptions capturing this Builder's state + */ + @CheckReturnValue + @Override + public EncodingOptions buildOptions() { + // TODO When/if modelmapper supports @ConstructorProperties, we map this + // object, instead of doing new XXX(...) + // https://github.com/jhalterman/modelmapper/issues/44 + return new EncodingOptions( + new MainEncodingOptions(format, startOffset, duration), + new AudioEncodingOptions( + audio_enabled, + audio_codec, + audio_channels, + audio_sample_rate, + audio_sample_format, + audio_bit_rate, + audio_quality), + new VideoEncodingOptions( + video_enabled, + video_codec, + video_frame_rate, + video_width, + video_height, + video_bit_rate, + video_frames, + video_filter, + video_preset)); + } + + @CheckReturnValue + @Override + protected List build(int pass) { + Preconditions.checkState(parent != null, "Can not build without parent being set"); + return build(parent, pass); + } + + /** + * Builds the arguments + * + * @param parent The parent FFmpegBuilder + * @param pass The particular pass. For one-pass this value will be zero, for multi-pass, it will + * be 1 for the first pass, 2 for the second, and so on. + * @return The arguments + */ + @CheckReturnValue + @Override + protected List build(FFmpegBuilder parent, int pass) { + if (pass > 0) { + checkArgument( + targetSize != 0 || video_bit_rate != 0, + "Target size, or video bitrate must be specified when using two-pass"); + } + if (targetSize > 0) { + checkState(parent.inputs.size() == 1, "Target size does not support multiple inputs"); + + checkArgument( + constantRateFactor == null, "Target size can not be used with constantRateFactor"); + + String firstInput = parent.inputs.iterator().next(); + FFmpegProbeResult input = parent.inputProbes.get(firstInput); + + checkState(input != null, "Target size must be used with setInput(FFmpegProbeResult)"); + + // TODO factor in start time and/or number of frames + + double durationInSeconds = input.format.duration; + long totalBitRate = + (long) Math.floor((targetSize * 8) / durationInSeconds) - pass_padding_bitrate; + + // TODO Calculate audioBitRate + + if (video_enabled && video_bit_rate == 0) { + // Video (and possibly audio) + long audioBitRate = audio_enabled ? audio_bit_rate : 0; + video_bit_rate = totalBitRate - audioBitRate; + } else if (audio_enabled && audio_bit_rate == 0) { + // Just Audio + audio_bit_rate = totalBitRate; + } + } + + return super.build(parent, pass); + } + + /** + * Returns a double formatted as a string. If the double is an integer, then trailing zeros are + * striped. + * + * @param d the double to format. + * @return The formatted double. + */ + protected static String formatDecimalInteger(double d) { + return trailingZero.matcher(String.valueOf(d)).replaceAll(""); + } + + @Override + protected void addGlobalFlags(FFmpegBuilder parent, ImmutableList.Builder args) { + super.addGlobalFlags(parent, args); + + if (constantRateFactor != null) { + args.add("-crf", formatDecimalInteger(constantRateFactor)); + } + } + + @Override + protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder args) { + super.addVideoFlags(parent, args); + + if (video_bit_rate > 0 && video_quality != null) { + // I'm not sure, but it seems video_quality overrides video_bit_rate, so don't allow both + throw new IllegalStateException("Only one of video_bit_rate and video_quality can be set"); + } + + if (video_bit_rate > 0) { + args.add("-b:v", String.valueOf(video_bit_rate)); + } + + if (video_quality != null) { + args.add("-qscale:v", formatDecimalInteger(video_quality)); + } + + if (!Strings.isNullOrEmpty(video_preset)) { + args.add("-vpre", video_preset); + } + + if (!Strings.isNullOrEmpty(video_filter)) { + checkState( + parent.inputs.size() == 1, + "Video filter only works with one input, instead use setComplexVideoFilter(..)"); + args.add("-vf", video_filter); + } + + if (!Strings.isNullOrEmpty(video_bit_stream_filter)) { + args.add("-bsf:v", video_bit_stream_filter); + } + } + + @Override + protected void addAudioFlags(ImmutableList.Builder args) { + super.addAudioFlags(args); + + if (!Strings.isNullOrEmpty(audio_sample_format)) { + args.add("-sample_fmt", audio_sample_format); + } + + if (audio_bit_rate > 0 && audio_quality != null && throwWarnings) { + // I'm not sure, but it seems audio_quality overrides audio_bit_rate, so don't allow both + throw new IllegalStateException("Only one of audio_bit_rate and audio_quality can be set"); + } + + if (audio_bit_rate > 0) { + args.add("-b:a", String.valueOf(audio_bit_rate)); + } + + if (audio_quality != null) { + args.add("-qscale:a", formatDecimalInteger(audio_quality)); + } + + if (!Strings.isNullOrEmpty(audio_bit_stream_filter)) { + args.add("-bsf:a", audio_bit_stream_filter); + } + + if (!Strings.isNullOrEmpty(audio_filter)) { + args.add("-af", audio_filter); + } + } + + @CheckReturnValue + @Override + protected T getThis() { + return (T) this; + } + + + public Double getConstantRateFactor() { + return constantRateFactor; + } + + public String getAudioSampleFormat() { + return audio_sample_format; + } + + public long getAudioBitRate() { + return audio_bit_rate; + } + + public Double getAudioQuality() { + return audio_quality; + } + + public String getAudioBitStreamFilter() { + return audio_bit_stream_filter; + } + + public String getAudioFilter() { + return audio_filter; + } + + public long getVideoBitRate() { + return video_bit_rate; + } + + public Double getVideoQuality() { + return video_quality; + } + + public String getVideoPreset() { + return video_preset; + } + + public String getVideoFilter() { + return video_filter; + } + + public String getVideoBitStreamFilter() { + return video_bit_stream_filter; + } +} diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index a8b90d8e..5d0613d3 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -53,117 +53,54 @@ * * @param A concrete class that extends from the AbstractFFmpegStreamBuilder */ -@SuppressWarnings({"DeprecatedIsStillUsed"}) public abstract class AbstractFFmpegStreamBuilder> { private static final String DEVNULL = SystemUtils.IS_OS_WINDOWS ? "NUL" : "/dev/null"; - protected final FFmpegBuilder parent; + final FFmpegBuilder parent; - /* Output filename or uri. Only one may be set */ - /** @deprecated Use {@link #getFilename()} instead */ - @Deprecated + /** Output filename or uri. Only one may be set */ public String filename; - /** @deprecated Use {@link #getUri()} instead */ - @Deprecated public URI uri; - /** @deprecated Use {@link #getFormat()} instead */ - @Deprecated public String format; - /** @deprecated Use {@link #getStartOffset()} instead */ - @Deprecated public Long startOffset; // in milliseconds - /** @deprecated Use {@link #getDuration()} instead */ - @Deprecated public Long duration; // in milliseconds - /** @deprecated Use {@link #getMetaTags()} instead */ - @Deprecated public final List meta_tags = new ArrayList<>(); - /** @deprecated Use {@link #isAudioEnabled()} instead */ - @Deprecated public boolean audio_enabled = true; - /** @deprecated Use {@link #getAudioCodec()} instead */ - @Deprecated public String audio_codec; - /** @deprecated Use {@link #getAudioChannels()} instead */ - @Deprecated public int audio_channels; - /** @deprecated Use {@link #getAudioSampleRate()} instead */ - @Deprecated public int audio_sample_rate; - /** @deprecated Use {@link #getAudioPreset()} instead */ - @Deprecated public String audio_preset; - /** @deprecated Use {@link #isVideoEnabled()} instead */ - @Deprecated public boolean video_enabled = true; - /** @deprecated Use {@link #getVideoCodec()} instead */ - @Deprecated public String video_codec; - /** @deprecated Use {@link #isVideoCopyinkf()} instead */ - @Deprecated public boolean video_copyinkf; - /** @deprecated Use {@link #getVideoFrameRate()} instead */ - @Deprecated public Fraction video_frame_rate; - /** @deprecated Use {@link #getVideoWidth()} instead */ - @Deprecated public int video_width; - /** @deprecated Use {@link #getVideoHeight()} instead */ - @Deprecated public int video_height; - /** @deprecated Use {@link #getVideoSize()} instead */ - @Deprecated public String video_size; - /** @deprecated Use {@link #getVideoMovflags()} instead */ - @Deprecated public String video_movflags; - /** @deprecated Use {@link #getVideoFrames()} instead */ - @Deprecated public Integer video_frames; - /** @deprecated Use {@link #getVideoPixelFormat()} instead */ - @Deprecated public String video_pixel_format; - /** @deprecated Use {@link #isSubtitleEnabled()} instead */ - @Deprecated public boolean subtitle_enabled = true; - /** @deprecated Use {@link #getSubtitlePreset()} instead */ - @Deprecated public String subtitle_preset; - /** @deprecated Use {@link #getSubtitleCodec()} instead */ - @Deprecated private String subtitle_codec; - /** @deprecated Use {@link #getPreset()} instead */ - @Deprecated public String preset; - /** @deprecated Use {@link #getPresetFilename()} instead */ - @Deprecated public String presetFilename; - /** @deprecated Use {@link #getExtraArgs()} instead */ - @Deprecated public final List extra_args = new ArrayList<>(); - /** @deprecated Use {@link #getStrict()} instead */ - @Deprecated public FFmpegBuilder.Strict strict = FFmpegBuilder.Strict.NORMAL; - /** @deprecated Use {@link #getTargetSize()} instead */ - @Deprecated public long targetSize = 0; // in bytes - /** @deprecated Use {@link #getPassPaddingBitrate()} instead */ - @Deprecated public long pass_padding_bitrate = 1024; // in bits per second - /** @deprecated Use {@link #isThrowWarnings()} instead */ - @Deprecated public boolean throwWarnings = true; // TODO Either delete this, or apply it consistently protected AbstractFFmpegStreamBuilder() { @@ -350,8 +287,8 @@ public T setVideoHeight(int height) { public T setVideoResolution(int width, int height) { checkArgument( - isValidSize(width) && isValidSize(height), - "Both width and height must be -1 or greater than zero"); + isValidSize(width) && isValidSize(height), + "Both width and height must be -1 or greater than zero"); this.video_enabled = true; this.video_width = width; @@ -646,6 +583,10 @@ protected List build(FFmpegBuilder parent, int pass) { args.add("-sn"); } + + addFormatArgs(args); + + args.addAll(extra_args); if (filename != null && uri != null) { @@ -735,8 +676,8 @@ protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder if (video_size != null) { checkArgument( - video_width == 0 && video_height == 0, - "Can not specific width or height, as well as an abbreviatied video size"); + video_width == 0 && video_height == 0, + "Can not specific width or height, as well as an abbreviatied video size"); args.add("-s", video_size); } else if (video_width != 0 && video_height != 0) { @@ -750,119 +691,7 @@ protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder } } - public String getFormat() { - return format; - } - - public Long getStartOffset() { - return startOffset; - } - - public Long getDuration() { - return duration; - } - - public List getMetaTags() { - return ImmutableList.copyOf(meta_tags); - } - - public boolean isAudioEnabled() { - return audio_enabled; - } - - public String getAudioCodec() { - return audio_codec; - } - - public int getAudioChannels() { - return audio_channels; - } - - public int getAudioSampleRate() { - return audio_sample_rate; - } - - public String getAudioPreset() { - return audio_preset; - } - - public boolean isVideoEnabled() { - return video_enabled; - } - - public String getVideoCodec() { - return video_codec; - } - - public boolean isVideoCopyinkf() { - return video_copyinkf; - } - - public Fraction getVideoFrameRate() { - return video_frame_rate; - } - - public int getVideoWidth() { - return video_width; - } - - public int getVideoHeight() { - return video_height; - } - - public String getVideoSize() { - return video_size; - } - - public String getVideoMovflags() { - return video_movflags; - } - - public Integer getVideoFrames() { - return video_frames; - } - - public String getVideoPixelFormat() { - return video_pixel_format; - } - - public boolean isSubtitleEnabled() { - return subtitle_enabled; - } - - public String getSubtitlePreset() { - return subtitle_preset; - } - - public String getSubtitleCodec() { - return subtitle_codec; - } - - public String getPreset() { - return preset; - } - - public String getPresetFilename() { - return presetFilename; - } - - public List getExtraArgs() { - return extra_args; - } - - public FFmpegBuilder.Strict getStrict() { - return strict; - } - - public long getTargetSize() { - return targetSize; - } - - public long getPassPaddingBitrate() { - return pass_padding_bitrate; - } + protected void addFormatArgs(ImmutableList.Builder args) { - public boolean isThrowWarnings() { - return throwWarnings; } } diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index b80401fa..ada09b10 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -79,7 +79,7 @@ public String toString() { final List extra_args = new ArrayList<>(); // Output - final List outputs = new ArrayList<>(); + final List> outputs = new ArrayList<>(); // Filters String audioFilter; @@ -154,13 +154,13 @@ public FFmpegBuilder setInput(String filename) { return addInput(filename); } - public FFmpegBuilder setThreads(int threads) { - checkArgument(threads > 0, "threads must be greater than zero"); - this.threads = threads; - return this; - } + public FFmpegBuilder setThreads(int threads) { + checkArgument(threads > 0, "threads must be greater than zero"); + this.threads = threads; + return this; + } - public FFmpegBuilder setFormat(String format) { + public FFmpegBuilder setFormat(String format) { this.format = checkNotNull(format); return this; } @@ -213,7 +213,7 @@ public FFmpegBuilder setVideoFilter(String filter) { /** * Sets vbr quality when decoding mp3 output. - * + * * @param quality the quality between 0 and 9. Where 0 is best. * @return FFmpegBuilder */ @@ -263,6 +263,27 @@ public FFmpegOutputBuilder addOutput(URI uri) { return output; } + /** + * Adds new HLS(Http Live Streaming) output file. + *
    + *

    +   * List<String> args = new FFmpegBuilder()
    +   *   .addHlsOutput("output.m3u8")
    +   *   .build();
    +   * 
    + * + * @param filename output file path + * + * @return A new {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder addHlsOutput(String filename) { + checkArgument(format == null || format.equals("hls"),"The format is already set to a value other than hls."); + if(format == null) setFormat("hls"); + FFmpegHlsOutputBuilder output = new FFmpegHlsOutputBuilder(this, filename); + outputs.add(output); + return output; + } + /** * Adds an existing FFmpegOutputBuilder. This is similar to calling the other addOuput methods but * instead allows an existing FFmpegOutputBuilder to be used, and reused. @@ -357,7 +378,7 @@ public List build() { args.add("-qscale:a", qscale.toString()); } - for (FFmpegOutputBuilder output : this.outputs) { + for (AbstractFFmpegOutputBuilder output : this.outputs) { args.addAll(output.build(this, pass)); } diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java new file mode 100644 index 00000000..769b045c --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java @@ -0,0 +1,125 @@ +package net.bramp.ffmpeg.builder; + +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import javax.annotation.CheckReturnValue; +import static com.google.common.base.Preconditions.*; +import static net.bramp.ffmpeg.FFmpegUtils.toTimecode; +import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; +import java.util.concurrent.TimeUnit; + +public class FFmpegHlsOutputBuilder extends AbstractFFmpegOutputBuilder { + + public Long hls_time; + public String hls_segment_filename; + public Long hls_init_time; + public Integer hls_list_size; + public String hls_base_url; + + + protected FFmpegHlsOutputBuilder(FFmpegBuilder parent, String filename) { + super(parent, filename); + } + + + /** + * Set the target segment length. Default value is 2 seconds. + * + * @param duration hls_time to set + * @param units The units the offset is in + * @return {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder setHlsTime(long duration, TimeUnit units) { + checkNotNull(units); + this.hls_time = units.toMillis(duration); + + return this; + } + + /** + * hls_segment_filename Examples
    + *
    + * "file%03d.ts" segment files: file000.ts, file001.ts, file002.ts, etc. + * + * @param filename hls_segment_file_name to set + * @return {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder setHlsSegmentFileName(String filename) { + this.hls_segment_filename = checkNotEmpty(filename, "filename must not be empty"); + + return this; + } + + /** + * Segment will be cut on the next key frame after this time has passed on the first m3u8 list.
    + * + * @param duration hls_init_time to set + * @param units The units the offset is in + * @return {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder setHlsInitTime(long duration, TimeUnit units) { + checkNotNull(units); + this.hls_init_time = units.toMillis(duration); + + return this; + } + + /** + * Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments .
    + * Default value is 5
    + * + * @param size hls_time to set + * @return {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder setHlsListSize(int size) { + checkArgument(size >= 0, "Size cannot be less than 0."); + this.hls_list_size = size; + + return this; + } + + /** + * Append baseurl to every entry in the playlist. + * Useful to generate playlists with absolute paths.
    + * Note that the playlist sequence number must be unique for each segment and it is not to be confused with the segment filename sequence number which can be cyclic, for example if the wrap option is specified.

    + * + * @param baseurl hls_base_url to set + * @return {@link FFmpegHlsOutputBuilder} + */ + public FFmpegHlsOutputBuilder setHlsBaseUrl(String baseurl) { + this.hls_base_url = checkNotEmpty(baseurl, "baseurl must not be empty"); + + return this; + } + + @Override + protected void addFormatArgs(ImmutableList.Builder args) { + super.addFormatArgs(args); + if (hls_time != null) { + args.add("-hls_time", toTimecode(hls_time, TimeUnit.MILLISECONDS)); + } + + if (!Strings.isNullOrEmpty(hls_segment_filename)) { + args.add("-hls_segment_filename", hls_segment_filename); + } + + if (hls_init_time != null) { + args.add("-hls_init_time",toTimecode(hls_init_time, TimeUnit.MILLISECONDS)); + } + + if (hls_list_size != null) { + args.add("-hls_list_size",hls_list_size.toString()); + } + + if (!Strings.isNullOrEmpty(hls_base_url)){ + args.add("-hls_base_url",hls_base_url); + } + } + + @CheckReturnValue + @Override + protected FFmpegHlsOutputBuilder getThis() { + return this; + } +} + diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java index 08b4cd98..aad16a02 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegOutputBuilder.java @@ -1,426 +1,19 @@ package net.bramp.ffmpeg.builder; -import static com.google.common.base.Preconditions.*; -import static net.bramp.ffmpeg.Preconditions.checkNotEmpty; - -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableList; -import com.google.errorprone.annotations.InlineMe; - import java.net.URI; -import java.util.List; -import java.util.regex.Pattern; -import javax.annotation.CheckReturnValue; -import net.bramp.ffmpeg.options.AudioEncodingOptions; -import net.bramp.ffmpeg.options.EncodingOptions; -import net.bramp.ffmpeg.options.MainEncodingOptions; -import net.bramp.ffmpeg.options.VideoEncodingOptions; -import net.bramp.ffmpeg.probe.FFmpegProbeResult; - -/** Builds a representation of a single output/encoding setting */ -@SuppressWarnings({"DeprecatedIsStillUsed", "deprecation"}) -public class FFmpegOutputBuilder extends AbstractFFmpegStreamBuilder { - - static final Pattern trailingZero = Pattern.compile("\\.0*$"); - - /** @deprecated Use {@link #getConstantRateFactor()} instead*/ - @Deprecated - public Double constantRateFactor; - - /** @deprecated Use {@link #getAudioSampleFormat()} instead*/ - @Deprecated - public String audio_sample_format; - /** @deprecated Use {@link #getAudioBitRate()} instead*/ - @Deprecated - public long audio_bit_rate; - /** @deprecated Use {@link #getAudioQuality()} instead*/ - @Deprecated - public Double audio_quality; - /** @deprecated Use {@link #getAudioBitStreamFilter()} instead*/ - @Deprecated - public String audio_bit_stream_filter; - /** @deprecated Use {@link #getAudioFilter()} instead*/ - @Deprecated - public String audio_filter; - - /** @deprecated Use {@link #getVideoBitRate()} instead*/ - @Deprecated - public long video_bit_rate; - /** @deprecated Use {@link #getVideoQuality()} instead*/ - @Deprecated - public Double video_quality; - /** @deprecated Use {@link #getVideoPreset()} instead*/ - @Deprecated - public String video_preset; - /** @deprecated Use {@link #getVideoFilter()} instead*/ - @Deprecated - public String video_filter; - /** @deprecated Use {@link #getVideoBitStreamFilter()} instead*/ - @Deprecated - public String video_bit_stream_filter; - - public FFmpegOutputBuilder() { - super(); - } - - protected FFmpegOutputBuilder(FFmpegBuilder parent, String filename) { - super(parent, filename); - } - - protected FFmpegOutputBuilder(FFmpegBuilder parent, URI uri) { - super(parent, uri); - } - - public FFmpegOutputBuilder setConstantRateFactor(double factor) { - checkArgument(factor >= 0, "constant rate factor must be greater or equal to zero"); - this.constantRateFactor = factor; - return this; - } - - public FFmpegOutputBuilder setVideoBitRate(long bit_rate) { - checkArgument(bit_rate > 0, "bit rate must be positive"); - this.video_enabled = true; - this.video_bit_rate = bit_rate; - return this; - } - - public FFmpegOutputBuilder setVideoQuality(double quality) { - checkArgument(quality > 0, "quality must be positive"); - this.video_enabled = true; - this.video_quality = quality; - return this; - } - - public FFmpegOutputBuilder setVideoBitStreamFilter(String filter) { - this.video_bit_stream_filter = checkNotEmpty(filter, "filter must not be empty"); - return this; - } - - /** - * Sets a video preset to use. - * - *

    Uses `-vpre`. - * - * @param preset the preset - * @return this - */ - public FFmpegOutputBuilder setVideoPreset(String preset) { - this.video_enabled = true; - this.video_preset = checkNotEmpty(preset, "video preset must not be empty"); - return this; - } - - /** - * Sets Video Filter - * - *

    TODO Build a fluent Filter builder - * - * @param filter The video filter. - * @return this - */ - public FFmpegOutputBuilder setVideoFilter(String filter) { - this.video_enabled = true; - this.video_filter = checkNotEmpty(filter, "filter must not be empty"); - return this; - } - - /** - * Sets the audio bit depth. - * - * @param bit_depth The sample format, one of the net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_* constants. - * @return this - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_U8 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_S16 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_S32 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_FLT - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_DEPTH_DBL - * @deprecated use {@link #setAudioSampleFormat} instead. - */ - @Deprecated - @InlineMe(replacement = "this.setAudioSampleFormat(bit_depth)") - final public FFmpegOutputBuilder setAudioBitDepth(String bit_depth) { - return setAudioSampleFormat(bit_depth); - } - - /** - * Sets the audio sample format. - * - * @param sample_format The sample format, one of the net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_* - * constants. - * @return this - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_U8 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_S16 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_S32 - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_FLT - * @see net.bramp.ffmpeg.FFmpeg#AUDIO_FORMAT_DBL - */ - public FFmpegOutputBuilder setAudioSampleFormat(String sample_format) { - this.audio_enabled = true; - this.audio_sample_format = checkNotEmpty(sample_format, "sample format must not be empty"); - return this; - } - /** - * Sets the Audio bit rate - * - * @param bit_rate Audio bitrate in bits per second. - * @return this - */ - public FFmpegOutputBuilder setAudioBitRate(long bit_rate) { - checkArgument(bit_rate > 0, "bit rate must be positive"); - this.audio_enabled = true; - this.audio_bit_rate = bit_rate; - return this; - } +public class FFmpegOutputBuilder extends AbstractFFmpegOutputBuilder{ - public FFmpegOutputBuilder setAudioQuality(double quality) { - checkArgument(quality > 0, "quality must be positive"); - this.audio_enabled = true; - this.audio_quality = quality; - return this; - } - - public FFmpegOutputBuilder setAudioBitStreamFilter(String filter) { - this.audio_enabled = true; - this.audio_bit_stream_filter = checkNotEmpty(filter, "filter must not be empty"); - return this; - } - - /** - * Sets Audio Filter - * - *

    TODO Build a fluent Filter builder - * - * @param filter The audio filter. - * @return this - */ - public FFmpegOutputBuilder setAudioFilter(String filter) { - this.audio_enabled = true; - this.audio_filter = checkNotEmpty(filter, "filter must not be empty"); - return this; - } - - /** - * Returns a representation of this Builder that can be safely serialised. - * - *

    NOTE: This method is horribly out of date, and its use should be rethought. - * - * @return A new EncodingOptions capturing this Builder's state - */ - @CheckReturnValue - @Override - public EncodingOptions buildOptions() { - // TODO When/if modelmapper supports @ConstructorProperties, we map this - // object, instead of doing new XXX(...) - // https://github.com/jhalterman/modelmapper/issues/44 - return new EncodingOptions( - new MainEncodingOptions(format, startOffset, duration), - new AudioEncodingOptions( - audio_enabled, - audio_codec, - audio_channels, - audio_sample_rate, - audio_sample_format, - audio_bit_rate, - audio_quality), - new VideoEncodingOptions( - video_enabled, - video_codec, - video_frame_rate, - video_width, - video_height, - video_bit_rate, - video_frames, - video_filter, - video_preset)); - } - - @CheckReturnValue - @Override - protected List build(int pass) { - Preconditions.checkState(parent != null, "Can not build without parent being set"); - return build(parent, pass); - } - - /** - * Builds the arguments - * - * @param parent The parent FFmpegBuilder - * @param pass The particular pass. For one-pass this value will be zero, for multi-pass, it will - * be 1 for the first pass, 2 for the second, and so on. - * @return The arguments - */ - @CheckReturnValue - @Override - protected List build(FFmpegBuilder parent, int pass) { - if (pass > 0) { - checkArgument( - targetSize != 0 || video_bit_rate != 0, - "Target size, or video bitrate must be specified when using two-pass"); + public FFmpegOutputBuilder() { + super(); } - if (targetSize > 0) { - checkState(parent.inputs.size() == 1, "Target size does not support multiple inputs"); - - checkArgument( - constantRateFactor == null, "Target size can not be used with constantRateFactor"); - - String firstInput = parent.inputs.iterator().next(); - FFmpegProbeResult input = parent.inputProbes.get(firstInput); - - checkState(input != null, "Target size must be used with setInput(FFmpegProbeResult)"); - - // TODO factor in start time and/or number of frames - double durationInSeconds = input.format.duration; - long totalBitRate = - (long) Math.floor((targetSize * 8) / durationInSeconds) - pass_padding_bitrate; - - // TODO Calculate audioBitRate - - if (video_enabled && video_bit_rate == 0) { - // Video (and possibly audio) - long audioBitRate = audio_enabled ? audio_bit_rate : 0; - video_bit_rate = totalBitRate - audioBitRate; - } else if (audio_enabled && audio_bit_rate == 0) { - // Just Audio - audio_bit_rate = totalBitRate; - } - } - - return super.build(parent, pass); - } - - /** - * Returns a double formatted as a string. If the double is an integer, then trailing zeros are - * striped. - * - * @param d the double to format. - * @return The formatted double. - */ - protected static String formatDecimalInteger(double d) { - return trailingZero.matcher(String.valueOf(d)).replaceAll(""); - } - - @Override - protected void addGlobalFlags(FFmpegBuilder parent, ImmutableList.Builder args) { - super.addGlobalFlags(parent, args); - - if (constantRateFactor != null) { - args.add("-crf", formatDecimalInteger(constantRateFactor)); + protected FFmpegOutputBuilder(FFmpegBuilder parent, String filename) { + super(parent, filename); } - } - - @Override - protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder args) { - super.addVideoFlags(parent, args); - if (video_bit_rate > 0 && video_quality != null) { - // I'm not sure, but it seems video_quality overrides video_bit_rate, so don't allow both - throw new IllegalStateException("Only one of video_bit_rate and video_quality can be set"); + protected FFmpegOutputBuilder(FFmpegBuilder parent, URI uri) { + super(parent, uri); } - if (video_bit_rate > 0) { - args.add("-b:v", String.valueOf(video_bit_rate)); - } - - if (video_quality != null) { - args.add("-qscale:v", formatDecimalInteger(video_quality)); - } - - if (!Strings.isNullOrEmpty(video_preset)) { - args.add("-vpre", video_preset); - } - - if (!Strings.isNullOrEmpty(video_filter)) { - checkState( - parent.inputs.size() == 1, - "Video filter only works with one input, instead use setComplexVideoFilter(..)"); - args.add("-vf", video_filter); - } - - if (!Strings.isNullOrEmpty(video_bit_stream_filter)) { - args.add("-bsf:v", video_bit_stream_filter); - } - } - - @Override - protected void addAudioFlags(ImmutableList.Builder args) { - super.addAudioFlags(args); - - if (!Strings.isNullOrEmpty(audio_sample_format)) { - args.add("-sample_fmt", audio_sample_format); - } - - if (audio_bit_rate > 0 && audio_quality != null && throwWarnings) { - // I'm not sure, but it seems audio_quality overrides audio_bit_rate, so don't allow both - throw new IllegalStateException("Only one of audio_bit_rate and audio_quality can be set"); - } - - if (audio_bit_rate > 0) { - args.add("-b:a", String.valueOf(audio_bit_rate)); - } - - if (audio_quality != null) { - args.add("-qscale:a", formatDecimalInteger(audio_quality)); - } - - if (!Strings.isNullOrEmpty(audio_bit_stream_filter)) { - args.add("-bsf:a", audio_bit_stream_filter); - } - - if (!Strings.isNullOrEmpty(audio_filter)) { - args.add("-af", audio_filter); - } - } - - @CheckReturnValue - @Override - protected FFmpegOutputBuilder getThis() { - return this; - } - - public Double getConstantRateFactor() { - return constantRateFactor; - } - - public String getAudioSampleFormat() { - return audio_sample_format; - } - - public long getAudioBitRate() { - return audio_bit_rate; - } - - public Double getAudioQuality() { - return audio_quality; - } - - public String getAudioBitStreamFilter() { - return audio_bit_stream_filter; - } - - public String getAudioFilter() { - return audio_filter; - } - - public long getVideoBitRate() { - return video_bit_rate; - } - - public Double getVideoQuality() { - return video_quality; - } - - public String getVideoPreset() { - return video_preset; - } - - public String getVideoFilter() { - return video_filter; - } - - public String getVideoBitStreamFilter() { - return video_bit_stream_filter; - } } diff --git a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java index 6d7c5ecb..631d6792 100644 --- a/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java +++ b/src/main/java/net/bramp/ffmpeg/modelmapper/Mapper.java @@ -2,6 +2,7 @@ import static net.bramp.ffmpeg.modelmapper.NotDefaultCondition.notDefault; +import net.bramp.ffmpeg.builder.AbstractFFmpegOutputBuilder; import net.bramp.ffmpeg.builder.AbstractFFmpegStreamBuilder; import net.bramp.ffmpeg.builder.FFmpegOutputBuilder; import net.bramp.ffmpeg.options.AudioEncodingOptions; @@ -72,23 +73,23 @@ static class VideoWrapper { } } - public static > void map( - MainEncodingOptions opts, AbstractFFmpegStreamBuilder dest) { + public static > void map( + MainEncodingOptions opts, T dest) { mapper.map(opts, dest); } - public static > void map( - AudioEncodingOptions opts, AbstractFFmpegStreamBuilder dest) { + public static > void map( + AudioEncodingOptions opts, T dest) { mapper.map(new AudioWrapper(opts), dest); } - public static > void map( - VideoEncodingOptions opts, AbstractFFmpegStreamBuilder dest) { + public static > void map( + VideoEncodingOptions opts, T dest) { mapper.map(new VideoWrapper(opts), dest); } - public static > void map( - EncodingOptions opts, AbstractFFmpegStreamBuilder dest) { + public static > void map( + EncodingOptions opts, T dest) { map(opts.getMain(), dest); if (opts.getAudio().isEnabled()) { diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilderTest.java new file mode 100644 index 00000000..7ccaadc5 --- /dev/null +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilderTest.java @@ -0,0 +1,56 @@ +package net.bramp.ffmpeg.builder; + +import com.google.common.collect.ImmutableList; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import java.io.IOException; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class FFmpegHlsOutputBuilderTest { + public FFmpegHlsOutputBuilderTest() throws IOException { + } + + @Test + public void testAddHlsOutput() { + List args = + new FFmpegBuilder() + .setInput("input") + .addHlsOutput("output.m3u8") + .setHlsTime(5, TimeUnit.MILLISECONDS) + .setHlsBaseUrl("test1234/") + .setHlsListSize(3) + .setHlsInitTime(3, TimeUnit.MILLISECONDS) + .setHlsSegmentFileName("file%03d.ts") + .done() + .build(); + assertEquals( + args, ImmutableList.of("-y", "-v", "error", "-f", "hls", "-i", "input", "-hls_time", "00:00:00.005", + "-hls_segment_filename", "file%03d.ts", "-hls_init_time", "00:00:00.003", + "-hls_list_size", "3", "-hls_base_url", "test1234/", "output.m3u8")); + } + + @Test + public void mixedHlsAndDefault() { + List args = + new FFmpegBuilder() + .setInput("input") + .addHlsOutput("output.m3u8") + .setHlsTime(5, TimeUnit.MILLISECONDS) + .setHlsBaseUrl("test1234/") + .setVideoBitRate(3) + .setVideoFilter("TEST") + .setHlsListSize(3) + .setHlsInitTime(3, TimeUnit.MILLISECONDS) + .setHlsSegmentFileName("file%03d.ts") + .done() + .build(); + assertEquals( + args, ImmutableList.of("-y", "-v", "error", "-f","hls", "-i", "input","-b:v","3","-vf","TEST","-hls_time", "00:00:00.005", + "-hls_segment_filename", "file%03d.ts", "-hls_init_time", "00:00:00.003", + "-hls_list_size", "3", "-hls_base_url", "test1234/", "output.m3u8")); + } + + +} \ No newline at end of file From fa72c36089d0070d0f3dc2af7fb6d2dfd5509df7 Mon Sep 17 00:00:00 2001 From: Euklios Date: Thu, 8 Aug 2024 14:53:54 +0200 Subject: [PATCH 061/101] fix(hls): Move setFormat into the OutputBuilder (#337) * fix(hls): Move setFormat into the OutputBuilder --- .gitignore | 1 + .../bramp/ffmpeg/builder/FFmpegBuilder.java | 8 ++-- .../builder/FFmpegHlsOutputBuilder.java | 10 +++++ .../builder/FFmpegHlsOutputBuilderTest.java | 45 +++++++++++++++---- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 437cda81..2e976610 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ apidocs *.log *.log.mbtree output.mp4 +tmp/ diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index ada09b10..fa1f5455 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -26,7 +26,7 @@ public class FFmpegBuilder { public enum Strict { - VERY, // strictly conform to a older more strict version of the specifications or reference + VERY, // strictly conform to an older more strict version of the specifications or reference // software STRICT, // strictly conform to all the things in the specificiations no matter what consequences NORMAL, // normal @@ -269,7 +269,7 @@ public FFmpegOutputBuilder addOutput(URI uri) { *

        * List<String> args = new FFmpegBuilder()
        *   .addHlsOutput("output.m3u8")
    -   *   .build();
    +   *   .done().build();
        * 
    * * @param filename output file path @@ -277,8 +277,6 @@ public FFmpegOutputBuilder addOutput(URI uri) { * @return A new {@link FFmpegHlsOutputBuilder} */ public FFmpegHlsOutputBuilder addHlsOutput(String filename) { - checkArgument(format == null || format.equals("hls"),"The format is already set to a value other than hls."); - if(format == null) setFormat("hls"); FFmpegHlsOutputBuilder output = new FFmpegHlsOutputBuilder(this, filename); outputs.add(output); return output; @@ -316,7 +314,7 @@ public FFmpegOutputBuilder addStdoutOutput() { @CheckReturnValue public List build() { - ImmutableList.Builder args = new ImmutableList.Builder(); + ImmutableList.Builder args = new ImmutableList.Builder<>(); Preconditions.checkArgument(!inputs.isEmpty(), "At least one input must be specified"); Preconditions.checkArgument(!outputs.isEmpty(), "At least one output must be specified"); diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java index 769b045c..f642df4b 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegHlsOutputBuilder.java @@ -19,8 +19,18 @@ public class FFmpegHlsOutputBuilder extends AbstractFFmpegOutputBuilder command = new FFmpegBuilder() + .setInput(Samples.TEST_PREFIX + Samples.base_big_buck_bunny_720p_1mb) + .addHlsOutput("tmp/output.m3u8") + .setHlsTime(5, TimeUnit.SECONDS) + .setHlsBaseUrl("test1234/") + .setVideoBitRate(1000) + .setHlsListSize(3) + .setHlsInitTime(3, TimeUnit.MILLISECONDS) + .setHlsSegmentFileName("tmp/file%03d.ts") + .done() + .build(); -} \ No newline at end of file + new FFmpeg().run(command); + + assertTrue(Files.exists(Paths.get("tmp/output.m3u8"))); + assertTrue(Files.exists(Paths.get("tmp/file000.ts"))); + } +} From 2ce21daba14d53018cbd0e983a039253c2c8708d Mon Sep 17 00:00:00 2001 From: Euklios Date: Thu, 8 Aug 2024 17:10:58 +0200 Subject: [PATCH 062/101] fix: Don't check if the ffprobe executable path matches while testing (#338) This allows using the FFPROBE environment variable when running tests locally --- .../java/net/bramp/ffmpeg/FFprobeTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index c01ce529..444b864a 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -423,11 +423,11 @@ public void testProbeDefaultArguments() throws IOException { verify(runFunc, times(2)).run(argsCaptor.capture()); - List value = argsCaptor.getValue(); + List value = argsCaptor.getValue().subList(1, argsCaptor.getValue().size()); assertThat( value, - is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + is(ImmutableList.of("-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) ); } @@ -437,11 +437,11 @@ public void testProbeProbeBuilder() throws IOException { verify(runFunc, times(2)).run(argsCaptor.capture()); - List value = argsCaptor.getValue(); + List value = argsCaptor.getValue().subList(1, argsCaptor.getValue().size()); assertThat( value, - is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + is(ImmutableList.of("-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) ); } @@ -451,11 +451,11 @@ public void testProbeProbeBuilderBuilt() throws IOException { verify(runFunc, times(2)).run(argsCaptor.capture()); - List value = argsCaptor.getValue(); + List value = argsCaptor.getValue().subList(1, argsCaptor.getValue().size()); assertThat( value, - is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + is(ImmutableList.of("-v", "quiet", "-print_format", "json", "-show_error", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) ); } @@ -465,11 +465,11 @@ public void testProbeProbeExtraArgs() throws IOException { verify(runFunc, times(2)).run(argsCaptor.capture()); - List value = argsCaptor.getValue(); + List value = argsCaptor.getValue().subList(1, argsCaptor.getValue().size()); assertThat( value, - is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-rw_timeout", "0", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + is(ImmutableList.of("-v", "quiet", "-print_format", "json", "-show_error", "-rw_timeout", "0", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) ); } @@ -479,11 +479,11 @@ public void testProbeProbeUserAgent() throws IOException { verify(runFunc, times(2)).run(argsCaptor.capture()); - List value = argsCaptor.getValue(); + List value = argsCaptor.getValue().subList(1, argsCaptor.getValue().size()); assertThat( value, - is(ImmutableList.of("ffprobe", "-v", "quiet", "-print_format", "json", "-show_error", "-user_agent", "ffmpeg-cli-wrapper", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) + is(ImmutableList.of("-v", "quiet", "-print_format", "json", "-show_error", "-user_agent", "ffmpeg-cli-wrapper", "-show_format", "-show_streams", "-show_chapters", Samples.always_on_my_mind)) ); } } From 221637f47a1502618b752864c173562a91d74e77 Mon Sep 17 00:00:00 2001 From: Euklios Date: Fri, 9 Aug 2024 22:09:11 +0200 Subject: [PATCH 063/101] Feature/bump dependencies (#340) * chore: Bump dependency versions --- pom.xml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 8d772e6d..70faedbe 100644 --- a/pom.xml +++ b/pom.xml @@ -43,8 +43,6 @@ ${base.java.version} ${base.java.version} - 1.5.2 - UTF-8 UTF-8 @@ -54,12 +52,12 @@ org.slf4j slf4j-api - 2.0.12 + 2.0.13 com.github.spotbugs spotbugs-annotations - 4.8.3 + 4.8.6 com.google.errorprone @@ -69,27 +67,27 @@ com.google.guava guava - 33.0.0-jre + 33.2.1-jre commons-io commons-io - 2.15.1 + 2.16.1 org.apache.commons commons-lang3 - 3.14.0 + 3.16.0 com.google.code.gson gson - 2.10.1 + 2.11.0 org.modelmapper modelmapper - 3.2.0 + 3.2.1 @@ -107,7 +105,7 @@ org.mockito mockito-core - 5.11.0 + 5.12.0 org.hamcrest @@ -117,7 +115,7 @@ org.hamcrest hamcrest - 2.2 + 3.0 com.nitorcreations @@ -755,7 +753,7 @@ com.google.errorprone error_prone_core - 2.25.0 + 2.29.2 ch.qos.logback logback-classic - 1.5.6 + 1.5.32 @@ -105,7 +105,7 @@ org.mockito mockito-core - 5.12.0 + 5.23.0 org.hamcrest @@ -125,7 +125,7 @@ org.glassfish.grizzly grizzly-http-server - 4.0.2 + 5.0.0 @@ -256,7 +256,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.12.1 + 3.15.0 net.revelc.code @@ -306,7 +306,7 @@ com.spotify.fmt fmt-maven-plugin - 2.23 + 2.29 org.apache.maven.plugins @@ -748,12 +748,13 @@ -XDcompilePolicy=simple -Xplugin:ErrorProne + --should-stop=ifError=FLOW com.google.errorprone error_prone_core - 2.29.2 + 2.48.0 + -Xlint:-options + -Xlint:all + + net.revelc.code @@ -319,19 +334,6 @@ org.apache.maven.plugins maven-compiler-plugin - - ${base.java.version} - ${base.java.version} - true - true - true - - - -Xlint:-options - -Xlint:all - - org.apache.maven.plugins @@ -754,7 +756,7 @@ com.google.errorprone error_prone_core - 2.48.0 + ${error.prone.version} + -XDaddTypeAnnotationsToSymbol=true + + + + + + + From 72d3998b99a3168eae46ac3b2eedbe694e7596bc Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 20:35:02 -0700 Subject: [PATCH 082/101] fix: restore Java 11/17 compatibility and add robust Makefile - Use Grizzly 4.0.2 for Java 11/17 and 5.0.0 for Java 21+. - Add Makefile for testing against all supported JDKs with version validation. - Include JDK-specific Error Prone versions and flags for JDK 21+. --- Makefile | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pom.xml | 11 +++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..80370558 --- /dev/null +++ b/Makefile @@ -0,0 +1,62 @@ +JDK_VERSIONS := 11 17 21 + +.PHONY: help +help: + @echo "Usage:" + @echo " make test - Run full tests (clean verify) on all supported JDKs ($(JDK_VERSIONS))" + @echo " make compile - Run clean compile on all supported JDKs ($(JDK_VERSIONS))" + @echo " make version - Show current project version" + @echo " make test-jdk-XX - Run tests on a specific JDK version (e.g., make test-jdk-11)" + +.PHONY: version +version: + @mvn help:evaluate -Dexpression=project.version -q -DforceStdout + @echo + +.PHONY: test +test: $(addprefix test-jdk-,$(JDK_VERSIONS)) + +.PHONY: compile +compile: $(addprefix compile-jdk-,$(JDK_VERSIONS)) + +test-jdk-%: + @echo "------------------------------------------------------------" + @echo "Testing with JDK $*..." + @actual_home=$$(/usr/libexec/java_home -v $* 2>/dev/null); \ + actual_version=$$([ -n "$$actual_home" ] && "$$actual_home/bin/java" -XshowSettings:properties -version 2>&1 | grep "java.specification.version" | awk '{print $$3}' | tr -d '"'); \ + if [ "$$actual_version" != "$*" ]; then \ + brew_path=$$(brew --prefix openjdk@$* 2>/dev/null); \ + if [ -n "$$brew_path" ] && [ -d "$$brew_path/libexec/openjdk.jdk/Contents/Home" ]; then \ + actual_home="$$brew_path/libexec/openjdk.jdk/Contents/Home"; \ + actual_version=$$("$$actual_home/bin/java" -XshowSettings:properties -version 2>&1 | grep "java.specification.version" | awk '{print $$3}' | tr -d '"'); \ + fi; \ + fi; \ + if [ "$$actual_version" != "$*" ]; then \ + echo "ERROR: JDK $* not found or not active."; \ + echo "To install it, run: brew install openjdk@$*"; \ + exit 1; \ + fi; \ + export JAVA_HOME="$$actual_home"; \ + mvn -version; \ + mvn clean verify -Dgpg.skip + +compile-jdk-%: + @echo "------------------------------------------------------------" + @echo "Compiling with JDK $*..." + @actual_home=$$(/usr/libexec/java_home -v $* 2>/dev/null); \ + actual_version=$$([ -n "$$actual_home" ] && "$$actual_home/bin/java" -XshowSettings:properties -version 2>&1 | grep "java.specification.version" | awk '{print $$3}' | tr -d '"'); \ + if [ "$$actual_version" != "$*" ]; then \ + brew_path=$$(brew --prefix openjdk@$* 2>/dev/null); \ + if [ -n "$$brew_path" ] && [ -d "$$brew_path/libexec/openjdk.jdk/Contents/Home" ]; then \ + actual_home="$$brew_path/libexec/openjdk.jdk/Contents/Home"; \ + actual_version=$$("$$actual_home/bin/java" -XshowSettings:properties -version 2>&1 | grep "java.specification.version" | awk '{print $$3}' | tr -d '"'); \ + fi; \ + fi; \ + if [ "$$actual_version" != "$*" ]; then \ + echo "ERROR: JDK $* not found or not active."; \ + echo "To install it, run: brew install openjdk@$*"; \ + exit 1; \ + fi; \ + export JAVA_HOME="$$actual_home"; \ + mvn -version; \ + mvn clean compile diff --git a/pom.xml b/pom.xml index e11a76b7..4d6f410f 100644 --- a/pom.xml +++ b/pom.xml @@ -127,7 +127,7 @@ org.glassfish.grizzly grizzly-http-server - 5.0.0 + 4.0.2 @@ -836,6 +836,15 @@ 2.48.0 + + + + org.glassfish.grizzly + grizzly-http-server + 5.0.0 + + + From 742166604d164455b5c7eaa21a807bf915f095c3 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 20:59:37 -0700 Subject: [PATCH 083/101] fix: support negative durations in FFmpegUtils - Update toTimecode and fromTimecode to handle optional leading minus sign. - Fix ReadmeTest failure caused by negative out_time_ns in FFmpeg progress reports. - Add tests for negative durations in FFmpegUtilsTest. --- .../java/net/bramp/ffmpeg/FFmpegUtils.java | 26 ++++++++++++------- .../net/bramp/ffmpeg/FFmpegUtilsTest.java | 12 +++++---- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java index 53ba3b8c..ca92a3a9 100644 --- a/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java +++ b/src/main/java/net/bramp/ffmpeg/FFmpegUtils.java @@ -24,7 +24,7 @@ public final class FFmpegUtils { static final Gson gson = FFmpegUtils.setupGson(); static final Pattern BITRATE_REGEX = Pattern.compile("(\\d+(?:\\.\\d+)?)kbits/s"); - static final Pattern TIME_REGEX = Pattern.compile("(\\d+):(\\d+):(\\d+(?:\\.\\d+)?)"); + static final Pattern TIME_REGEX = Pattern.compile("(-?)(\\d+):(\\d+):(\\d+(?:\\.\\d+)?)"); static final CharMatcher ZERO = CharMatcher.is('0'); FFmpegUtils() { @@ -55,9 +55,11 @@ public static String millisecondsToString(long milliseconds) { * @return the timecode representation. */ public static String toTimecode(long duration, TimeUnit units) { - // FIXME Negative durations are also supported. - // https://www.ffmpeg.org/ffmpeg-utils.html#Time-duration - checkArgument(duration >= 0, "duration must be positive"); + String prefix = ""; + if (duration < 0) { + prefix = "-"; + duration = Math.abs(duration); + } long nanoseconds = units.toNanos(duration); // TODO This will clip at Long.MAX_VALUE long seconds = units.toSeconds(duration); @@ -69,11 +71,14 @@ public static String toTimecode(long duration, TimeUnit units) { long hours = MINUTES.toHours(minutes); minutes -= HOURS.toMinutes(hours); + String result; if (ns == 0) { - return String.format("%02d:%02d:%02d", hours, minutes, seconds); + result = String.format("%02d:%02d:%02d", hours, minutes, seconds); + } else { + result = ZERO.trimTrailingFrom(String.format("%02d:%02d:%02d.%09d", hours, minutes, seconds, ns)); } - return ZERO.trimTrailingFrom(String.format("%02d:%02d:%02d.%09d", hours, minutes, seconds, ns)); + return prefix + result; } /** @@ -95,11 +100,12 @@ public static long fromTimecode(String time) { throw new IllegalArgumentException("invalid time '" + time + "'"); } - long hours = Long.parseLong(m.group(1)); - long mins = Long.parseLong(m.group(2)); - double secs = Double.parseDouble(m.group(3)); + long sign = m.group(1).equals("-") ? -1 : 1; + long hours = Long.parseLong(m.group(2)); + long mins = Long.parseLong(m.group(3)); + double secs = Double.parseDouble(m.group(4)); - return HOURS.toNanos(hours) + MINUTES.toNanos(mins) + (long) (SECONDS.toNanos(1) * secs); + return sign * (HOURS.toNanos(hours) + MINUTES.toNanos(mins) + (long) (SECONDS.toNanos(1) * secs)); } /** diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java index 4993fb1b..035bc69f 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegUtilsTest.java @@ -23,22 +23,23 @@ public void testMillisecondsToString() { assertEquals("00:00:00.001", millisecondsToString(1)); } - @Test(expected = IllegalArgumentException.class) + @Test @SuppressWarnings({"deprecation", "InlineMeInliner"}) public void testMillisecondsToStringNegative() { - millisecondsToString(-1); + assertEquals("-00:00:00.001", millisecondsToString(-1)); } - @Test(expected = IllegalArgumentException.class) + @Test @SuppressWarnings({"deprecation", "InlineMeInliner"}) - public void testMillisecondsToStringNegativeMinValue() { - millisecondsToString(Long.MIN_VALUE); + public void testMillisecondsToStringNegativeLarge() { + assertEquals("-34:17:36.789", millisecondsToString(-123456789)); } @Test public void testToTimecode() { assertEquals("00:00:00", toTimecode(0, TimeUnit.NANOSECONDS)); assertEquals("00:00:00.000000001", toTimecode(1, TimeUnit.NANOSECONDS)); + assertEquals("-00:00:00.000000001", toTimecode(-1, TimeUnit.NANOSECONDS)); assertEquals("00:00:00.000001", toTimecode(1, TimeUnit.MICROSECONDS)); assertEquals("00:00:00.001", toTimecode(1, TimeUnit.MILLISECONDS)); assertEquals("00:00:01", toTimecode(1, TimeUnit.SECONDS)); @@ -49,6 +50,7 @@ public void testToTimecode() { @Test public void testFromTimecode() { assertEquals(63123000000L, fromTimecode("00:01:03.123")); + assertEquals(-63123000000L, fromTimecode("-00:01:03.123")); assertEquals(63000000000L, fromTimecode("00:01:03")); assertEquals(5025678000000L, fromTimecode("01:23:45.678")); assertEquals(0, fromTimecode("00:00:00")); From 5cd2c3ef9a762cc0a88f858016559004950acbfa Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 21:51:33 -0700 Subject: [PATCH 084/101] ci: add modern publish workflow with GPG and caching support --- .github/workflows/publish.yml | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..48d9c775 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,43 @@ +name: Publish to Maven Central + +on: + release: + types: [published] + workflow_dispatch: + inputs: + skipTests: + description: 'Skip tests during publish' + required: false + default: 'true' + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + server-id: ossrh + server-username: OSSRH_USERNAME + server-password: OSSRH_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + cache: 'maven' + + - name: Install FFmpeg + run: sudo apt-get update && sudo apt-get install -y ffmpeg + + - name: Publish to Sonatype + run: | + mvn clean deploy \ + -DskipTests=${{ github.event.inputs.skipTests || 'true' }} \ + --no-transfer-progress \ + -P Java11+ + env: + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 9f567dd3957449edf7c424ff17107097a60f5838 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 21:58:21 -0700 Subject: [PATCH 085/101] ci: migrate to Sonatype Central Portal and central-publishing-maven-plugin --- .github/workflows/publish.yml | 12 ++++++------ pom.xml | 23 ++++++++++------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 48d9c775..bf6fbfc3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,9 +21,9 @@ jobs: with: java-version: '21' distribution: 'temurin' - server-id: ossrh - server-username: OSSRH_USERNAME - server-password: OSSRH_PASSWORD + server-id: central + server-username: CENTRAL_USERNAME + server-password: CENTRAL_PASSWORD gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: GPG_PASSPHRASE cache: 'maven' @@ -31,13 +31,13 @@ jobs: - name: Install FFmpeg run: sudo apt-get update && sudo apt-get install -y ffmpeg - - name: Publish to Sonatype + - name: Publish to Sonatype Central Portal run: | mvn clean deploy \ -DskipTests=${{ github.event.inputs.skipTests || 'true' }} \ --no-transfer-progress \ -P Java11+ env: - OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} - OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} + CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/pom.xml b/pom.xml index 4d6f410f..114c9ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -208,13 +208,9 @@ - ossrh + central https://oss.sonatype.org/content/repositories/snapshots - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - @@ -314,9 +310,9 @@ 3.0.1 - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.13 + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 com.spotify.fmt @@ -447,13 +443,14 @@ - org.sonatype.plugins - nexus-staging-maven-plugin + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 true - ossrh - https://oss.sonatype.org/ - true + central + true + published From f843cb16b373a7184f76f08ca794e4cde9daa747 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 21:59:49 -0700 Subject: [PATCH 086/101] ci: scope publish job to 'publish' environment --- .github/workflows/publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bf6fbfc3..633a8c6d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,6 +13,7 @@ on: jobs: publish: runs-on: ubuntu-latest + environment: publish steps: - uses: actions/checkout@v4 From 72be4927fe44bc1ce658b29e24b869bc2fbf07a7 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:29:26 -0700 Subject: [PATCH 087/101] chore: bump version to 0.9.0-SNAPSHOT and align publish workflow --- .github/workflows/publish.yml | 3 +++ README.md | 2 +- pom.xml | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 633a8c6d..0ffd8216 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,6 +1,9 @@ name: Publish to Maven Central on: + push: + tags: + - 'ffmpeg-*' release: types: [published] workflow_dispatch: diff --git a/README.md b/README.md index d9386ad1..ebb6b250 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ We currently support Java 11 and above. Use Maven to install the dependency. net.bramp.ffmpeg ffmpeg - 0.8.1-SNAPSHOT + 0.9.0-SNAPSHOT ``` diff --git a/pom.xml b/pom.xml index 114c9ca3..c00271a7 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.8.1-SNAPSHOT + 0.9.0-SNAPSHOT FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface @@ -11,7 +11,6 @@ https://github.com/bramp/ffmpeg-cli-wrapper scm:git:git@github.com:bramp/ffmpeg-cli-wrapper.git - ffmpeg-0.7.0 From a5e23c1a0853695730e7e089c172a5a3979ebdb3 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:36:12 -0700 Subject: [PATCH 088/101] ci: use workflow_run to publish only after tests pass on tags --- .github/workflows/publish.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0ffd8216..e39ddbea 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,25 +1,34 @@ name: Publish to Maven Central on: - push: - tags: - - 'ffmpeg-*' - release: - types: [published] + workflow_run: + workflows: ["Java CI with Maven"] + types: + - completed + branches: + - 'ffmpeg-*' # Only trigger when a tag matching ffmpeg-* was pushed workflow_dispatch: inputs: skipTests: description: 'Skip tests during publish' required: false - default: 'true' + default: 'false' jobs: publish: runs-on: ubuntu-latest + # Only run if the triggering workflow succeeded (for workflow_run) + # or if manually triggered (for workflow_dispatch) + if: ${{ (github.event.workflow_run.conclusion == 'success') || (github.event_name == 'workflow_dispatch') }} environment: publish steps: - uses: actions/checkout@v4 + - name: Set up FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v3 + with: + ffmpeg-version: release + - name: Set up JDK 21 uses: actions/setup-java@v4 with: @@ -32,9 +41,6 @@ jobs: gpg-passphrase: GPG_PASSPHRASE cache: 'maven' - - name: Install FFmpeg - run: sudo apt-get update && sudo apt-get install -y ffmpeg - - name: Publish to Sonatype Central Portal run: | mvn clean deploy \ From 54e0702a40f20cd914aeb135ed6c682ea4af39e8 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:36:37 -0700 Subject: [PATCH 089/101] ci: run tests on tags starting with ffmpeg- --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 83e44400..deeb36bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,7 @@ name: Java CI with Maven on: push: branches: [ "master" ] + tags: [ "ffmpeg-*" ] pull_request: branches: [ "master" ] From dd7d55a7e06dc4a434e167a8ceeaf363387d5692 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:42:45 -0700 Subject: [PATCH 090/101] ci: securely pass GPG passphrase via loopback and env var --- .github/workflows/publish.yml | 2 +- pom.xml | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e39ddbea..9f56d6cd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -46,7 +46,7 @@ jobs: mvn clean deploy \ -DskipTests=${{ github.event.inputs.skipTests || 'true' }} \ --no-transfer-progress \ - -P Java11+ + -P java11plus env: CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} diff --git a/pom.xml b/pom.xml index c00271a7..2ae50880 100644 --- a/pom.xml +++ b/pom.xml @@ -426,6 +426,12 @@ sign + + + --pinentry-mode + loopback + + @@ -728,7 +734,7 @@ - Java 11+ + java11plus [11,) From a08e25ef646aad4e766eb29d824dff8a207c8fb3 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:49:05 -0700 Subject: [PATCH 091/101] ci: merge publish job into test workflow for guaranteed serial execution --- .github/workflows/publish.yml | 53 ----------------- .github/workflows/test.yml | 104 ++++++++++++++++++++++------------ 2 files changed, 68 insertions(+), 89 deletions(-) delete mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 9f56d6cd..00000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Publish to Maven Central - -on: - workflow_run: - workflows: ["Java CI with Maven"] - types: - - completed - branches: - - 'ffmpeg-*' # Only trigger when a tag matching ffmpeg-* was pushed - workflow_dispatch: - inputs: - skipTests: - description: 'Skip tests during publish' - required: false - default: 'false' - -jobs: - publish: - runs-on: ubuntu-latest - # Only run if the triggering workflow succeeded (for workflow_run) - # or if manually triggered (for workflow_dispatch) - if: ${{ (github.event.workflow_run.conclusion == 'success') || (github.event_name == 'workflow_dispatch') }} - environment: publish - steps: - - uses: actions/checkout@v4 - - - name: Set up FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v3 - with: - ffmpeg-version: release - - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - java-version: '21' - distribution: 'temurin' - server-id: central - server-username: CENTRAL_USERNAME - server-password: CENTRAL_PASSWORD - gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg-passphrase: GPG_PASSPHRASE - cache: 'maven' - - - name: Publish to Sonatype Central Portal - run: | - mvn clean deploy \ - -DskipTests=${{ github.event.inputs.skipTests || 'true' }} \ - --no-transfer-progress \ - -P java11plus - env: - CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} - CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index deeb36bf..84e8dd1f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,3 @@ -# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven - name: Java CI with Maven on: @@ -9,47 +6,82 @@ on: tags: [ "ffmpeg-*" ] pull_request: branches: [ "master" ] + workflow_dispatch: + inputs: + skipTests: + description: 'Skip tests during publish' + required: false + default: 'false' jobs: - build: + test: runs-on: ubuntu-latest - # Enable debugging to help resolve: - # https://github.com/federicocarboni/setup-ffmpeg/issues/19 - environment: debug strategy: fail-fast: false matrix: - # Long term supported versions java-version: [11, 17, 21] - # TODO Should we test locales? The old travis setup did, see: - # https://github.com/bramp/ffmpeg-cli-wrapper/pull/55 - name: JDK ${{ matrix.java-version }} steps: - - uses: actions/checkout@v6 - - - name: Set up FFmpeg - uses: FedericoCarboni/setup-ffmpeg@v3 - id: setup-ffmpeg - with: - ffmpeg-version: release - - - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v5 - with: - java-version: ${{ matrix.java-version }} - distribution: 'temurin' - cache: maven - - - name: Compile with Maven - run: mvn --batch-mode --update-snapshots compile - - - name: Test with Maven, Package and Verify with Maven - run: mvn --batch-mode --update-snapshots verify -Dgpg.skip - - # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - - name: Update dependency graph - uses: advanced-security/maven-dependency-submission-action@v5 - continue-on-error: true + - uses: actions/checkout@v4 + + - name: Set up FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v3 + with: + ffmpeg-version: release + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: 'temurin' + cache: maven + + - name: Test with Maven + run: mvn --batch-mode verify -Dgpg.skip -DskipTests=${{ github.event.inputs.skipTests || 'false' }} + + - name: Update dependency graph + if: matrix.java-version == '21' && github.event_name == 'push' && github.ref == 'refs/heads/master' + uses: advanced-security/maven-dependency-submission-action@v4 + continue-on-error: true + + publish: + needs: test + # Only publish on tags (ffmpeg-*) or manual dispatch + # and only if it's not a pull request + if: | + (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/ffmpeg-')) || + (github.event_name == 'workflow_dispatch') + runs-on: ubuntu-latest + environment: publish + steps: + - uses: actions/checkout@v4 + + - name: Set up FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v3 + with: + ffmpeg-version: release + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + server-id: central + server-username: CENTRAL_USERNAME + server-password: CENTRAL_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + cache: 'maven' + + - name: Publish to Sonatype Central Portal + run: | + mvn clean deploy \ + -DskipTests=true \ + --no-transfer-progress \ + -P java11plus + env: + CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} + CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From 47bff1d27b4c9b3eb1e47203b66f173efb4d5bfa Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 22:53:10 -0700 Subject: [PATCH 092/101] ci: fix GPG signing and temporarily skip tests for faster publish iteration --- .github/workflows/test.yml | 2 +- pom.xml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 84e8dd1f..cc3d75bb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,7 @@ on: jobs: test: + if: false # Temporarily disabled to iterate on publish flow runs-on: ubuntu-latest strategy: fail-fast: false @@ -47,7 +48,6 @@ jobs: continue-on-error: true publish: - needs: test # Only publish on tags (ffmpeg-*) or manual dispatch # and only if it's not a pull request if: | diff --git a/pom.xml b/pom.xml index 2ae50880..6df20193 100644 --- a/pom.xml +++ b/pom.xml @@ -427,7 +427,10 @@ sign + true + ${env.GPG_PASSPHRASE} + --batch --pinentry-mode loopback From a3f287d76fab995451291641b0fba32135616ca0 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 23:03:24 -0700 Subject: [PATCH 093/101] ci: use MAVEN_GPG_PASSPHRASE and remove deprecated gpg config --- .github/workflows/test.yml | 1 + pom.xml | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cc3d75bb..1f6e175e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -85,3 +85,4 @@ jobs: CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/pom.xml b/pom.xml index 6df20193..c1ecf47d 100644 --- a/pom.xml +++ b/pom.xml @@ -427,8 +427,6 @@ sign - true - ${env.GPG_PASSPHRASE} --batch --pinentry-mode From 8806525e4ba61106898bc5f265a037d94cb65e85 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 23:07:23 -0700 Subject: [PATCH 094/101] ci: fix snapshot deployment URL and add deployment name --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c1ecf47d..b131fcfb 100644 --- a/pom.xml +++ b/pom.xml @@ -208,7 +208,7 @@ central - https://oss.sonatype.org/content/repositories/snapshots + https://s01.oss.sonatype.org/content/repositories/snapshots @@ -457,6 +457,7 @@ central true published + ${project.artifactId}:${project.version} From bfc3a6ec60254e763fb103c35c7ac0f5c6bede86 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 23:09:07 -0700 Subject: [PATCH 095/101] chore: test release version 0.9.0 to verify Central Portal publishing --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ebb6b250..b4746edb 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ We currently support Java 11 and above. Use Maven to install the dependency. net.bramp.ffmpeg ffmpeg - 0.9.0-SNAPSHOT + 0.9.0 ``` diff --git a/pom.xml b/pom.xml index b131fcfb..dd2e94af 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.bramp.ffmpeg ffmpeg - 0.9.0-SNAPSHOT + 0.9.0 FFmpeg Wrapper Simple Java wrapper around FFmpeg command-line interface From 23e845fb1d7f35a954002f2ff0ef949deae0f861 Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 23:15:10 -0700 Subject: [PATCH 096/101] docs: modernize building and releasing instructions --- README.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b4746edb..6a434010 100644 --- a/README.md +++ b/README.md @@ -132,25 +132,36 @@ job.run(); ## Building & Releasing -If you wish to make changes, then building and releasing is simple: +If you wish to make changes, then building and testing is simple: ```bash # To build -mvn +mvn compile # To test mvn test -# To release (pushing jar to maven central) -# (don't forget to set up your ~/.m2/settings.xml) -mvn release:prepare -mvn release:perform +# To test across all supported JDKs (11, 17, 21) +make test +``` + +### Releasing + +Releasing is automated via GitHub Actions. To trigger a release to Maven Central: -# To publish javadoc -git checkout ffmpeg-0.x -mvn clean javadoc:aggregate scm-publish:publish-scm +1. Update the version in `pom.xml` (remove `-SNAPSHOT`). +2. Commit and push the change. +3. Create and push a tag: +```bash +git tag ffmpeg-0.9.0 +git push origin ffmpeg-0.9.0 ``` +The GitHub Action will: +1. Run the full test matrix across all supported JDKs. +2. If successful, sign and publish the artifacts to the Sonatype Central Portal. +3. Create a GitHub Release with automatically generated release notes. + ## Bumpings Deps ```bash From 42d3865fa5cfd874f412bd46537801d698b6963e Mon Sep 17 00:00:00 2001 From: Andrew Brampton Date: Fri, 3 Apr 2026 23:15:54 -0700 Subject: [PATCH 097/101] ci: re-enable test matrix and restore dependency for publish job --- .github/workflows/test.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f6e175e..6bd309d1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,6 @@ on: jobs: test: - if: false # Temporarily disabled to iterate on publish flow runs-on: ubuntu-latest strategy: fail-fast: false @@ -48,6 +47,7 @@ jobs: continue-on-error: true publish: + needs: test # Only publish on tags (ffmpeg-*) or manual dispatch # and only if it's not a pull request if: | @@ -86,3 +86,9 @@ jobs: CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + + - name: Create GitHub Release + if: startsWith(github.ref, 'refs/tags/ffmpeg-') + uses: softprops/action-gh-release@v2 + with: + generate_release_notes: true From 4753a3863e44351fd934d3962604b1a159cd42c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Sch=C3=BCtz?= Date: Sat, 4 Apr 2026 09:01:18 +0200 Subject: [PATCH 098/101] Add color_space releated options to FFProbeStream (#366) Co-authored-by: Alexander Schuetz --- .../net/bramp/ffmpeg/probe/FFmpegStream.java | 21 ++++++ .../java/net/bramp/ffmpeg/FFprobeTest.java | 16 +++++ .../net/bramp/ffmpeg/fixtures/Samples.java | 2 + ...fprobe-video_with_reserved_color_space.mp4 | 64 ++++++++++++++++++ .../video_with_reserved_color_space.mp4 | Bin 0 -> 8944087 bytes 5 files changed, 103 insertions(+) create mode 100644 src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-video_with_reserved_color_space.mp4 create mode 100644 src/test/resources/net/bramp/ffmpeg/samples/video_with_reserved_color_space.mp4 diff --git a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java index 96f40d62..5c0e6d03 100644 --- a/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java +++ b/src/main/java/net/bramp/ffmpeg/probe/FFmpegStream.java @@ -60,6 +60,11 @@ public class FFmpegStream { public int channels; public String channel_layout; + public String color_range; + public String color_space; + public String color_transfer; + public String color_primaries; + public FFmpegDisposition disposition; // TODO: Make Map immutable @@ -212,6 +217,22 @@ public String getChannelLayout() { return channel_layout; } + public String getColorRange() { + return color_range; + } + + public String getColorSpace() { + return color_space; + } + + public String getColorTransfer() { + return color_transfer; + } + + public String getColorPrimaries() { + return color_primaries; + } + public FFmpegDisposition getDisposition() { return disposition; } diff --git a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java index 7a80e698..875d077d 100644 --- a/src/test/java/net/bramp/ffmpeg/FFprobeTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFprobeTest.java @@ -67,6 +67,9 @@ public void before() throws IOException { when(runFunc.run(argThatHasItem(Samples.big_buck_bunny_720p_1mb_with_packets_and_frames))) .thenAnswer(new NewProcessAnswer("ffprobe-big_buck_bunny_720p_1mb_packets_and_frames.mp4")); + when(runFunc.run(argThatHasItem(Samples.video_with_reserved_color_space))) + .thenAnswer(new NewProcessAnswer("ffprobe-video_with_reserved_color_space.mp4")); + when(runFunc.run(argThatHasItem(Samples.side_data_list))) .thenAnswer(new NewProcessAnswer("ffprobe-side_data_list")); @@ -809,4 +812,17 @@ public void testFullFrameDeserialization() throws IOException { assertEquals(6, frame.getChannels()); assertEquals("5.1", frame.getChannelLayout()); } + + @Test + public void testReservedColorSpaceVideo() throws IOException { + FFprobeBuilder probeBuilder = ffprobe.builder().setShowStreams(true).setInput(Samples.video_with_reserved_color_space); + List streams = ffprobe.probe(probeBuilder).getStreams(); + assertEquals(1, streams.size()); + FFmpegStream stream = streams.get(0); + + assertEquals("tv", stream.getColorRange()); + assertEquals("reserved", stream.getColorSpace()); + assertEquals("arib-std-b67", stream.getColorTransfer()); + assertEquals("bt2020", stream.getColorPrimaries()); + } } diff --git a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java index 6be42982..33dc226b 100644 --- a/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java +++ b/src/test/java/net/bramp/ffmpeg/fixtures/Samples.java @@ -11,10 +11,12 @@ private Samples() { public static final String base_big_buck_bunny_720p_1mb = "big_buck_bunny_720p_1mb.mp4"; public static final String base_testscreen_jpg = "testscreen.jpg"; public static final String base_test_mp3 = "test.mp3"; + public static final String base_video_with_reserved_color_space = "video_with_reserved_color_space.mp4"; public static final String big_buck_bunny_720p_1mb = TEST_PREFIX + base_big_buck_bunny_720p_1mb; public static final String testscreen_jpg = TEST_PREFIX + base_testscreen_jpg; public static final String test_mp3 = TEST_PREFIX + base_test_mp3; + public static final String video_with_reserved_color_space = TEST_PREFIX + base_video_with_reserved_color_space; private static final String book_m4b = "book_with_chapters.m4b"; public static final String book_with_chapters = TEST_PREFIX + book_m4b; diff --git a/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-video_with_reserved_color_space.mp4 b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-video_with_reserved_color_space.mp4 new file mode 100644 index 00000000..b577278a --- /dev/null +++ b/src/test/resources/net/bramp/ffmpeg/fixtures/ffprobe-video_with_reserved_color_space.mp4 @@ -0,0 +1,64 @@ +{ + "streams": [ + { + "index": 0, + "codec_name": "hevc", + "codec_long_name": "H.265 / HEVC (High Efficiency Video Coding)", + "profile": "Main 10", + "codec_type": "video", + "codec_tag_string": "hvc1", + "codec_tag": "0x31637668", + "width": 1080, + "height": 1920, + "coded_width": 1088, + "coded_height": 1920, + "closed_captions": 0, + "film_grain": 0, + "has_b_frames": 3, + "pix_fmt": "yuv420p10le", + "level": 120, + "color_range": "tv", + "color_space": "reserved", + "color_transfer": "arib-std-b67", + "color_primaries": "bt2020", + "chroma_location": "left", + "refs": 1, + "id": "0x1", + "r_frame_rate": "30/1", + "avg_frame_rate": "181000/6033", + "time_base": "1/90000", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 542970, + "duration": "6.033000", + "bit_rate": "11854362", + "nb_frames": "181", + "extradata_size": 155, + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0, + "timed_thumbnails": 0, + "captions": 0, + "descriptions": 0, + "metadata": 0, + "dependent": 0, + "still_image": 0 + }, + "tags": { + "creation_time": "2025-09-09T10:58:04.000000Z", + "language": "eng", + "handler_name": "VideoHandle", + "vendor_id": "[0][0][0][0]" + } + } + ] +} \ No newline at end of file diff --git a/src/test/resources/net/bramp/ffmpeg/samples/video_with_reserved_color_space.mp4 b/src/test/resources/net/bramp/ffmpeg/samples/video_with_reserved_color_space.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..555d94bb2b9704e1c2ad973054d85301d3d0fe3d GIT binary patch literal 8944087 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
    !&x*%MKvEI!(=)ZNnTxsrXXTI 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�XYr!o)23Yjs)SE>@$b6RJ+q`}d6InTp*4uT&= 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

    S-o=!VJiIoB5` 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

    ;%+ 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


    LBF#TU`SF&0VdL&QH z*Mm%5bvbHmQ1^UPY!OZUJ}sgr|2%nV(0W8YZ>7oM*(-H!ZwW8+a$KKOH(v`eJ59=kk=Ckpo}esG2yTw`C$J=6d&oNfYsxgKp&SvSIRjDvJxM933>LCNw_co8?2J5eIzZZRO z00+9T<(BJO*@X@&v)Gp%{X33TZ^!c5WO*pPfW@2=%XpPUd*E$P-x%Ih;m;Fm2Ph=; zB+Kwv{(N`ZGzsc}iNAQtvnJLXrXtIV-qDga@RpXl-WOf-jlvIjL=2O>e7|?$Yn1^NO3j#=NbKn8L^)ozq5EUnFo6t)nHwVDHnf(j>wns@m^cPNa5CsA zbDwL|!T#5-orU9z^slnwrlpRVkq?H%2vhnlfVkBg2zhnA0~tYkU+Ru%Z2lDYOdvRMRD zE^{9nq;lz7P@$K%F6LlCJ7CG|teECl=#X?HJXgiIq?Sm5^ws%bXRUt3;Zb%KxDG@D(&Y@D ztKYoiOhLLx%D4IM@7b#G02|+@o3;N$-Co`<39o2*++uJ&G%$5jy&TJEUKB!&bP(^Lv{G<(%Hf#UImYn$Q+uQ^Toq@v~Ull;OUG5o*n7hfR@%

    x@}o2EFm|6y12#tdKRYyeu0J zbbf0if+iH$XTemlAh(=c9z*V3N5sD_X-daD#A-EALpEPAm@=2 znui{V(gtD3&r+SAtg7ppEu&O0)B?+TiByLY;N;~cAXMg>{E9Bi&ep4ZAS!H+}VzKpse^d0H+z(Ok3h1 zc6HlHNyr!rzlGAF4#jZMd9n*=L%JsRTJY3za=qw?FzEpntWnBXp=ib33D#zBom)65 zu+4OQsfQE-CwxnAJB+b|F_R#fyZ>&H=V#e|`mrdhZ`Dh&dS_Hd{0QWp=o}$5agMKV zW*g7ty{gJSCJ*OBvaAPJL%DazB!YsFGoYq1U`HL6^^3Ka_tvi^)L_c@2Rr003SFis zHvMOSQbzP}RFy@rEIMZErf@%DpCWyNhBMA zuE}pz6^KB{EC);36T+-3rfnDiCI#dmo<9L%-fz0P6a=!XSB9Gy>Wnt}tRCuSrAk+S zPMEqJ)(K-CsDoLMWcNy<0R^g9I_9=;xmcE4FyWJ@hfo2>ko|uh2SzwP9}PE`roagb!X@>&q)<#E7Ek`I{hm6JsljE%9L1#%1BC`y}z z(@V#mUP!qk6U2V7xa^TfJMj@MUZT%IG&Ro;fD30{b~jWEQIlWUy0-baO{h)TP>IA> zkGK^LB%4KT*F9B5!G_Q%R6SQ-NQEI<^!N$mC>ZY`7L;r&V@SS63t2=-9$WLai7CMKVYX8!gP6-(ONI-$P|1K+{w4Eej_ZbZCm-%x+U^d zgwn^i#Ur~`V@)L1C_O6@3;1WNY8U*w6*>Z4d4azey^n? zu_9g?OT>-mug5@|4u3?l?B89%sX^m^Sn#oN3GaCV`=V#f&xFL9*_W}86?e>ghhZcg zgvg{0k6?D)d0oRIVJ5%DTCxtR6RAKFG_Ihgzi zj1mHXF(Tnpor*^(^P>A(K_pLijU1)wREh!8J`x=BCH_S`M9f@Tt@bCXD~jj{C?1&G zS0jFCa#dja>kUu1c*OIf2~B#fcx!&&+Jw;vi4E7O0j{x6q`icM%QH%&F>y9h z&6L*y8PJ1^v3w4QJiUIseE`2cgyK$47XI}lQo7&z5j1Iy zAp{6(rHi|Vc-1%Qv%Pm~;DCACEuKP(Z03AW;>jij(Eh&+Yx z-A9AiyTBgbi=HS+FX(_TUC}LZBw2RDr>HD*AAS7-jPj#gc0d|!QH?^&sUs@&FZzVb1@> z=?ojtB%m4{D8hS?f$jYYmCM>2Hva9mF=?-!t@0d|7{*76xz;q}gX~V+iPj8YV*s_B zMM7Qj-Iob|VXT;*yrxPuvJP-Amul2A!UDnF+B^8y^{-LPd$sNW3`w#E!QVr#Ofo%x z*l+#0E>Lu}dl;h28d(T*i6JwI{pv9!N~XSg%~>HfO5V-|Wv-_MC99bYQ)vKl&Jfnp z&gLhjR>3V~tRt=sBVy?WK8jk-n_1FYv1rTN4=rvXV+e=e=)dh9UorlIIZqzu>N=10 zfpr%`Jm|w$J3HQ$y1a!|DrR2=Jz9Hy7aI^q1Ts{ujj_+ORKEraes2g`%eZTX4QJco zRK!jRa4oI_WXFeJf!Su))xaF3{Rf1_^(MO=E34B+VGVI7I zUlT6xC>y$2;11&k$WFrxc#nHjq_YM)>!S6ou@PAPLV4vmGCPD5nSiEoHf>FYbaB_& zgoRJzIQ>Eare>-H(F7pp|WG*JU%mj zx=QHG)m8sts0JN!Uok}?b)8!%JJZlYzrS|RE zGAytY{JS#ThXqml;+F6E6oOk0TI8vzlL`cVB9~QT$56Q#f$n+3koe(2&dXm_$zS1y zG0W?>?Ju$(^z%C=G$gV!Br>GS^m z`jc3Fflbd5qU1{jbB>j2I<8Y#$QaH;5hRX#m5DPn&zGUW&WJf*TAr15mwd#dL zSb?b(0TT}tJgtb+Gb+eB0s^(cIOOi(mf1#7s&dfi7iS;+(wcvtC!(UDnwBb(458as z{sF2cIL!LLKbgdrNwXlwIu<{veM0ofn9#64MR){I1h7d`d78PNpF{6Za`bnV>iqSIzm@Br&dThvFbY$#%_K^uwn z^>E>tmZ6MV0Q!;BH1HsCDEF)E!a@&kz8CLjw9?h!@ILR{;B>nUf`+EBqV^=fv_L-} zGA5K^j)g`#}QoX zrQ3pCuj7KKIQrC&_nhKFjm2ZC%NbmS^6upL10>Okphpv`6ThHt=4+hht&o>ZQYHy^ zEnDIWfOtkGSFR=tg2?esd=OQpDftbB89lQTvab{lm(jU;(t7ILN<*+R>da#`V#NhG zWh)r^?XETo!!et+J+d&lR-UY-qpoJ}QE6{H_Q;xZTjYn)pca9=r)eOS z+KP#QY_74PF(JaPukAN~d(oJwF!!ewr`*y5UE<{h2a4JTV;##x`t-Cp3BApD71c>(eq%1u%#IJhOj`Gr&grV@l_#fKO_alP~4v zgdc6dph}317UR181}^yb)<0CRd7LP`6{EPBz{&CCiCxiKEidxGg;mNcLas2SnOPeg zj#7I_1C8@AfMJVoy8&9K;WkgI*s?JNkE6cD{D|69HYCHXg2v-&9-|qj@JxLp{c`T` zkWQKslb}nU6!Q2IACIXu-Z{x->wz_lgFX2hP|ald&`^8M26YGFv0IIrgwoaCni2aD z-V^UXGf#QAjeGO;2@-5Y?#|T6UxcNXkMPj6eD0AyVfC%)+yeE%mA+)W{x+)eID%!K zPs|nOL^tk&1@$T4`kFGR>+l+=+3mr%h6v!{h>gF@KT_tgcL@N=%{P?Pvt`Dg+%aX_%O3rNLzNCbZ$&V(myiIzM+KAhgP1^8OUTF?G+Y+p81ww>boaAD3D1mq;;D0xR zV5)&9Cl8U^s}=jiXO);?-f=5}7{eDRX|hfZvurA|+t>v-v0j2!0n~1tHFx zi5Iq`rctz+b>KLOC~FzbmC3?TeGCZ-UlQABW$fO{wgQUxesQ*yql#B(cAOkN_9Xon zXDC16d7c+nZ1ryC&u%>q(``|pfs?wra6e9~GfN}Hjq3HHLL`I3T~$uqF5OI7zi_*# zxX~({fw|He=@mmN$==5!EWhYHw{RtT8MTJ2u7@rppGzn2_|}7YUI{ zd|z!g)arQ=&5L_(H6pNRsA)DzyVB4C+oC0!S6dta2Flfe#{t{{2*mNsBx9<(H_QH~ zH?*9P?_?sS%C=~RK%-t7eL2kD3zn9LF(^V+!V8zZE6-?(5FEcIn9v zy9-2R12gv39M7FFVB=oA>LKy#g|v*lZKep<(ysD{f45Vwvcn6H1cZ(*M8r!KKeJ zk4;1hHyub#xj$Be{XO#J0*61^V$ z@4{K<>G=JTxX6_$VhvY;h399myxaU+=)(sXbB#2VHzPZoP?i3R3VnnaIfcI??P}O| z5&$2zeAHTi;i&Q~V_DnIMH0ez&L*A&?*;K%L$`0+Yx3P@#jL-Roe12L!%|lC$6zmI z8do|2s>*42R6b-+>im5weQ1X0x&;9!{TC-UUL&!@PQ^&xQ{sN?mrNFwv|GqZ-Nz5e z7NEHyJr@qcNzLfe3PF)$)$q@cBjuO0!d|O*8v#UE@uty5ZU!RAzx)ay9P$%= z>sy(vh!_;T%CDbHGlnaP*TuMiI>_6Hio^kpO$MrW7FL)I3r{M^=o7^Eu zWkMZ?Tk8HZ3gj+@eHNUgnV$_Hb)H4Uwsv9mn4>gA+~h9~Sxg326vWZar=V~5=3Uw> z1cnWyonVm^Z9cshggTO#%sMhaOhof1WQQ&q(Vr$;=e>@<0<$E{Al7N&AvBXs(2WP9 zy0!bQHb^sgVISaomLB9oj@GX+XZVl`Vt-85-v=-lM&fpMY^fY9{V>2}7lnD<|;JC?AQ8Fc) zF6QKr_r+5GeoXGH=W#q5`I`eKDrh66L#;pHq+L$@a1Xu_QpXSHcL6RUTTLy=$Lv|^ zHNWnEzvWd(;*C%h$!d@=kzKVCUA7kcd6k#^~KMVveB;{D8`F1C} zRzuHLBfj-va_mU{EQElS~@+ev78XiZEH zLDx=RZN}%(9MGsfQ?#JNq6#CsJYgdUAOQLXW-H}Cxj{9B^!@OOq|mIY z>Q*09J3-51>ux9`(CN<2nUU(PT9)31HiTn*Jj>@0QB!y30Gm=jb^%0<=j#TxTZGN7 ztLY{;fzGAjb1n4O1eGSMZ^Czc$`|S|&!j(2YNR*I)pv(m%8LG%g|`_IjiS;E*$zn* zw9GphHXbD0`i7hMi1-5nG}HFc=V-sfIB_&uyCg`@_KA+D_W#G93%r!;o>Kk!OPv9R zO?AxX6TOMkkuPolMIS(@jAwbs$Lg`~uHgklg$*!Q&~O`zcjxE(#X15jm$!vqu*8{a z9j7Y-Xm9r5J#Utetzk;w+%5ybCNNe42)cP?5A}IiQZZ!s<>7nh!%5hfV9`}P{1P_Y z-g)>Fwfvc;GV@*oz)lypddu98zU;%fH)Mkf^5hG65eK|tl5eGlL9mjWg`6ctC!^!b z&?hb9;kP(ev9%a4%ZV1v^fhj5*`gPP zLUVL*O}2>Up102#g9@)McEsW+$wRD-L?JVoKE&hAq~F*=b{{@bbTH-mrxl8HI1BJF zGd3)gDt8iOZ2s{CnJ1fPbC2F3oVhQEaINS&CCxQe1F|R-0ZBm@ zS1S;8scED-$zV?7kI2c`J{-}`GV;&z)4(tr>JJ>#y9PA#Ne+eRs}$w@dgarM#kKY+ zTds+~+M;HOIap5mhyvF$ERcgLZ1oT@VlK3=_PnYK*J zwq+C+g;6;$VL57ZFKy=Zglsk9N5buH(>#d~X>+fGY-7=XnYnQEnw`O0 z@HTm7CHgZtsxjrrNW|OPfWq#@7H`Jo; zwRNxzinL!i9ZvRwZb}dphe$O7skTA*wzI8zA@TvVf{XkHj2c3abaA#O$;H?PrOIA4 z^w7wm*#o)b_fVfx=uMM1hef}dqpLku3%nqSA6KPXmfC~{{jCl8{@6{#^cDGl zF<^=Wq|vqa#QO*;i}g2Ad`6Xp<*olHiH?TdDbi2?RGEjOfMFA+1zH9!Da96$QR*a; zCTw|8_5m&WnzMFtUzYVLy-k;cRAvDx^KzdFJ643(F<$4Nx?<;$^bwqnI0D%7t905y zAT#?RTzoLsB@MoeSUC}F*(xJO(|wlmLMff7tncz27g>go_>=hY3luJdU}1%0=N9v z4p+;jW9@ZR2Hp4-b+|qOe4Wp2q?|F@9>Lgl^4cvK&Q8dY3q8s^xM7HmpP|ZkZ$(sR zP%vGL>O2aA|8i5^GF>K-8&kBbeNH4P`e`OQvs-7;Pf0Essd6CaDR8QNQgr5 z7Wjbrm7EIXENFhK=}}PBZ*x0YY#LZ69WU+^Zk=QA70KviCO?w%XB`X&^2^zP6??|_ zkjaL*%Kd~fL~ImuyjZ2?5~3-f0$G_%qFJh zxe|npf|t%_f;N|jLle}&|LS)^OZJWf;?1L)j#u-BK-k)d|DQMJ3u0&(o+X4_OZxb4 zD!1V$Zp)+`dw+@IfiPS3YA)_KFQ><9dIXXg!38Vq{6!^_NdbuI7~05wD{F}+pM{5* zz25Ng4?3pl!G=U>FMM`ZGTv5XD$=7PK@E;ur>aEq{ss*B*VkV72#j)?lCmP^b8)km z-Rm$JS?hQ|Es3zaR2)DMG@JU(?C`~%lE`<}*MU3>GXCDilM;I?K^hRNmykK$>Ayp5 zEJrAq21^HMd=wU4`6Mz-txaNN%0%Q%QMf10JK z+Q!IfO;@+iQ1919SseZ~4jOHy24LVE-b{Nyz@}!Er5VPUF?1x{vX~Sk_|ccIi^zI~ zgZkdinFYsX!o?EoEGJAg#o@axG{x9-rX+T=P4xe9pVJ3l6if8Qj~$Z)pLzV_p*|1H zd6Gr?cgZdlQ*0=knL*oPi|b!1iY0n`+S*#Gugq^{)W{hp9ewFtkFQWxB9Vwy^Dt9e@4FY+Z$4H! zKjACrhl~$O#(Duxs34&QNRR2qzqO-%v2GU1w2dETXs@w98)|)0-Hs(>WWqYt5mmTW zSg@E{_rWVYjidZ=8eJFD)r6$x#DnWSzg!aL?K6((``YTd)a&uW(O(=pIrr}>*dqL7 z?~<7ZZ!0K;j-h{wL>|^QFo7p3&|g%_8#1Tduy{#00vlR$?K#(H-cS$#{0IwAQSDvh z0jJeRDVI?~AfX#pJ|c**E=UsePn=+tkS7&z#Dyu^`o*m_)>#*?r+e z+3~-T+5(_nY*{Qmm*@F8^%6=7dHUooy!^z7)!o@`w)0&3c%S@q%MMzoS{Mc@tl-hR zu1sm5Gu_U?-g8MSZc z8f@uaFZ~G5bF~SG8FKEbj)nBn^#lwxZ8e}!4 zExK+;<~{TOf&_;gu8ij^yV=krU9z^3w7%8Q<($DMD{*K!`08Zi%6=8>Z!HKmpVW$^ z9Q%nO@4}`cO2cqf$oa!xFrq{Q8`;{KS*|70>Nzz@NjR7ybjlEpApT}HzdNe&05iH$ zYO#xzNUid4b$nN=2#6tvv6J5AAV3ndOdeeaTCik4uF0~7vdJ4~N%dZR!Gjc)TTx;Y zId-hg`0G~uIYeJMvGK9N3B7iZ7|j|*`_dw5MVL?iWEo%`n1bdC2E z9y!V#4|F)y1|v$&!>d2;e(Dl=ugEAFu=8m8l&qPS?j$AbZF12))l}dytb<|$ha^OA z3;za|S$4i<{){8g3ihc!xAA0 zs{CSx3ZNppN=Y59Z@+E0-c-F|K9t5#;n8JW-trNw?cx3j>a$@^PxtN~qPLTLIiqTZw-$13Qdq{uSKf=7crfZ*~@ z%DMNVunN`*7st!j+a)4D8<6wflFYftH=;>%=ue?vR`RqiW#_n5;|f0RxVj&e%K#z; z-O99t(y~qf9CIeNO(B_rh~ZRTY$P$4=6(QAPt7DQP-Iu`iTCA_UGPZyOfZ+$&?^}y z-9oQ!f_J@C{S`ElTF!#L_;J-yXGu#8tOJ>dd5k0r_Mkb5dtML7-%T|<2b`kEqG0_> zW>{gLTxm|q(@OI`v7RVNCZm#cA~IE9eCp#^ncp#o2zY^y{`=RdqstmB=idK_C;78a zy!)%i=g6|n0!@NmuC4Y`0tjs={1z+xR6LFfe5d z>Be8XKF-j?Soafr-=5Y7`Xmf|G+vZvd2nqf5SQcc{fL%Ff@F_-YJ3A*^Yb4xAlLIj zPE2$ltbjHPBx5qVkvj#YW)GpA)7 zQ|l2EBnqetpw`kdUF~dsqn?mjR6r#);6bZi(Sh_vTlMU<;<_hHzR8lk_DMl*iHl-> zg>q{^rYe@J)+$2-pZ(a)_$Z|x;$mZ8dwWHl0-HG}y3JD?@;3HRl(W1dz$*KW7@WU% zs2Zp2^RRMag=`exKk-i8Dh95$_vjp@Vxkb!@BJo~?x<0|**rFx>B&U;B93M2Ql8lW z`ZB^NjeIIZ*9fJ;`6io_pX+97TM-&5JX{CV*lnq3qn!x66ro+I4&YU`FM`Q$fro5x z6Ajt+ifsJ9PlnhGch$M~(#UxVxYZz#o?!uduEVQTT^Hfyr$9!f{^-M*Iy#Lnk(-Kf z*}T@ceb>L|CD!u6o_S8?0Z%;}16agr9tSxyWYuq72H_g1<0qi>ijpN_@9kN!aazS( zOYTFvT(uQSV-8hgLqPlkf|CdWOSOp0Et$NPm|n9pPs5MrSBKrV{!b^F(=Y8to zmqKN=okOmmx{gG#77Bm8rVHF-{AC^IsLs;?7J>$|2KBgn2oux_WFkL=Rtt9Z(J)+{ z&sNZga)VyBX;Px2Y_BLqX#{tW_@Kp=@uGluSf|0O&$tktJ(DmGIrlo_3BZQSqdG5; z=f@(hY=cZDs%zWugsn$~Jo9^2WiB3bl94v^5134_2SYqhQc{6$ExLTTGqG`D&T*Xu zrZrudE?^2|WFDLLN+&ETaK4^5!9r@$|X z1pb<56vvKANIMiXQfhK3$u?P_x*s@ZG6-o{)$37k0`DG%1vkUyqNdzNX)!ekPxS2y z&wK?ru%;09Zr|vM{s<6iYcxav?;{C**4*4;)`~9m9Pp-j|NPE!6yL`W?q{pAwh<37$RLM&=H%8 z5SJlIynz#u>Srk1-hO5(1>Wr;9rD1=wM;7FtRm<{RyrQ)IaJ-ZO3^?0=aSdCqpPYm z5UidGoK1sbr_BQ|6&$j4XwP4yKhDgHxy>zW7h;rp_m@8vri956L0WX77Z;B-qTYS+ zs%qt^F_M~xLp31L;J>Eh8pSRyHeQI4*a_z5HR{6s3tMj3>*R%>2+D4~i!Mi}aw(A& zgRyv8AD5Qq^4y~uEbn{dYC@(&(N`w~^Rdj%c8C`7RsDFwCM| zWi;j*<#gI+-*knI2^)c4($nFa$?%?e=Gj8}#GBFu^p3FFg@+TrjeaiB2+(FQIUN5s`6<4?lG7-6682z!lE~PxIu;5It)e9u0c+%^V z^fkXqGjQQIk*xNwu#{nWIl_$|oA|Xoup8-jRr8PqHW>jZ`*8^!qgD=NM41oZX2f2J zm%aCnW#m3#$!@tE^GA%$5)XnFeC3#$3^513cFRQ*iu$NT(uQyZ?Enu>SGGr~Kkqn^ zr!z&mZXe%f$F+kQeev!y=~muQaZxAOH@iF2u$p-6?j7X_CPS znC{l^YQS6Y+LB+nZXf1&d3yU{;)az9f~=J2&|Pub&p3u@)=MLGJMXs&S3`h$midL( zaT-hcs9ZFgNI=M7D;fRgqOQ79XQhVE)7Un`>E4YXRlYX8N0r;lD>+ywy=4UvzOyGB z{t?D?(3`H_|6^i;o~vJigiXw{)28e4;ZU(4UQ*W{Oy2}Rzym#>fCSvI3W`PQr=iYv zW57qj9W=A?XtpBrj(CDOt6ra*?2MuMxb7>0gFb-0Eoh=q56s@?(Sr!S;AXu8m1@ec zY;=Rzr}pjRU2&)jA^Ak*Oet_SdzXX(CTQjBOEKG8*Ic@xZgmou!4c!qXWVC5B}(6o zX42$Z{ckwl1)KRgW30k+py!h>g?my7v`cAf{sabZ^GMwfJ*f4x_|c*d)R@Qi;69RQ ztN;xE>=rB)z&SErbi#j@ZIraGpa6NOXb5Bzg*-dZ68372qT${L-kOWZs%*?GEq)2WnUB+@JXlQD&V&2IWZI? z^8Mh22roKh2iq%_Z7@KSCCTX50--5K-!d18Y5eNgKJ_7mAme_%L1d~nR^*U?K2#&N z_L|ru2^RDo=eBkBNQm^hbal(SKb9QFg zzrC#i8d;BqJ*ge8wfPWi`rWjp&5dY**a|{6u%gY*^={qBp`~u11b)WXMe9}s6+>JL zP8!UO6=)*5ORFatM5e^Yp=+v3ngCiljV_#WX>a6U6*$|?byC=A2;5r#mXLz=;;(^Y zI#qCKi~z-O^oSufJ|bo0&;2no=U1NdQ1i+b=?D|k#x5UaCddL9bGQa#cIN;8YKNNu z?XXc^zL(?uCU$DH)3({_}ahC&v2C5ouqetMmcZov`~+cFouDMDro zx`BYHjwl-`^h4CDOX6&By0Z2AZ$iSxJZmMm#yYFpVc+5Jrxhuwbd2da==PdkL7@xw~WPm#(Et|Q*_?<*#N!`$<)~K=+o{`|MIPu+Xpme@cq32}Qex(yJ9y5RCiy!8n@ymBi5$ zL!rf;23|c@{j{feM*M`MK5V+l>;5-|IwOwbSG zlVG(yIsfzpf9#BT`c0A8z51{xskfw^YT8k0xB@Q=Da^7ae&Vk{rxmg6 z$GxGB6Jbgm!YK5D-x|*|h@kIkIXzTTo)*!>Kw3Y`8ui?NdcRVK?@$EriP(?_p3|>T zNPhJ8eJj;W4S2HSNkG{C5|ndrbIrBt)gFQ3kR5@$>^AiA?&m+8@2bO~l&C*jG(T?rUdWb-VbwAto zEbK5rc7GfQ-1Qv9WbM1m)WEd9-#`(uyKW0pdKFR%n~LZ>_;<|0>3%q;8w!vN$?y1T zXi*mH$UiqzctV2tIE(=hQG|n?y7;5azH?p1OP)VECv1_Ag2zHjTi%1lSF>C!s1fcmy<7NY#ocepZ&zEfmX%h zHBGqB7m}HLrgLt1c1wF+S0nfyvUx3O4}swZXq)}?;|Y?PM9}U5x85h%fhPbvurv1^ z@lU|DX3;LH7KYz-Xr=G@!`e=KaQ+{1V>MC`vPJi~$V_MWY9U>-eF%nUYQ^T z-?{w6U|aR!?>kdV+ErdYXe%RuZ@$p?hVNzou|;4_X)J5de~+fnd3jzkXQwH1DAluM z^F&Y@_6VbQZOflRi-J1N#R?&1mT)Jt=5Y3Hu;s)Se{zaNXUXdltHwDzOp_9M4&HuWs8Yg+sd z@jbOEa60^M8v{9le4}F0Y7Dtwg`u8jyru3Map}M^6-_|n17t`57HTf@FNEZNgF|-F zx`#2R4tx5Q&7(#iAJ@aa9OS{0VP9)}b$-EZywT_c_3cP`8E(-g3#o+H^G{1fj4MjG zw&tU5QD&Xen6UKU4t7Rrz=;Z2Vi3HwbmuLGlw^T@Hhsm&z#KZb$3wqA>{dIc{8RT|JABjKWbMBO~l!R3r70D#m6i+BdVZHf;g@D ze&S-aSW@A|ELG3Jd=#X1jy`2bQH=B&!>Ky;>urUG;QP_(42_>0&|^1#ghEk|J{ zIh=cC9Y_W875uR)+j3_+yAicdfhRL;YEZCv!@`?Gr=A%3TLGd4Wg8<$Yhtx-*YOV} zHA-FoX8PkT#UY|J%F<$C*d{}?ep4zPXjL}wV7B5qqK&7khB&Px7Ex>R5&{j8qP7FK zqFLOammN>%-=pleHj!vN&7cA$LWx7>zoA*4>QIj{O;K)zBHQer#v8!-9&C0iR(dlS+=IX)RgxZ%ozX zPf=e4DhYgX2>ECS=s6jJ_pz4=I|EGQSklf0eTx=l$D8)DT(@0i1riX+?Zcrvs)}~= zHXM!@~)|8EB$!jMs zDV};D`R&nO97@;z?ZXN=W)e8c-Pu|tp&o7b1ORjo5Z}_HGHW%h|Cy1CPQrL$3MiGe zB9vFTz9-TQdpa-!)RjD1O-6f!=UQBs3W6xI)TWmTc6_Dm6FT^BNwBHmNcpSRE2+2D zW@%Tm&mo+HuGutQ<{~&S)tBi9UhdcM+`2X4T>fpJdxW#-3aJF+)^E8#)ZbbyG?1JR z*e!s}v4YG_tSgsYpj=Q6PbTNEYh6bjQ4{`fGs3Djr}+(4kSr}xaTw>>AP>%O1S#ZJ(e*y-VFNBZ4`Wdw|$Jf~K z-#s*C|JM|~uPH=MNIju{AHT!fCrWyNob{go#_pk}$OdvR=pp=|g5GI{=ZaL)itBU} zK%;+S-b5~p9BjaM8gc0#{}OBPn zT3ZIelS-5qe;3XTOU6R1v%XuhFe?mMZLWWhdlqw+9B(KaI`V>PMfc>ar6BYNrh~^qJ(-j2y4Z#ZMz#rf}nu_KU&KG8HJ&yk> zB9mO1?@6Z_N_#p z`6sb0-5ZHh$vDV4meKV3_^(ybbsO2M2E;Ky;LgXUrimFMF9|>)KvaMDR@rEO^TV1B zk=@rxn5!Ght7p8`Xu(R8v&W!2IT78Bn2?bSzqjjo{ZCiQr5*Q5IbJhNsNRmFViB*h zpv)|8J{`O7=;`(-797!*uaaLhgp_X}%|9w}X+5(U-YD8_v>wLD>kfRJOR3t7c1nUc-%Pt882hgrtCqdf>L!jFE*tZ?BvK1_Do82aWrT z$xY6c$+SOBFbECI!I9q! z46l{R?7$ioDNFka(!7o!`o4C4oG_?0f7<}sc7Jkzyh1wFk_A!SZhFg+yaHEup;6bH zv^vUxYf=dJ%4dTwQ-h$qL*fANR>FoP3%JlPv}aDz^3Y${FXkN&Q4jvW2MCGTeE{s$ z@vzXdhrycU2xbt?Ig5!t(j`9489-~1XEeEO*R&xBWN|WXIUr3$pH!geje=xb%$FOs z?)2swr9p>sn6gCxK|sF0m2vfmbOA>cu0g;1qY{Ke6_E%eQ^FGTot$Nt%~MOyRCDl< zE17vSE>3X(halQ7L@hg?K|0fsouyUQ6}!Ao-dY01b4{QiCGxNgauzI9^Ued4@5IMv zoFVY*MwDS5#e}E3&&|C&U3%ar>%wGe$ez!;R*fb{rcMTUtgh0Qxu zAdai#T>U(JPEcfCAS`|bph{1C%c!H~=3XC{0YO0FvnVOE(^sZU8UuHwU7^NuM%}a* z(&e0Aat8t_<5Xn$ofw7^7XbvaZuQ z(q$WVUptLfOzk2K*A1k!;y?FV3ylxmKt|$LlH+qDS+#v_U7r;MW@h)2*>E*&vEvyo z->|8gRXcmpfP5Msy)M`1NbfQkX8_&LRlV{ca@CfkJZL%B{^veW15an#&Lu8CxHxHN z{j=oNxtlv1T%d-3y`lbE6@-$4?A2YFE3gyqR@F`VYu0rPk@Q?`<)M3|IVS241_Yl7zj*92K<3WpX1RxVnR5O&1yW*IhyCM?e#AvQ(fQG zgBUWL()K0@NlpW{ju4yQpxkpfI|70+bb=(#D{|&PgUzU$e%jG-U2uWF6R3oQZUzm4 zjkCl9syW4QVQ8M>D?FOc;B&8elGc^6>Tlh<{M&b4;*sOoe0oMSup3pXj*mLhzrmJ> zGLS)@^j%?5vB;iC80!V_e2K(5xvW+(P;$nYF|!$}fi?oyN{-j_Z;J(m9*GV8Yyo85{5Azqp45gw;4=kER^FQ z$V~ELdJ9jA*&B1Nwm0Svgo(oV)0t^ol^VU=j*Cjhbu!>go=9F}_D{P>;$dO;MZY3VW%!BH>QsZpiyyEiVO-Gg zzes7?P?B@u+y{BgdCWJbJ2|Gt_qzp#V;@K>h8#Pn?+E00l`>kj9nNE1t*OLmUx!_oBa6gWwNsCqtvdjkN#vqGqqlS%00(cR;pWr*atHrTx3gStW8gG#)C7WO_qY zMu@Y4>6sY=e_BmQ_(wj+#EA^FS>KY(iAQinWL7c|=AJ$brYw>eZ}Bu&~y# zb(&zHL^5C*BwK^I)PJD~lhYDwRuRi4oykGq&F*L%og#XTEyZ`3fCx1@XRP-&tr)h% z#^|Yb2*1{#M9T^hou3d+zdp=?S1QS&lOo1rqPMnpJ0$(NuP(eg8)HKwzZ6M+n*6Nq zT3#fGKgyI1I7bOz6nn|Znr*Z@jY#9ygB4%Q3nk(fjPBJL>x>%MOGmN(VrN6WIk5N* z&9<@0UzoWRBMAuhWld|JMgVa?vf#+|ln>bUXz0mC;e7U4la3Ct9r3yWbbO1_F@T?z z?0aQI<|D_5!R==8wzb3h4p(^@EsGWR2{9zEh*Zr2Tm{DIQBLij$jB_(YaenCTHF)A zH*^^Nvl*%zV{701Ov2=^53Hk#_!5QHalq)A4z+B8qU}2Rg1p&??lHcyy@EpgT~76D zGwjfA#Lh@OAQ=FzMv6+{9v!3*-qv%j?$*Vq6$dLvO&KO=NiBM{&AW}*OEy2**xM`K zJnRxU#MNI=ERk+7r`vr&t8qXW;;C0v2JNeltH+SbB%4njLX%r#3za;jJFsRAMk0r) zBad-4qGF3Uhud7Vt_3<{Nk_s{&f_A7Z?)Ch=L=l-^Hs3|z#bu~+ZMdLdW|t_=+?A^ z&Vfx>Z8(o%e$-q9oCxs)Qwu}?)oxIoVuQ0o$KFkYeIBi6w;Iq9M@JvNl!$;IAwk>W zk4z@!k@V#34Vb{b0Y)I{i1;tNDyZ~ZE0l)KGpklj-mS#+<4*W{_kYnQFc8juk8h-H zzq;VCvFEseuXwX-%e;gcyH5bJpWR!^;=2b^JS?Qk>&3!*xVpTeSdNJ;yNlNwaLOx; ziQ-Yu5B7AV%9@1yVK!o~a4*P)xajU*llm9!E+#cS#539GAW+3fQfwAc3|>3TZp8c= z;w_`k-OS__lqkEeUc-nL*Ox8-F(9p}$80%I@(E>x*f#)ndkSk!O`->9B3Fpz=isyR z;?{Sw?W>AE%fa}Zoxz%nHwG_F{BVSeJwFnrK&rWKE(gYhyDSVY- z({LqU9(*F|&)I;H7+X z+x-MU0)^lG3n!9hud%+F(ETyKf0w~k;HL!^IsC-Mr1%YaP5UdMPB@7*04{m zrcL90)TdZlSvx})QCkQhFGI1Ov+4AW6uinNqyG!SG%9zt5^+dLPTjY5QAL5K^aB|NG^yo+s3ml zwo`6Pgl2Y@Tfk=Z-)(^Bs8{H{44kT~wHS_h#pAIVRvIZEn2(U>Y%6~t7At{HK%DeO zgyY-FV??>?GS->8Nz2V+Hb_i5-EBV$=a2%fkFR8`O2?dTx>AfH`wx3!TaK8CwSM3z z2)hx4R@t@1+65#6ELxtgFvDOQzp8 zS{T9bBg$qCJeX$X>W`w(|8Hmp@~Kxw^Pf?#e!?As8LNIG7I9uH#3mSoIt4K>O4dFX zX#z7`|FS6*$$2{yHZ(@e_!?~Z!?iwkQe#*OdUwn5e)t2vx)lA$kbWMgOdFB$I_`@| zqfyYJm2`WyGu4R~OboCITLdKS;4Ab8rfE2Q&`HN|7uqbSQijMucinGzEg&#-0Ur{eG^>uAbIjg*ai2eFB$<=FkD2T}_ z`cIf5p&$CdQXQu-I>zk)FL9)N-K*pwg<;E?h{v; zRzh?ugsIs835F&DGvDLnSuU?LRmTwXh^OEqMluSn?xSY&t1`PTapEs6>`S5)<}K^g zq#nFc&sD{olU(-Pe2slTHx!Z}s-ylr20zS0(7q%H_+gxJ=0r6$b3P#(Nd$=}Qw?!^ zOR?Q1EeZdz9h5QQLMZ60Ls#-Pk>yZ33br&!6`_|U)l`_4b++2bY(PU=WBNYyS! z%_QiFE~4h&l~_A=796vADdIM#zz_1fd=l|N3*Ns@xmlf7_KTv!jWS)Q!tqVMe(jTe z(i=(UXQoqg?IA~42BZ3{UD*&wieJ$b7p?ND*^L@wUBys(;+A<2ER-Lc36$PPzzzc9 zq?5};K zd%PU@fM(OuEJ>tW@C?Hpemu@wUfeQ#XNeWAm^QvkgpPI+rM>F3 z+ua2Ja45Pn(HfLFRr`29)+(nH(+wK`AvH;t`9$9UcmkqPzk-%wIm;~MGM>}FZQ3#U z#AMVy;LtG(JcYo1q~P~08?4MWaT#x~A+hV8HBySG$5lE8GpyN1z>M}`js{B9199AL zQg(-(Wf`!KpIj3L+Eru`)ZCsLFFVlyvWxr!W7=bLiSlht0`LC=JDM(Ip!BG1?W~wt z-v;2ft?K59sqdyG2y)&Lm53S0zq=xka}BUzc&@#Ku^aRlJf2gp3%`rt6aTCLxm)ho z5%Ejnhhe{d#0Jxwz!=VSetqwin(hXJ@#y@%qpT|TZ3WTjO}m63%jMA%Soz>ih3YaV zL`&W6iPV+^h++C{+cHgKS1Lkmcp1E2g6?tJ9%*IUL#Gfr;+xnE9#_3OIP8^FRP>ki zd#7a;RI`Mqm`)sDtTfl~6n&uvKv89uBiGi0azSgT1Y8GDIEoz@xO^ z&l|3NQxunZ3v!0`-l@~g8eqi_loNmT3mkTV1#Nm4Ey^*XoCC7gdJXMxoh5S{w_hGQ zkEEh?K0=F1ql6guB|u-vCINsRpJikFJL5oj1tg#A{=)-rkN_CM0O5gcUQ!bw0VpdJ z1#Iv5uCgs0U7eFrwMF=23wF=uStD8}YC}jBwOgdtqQmT5>Vc;V5X89e9Bq>r#n>ey z((v;Z4<&^>Yq4*l5lH~GR6`dGMPC|LOgMI{E>6*>1)00(iSMN>N-$)B&F$Ywn!X2& zYmudS>GR&{n7kBLs7$aVz2=Tyg8oK*$^RyMw^# zGc7(AOB*PX=RGrnDrB%+j)AoqgAkhBCg|g*K?R zwSUdp@^M^+3>Sk5`5TN?{T4O<^7}*%dq&FNsiU}^9Q2V3Z z0cH9-%~b*Ogi1aWRrN{XMTgH2z}lm^@W0hgKjtn*{&QRO$T*ae`owGE6rVn=+QlOm z=7cKhIx4_`C`C0eXCtu3SO8x0%=V(b7k7n?uDC2xyxAyaHIBs1!uzr#WU5?owpxV* zJ>Spd14Xu~ZiDybWw!W%3e!~?IAtg90lVgl%U3blaj!(_)4&bnw@%{Oq|kJ_8Fv4) z%@WL64?sC2pZ z0m^MBRQH`vds5w-GHiT`Mv7Ck@9dGS(QAg?dyB((*i1db3km8I8FiH%NYcN&8cD#9 zt3N!Q`qoPfAlgc&8L5N#iLp0k_MQ0MYPAi+ogT<` z9(srqp%sbqY4}@*H9W=IrDxOpbow(BI^qPX!)Kk%p9PY+%ty+>U{i&kfI?k4ZXnFi z-mb-}!sWdaxlYf`cW7IQP-A)Z3rma=`E`7d{U8El!9WVfYkHH(30Ju>lS7n{#{{Ub z2EjK_K%XhmjvN=VV9>?`;ykveXKYvHd_R_IPMI2o!}HmdvHy3D-An$Y$jv4Cs71}jQ2f@tMw%W6B{&46>{8z2y0G3cQ z^fdu>G56)+y@zblV>ldD3;KNCv9R_A4-3#-y+4)PzB{^|&T6Gj{3^dB>`y1yw#j}m zJBpvT?(pB>SV}?o{nFStvJC4S2J(`J+z^$OpPS0H1lBLrbR3cFTFq*lcT<;rv-AQg zss_s^WFnZp(RA-$(2P;cubJwz*vB-^{KjQq$FP5_g+YhSCNLGN(m`#OG-ncPUfinY z?abMC|DOdP1;KfqHt(qub3#{1rEFIbIMTvu2QHZ`Zprn74TAXQ^X1bfIhCg$GluDU z_shnGmOPF-El0O~wlD?%dXktyLPaQ=;>N$Y9gtuQ1-wtUa&)OXK+ayVTyLl^;lQC* zB&`R?Y=}Zu9zQfdCoPwQ$qhc7zYT-h2}%3Evu_mL8G(Jy|LzPBkppHS5^KZ5si~`_ z4AX*-SiaS~(I+e=FH=VNd4{D!h4izJKwtJE#r%^*F6cKr6y%^XAEl&|yvx&!i9e~=mDcFIR9+feCi;mqnZ-5T-{(T zYHt3>4so1_Bi+yXd*l<8yCv@T`UK^hM&tnG*?MaV+;tM$2UTrELdZA(Osi{u>iLg1 z*eL8k*}|25SkbsrIEO6*0l!Ej5$gl?=EF49{f$pWnX zL;QV6&(!KeHj6gc|=Em0IO)vzvp5l>oqtp$CnVsAuEh#2K zG{8;I_|^=`ex&q8f@4t1+uedS385^8NPdtfo!e?!ue+sb!vd0Ut!iP?)dxmOKlttWBUfSeAx(M)kDz?nMuF zYg(}JHNq_SBe}pOR)0XCe?G>v4H!%QKyBR3d` zbMD(epbqWfb@F!$Y-^?&Ri=ge_Kextr`8L1kO-`}l`Z$@SOP^k%%WWFAN>DbXS^|W zctE7v&@||(ClaPcUwgMj;BN8lmKDL>z!{&n6o?Hg?vc*wqqG2Gh+4}>&m*@ZWiIO7 zrGAeM7Qb6Gzb}5~qF*oYEIEUxBSShDB?XVhK>%vm@ai9&EmXGO+_Dp6&y(FN(z_KF z&Br`uV+h1oZ7p0p)rFg|Z;tPP(CwAf>QmS*KX$k_Fh$g#ONpscA+!AQQd?K$8y|q* zwyTkVDG`aXsT66aDW15YVKKeg60ZO#vd7ZS!P8-m-e}8%@Uj=m@)058Aqay0#qM;W4PZ8TrLlxm5yHg$sX5FFiHaE*qBFRBNPy@;mtLPYOT=1Y#Ipmjnbr zjj4ByIJ>?VKY%!=Mz9SU5!v)lBxI9&ERftlbW_2OFD@3|@TsngV?@?OGm@Jc=~Q`^ zFLmM*|52lgY9!m=A3zP`cwZX>3VUP|4A)h8K6PaxvqA0+JEmY8rU!3<$U6>}a)mJJZqYwL)6e??^d$cH(pUg$y zsf<=~7YR08hV#gU|F5uzY$R~mqvn~B+lw%4WO*&bQhP(tEM5(mv}HV8WXo0j+tS^) z%HX?TCJPJJ^*pAdJcJiFne7&em$^$P#I?fbVo6=fFIS(|@XO2qe_i-r9v_#cn@5%r zHrj8Y5q9;yOUZKULubK{jLT-|Zc{GA;1(NQ(+C10j|aj&r$dsw!?6f)m{`EagS`lgmfV1Ue4 zYA|SU4AjD5(K!v4C^(b_n)5iV?DAblH!tYi;!cFVrZKdL;qPWU#nzl9u_n8*fl3iO zpS7O=n}lX|J9dZS3TX1839FQVK8gcL;`emfRgl<9(2PzU)6Oo|G(o#|ti)x=>TMzUFQ!S)jNG5{r zfBma!USHMz57ibk52UiCHXOT9Hc`6;`Dff+*miWLnPDBEgn)j>P;T--G70#mEjyzR<{jVSJ&ZMaSK?PKAEChsVe$4F z9;e+4A|8Uym-jE&p7$@7V#aU)A%cD8xH199^xvw)V7=9#YA|V9GeT=*TNM~F%v6)u z1Y1p_CY>IkeK1BWdzAU~QI6r<0k??vzv~&CztQ{Ma7&~>*E59uIV!1<^%9*!!jM+N zN$&+YAyhkulG)B|sBiFAd%3_*)Ns;KlFt}6bZaX6)_Q8xG-(rI%jB)=-&>9)Bqyek zYwdVTHF|Mn$d3DG0Y^vis%poh3CAz*=vw68N$Uf4MZ2xrZ9jzT8?5sy!NG}D{lEDF$UZ2p*oNEqkr2wFsYzf@!{A+d9``FVvzj4xI zT<~#S$B)3yJt}o@vKck{U2Z9CMxFhAcm2QXQ0yIQ6NAE^_Depxg+l_1l0~EB_Jt%u zioYKKBG&B{GdrF|u%eZHzqYrAqEkGl+-}ZJn0$Mr&TG4(D7pPcjz!x-wO3Kw%VGz>Y=)|{ zXVL@s<>L&K zMFlsy<8k({z&%uTA_nC;jKp8-H%^F1Qf$OY?)8D}owlc1!s=F=XCsk*W^dm=QX;~0 zKJw>MGt1i$jtAPgw3+R^9Bwpa=VAcPq2>+O9CWWDp&balp{UO1Y4bZ*jFm^aPl18+ z(-_|${%aeFe^*!^;kK7<<#iQoWLI}k%5$vT+uwKUveMGT4=@L7=o_{wqn_)9TL&!Q zUK)AhX%b~v9a9Txq6ANAJ(}+2(%$RB!$OquPQWW+Jbq(y8cxacW4 zT3*TLi@tM3p|F6+l^^-bVBIh?>qytyJ#2;HX_gI2tpi(t94ZyLkAQ)4vsk!@ZIDOC zkRwi(ooXq0KYjm{eZLu)!d{-acW-p4J&w!m2n#Vq>-QZ@92KI4IZa}6rJOdQIvsE4 zT7~rmT$cQwr=TiOQI3hrtAViRK0S|(3vh7WEgn{{bd0FLdi;rB#DE; zSUB0RsZI-jQ&43qy^suTDN#D@a>4lEwN(hUA>bOHHzZ$zd?Jw=HSalZ#P4W@bq+4-aS3F7zxN9$R=}(=Bj0Sn)E$z$ ziF8OJWhnU-D?(wUTMO-X5>0yQJ->wQ5Rgi^(j(_i4ba)rHQik+rGEYsB!{GT_sCsnc&2G=j~@3JZpnMuvzpDO1(2UJ4z+31uZr?%s$Ki_jxOBXc^pD5<% z6)G)oa>%}zL#~pvh3$Zp13T&(f{rjL$&RdSAE+&)uK1t0EG+=4Y|HX|U|{@<;CisQ zH*gBpy)k9t_l4!X@e8f;NA*0u&+IW=Dhmt9@0}fTSrV!YlPWG=pn_k1nNLVE)oN!1 zHl&8xLf$UluYYr3YzK(^yXdL)5SupYBd8q}D!QE>Ri(EVncU*G4|4pnx9qyNPYK0; zA`C0!62Mh%96}V%tf`|B6+Hh_cBcJpXx*)vVR!tkVZa=jA211 z$N<~y&^|lxE9~xtWLa3le~niWD_RMs)p9`#eC|qeHC&1{pzMWf-^|SCe9*{qcoD)UEuS@IwFRbDXP0AIPZj!Hv5Mvi5VrOFrSac;);$U zKfQPSVF2swFi!aIzSn!c`Jhb^M|M6W&Nu4n|Jjfw`6O2t`uvjm~!$dBA|6e@Wecy9W`UTtKk_W}B2tUu}-9qnVV zrx}=<@M_5>#$wI%pK)hZ*Kfkwm9ici1&FC!IGIe&v?Rl+53jGhnnw+}so2ifgx^pg z`ZT;&LSWTUw!QVejFV>hC=EXMK3hNvd@VA*jna)OwPF%3n>|&YX?pJWWap5OS?WowVKH5a1hO+Y8{^ zn9s&~Lu)Qy(Jv~(G)Mo>zv?#0G#i1@T23V(M3XjOhJ z>Wf-{7O%@CJREQyS!F0*`^fPkz%Vj&&{4fsOZPQY8q-2%%!BZ2Z@Te&-awYJS`H8# zX=jb(^)b`%KAQ3rT&lhXYl*cpaYgCdGpBEwutSs~piO&I3j zDYngHIqPqD}r7Pj_}Gsny_YsLkz4?*fI3wTkf4{Ead zttM}Dd#Tpg=Qn0Xx<1*M2B%Bmb018k$E#P&HgB5&|E%ZHX2cYp0 zc!6B^PR>e>$BQ*}oroumwZoR@k%36+Zo$!rFOrY@ES(SyYBBM(a0Gj)CW;ACmIZY_Bivbl>}^W6$K{v51) z*x7u~Xs;WA$ZRak%g4+pu2-YG%wcn4gX;Hinm{e9QdmIHst-JOs+6Rs202B*OXulkZKdBvqsapMjTan17U zDM&%sAY3AP7*n6QP6X6Q9qr4GJmOJ}+AuI;c7)uB-uNOaxj0#tEqyDd-ZQk1){(`Y zi{4`9!_ukIRRfb*?N|0vjyh&t&ZN1Vv_4WC*wSr z;e{L8KSv3|QTb5~%-L6XX*vWMUByE9>{LQ%x+U=qeE>egxB`FO zaEDT>fJ`79?n;Iwu^vOit*oNnQJg`fz@hB??e^G_Jmx|Ni{KN*(pOr-Cv09wBVtX! zh@9xX4nwbQUhB$iJre1>s}JyY>5jkP^n~9C2I0uYtKL{8`X@AIFfhejpbQOgi~%-X z$7^y}zHawK8xe5NLIsbfd-U^<0Lz0xHO-TWLnqp62&@(#SrAd1TBPPcoC9%k%uBUe z@z1l$Cl&?0TjL&wTtm(-STlNbv;FKaD827`30Xxyt77Nc7U~+w=BH-B{GvmKCC?nX znq1>=uO*-ensq(0MSz2$$W(+Von!kg&w;#@cHE%W(1k0M2`Hx|n*Y82!S6Kc!)xVZ zV!AmKx$w0+IzRFMgMTePiwOH$OTQ*MAJ5@^KLzO|Dnx6zJWQB1zV|^vHqY5_da-O? z4t~p2F)xe+o_Cxo-kN^kWnPgvwL}%0uHuvaya8F8N?ka`ky9FE8krkNV}Wtmxb=Cu zLHk;rlKQeA(6PE9gm_*2v)heTmM`|dMn?>EjwFG&n1_>&zt^RI_fhD6C|8G@LuWt? zM*!!<cwZ=-?TU30;zGpb zCi!Y4b_M`xd%~`!FLE`HqwhV}oG_Qmr4Z7o-y)T3Sv;DJe6h#eqsreBw(vpj>+>w8wLzXqGj>$NTnUJZ|6u`xZFcjYFhpx? zi>-8O6hQC)KanPz)Bk(#`v~Fb@=ij6e%~se75T&9I%mF!yjcGe)V1Y=H1=4VL5FFUjRK#oo}1APY7se_A}2TI&<{hWpL?|r0PlIqrk zx+(p9F+IEw=K+*i&7i8(#QL~`<$5)^5l!QpWx~@N<-|YojJ>`rhHR9oI3)!B-$nbP%VN#ZK(fBkpx&wfkYHJY14pkctp3v~Y1ez?| z&(w)AK>=J1s6u6RvhFov5wK7ZD0MW3Y|EJeRCRX;eMn73Ik511bJ~~Acx&NSwo5=w zCfzOYJIOSb(4gqGFc#`bL5~E+AZ+xg$0?%GJ29f+M(^|liUS^$X|CC0nyfl-JPj9! ziuF@y$DRp^QyAUE4^0#E1UFr-Y~jZ=GAV|U{Y>__K@T@(fHVA?^f@~2gFa&i=EvON zDlz)U(mMG3>GD`!?QD4o;zy;B}_HdvrtB zK&OfTH2$%gdRZ^%F~ftsR>83U40F)8(VxBhk-czTsp6?5K&Kc71#9?-utHPjQU{ra1uv436qBAn&N^G!vaA>i zcs5+%jp>z80y(j7Nujw&)9G=9Wq4VNrutf@nxY^0Sp27*Te}nXy-oGc9lx4A%GElK zst6xqRPZMBMXdNAysGuMP<6_6Z%WED&}$GRYr{f6<0UtgSpfj<-a_%!-@MJ#EBnt30B|#{Rrog610;<#^a_$))MGKR%B~gEB~|yPXWO z;V`^1Vr2Z$6Hprs=C{K~G3mx8XN#yx|2rjTmekOd*T%TaSG8V=a~igV$F;yFheisD z4DQE)$PHO@6@3zVR9P>ztC>+H#tpcj6q@T@Wa+8MrZLIF<*+118$a`U<;bzsIQeMH zo!~K4pnO+_;Z6a!-5#iovye*#MMNfysKRrnj6D)jcGFRl6=v((j053M-rzVj2eRKISt~wYi*c%-*tjIT%zd+p8Ns!b+1m- zSsQ9gu}YClrXKeDHS;%9_0L!- z|5%($!g`s!uqUoLQo8#IRq0(MN_X7ICchyv^1gi8RD&zl$#2cctDQWJHkHi$NKJ8BKK;5-HiJT+SkO)|Er{8&6Wb7;9Nk#%$>__ z-wBc?!2IlY6LNOP894z?dM7VH+^eLRKDVqJG0?^3Qd8gC9N16!)ez$FGfoFV?q+a| z#Ii?0E}vQ8MdT7%x}H*l+Xq7DHB->*z`1t^6v?nln@?kRFG|T;ck}o}Gal72sG0`h zrzNqXSRwYh?TsHRo1HcM1FUreWyxiiY`#}A{G5m5yA*m8=APVgU&u6jVT^5QH!GNlzF4x|}lDV%A zr1&XKv6t+(Ik3S&AI z__o{)@d7iK>Om)8$sc(?xSgLo{l^!iv^JDyn?!oS#UccFJ3dqxuQ0d>6N6pUb>E4Vj1eec+#(7(`K{oF(?Z!S+GIq6eb#F{w9~qOW z%9vtU=(fhq`?lZIV5gW_Q}O$cs=i-gdk5&}WdN7kNuR7~ZvPeyUv%yB>g9wWLw$?y zkYs$Hch;mdMEh|1&GIj>#9XpjP$qcf?p|}ydFx>|8xI69%n$clx9FG(l~oizFcN0g zkXN>*yPR|DFIyv8-+3Nsa=m===NejqmS#-UFsMl6i^q$quQ|9xSWns>$^{~U(ri0q zTWMLCgar9Y?bxZaR<5@Wk;>?z=CbL7=P36`?cp!{&z`b((Q#~bW{BX(^yVKAe2q?G zCh9oD=hzFReR4xcUM^8d+uTIA)?tJ`^FJL-ETnrJ2+?SEt#1!{=b?t7WpX8+RP~TE z7r_%MW>_*iEis9vkkO?mJE@SAG&PjB%U8;;9sb?N%ElS10+qKIl{lkFXByg3Y2ON)qXi2;@2XfnuZRj z-lrk7G1vCDO(7|`TpyaFG+q*K1AW$6NMJexPH?DGGMlhZZ6ktANU?Wswv2o{0HlIm z8^&D;g$AH_f0*Ewr*VLVPD1$;!d#>{stM7es#mZvXeEI0J#{t(W24x=8}yDw#~hij zN|^F}H*iQOw?j3Y(=PiaxL8l{CLgqVV{obq)RWWTUrBz#`D58 z2Uwztf4fcpKV(VaPFZ{W&a#2he&S8-_ra&dr3tXaH&O)&Sh9m7E)32kNVTm+I4L*2 z_Jx0RIGWVO2vZ|#eic7dabUBsHLvBV_NjFiXOl}hoO~!m#@~%*+>CLNRju=`TTByf zf|H|ba_7Pf3Uf+q2&XDL)3l%VL>=SjssuO1>?-Io-Yd>8nE^EM+#g7Nh;FS>5o1!~G@{!=IdYI}*u9EP zIef}dg08juT*>qspsKv6@R2VJyujg52XGq`&ivulmPkM+s)&Z`ufUJI)nkjtCr2Vo z9K|CW?+#&mzxLs8 z$}fe>$LWKIL9Q4gFXm!wU28$HKYM=GcJDgj>V*V?a4aGyvVbWIT>^UoT>hYdZ5XGf zzA<18spXVN9TZ5*U&OGc&YVBAlXPY@?%OG6Gd!~|M~BZrFfl9~C#k)P;iE_S4wfOv zAzIAt-DZp{WzchUD#nwAc_GD|j1d0`fv0*C4=Hn)s`=+z-MNCvSj*5%cbt5rwZ?RQ z%oex82T!3&3$t|D&1c5Ce!U|&8Phl|d{YceU8t24ti_WRx?N?!PIfE7JGwK3bI9YW z=He;fRK#jwQh_o>WUFU!ws=Jza(Hyn*9dyyS;;; zntlc&J-H6=+TW!f-^r&iNH}|pC*1V4dQW_qW`H1@+>;Nfv055S%aJGhRMd9uvG?kQ z^K=*$1>C%IyDzT+l@lG(b z$LcT8V$VAGj@U+QB_80zs+_t8hUUfZA6dIUYQd4Ct3AI-Jo|#H3qh%?Axy#MKZiTB zc{Dz;fBA|r@z_7U*eG&>V2D@Kburgo2M5nH`fr53m_RbA*clh(^A2qji%xS~0k{4b zlX1V-f>q39@--Y`R(2&RkSprAt$`=6{fj1*1Qc_EvyKg0cm>9bg`l)6E7uP$*@oQEyj@8;GgNgv~{5UG#SZI5T;)ZL(&{FQ$g zoVrLqQS>;vBF$~HmNYc(W5Y9V(lW3ZX~<-p20q28$P?zVVGfR2O_y3BQ3{l5ODmVW zcsJ)Hw}c2)&)4&};Kce(*O@mKYw>`<+(CL42N2|n#uNpPJB3?}`5W?%#zFN>+-cIt z*N5Bx-;k?Qd+L{JD!GMh5%>aE1C{&8f( zaJ<|+aLqeB$veN1EOzt>N1(|0FZPDN8TfD-M#uMDd~Rzs_fcVt)(SsYlE)Y`e#j|O z?dS5{=V79@TdqnFJDV|e#d*s9RumwMC~6$2Bpdxn#VSH=ZW~+1f+tlm93hdq+9;af z!9Sg8^%aGvV4e^jmIQYMec620sX=lUjE#^E*?VX}L;z7huD@3VbAf_@FW-m4_oD!5 z{TFweA733=%ih(NPwh-ZcyX5ZsVE_vq}QJuD`VQVf9G6waIdk?I`IBR-b|cBC??t- zl+Hd`7Bw6pL&*`@@??+20yS9?TR=Z&PFa8E%1PA#?^HGR;fS0Ulz*OnO#xL%lZah% z`N`u}OpHx&H)9!dwW(Zmjd!S=HQk?c>Nu6BGk{^gCM0!`&YdvLjp*?n=4cF2RQL+z@}VLZU>k@GLk^i!Fb!H zuTf@Wqo6OpVFgeWVr`qoxUnLiI41?22V4#6AqC3G*7$N6O zj>wX)eKMDnOx3-+A`;5w;Lar@t_;V$&l{|<$*2P1gnG5v5MHk`Smy&y)OlUng2?mI z;ynw76%5e}Tlabw(X*#=8Jd4VK?pNhWam>q5s1ud2 z7ex8>BNjgRvu1T({QTmWOeP4+i`Dfm!`v9avMs!Vc!h@X{x4wAllioYkkmFJ9OTwY zR$mD#1vHpL@ji###>igBAhEHyBC%f34E8K?R8bkWCj%I^34iPgd%hfQ*H;64l--Bm zsqm?6=nGvnk}}XI(w;dGkr3EH3BtA5rABLbrk z*vN$ADmYx51XCI)62z1EBlZY1QE2!$44McElF1Incj$*@ZwUdwxlZPZThJuS81v6< zaZ1p@(uS9J+3fN;M7u3L zuHSiy2c;?LXh)?|#^Nk?p>Nwo?{%8r)Skm{CPFEvwKW%jjp4&^U0gF$ZgSn5_z^M< zDk#`zgQD-UyJzgZU`$!6m~|vd95SsQ-LzEHsVJWk-sC14w4PLMHoyHlaZoLu_1%l= zEH}ib35}m8H#RBLmH#otteyIfws(!PPJ|l5&JuTK_e8~AChV3xd$59pG1l?*pf05Z zH9LRVH!UHCj=}DDSrsCVV63l;uudrI$mgO6Qw7ZJEwc52bs6@SB&mz@Fwgf4rqMMJ z{tnL2G>+mo+HR+fmdMcDZ7LIYJmOL$^9i|s|DzWaaHsV9Q_FWTIr!^nl)3dg*}U^p zbByS6hO3?_dJPwm>$ZGUwuA%%6VF>VEKmX4xYEiNxi>Ah|1^SQI>kv^;0OKs1|7{0 zc5VmQ+@NZ5NZ`e#p}CkISkAxuay3n%b(jGWiM zCgdciO&x7fh^;3y)x3>IEox$uzQkW`uhD`6nQ4V?Doj7ux&$0 z|K^9bLmGl1!3B8gdP7^)adtNHwc1XyZoAI;*gmONQo>)Y#xFl&2&;^E{`gb-p2+qX zF9;aMd;LLZmeH0=ueW$4%7d6W{$Qmqj8-=r)u2M7d<9#JxvFq0JY$RezZ!0UG`Q=B z0Ow`H3b|7;Ah2H*&IPQlgK1bQ4Mn#|c9p>Mt?OSQ^`&}oPYT*;=$rfKY7%gowyCEL zX(C2BhHiSxUC`QTm2+rv-p`jEuDtGIJFmm`-LyOF(){_?$Fe=rip7jP*nC|mW5{e8 z?TJFzZcYBKq6!NzaSx;+x;&K??#vcoh0I>>kdd_W2<(%-Ey_?H*6;icR}-~ZC~OC!Y}+ZcZYPV96gsy*1w(%+0rsUwSu}* zzTkC~#y+0h&o3_64teC*%ZIiTLGt~pc&>f=;Wm!OSssv{UR&9G{5QrsT9AxkZO*Wu`=1oDFXzJvnv~o*Q1|Q+|LDZB=MUvQiTvz$EB}8*We= zhuHW-G4uxLVjlw&%*hd!X)X+Q8nvW!7;uF&1HoGr>r>U!02~5QB*#7V3vCSfLZ=*L zvjIvw0(ZEkt&vxlyWf+G-AUGlJfY2zS_Dqql8o9t_-j$ea^kKX1m(rme1~dGV`|(( z5#_|MBShc{{eZydx4r=*wZz`ik>=**s^p=E4~q5z`Tuv&!ik}dW5i4wN5#bf-BG0n zvJiF31H3}^zG~S&?eZegXSSY&q|c?gZ;_G86Vy^i5Ck#gD!~t8lK*x6z=Mo5n&F2zwS#$0A=3G)kA`Y@!x*{6zHiJ64$C$0cegAni)Hz$i zp-5K$`}JBV9o)?2hcb_~qd$Mpm~m8I!hfSz(j!SJfuv%T^|H?cbIz#o$z%bT#c`=+ z;?!61Vto7_EcXxgkdMiY24$#k<817Jv-yRj0&?p3(zuf9x0NGWY+el(V=21ngnh`0 z+1m{WYD9D7hXTwn2*fNTQGMJ|?}uYny+nf1yKj7MCF-}Ktg3RIK3}zR#~VpgC?`X2 zf(86pLs*J@c-IAp!A7k;GUQ;7QK7H3+-%nSl~#A%r{-9%?N$K;1RB)G-U1S(;7Vng z-42Es&W)KAd!e8ofU?(`U2kg51A&v0qU;K#WDbCWT5Q5=g47sswtfUaMZ+~?=7_z@ ztKeb5p>OT%{ZdbLRL7Hrg8r2DzJuv%4_WLDYTFBA4z=j^-=jktFLz#jTK)`{9pYjg z(_K^R)m%FIi=j5`GZjjF)3Xx-zutK&&DkdO(|wuvWd(5=n=J^vzEZ{b;40B~#Y$nf z*Et#e(o_OD_ta|X_Fq=1T5~2|%F{v}!gr(o-41KL1_|K9;fzb`99f zhs&>Gb8yF!3*s5i^uWs>f)^kfvl$EQdAnof!Uh5LOz6{Jet3p!{iBc!op)h59l9s0 z>IqJwbH3x0MHmec{i=r8E2nZg)PT3H4uME_E+=h$I@SA=wrVXKqQ1zZ_3CFk5p z!V_2w7`&P|#;4nJ?O2+vF(GHM5NwbLu83Bw%FM2;Hb8&TU>^_~W&%5K-Om$H*iE|w zQ*n?cIKIZ1?4g(d&0D|YdJZq!C%Iz1S~!p6{CnZsMCYr)19F;fR<#K}|3c6qAL|ba z`{%m6+6cL77e9_mfZ)fX7w=qeYa@h5cK>68BrwL$a}%yCWe3ui2Y2Oc;-La^?N{ zn9zYsGd zd#m#R=&cnwhT!Q2?vsD=!t}>rk0kkaUVS=rhZ^w)XW(~5r*GBJ;Oy98!Wn(E9By+- z26r}JR2f)q#gao0D+Z)eb`CIX`I!(Zo}e^1YocLX@jVLcL~*@|FO-?wN0qDTq>sF} zTCpRL!oay9&Q>oACX0;=a(@{RQUV?PRUT(z^iu$Y^LsvZ^&%2>Q0aByD0?EZ3~udd@+J+@7o~ma@%~j_9R)LqY+IxVI3T#>SIfu70f%%Mwb9=zq+1; zShL}Mc(2l@QjAC2(iEJ6-+t(mo-L8S&!1Z1o-aioS{{^SN_Ukm_{V(6G(oO-g3U=x z_bsRwMe<5M5j#Fq>?3Z6Su1A0M(_`34v-yPv8TEf18%3bTQ>^ti2ee!hFub+EqD)@ zLYVimxjmWhB6jI>8;!h7j+m9ma1gQXV=-X_jkt`FiNS|NO69P5tTRZDFE=mBDOBj5 zH1HORMv&QA)}lil1z!!v^x*Ow#7eyvgxuzkS%#H_@9FQclTttb1g259kHLJ2`8g%M zpM!UsMY&Rtj{%B$>CeBWdN~5kdoKt`Dbc#9YBL21XTDWMf@y2!Oroab72H&lgj!O0 z{02?N|`BhRHEob4#m=RjmJr6z9S1$6& zWDex{dX*>@4t7H*?~_L2_5_qmm{XoMJV4n8XcG-9(@@j2cgu7~LfNY^L_5;{`0o!V zvicrr_P`~`5QtHZM`4o{2 zMa?TBFD%DA)dNDL1^Q&ZTgv|2BkLU@kH!P#tirU>(dkH#x@pG?J;2HAE`_)nFHC|w zdO=WReG}5tpFr4k6lHu2vA)2XL5y*Kp9ysuIH05Kg}h>7QxpkxQc-1gimvs+VgmNO z1Jug5mnN^0h5X;gy7s1PuB;h03q8Wd4c|%ES#f57YamiM;`~^NofXCVPzoNUWz~&F z(&PzbvzsrNdwok>nbMD~)Vl*txvTubuWJ2&aneO{A7Rhz`;n2leTc*?pxn44;}){k zUh-<9ZT!Id`tN&}qe762=!GE40tleQlc(@SKArf-&*g@UGB`;|$#Em=rOZqxU z6i*f;UU0q*#;tC$itm^Px~+K40`SCv)C5DD-V0`Kd(Z<9&h`y=qg@sTn` zQIgkscWRbp2Dr4~<3(0Ts#K5!&<<{ZY!KZ8`1)j#aX_YNn;NSo`qOZrUJWpxWn7X* zcfpfd0b``@XzkQ=|4@R;H!#2|6iL9U_#gmq6dBBhBUzx_Iby15bxfjCGYD=gRkHBK zKHM!_)C5iBLKmiP?cF4jE&!p~tcT z>+W9=3n4~dJ^P|dwPJ$@@6HRMtH+NH^1wXCI|Q`+^n)fNNjU|$skz1KZKZ}vGI4d~@MM;nN* z!oXW(bbC)PyT+>|GzY&$ibplFC^q^5=Tr-`Z#tiR`@Yn47f(iw0MLrk=p*$sP1O)r z!_xbwp#8zg(>{bQ--*gP`hqx$y$Q^vpe1Is8D7)bfBpRb4$Q4yKS-G~l4qi3cqT8^ zzFzr`_F&Mtm43xo1DbeA3Vyo9TFwr>R4&^+3fB0h^$iC(Ic&7#fV8Gwi-z zE9NmAn<#PfJvE`3B${Xot7>MDl3rvj@+VCDU-U?`nA1QT2OOS?{`ejE7tjQXmMmPs zSJNXp#-reLH`6@T9>kd+?hE_sfamKbI!n-+MBGE3I^&8bJ7^AE zTRO2G|6M>y*lF(9WwV;j?qF+QQ>c^!TvBJ&CF9crT#M3Fx)AW>{^&1#Ev%7%s$Y2E z-QzZeR28W1^Cf=Vkq~y2m+X{*{cu<`-Z)<#5L&L;*o=meR1}l%l+E-RTT{=&B`ej{ z{jayKbCw zHxZ)8Ykzp76?0jl!ABH84tX*l?P!PMkm^UK43t%lb`&|b*i3NAi6lt3=epG1j6U8Q zQ1AN^_)`zzLg#2?c!3pD(CkG~fToDIVST#FgbP(^UrDM5%k zFHU$=aU~y~Vfqfe2~)aF4H*ZDMt74YR(Y51!|xC}$@Bf97g|S9$54H?GZC4{ANR8_ zWF;n(MhcrJRQenP0Hw+JkOCq1lb4ssYbuVvCy*Lgj7kqN29=ZQ^ilkC7W!Z_SA=kx z)bUpah_mDN#U_A}lTsiCoFt->76m?}eAXC&&Jyvk<$zHq00H{00#EMBF2>!E5*4w! zo=aq+hleU}pEF}st``h|KMozuS}|X6b}p4Ks*df-K}33sD1&>djrkd#YBcfVk*g<>Z%4$Z)m zy)tijiM5`JC=5LsleM37CzK)%6H#{_q|zugaVq9oql4ESQ*(*g$YqYm#6~N$cyoge zRzTM($u2<7K!+7+AM0|!WD3>>>_vl>SRuxK2IKBmn0pYe;i8 zkom9G%3#SrH}$Z&K*FTCCVMxP*KpYOaEP0A6r{Xl&31y^@radE7#xp%v5pT~F|VWb zT>BmR#W=gF=X`s*;Cy00Epo>yMZ}y0wcUs^u!rvlKW64iL~~K%orM7g)X+OTI8>w> zr;A!h)9x)TL8IZ|)~hncq#(&7Wz9x059sH>qfS$0S=byUqbw`yx;B>e}Kd( z#!qn2*@zKefNAuMNLcC%=Y{p`*q3Wa^k_tS5j^)6aa-x6d7%nDny3z zNwq*|Vz@gX<^%Ws`4ox~fRz|Q;L8EqcMpAYR}tx`j;#m^JU}&hei9_Zp35()lhDGp z1%2xA;78!R-C>v*>A+25gW)QG_8UF*isI8G=IM>=N2{a41G6aKxEfc7q{SW|F;w_)4a$r|caXrT*(N(H zRBj^wlRSEDuriK1G1B$K$l56=pp$@qY~DF@%2x0azYzz@rf&hhxnn3necG)3ryjf2 z-fADP4Y0p+;$&=3b66ySsYQc0ey?D({q^Px#)b`WMp50k?by8b#&l}sWj z{HfuY6vFz3{~;GIzq+S9<%U*P*LnZ2hJfE0DPY4IC;_qrf-*MRQx+Y(T{BBX*nlIH7yb!WHF5@nUF)$HO{aXF$nw*elZPg!e*U;0yw^Yh)|LAk=e+%KmL z0q9~Z-|wZrL~c{$3nN(zD5JpHB(T=MkVoazYF04I2UxS2IX?&pwDD&$^LUEda7-GGn)hX;4Xx_|i(sxnJmUDai0 z9{|t-_ph>31A~@%RbJD)2x~#FlLc}}A~5)(*laFN(9e&X=31tAB)w&*EMJU8jM(@T zqyGJQsQA`8@Us|dTC!RG#4nBIb3VV*1$h{^QAyihFPR32Sz-sn6%i7ZV9L5Qk%u;p z$&0!Bku?~w8;4^i+sXius4<|bj4jXl<2UZgnrEKVPQDU}v}QT(`^M-3lZuNkjyF&X z5jdE=%=>GWPxJXpH_NLTTcj}m)_U$NO_=ya4P&$c2lJZHOA=rON0Gc~3@@W=-|Vg- zIfCmNr^Dx5?ZHNyova4uub)Lceo}Msd6@-6E0DsbMZ=tV3Q6X{k5~~_v9A7=Zwa|T zIM_fG+MEWAbgeeK?`wQ0@ne`GXio2m2A(6AtH@li!HL>J*&L+?&(!^n_(T6wAJ%eW zv+7KEO{h#ZzmJW;tCa9`ie@fvj@8oY>%;2!pZJa3)&d*P|3<%WqMq&Gl$?7tq3YR$ z3bl9{Xt$fXZ|tc`VIhX8)=&NTDiMfPy4{&vui!1fEP8H@x>^{3@64=%WML%*anS!$ zU;bC@co3bzFsOw*LK8TH8{Lrze)Z|fM2bHiK*rD4G?;hirt8m^*#*HaKvZ*X3zA-? zHfS-Dy9@Wpj+p@=eVErq=+0#KMUiLS#nAFhkdlDQcO*+Tb+^FbP4ha7JFGG+T=V=^Fcs~awJ6s7ZbZ6IpOL#e7`5(1pjb6IjFq{;7!F6 zGk&g(mW?&NxB$cdC^Hcc*qD&-o6HYR3zox)qxA`4hdtj3z=Z}>)x~hmWv-s|t=(;KvRS(`e6vz=B3`Sg zfzUPTMq=*hdP@2~;X<+dH}PjG5RUX~Gb?&hjhO_0n8cHW5*1Ax&zPz&E&DfF?JjHf zEaBv)wv<&kgi4&%&ss!4gtzQ7K%crM()P-uJ^0BYG)W7r(c{Gi(Vp8Km^&?|sI#TjjqsH}}Eap3$s4 z;@IiK;>to~LCqkASeKa>JR{?H^3#i0gbQcMktr*tyU%Uo0fY>tM4Yz+p*HR$D77(& zQ1BLo2*4$BMy;6*K08e{*0ArSWpJW-ey!G)r+PNBu)9}l$S98x$kPREisGesJcn`n z0YRdZ_RdiRi5BHS)=fWgf}zPL=EZVWa(KLQvBO!k3tT=_45jS@aMEiR_RnYsQo7jP0iM|uV~PL zX5U6Aa|{wqEJ}VsNxMz9Qh0KGPX$Iow^uiZ#~>&r1G*;4SHtP6^G2e`urLbtz7>@i z%sc3yTU~phQ9wUnU5{04K;2d@FYfWkWcQ)jM+X?-zVLW!E;h=}fX+>C5ZwXU!n6mi zB@tx&ZVK^7iZe?kr)PRTIOTUb*33TA5j>;t>XSE4FWE`ytMCm}Ri9|t1+(E=M~VnI zG%)OWcl2-Z;pQQiakZ%-AGTmLlD#p~1V+uEIpLf?ix?nXvoEY*NV_+%o7Ic1>J0yX z67H!%!mlZA9Z&m57ALjpW=}Pz^X4ZA!&Ohi}Gp?}L zK|FBT>%E5C+P(t3lX?c^4=<4EHRV5kcKF~?Y@vH;GN2Gv^#`7o>L}PdZN8~R*mDrZ z_`)}AdaWK2b*fpjvd_fthHpiFAw$4hy$W`f(&Wz92-F2NFX`Ri`cNa3i8w#ahJ5Hd zm8!63bx|T9TLf$U$K!qJ26ATjIAx-gmG!JtZ+ zHgy*h%paBhO&rdjS4M8K@ZVfUt547(XHHKfQ z{Q#ZGCGOhsaEq2FL0Xe#gZ1+_a6pXT<-?dw6I2YC;Q-0c9x^Mr4OFG=XIv8BuG?mk-2fUu6d9_{eH3_f#Zr5&nd`irG#|kurlVlc4`{nFl^(JDxjapclaeZZ!!E~xS+-_(+jAmXxD;-t1VJ zLq{QN$XT(X14M{F*idS$s~&p@^ZiAV8uozPM6e$P*ZtmDgd~)$nZrfIy-^GdD!s*u zJm-n)A)2@E5qeqAH}0m;7met({z{mOB}60-6Tr5y>pj;Zv6yn(lSS$}GmJ%JH-I2; z#xK$H{4rTjv`+~xU|LL}P+j@KA=7BUcJB-}FEmd_dlk4f^%wPwbVfYg&XZCP%iV|7 zk!_6&)N~+&5y}j_rLf~X_-I6PlAJvy6)UFH^>AKimm#;k475bdwfSQ+t@8G8q^3}H zxfGXB{;)`1Kml0BL#IhV4lz%OOSO}lyhnjbMjzh;Z(&NmB;*G+r{Gq}wmA_5MpXCQ zNrw+}D~FQJxSx+pG&+Z~fj4IIHq1OhSmRYeWywcE)unY&fQYHEsp-T3R`>Z8=LQj~ z%ekTsa@1}^oDspPwK-_n{tUy%r#2%mie4i(0qU`wKR+l@UrqD(T;q7Y-02SyJGBoD zERUjN0C)4NAHM*;mGGA8B6$c4<&YsI&Et+0_)vbzx3jm<5{e;Xw~Ih8ASBZ-=7Y^` z*4jwG$v~MkGeV!)4nPw&82))4Hlb~cKY5eEx2;LJpO7(R=}L%mhMZmVTL1sMu$ko6 zT7M<&BT~SBh7At5cN?9gHKBHOyl$;19U3&~4ksO%6qw(X%5ZyuE)(FLyFR}0x;-a@ zhTqKU2q}=s}!n%_Gq=}Qgh|sGP**CG)w|i`xd1l&%e77kLBPr7&R1yXkpLi-U z(t2bxfD6XXoDn-BPADI)`mBd4T{crg>r#dW%jF5exc6*GgY%ci%^=c`Cr(|MvNH=b z8Vm{=MU!x=Ya z_6&Y`D$JlN9-iWN^ZI#Cy>vwkn?3ugYmwgj=yGCUwB_cMDJ;|eJLu7? zSWl#a=Xv&kdMoC^)C^%@Y!SfmhvQt<8EvO5^DOjJR_XX}LID<|-rm|#cgLZpaM%fU zC!`=3Dft+z(X0F3Lx&yQK3x`?pvl+Jo8r1t(u}%Jqzfy6IT~dv^=t0%=^YN{KON7j z<7nXLAYGx%Cz6d_%h?USpcV~(mPL~xmqvH*kVA39hbYG?+nrW#DCJ%e_6c8VXYldg zf$AI6=rZ>ePmW%1uf*OOE2u5|+++Jtq9xveJzo!e@n@M zJnL!-kFzsWOXh<=tm7Ki5oC8?8E?8}3pJ4?2a2ATns9nv6i)_}+Dz{nUE?T4KTd=y{)@jtY^nRYgYIDM!mI6Yw}|tA6Zujwl)N%4M74mA^s)o;8wi! z9SKE=;#Arc;Ce8l*-dM3JIg0)oJz9^{i&&ng=w5*;89ZM?FeRoGl-)_;{ws!J8=`? zOWBK{PWxX2};tB2uoI z3905UKKcp|q+Wd*pi{f2bgW8gMM4>#&j`i2D6FD2l6PIw^Ddv=(T#`|^A+YjJ=gf9 z)9~P@wYjqOULtPWR2(~$u^xt`5MiK#KoMjUYe;8YN(dvopOT{$Kh$6aR>Kh(dlZy^A@)G#45fZKVK=#%9YL?t;w@yN|dBFz06+~ zrgnMp59yJ9NM-DRsyR)Bd1sQ;i^rBPX_3)7h8`ndDcakRB%wM;yT%`)BhCE>`c(^L zn~Jv`>t!Fy&bdtJdn?jAEzZgJnpJ*hX+YSI4=hh@YQvTP^bGpAfr1inJDZnUya;F( zfI{%lV=^)9Y0N8Xnfqh+H91sb3Z(v=hL`+YVZC2&p$;!V$BnLf*Sy%MB+-z`O(<_i zzOxUQ(OR}fvz~{S?UUbw8Jo+Rit0oqhmXvw$`e^(?-`rUWq)9{g zS;Ly%*mI%`t3osl z#Cd#j*iH#y`ycKp zWYq=vPS@N28VaoXIe0S?qY11LV<$8ok+mTSe)hPVR15vrg(4`SkqZ;cUogzV4ZRxJqMtycH^B>7Zo)-Q9PXY8$Gv0UsH)70T`L z{bx|Hd>4-1#pTZQRGFCmYx3Al?jJ-hz3ZQ|*)%+(b14@+2$m4053(`HDGjxi$3K$3 z&&bmdy)j`eZ=D#m3-0}x6E$VAm9YjV7S}A#NjGfd1a^p`T6a#Lcf0DZ+BV$YbkfW`{%Kg#0N|=r|?6(~&`BT!#;rY^ZSKOJ?gR&xBA2sXHGe6!i8jT0l70c4zTvdbYkuRV9>%CZHWi| z7?Xd)j1_TC#mm=UN?a7ZcT-OPl&8V7hBXvOy6P3)t!(WWuo3M~fCe=VckmTXr zmDaLVq&jA|+_&c;2P23=8AW_?SbaJo4fzPAhAn#W_;l3(w!W{r@#TV|Zi6sFwPgrM zMX${xfzkd?_FAsaXY;@Fa75<+xjPUEF+6=O|AZ(PG;rcFPXAYgE`ju8t>gb%WuEkP zEv@UYa&_&tQ~U~}-PA8CcGZ+9 z6!fS`@<1wZFBLjG5G3{PvvlUoybxj>&H{5DhT(>1kFm}qm75hyyN@!F;1mg^$OdTo zR*}X_Dr+0_wakFz5m@j7(y3NMYO5+Mq(Ue*hKqU5pV6Dkl7!k?&3-g*NCeuSsxv}K z3hFlDS?##DvFr?N7%S1GK9!w@9r%qp6~ESL3EWr1B?(W8{VDhJQ$f zcTyn<og-LDD_$(nL>k^r9^@UtrL2UPu1o&e)f^~elx+Wxap}3Yt;4DlxhTj=8)fm52TG7n48>|S?Aq& z8SJsgZB%c*9iVP0nzN`9!>$i~a(ftdSB*2@i==6Ds(ECI4do<*j^wi{q%lKx2qW%lUZva?xRL58 zHUMiorPEoahbOQ1iaOhI)UPaIS^HP};IG-WUk10Af z;FBM@t8;9t)dgi(I620z*nykv25r9o5V=2?(0?eM8Df}-DLo+@%F&MA}cS>cJB{2$CF`AE$4!_DP%OUTYfyYi~w=##ES?!T> z|HdXo-GW#b?)NHV`d;d+NG_El$#>--`F^kG4JWbMFi77T=;CPr`;SCg+Z?sqJy*tp zQG)2BvW_A(8gq;l_3*3EdZz8-WEl!`;(q(`L2WgWlPoqktWZm0k+XgyrVL%1WvdzU zV6zKOZiEvk>gF|cs&>gOZyMq<)MeL1rw3q`H}a3MM^zEVZSbNunCnM zy|6q&f38l#h-kuP*Roy}=sF-YoWc6)JtJ`c2DyeCpckP<6kNmvWt1vFYEq1R=?1bk z8&+4wse^xBtwhvyel#Ev8Pe5C>Oi~ejeWeY2kIKDpWDGhO8Bzz>(#cQYArH!@l)73 zFUUqxV4wIc)~iOGBPwmqi55=mpgHxw;&cCeRKXJuYk6dF6%48CZ(OkM zugrh}N@W=VB5I-<&Teolbk*8l781Jj9NS_($Zn{v^eEO^XzO|>KJy*{4SYn_t`heFM>!CxBm94 zZbFlEzfFylI5n7RFTe8_DY1YD)h1<85Wj}{4bpn8YrBf;*00@Rd4uGLOikK=&pYLFQE}RW|?bV#qOdi{A>sJBq;$Yw! zh^O9KWF?tlJb5Gk=z)OTl*`%};Bj+B+txIOHH2EImHOxgzB?Zuh)?vG;v|LJ!g6wF z2Gwv5dc8;I@h3ATx+9*S{D6T+Vdo|fNn2ynmz@|{Oopc+NprZ?j80EA{K1)gH8YyB zv=}f#tlJJl9x7DJrUO>imtV1qpfFqa2PaHEe*IVbgc0kVS42BHVqv?Sx!LN9AYwhaJ_a&*=NB--to?cmvv% zek)U_n!Ly}s|bA_PJ9(8>Gov`ODS_GWWirUPSuO;aR<6HOB^*0kx6JzzHlDdre_Lm z)AlF!bNqiLO)RfOU@V@DUqtZI^Katwo^`^`K3ki>>3w7T8N9J?^vZ!g?2cFWk};+F zEM2tj30i!G$l~pZ%t& z+c|AH>VC68U{YUlKzM6ITPA6cK(WPK^e}|%Y!TH8UOK^pQ`(q+wKa_%1kD60JcH(2 zON?17f&zmA(H4iMxff^@dZ8@2AJ0LPK#h)K%Z5vsAeRFTB}Pmx#07;(kX7#G$^a(x zJJauCVT&M>Zk>3lr7zb6Zv^B0vC2@P6WO==%I8AZ3Vg($dL#vEZh%qN| zg_kxCtXVVTd#NM;OK+E!4e7eiD)x$YtuY8N-QiZ;BF<%x(mGl1!f(t(AU*|@3IXGo zSO>-Kmd@KJ&PtD$u)1v*{z_5ij0Hwup5y8V(-*&2gCk?AE?c~rnL4+6nUf?=<*mus20h<+`v`kIUeT`m{4o_8FEnT3qNCs%9DQbc#qJ@oKABD(QH1E2 zqi*urKAqr$wl3}n{OLwJqTYJLgos&75K`vKQAiV7FzXKpNS}zqX zqX8&e$aEigwcTEFfzGv|30!Cz*;OtjtXiJI9w*Ah`acAE^!EMxDlX}je!KUxoj;W%*R+_d2ykR#Le zn?^0a2JMob??yd{dW6a70E(8!g~2nQ@aiBAs>+2X1nb2*v32hMccTW?Nq(rze6U|o z8uq5dvBHiH44|(tFx66(OF~=zq%?W3w@CN(>%UJe#iQtjJd zTHxuEB>a<({_KpMe(Vm$?&_6fl@q08V$&9^JOg1!DBC*%-Axz3( zgo*oOo<6ger^4^de%1g!h1cP*Y9OyLCV1f@fEN~j?ZE!u>CV)6M=q5PCZ2R@iLWcR zsVUIXE_h{b8X+pVj{)m~UkgN--JY77QN}W7!E3#AcTDR(Y0ov8L&w6=_YPF~OOl-s8zEqg>@nlCtWqxqh6Q;42V^Bje+=*@u-Q>^l?QLX=e=BTl z>(}>wqz0PFkb?Y9RKDvu{d+n;pH3Vys-L1*vmtxW-Mks(FiQ^lJHR?gEA-^GW71Ap zq$ALZ$jPY))7Qj=lPT^m<V#)O#!CC?r7pK~IbmqC!>`nG9{InsCilw=?R z4?s{~&>!Ak~>!RkxN#Qk#^Eua%POHW5fPRSU8J_kwYZzX392lrfyO!A`!xXq4Pop}fO zSERtVNVz3u957SUo78N}-jQg*cGz>nE^3aFgI*&_!Si)AAhu}@8T(hCxlXfQvky#%oMl*e<*9ST3Mwyo8y-!1Ip0T}; zkE9>8ay6SR?N#(R32&_2Xmtk^8BCiLMQb-<=E7EV{*iDrE3~dUDm{7}-f{0PFYWgB zOyIFP?+Xm^D<8Ntb(KmxS5MoMCxQZ;x&YNIAdb$qgop52-D~mi=sC|ROpU0;GKUg= zPRSc=>oVSPNMsh&m0DOE|E*E29_cFu8%PXXVzQZW@xCIJQbQTmtIfcG;0`^ITZFVJ zAVC{s%@}yo)Fu|W0yW5G8+p$?71-#8S@~^TTAk+rgoY(YrYojjWcrfMpwCJav%Z6;7U}-4#<| zt4z~OH7U0{n3sN31GhV`#*kO0Pntu-N(p<1Vl3HB30CPVW;^H^LtfeWlXBs6`q}oH z)E2iiDu&~9gXq22Lb3nLvAundyAj|uJE4-Azz&O%$U^^K$V)kOsgfo~NU>YHQG3uP z7L62Ur?P8U*{$tl5;JJfDDsCg#|(@VFy$5U)wbmd&;!@$=3GLFsF54X*{kI?Pey~k z1_ulQloX!Cn4lLke;KQ>qWgoO!RTAj34r9kF$CVcF6c`AzxA0?5fn036L?^ZC4v6x zYn4fZuyh2?7`ylPY@M=z{`p1w+vPe=iLCjFwIFFZ3Y3nY_*d#k;^1wy>Ubh;y z++<;i1cmDxe=jIZ{_Yq#fgI@(b&sWMO+i%x9~x_mJg}5W(QeF3^fw|R5&7RprPg`y zu`#_E2i6);m(@Uj5kqt|$xeFQNI#8BFO`P=uxej6!mzGVIe4%eg&OQ)iWLH^yezKv zSDCw?ugUsxBS!GI0>+>}thV8HQ)EK>*W31f48ki5><7G+cXuWag zsvTp_VDLVrit`J2jP;`x+QfavR@P%HEqeXUl@Y&2-SoW9p-Q_s0sHJjjy1}D)h8Mm zjOG+XKU1>9^(uC>!eb00$}TG#<5k=ZAM*zV;8~PPNx^765bZa#mAlRl!68mN<5<4K zc~_;B+eXXnB1xRr`d_hBeYL`Y411nKlx3&Qfe7%!tt6IHWHX}-_HW$^vfkORQlB`Wv zFN{n7XT7;T(Q^TICKC8x@X%4ccE;=J60j=5PH+?1`v7Mpi8HusMgy|&4utG~uG@>wiY%>4uzFDng zKL~|&y-gO_{Z}vs`0L^OHjOq5<&Q#R;Gm+bmi`jI(r#uG7Gps8EBbFlsqIzZK?h%N zoP+qqx-^o3F>D`_kz3`nGy&D$eLhrXc*XClh?>GnJvjh)Mlv164cuN-KJpN|5H0_; z$9lnIE$c?dCDBTRRd0M|LBQbH-<*)ls&OM1r;^TzMGf0n|7~__K!;dJat=E>FS8VR z3)RNgzUEY~TzNoeDwpUl_AkB%AzvTO25$Ti?`g3nx?xHFfpPL1T_#6kR^&TQi+zfi$h4VnD{lh{db!+WvfF`!ax4~tytK+uJc}< zRIJ29;ar;Sm(3BSz1h;UAuO_k&*#0QHA2MX)lB{59&njjgwmY;#sbsJ>))H;SX~O~ zQIJqc`x}iMW#uj@#WU|Xy188L=D2(p%gB84_sEiuj(3Y5CY4P;-G3p!^-4}HlcJ#| z?U+#m%o|ZZx{H%s7AZ`uoAGCD(U@^|2m<4TM!`ui;^DN}-)hVLGyk7?g42cesrAbY zb8XF*A4p{kW=QDY4Me|z$oyb-iYHBQ0|!}25pfe`h6bS@D!(`jBQ)kY=5p7Rb?R|w z{9IR_Vx0Rf*>vDfV^C6)^EHDbG5bDf!ipRjYsMNeP9+LQ97(B+c^(!*3Vj-0)gh(j z{R7!Eg0LP|e8~y;qq$TK6Bz(t>(SadXK{7Q4eqflC+y&*X9&r-fu~8aV}FQRba`^% zgV+Jk37dLY%k+9&QW6*kpsVYFlfy=F(kxsUdKNKZ_rH{l+g23q6V@0;W;OH4t^3G)7K=V}Ux z^Z3-9ZG*n^mU~A*M~V|O&Y4-#mBKS+5$YD3{c%g-ukfrtO8cJQ$jlud1J5oa_II3o zl-qpx0-6QM(M!}OW@|K^;>CQ9ZhWbAEh~wV+ut>QB_F=gSxwlT>}c>3Lv=R5?r6vF z!7fh*)9=jDs-F$axyfk+K|U$pcw?bi9?b1TwQ=pkR3AA)B!F76Rv@1amU|!z%?P`S zbX}a-)pa}it^rzqc4zZx!{Xfj_T8e6x5WPP1H=l7t?XAVj?2p@X@;YNF@(o>u4Ch+ zw9UI!YM>^1Tus~7#Qoasq37|Lz19#Be5_qQ!+r>3y6h$Z>QDJ0oX*hH(eEP&cA{_v z`GQ8j#J=rtSpTg?bgqH9-8BEDT?>Gu4f?cMUShlvocmGqn>v}oJ(0wuHvcO=0m;v? zY`jVa_!$DE3$l+HGHtwUQfXIJ8NvYFCFtGA7-yJ=`!wLJJ6gUoX7ZfoRW|F=dI^qj z;g*C7+1wDAq?~Ype;Qi4`xRf{aLGMzRqVDu{6>oP&aHxV(STC* z;D%+p2v|NW?S}+aOVdZQg5kvj*|8pxl*o>h{%$nIZOZ6XxRe=Pyz#40)Ym_$R?&0t z|DHchs=t*R@PHBvn2k^wo;8p=(f8|AP_!a1`rz}VDSeRh_+1;3n^kYDMt}C_(D=lD zC#OaHX{bOGO;l^maJ4d4L5`)y zAcq_C_we6A?XqRJyA=3GPC3 z#GdaYE#9;g&#dtBSCV89NW5k@+^_~WAH(w<|8(8uOkttLv(AX1 z$y@UcBA}L?ZQDIDYS*H7GOLZT>AnIzzx2}PhWcpdIYW&YZlLVZfc4+L?!}wE9~81U z`jt;8KH+?Cb@PO8QZEDvbwckrMX_Ut^lg&txh=zIfkTV5ocO65fiPq99b%a!?~`5> zxO-9pXGQ9PzKqK@A2#)GHG4e6p7_Yd`nrf;1NKMMeO(){eS_~Ij4pz+2Lu`^(D{dZ z{haD`zezXOOC+pHL9U1XtJkNvP1_PjPY_=AqPE$Un6jN6g_n&fN7uXHQdU0xu$u;z zpN_8*vHFz9?ugTg$5O2_(b7q}M4$QJ-~dIj+(=F&%Z~JtF5gP(4oDpSR91fAoB&wL z$*Sk(flzSp(&rc(E|AwHbjlnH4;cc?;IM^^$ya(r+!*SvT5BVOU^w-y0O#Vp>zh!T zhwXh$FsX|Xrk_4ai{B-uZ6{STs6svvSX3k&DpF8Pd?4Kupud)feV5W@@9pGG36Fr5 zk7Xgat<#fz{Z8gFa8J~aouF?Noe*q==`ZkMs|fBFQMe0xbQ$1(ipy}ADdqs_GB7$z zU_S32TgR7Jy2GnuQ3KUV8%5ekx?E~3Jd>pl-41kN?ml;C3L7QP=rUkAd0*c9Ps%l_ z8uFUmwMoGpg`99M_MwRD22H}xRtc^`K72AT8as)p@nuOB=3OA=gKI;<67WP4c(F6Wdsj;KC*Qh&uSj|RkXkj)}i-HxRcBm4nD zU=mv4KjgUnB?NM+0T=_u;4B5C&v{xTwHDc`4>h1ev^+~t+ZroWPafISq~S!?`yD zMTLtNyO`M|j#~>C9S&iLGsT6~GByeUw^~W(D{%bB6m>Ka1M*=GGNv8QHva3XUS>qT zah#U!rrj_c7iTMR`+t{zsKtI~Xinoqp`>|saU(lA>I1B8WslMkqpUUVQO3CKhfkCTp;ajCHEgGZ;P?7_=T1MfGj zCy>cHCVT8Sebu9U#$s{9S-}IDdd`vi@s#u3dX_U4*LyN~F9r0UglE%O(7)}WcH+Ww4GI`{2?%o}WqMDY+9$(7ZERjbGCdzjT^%my&aIC>p=NwQC@S z0B~AthV4V2216sd>0yZeoi>U3@aqdz-ro8YLx?Fd6PRvs;=AcTcG8T(ZQboJ8{JBW za|~5uhPF$*x*NR9-+c#YA9N$9jR$!n^(4GPpgOi4E}AchHJc7CH0A<2FVikM8HK8@ zw?|5C;*@(t8M4O0ap?MHDy!4M(Tb*Snhhm`WSC!#m_&J5a1!pD>-E^E+aTwY1GZdu zYEq(g-ZNsvzU!jQuzI`hzr0{d77`gK{DW^rA>62^oQq13X(xV?6A(A2rIYtN_98PK zi?Vj)&Js~C8rUDAn(B$d9sw9Q#>KO_j1Ul6zq3vbaC3A1qg)uwH3^8b0=VY)c<8A7w; z=fw4kR^qY)DRUu%0Hg=&x$DRNR7SdstxBpc8q;1p9XO#?{+K|7RyJ9tP%!FS!P)t+ z&(W)g%3!rUthC