From 76afbfd7327f89fa5d6bf9a3a1d452a8f736b3a5 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Thu, 10 Dec 2020 21:37:55 +1100 Subject: [PATCH 01/74] 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 02/74] 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 03/74] 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 04/74] 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 05/74] 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 06/74] 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 07/74] 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 08/74] 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 09/74] [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 10/74] [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 11/74] 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 12/74] 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 13/74] 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 14/74] 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 15/74] 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 16/74] 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 17/74] 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 18/74] 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 19/74] 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 20/74] 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 21/74] 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 22/74] 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 23/74] 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 24/74] [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 25/74] [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 26/74] 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 27/74] 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 28/74] 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 29/74] 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 30/74] 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 31/74] 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 32/74] 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 33/74] 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 34/74] 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 35/74] 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 36/74] 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 37/74] 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 38/74] 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 39/74] 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 40/74] 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 41/74] 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 42/74] 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 43/74] 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 44/74] 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 45/74] 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 46/74] 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 47/74] 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 48/74] 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 49/74] 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 50/74] 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 51/74] 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 52/74] 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 53/74] 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 54/74] 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 55/74] 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 56/74] 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 57/74] 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 58/74] 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 59/74] 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 60/74] 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 61/74] 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 62/74] 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 63/74] 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