diff --git a/src/torchcodec/decoders/_core/VideoDecoder.cpp b/src/torchcodec/decoders/_core/VideoDecoder.cpp index ed43700ae..b0135ce7d 100644 --- a/src/torchcodec/decoders/_core/VideoDecoder.cpp +++ b/src/torchcodec/decoders/_core/VideoDecoder.cpp @@ -1481,8 +1481,11 @@ UniqueAVFrame VideoDecoder::convertAudioAVFrameSampleFormatAndSampleRate( static_cast( const_cast(srcAVFrame->data)), srcAVFrame->nb_samples); + // numConvertedSamples can be 0 if we're downsampling by a great factor and + // the first frame doesn't contain a lot of samples. It should be handled + // properly by the caller. TORCH_CHECK( - numConvertedSamples > 0, + numConvertedSamples >= 0, "Error in swr_convert: ", getFFMPEGErrorStringFromErrorCode(numConvertedSamples)); diff --git a/test/decoders/test_decoders.py b/test/decoders/test_decoders.py index e63e4cd1d..0f19d680f 100644 --- a/test/decoders/test_decoders.py +++ b/test/decoders/test_decoders.py @@ -24,6 +24,7 @@ in_fbcode, NASA_AUDIO, NASA_AUDIO_MP3, + NASA_AUDIO_MP3_44100, NASA_VIDEO, SINE_MONO_S16, SINE_MONO_S32, @@ -1165,6 +1166,35 @@ def test_sample_rate_conversion_stereo(self): decoder = AudioDecoder(asset.path, sample_rate=44_100) decoder.get_samples_played_in_range(start_seconds=0) + def test_downsample_empty_frame(self): + # Non-regression test for + # https://github.com/pytorch/torchcodec/pull/586: when downsampling by + # a great factor, if an input frame has a small amount of sample, the + # resampled frame (as output by swresample) may contain zero sample. We + # make sure we handle this properly. + # + # NASA_AUDIO_MP3_44100's first frame has only 47 samples which triggers + # the test scenario: + # ``` + # ยป ffprobe -v error -hide_banner -select_streams a:0 -show_frames -of json test/resources/nasa_13013.mp4.audio_44100.mp3 | grep nb_samples | head -n 3 + # "nb_samples": 47, + # "nb_samples": 1152, + # "nb_samples": 1152, + # ``` + asset = NASA_AUDIO_MP3_44100 + assert asset.sample_rate == 44_100 + decoder = AudioDecoder(asset.path, sample_rate=8_000) + frames_44100_to_8000 = decoder.get_samples_played_in_range(start_seconds=0) + + # Just checking correctness now + asset = NASA_AUDIO_MP3 + assert asset.sample_rate == 8_000 + decoder = AudioDecoder(asset.path) + frames_8000 = decoder.get_samples_played_in_range(start_seconds=0) + torch.testing.assert_close( + frames_44100_to_8000.data, frames_8000.data, atol=0.03, rtol=0 + ) + def test_s16_ffmpeg4_bug(self): # s16 fails on FFmpeg4 but can be decoded on other versions. # Debugging logs show that we're hitting: diff --git a/test/resources/nasa_13013.mp4.audio_44100.mp3 b/test/resources/nasa_13013.mp4.audio_44100.mp3 new file mode 100644 index 000000000..bf23498dd Binary files /dev/null and b/test/resources/nasa_13013.mp4.audio_44100.mp3 differ diff --git a/test/resources/nasa_13013.mp4.audio_44100.mp3.stream0.all_frames_info.json b/test/resources/nasa_13013.mp4.audio_44100.mp3.stream0.all_frames_info.json new file mode 100644 index 000000000..a0f394348 --- /dev/null +++ b/test/resources/nasa_13013.mp4.audio_44100.mp3.stream0.all_frames_info.json @@ -0,0 +1,2006 @@ +[ + { + "duration_time": "0.001066", + "pts_time": "0.025057" + }, + { + "duration_time": "0.026122", + "pts_time": "0.026122" + }, + { + "duration_time": "0.026122", + "pts_time": "0.052245" + }, + { + "duration_time": "0.026122", + "pts_time": "0.078367" + }, + { + "duration_time": "0.026122", + "pts_time": "0.104490" + }, + { + "duration_time": "0.026122", + "pts_time": "0.130612" + }, + { + "duration_time": "0.026122", + "pts_time": "0.156735" + }, + { + "duration_time": "0.026122", + "pts_time": "0.182857" + }, + { + "duration_time": "0.026122", + "pts_time": "0.208980" + }, + { + "duration_time": "0.026122", + "pts_time": "0.235102" + }, + { + "duration_time": "0.026122", + "pts_time": "0.261224" + }, + { + "duration_time": "0.026122", + "pts_time": "0.287347" + }, + { + "duration_time": "0.026122", + "pts_time": "0.313469" + }, + { + "duration_time": "0.026122", + "pts_time": "0.339592" + }, + { + "duration_time": "0.026122", + "pts_time": "0.365714" + }, + { + "duration_time": "0.026122", + "pts_time": "0.391837" + }, + { + "duration_time": "0.026122", + "pts_time": "0.417959" + }, + { + "duration_time": "0.026122", + "pts_time": "0.444082" + }, + { + "duration_time": "0.026122", + "pts_time": "0.470204" + }, + { + "duration_time": "0.026122", + "pts_time": "0.496327" + }, + { + "duration_time": "0.026122", + "pts_time": "0.522449" + }, + { + "duration_time": "0.026122", + "pts_time": "0.548571" + }, + { + "duration_time": "0.026122", + "pts_time": "0.574694" + }, + { + "duration_time": "0.026122", + "pts_time": "0.600816" + }, + { + "duration_time": "0.026122", + "pts_time": "0.626939" + }, + { + "duration_time": "0.026122", + "pts_time": "0.653061" + }, + { + "duration_time": "0.026122", + "pts_time": "0.679184" + }, + { + "duration_time": "0.026122", + "pts_time": "0.705306" + }, + { + "duration_time": "0.026122", + "pts_time": "0.731429" + }, + { + "duration_time": "0.026122", + "pts_time": "0.757551" + }, + { + "duration_time": "0.026122", + "pts_time": "0.783673" + }, + { + "duration_time": "0.026122", + "pts_time": "0.809796" + }, + { + "duration_time": "0.026122", + "pts_time": "0.835918" + }, + { + "duration_time": "0.026122", + "pts_time": "0.862041" + }, + { + "duration_time": "0.026122", + "pts_time": "0.888163" + }, + { + "duration_time": "0.026122", + "pts_time": "0.914286" + }, + { + "duration_time": "0.026122", + "pts_time": "0.940408" + }, + { + "duration_time": "0.026122", + "pts_time": "0.966531" + }, + { + "duration_time": "0.026122", + "pts_time": "0.992653" + }, + { + "duration_time": "0.026122", + "pts_time": "1.018776" + }, + { + "duration_time": "0.026122", + "pts_time": "1.044898" + }, + { + "duration_time": "0.026122", + "pts_time": "1.071020" + }, + { + "duration_time": "0.026122", + "pts_time": "1.097143" + }, + { + "duration_time": "0.026122", + "pts_time": "1.123265" + }, + { + "duration_time": "0.026122", + "pts_time": "1.149388" + }, + { + "duration_time": "0.026122", + "pts_time": "1.175510" + }, + { + "duration_time": "0.026122", + "pts_time": "1.201633" + }, + { + "duration_time": "0.026122", + "pts_time": "1.227755" + }, + { + "duration_time": "0.026122", + "pts_time": "1.253878" + }, + { + "duration_time": "0.026122", + "pts_time": "1.280000" + }, + { + "duration_time": "0.026122", + "pts_time": "1.306122" + }, + { + "duration_time": "0.026122", + "pts_time": "1.332245" + }, + { + "duration_time": "0.026122", + "pts_time": "1.358367" + }, + { + "duration_time": "0.026122", + "pts_time": "1.384490" + }, + { + "duration_time": "0.026122", + "pts_time": "1.410612" + }, + { + "duration_time": "0.026122", + "pts_time": "1.436735" + }, + { + "duration_time": "0.026122", + "pts_time": "1.462857" + }, + { + "duration_time": "0.026122", + "pts_time": "1.488980" + }, + { + "duration_time": "0.026122", + "pts_time": "1.515102" + }, + { + "duration_time": "0.026122", + "pts_time": "1.541224" + }, + { + "duration_time": "0.026122", + "pts_time": "1.567347" + }, + { + "duration_time": "0.026122", + "pts_time": "1.593469" + }, + { + "duration_time": "0.026122", + "pts_time": "1.619592" + }, + { + "duration_time": "0.026122", + "pts_time": "1.645714" + }, + { + "duration_time": "0.026122", + "pts_time": "1.671837" + }, + { + "duration_time": "0.026122", + "pts_time": "1.697959" + }, + { + "duration_time": "0.026122", + "pts_time": "1.724082" + }, + { + "duration_time": "0.026122", + "pts_time": "1.750204" + }, + { + "duration_time": "0.026122", + "pts_time": "1.776327" + }, + { + "duration_time": "0.026122", + "pts_time": "1.802449" + }, + { + "duration_time": "0.026122", + "pts_time": "1.828571" + }, + { + "duration_time": "0.026122", + "pts_time": "1.854694" + }, + { + "duration_time": "0.026122", + "pts_time": "1.880816" + }, + { + "duration_time": "0.026122", + "pts_time": "1.906939" + }, + { + "duration_time": "0.026122", + "pts_time": "1.933061" + }, + { + "duration_time": "0.026122", + "pts_time": "1.959184" + }, + { + "duration_time": "0.026122", + "pts_time": "1.985306" + }, + { + "duration_time": "0.026122", + "pts_time": "2.011429" + }, + { + "duration_time": "0.026122", + "pts_time": "2.037551" + }, + { + "duration_time": "0.026122", + "pts_time": "2.063673" + }, + { + "duration_time": "0.026122", + "pts_time": "2.089796" + }, + { + "duration_time": "0.026122", + "pts_time": "2.115918" + }, + { + "duration_time": "0.026122", + "pts_time": "2.142041" + }, + { + "duration_time": "0.026122", + "pts_time": "2.168163" + }, + { + "duration_time": "0.026122", + "pts_time": "2.194286" + }, + { + "duration_time": "0.026122", + "pts_time": "2.220408" + }, + { + "duration_time": "0.026122", + "pts_time": "2.246531" + }, + { + "duration_time": "0.026122", + "pts_time": "2.272653" + }, + { + "duration_time": "0.026122", + "pts_time": "2.298776" + }, + { + "duration_time": "0.026122", + "pts_time": "2.324898" + }, + { + "duration_time": "0.026122", + "pts_time": "2.351020" + }, + { + "duration_time": "0.026122", + "pts_time": "2.377143" + }, + { + "duration_time": "0.026122", + "pts_time": "2.403265" + }, + { + "duration_time": "0.026122", + "pts_time": "2.429388" + }, + { + "duration_time": "0.026122", + "pts_time": "2.455510" + }, + { + "duration_time": "0.026122", + "pts_time": "2.481633" + }, + { + "duration_time": "0.026122", + "pts_time": "2.507755" + }, + { + "duration_time": "0.026122", + "pts_time": "2.533878" + }, + { + "duration_time": "0.026122", + "pts_time": "2.560000" + }, + { + "duration_time": "0.026122", + "pts_time": "2.586122" + }, + { + "duration_time": "0.026122", + "pts_time": "2.612245" + }, + { + "duration_time": "0.026122", + "pts_time": "2.638367" + }, + { + "duration_time": "0.026122", + "pts_time": "2.664490" + }, + { + "duration_time": "0.026122", + "pts_time": "2.690612" + }, + { + "duration_time": "0.026122", + "pts_time": "2.716735" + }, + { + "duration_time": "0.026122", + "pts_time": "2.742857" + }, + { + "duration_time": "0.026122", + "pts_time": "2.768980" + }, + { + "duration_time": "0.026122", + "pts_time": "2.795102" + }, + { + "duration_time": "0.026122", + "pts_time": "2.821224" + }, + { + "duration_time": "0.026122", + "pts_time": "2.847347" + }, + { + "duration_time": "0.026122", + "pts_time": "2.873469" + }, + { + "duration_time": "0.026122", + "pts_time": "2.899592" + }, + { + "duration_time": "0.026122", + "pts_time": "2.925714" + }, + { + "duration_time": "0.026122", + "pts_time": "2.951837" + }, + { + "duration_time": "0.026122", + "pts_time": "2.977959" + }, + { + "duration_time": "0.026122", + "pts_time": "3.004082" + }, + { + "duration_time": "0.026122", + "pts_time": "3.030204" + }, + { + "duration_time": "0.026122", + "pts_time": "3.056327" + }, + { + "duration_time": "0.026122", + "pts_time": "3.082449" + }, + { + "duration_time": "0.026122", + "pts_time": "3.108571" + }, + { + "duration_time": "0.026122", + "pts_time": "3.134694" + }, + { + "duration_time": "0.026122", + "pts_time": "3.160816" + }, + { + "duration_time": "0.026122", + "pts_time": "3.186939" + }, + { + "duration_time": "0.026122", + "pts_time": "3.213061" + }, + { + "duration_time": "0.026122", + "pts_time": "3.239184" + }, + { + "duration_time": "0.026122", + "pts_time": "3.265306" + }, + { + "duration_time": "0.026122", + "pts_time": "3.291429" + }, + { + "duration_time": "0.026122", + "pts_time": "3.317551" + }, + { + "duration_time": "0.026122", + "pts_time": "3.343673" + }, + { + "duration_time": "0.026122", + "pts_time": "3.369796" + }, + { + "duration_time": "0.026122", + "pts_time": "3.395918" + }, + { + "duration_time": "0.026122", + "pts_time": "3.422041" + }, + { + "duration_time": "0.026122", + "pts_time": "3.448163" + }, + { + "duration_time": "0.026122", + "pts_time": "3.474286" + }, + { + "duration_time": "0.026122", + "pts_time": "3.500408" + }, + { + "duration_time": "0.026122", + "pts_time": "3.526531" + }, + { + "duration_time": "0.026122", + "pts_time": "3.552653" + }, + { + "duration_time": "0.026122", + "pts_time": "3.578776" + }, + { + "duration_time": "0.026122", + "pts_time": "3.604898" + }, + { + "duration_time": "0.026122", + "pts_time": "3.631020" + }, + { + "duration_time": "0.026122", + "pts_time": "3.657143" + }, + { + "duration_time": "0.026122", + "pts_time": "3.683265" + }, + { + "duration_time": "0.026122", + "pts_time": "3.709388" + }, + { + "duration_time": "0.026122", + "pts_time": "3.735510" + }, + { + "duration_time": "0.026122", + "pts_time": "3.761633" + }, + { + "duration_time": "0.026122", + "pts_time": "3.787755" + }, + { + "duration_time": "0.026122", + "pts_time": "3.813878" + }, + { + "duration_time": "0.026122", + "pts_time": "3.840000" + }, + { + "duration_time": "0.026122", + "pts_time": "3.866122" + }, + { + "duration_time": "0.026122", + "pts_time": "3.892245" + }, + { + "duration_time": "0.026122", + "pts_time": "3.918367" + }, + { + "duration_time": "0.026122", + "pts_time": "3.944490" + }, + { + "duration_time": "0.026122", + "pts_time": "3.970612" + }, + { + "duration_time": "0.026122", + "pts_time": "3.996735" + }, + { + "duration_time": "0.026122", + "pts_time": "4.022857" + }, + { + "duration_time": "0.026122", + "pts_time": "4.048980" + }, + { + "duration_time": "0.026122", + "pts_time": "4.075102" + }, + { + "duration_time": "0.026122", + "pts_time": "4.101224" + }, + { + "duration_time": "0.026122", + "pts_time": "4.127347" + }, + { + "duration_time": "0.026122", + "pts_time": "4.153469" + }, + { + "duration_time": "0.026122", + "pts_time": "4.179592" + }, + { + "duration_time": "0.026122", + "pts_time": "4.205714" + }, + { + "duration_time": "0.026122", + "pts_time": "4.231837" + }, + { + "duration_time": "0.026122", + "pts_time": "4.257959" + }, + { + "duration_time": "0.026122", + "pts_time": "4.284082" + }, + { + "duration_time": "0.026122", + "pts_time": "4.310204" + }, + { + "duration_time": "0.026122", + "pts_time": "4.336327" + }, + { + "duration_time": "0.026122", + "pts_time": "4.362449" + }, + { + "duration_time": "0.026122", + "pts_time": "4.388571" + }, + { + "duration_time": "0.026122", + "pts_time": "4.414694" + }, + { + "duration_time": "0.026122", + "pts_time": "4.440816" + }, + { + "duration_time": "0.026122", + "pts_time": "4.466939" + }, + { + "duration_time": "0.026122", + "pts_time": "4.493061" + }, + { + "duration_time": "0.026122", + "pts_time": "4.519184" + }, + { + "duration_time": "0.026122", + "pts_time": "4.545306" + }, + { + "duration_time": "0.026122", + "pts_time": "4.571429" + }, + { + "duration_time": "0.026122", + "pts_time": "4.597551" + }, + { + "duration_time": "0.026122", + "pts_time": "4.623673" + }, + { + "duration_time": "0.026122", + "pts_time": "4.649796" + }, + { + "duration_time": "0.026122", + "pts_time": "4.675918" + }, + { + "duration_time": "0.026122", + "pts_time": "4.702041" + }, + { + "duration_time": "0.026122", + "pts_time": "4.728163" + }, + { + "duration_time": "0.026122", + "pts_time": "4.754286" + }, + { + "duration_time": "0.026122", + "pts_time": "4.780408" + }, + { + "duration_time": "0.026122", + "pts_time": "4.806531" + }, + { + "duration_time": "0.026122", + "pts_time": "4.832653" + }, + { + "duration_time": "0.026122", + "pts_time": "4.858776" + }, + { + "duration_time": "0.026122", + "pts_time": "4.884898" + }, + { + "duration_time": "0.026122", + "pts_time": "4.911020" + }, + { + "duration_time": "0.026122", + "pts_time": "4.937143" + }, + { + "duration_time": "0.026122", + "pts_time": "4.963265" + }, + { + "duration_time": "0.026122", + "pts_time": "4.989388" + }, + { + "duration_time": "0.026122", + "pts_time": "5.015510" + }, + { + "duration_time": "0.026122", + "pts_time": "5.041633" + }, + { + "duration_time": "0.026122", + "pts_time": "5.067755" + }, + { + "duration_time": "0.026122", + "pts_time": "5.093878" + }, + { + "duration_time": "0.026122", + "pts_time": "5.120000" + }, + { + "duration_time": "0.026122", + "pts_time": "5.146122" + }, + { + "duration_time": "0.026122", + "pts_time": "5.172245" + }, + { + "duration_time": "0.026122", + "pts_time": "5.198367" + }, + { + "duration_time": "0.026122", + "pts_time": "5.224490" + }, + { + "duration_time": "0.026122", + "pts_time": "5.250612" + }, + { + "duration_time": "0.026122", + "pts_time": "5.276735" + }, + { + "duration_time": "0.026122", + "pts_time": "5.302857" + }, + { + "duration_time": "0.026122", + "pts_time": "5.328980" + }, + { + "duration_time": "0.026122", + "pts_time": "5.355102" + }, + { + "duration_time": "0.026122", + "pts_time": "5.381224" + }, + { + "duration_time": "0.026122", + "pts_time": "5.407347" + }, + { + "duration_time": "0.026122", + "pts_time": "5.433469" + }, + { + "duration_time": "0.026122", + "pts_time": "5.459592" + }, + { + "duration_time": "0.026122", + "pts_time": "5.485714" + }, + { + "duration_time": "0.026122", + "pts_time": "5.511837" + }, + { + "duration_time": "0.026122", + "pts_time": "5.537959" + }, + { + "duration_time": "0.026122", + "pts_time": "5.564082" + }, + { + "duration_time": "0.026122", + "pts_time": "5.590204" + }, + { + "duration_time": "0.026122", + "pts_time": "5.616327" + }, + { + "duration_time": "0.026122", + "pts_time": "5.642449" + }, + { + "duration_time": "0.026122", + "pts_time": "5.668571" + }, + { + "duration_time": "0.026122", + "pts_time": "5.694694" + }, + { + "duration_time": "0.026122", + "pts_time": "5.720816" + }, + { + "duration_time": "0.026122", + "pts_time": "5.746939" + }, + { + "duration_time": "0.026122", + "pts_time": "5.773061" + }, + { + "duration_time": "0.026122", + "pts_time": "5.799184" + }, + { + "duration_time": "0.026122", + "pts_time": "5.825306" + }, + { + "duration_time": "0.026122", + "pts_time": "5.851429" + }, + { + "duration_time": "0.026122", + "pts_time": "5.877551" + }, + { + "duration_time": "0.026122", + "pts_time": "5.903673" + }, + { + "duration_time": "0.026122", + "pts_time": "5.929796" + }, + { + "duration_time": "0.026122", + "pts_time": "5.955918" + }, + { + "duration_time": "0.026122", + "pts_time": "5.982041" + }, + { + "duration_time": "0.026122", + "pts_time": "6.008163" + }, + { + "duration_time": "0.026122", + "pts_time": "6.034286" + }, + { + "duration_time": "0.026122", + "pts_time": "6.060408" + }, + { + "duration_time": "0.026122", + "pts_time": "6.086531" + }, + { + "duration_time": "0.026122", + "pts_time": "6.112653" + }, + { + "duration_time": "0.026122", + "pts_time": "6.138776" + }, + { + "duration_time": "0.026122", + "pts_time": "6.164898" + }, + { + "duration_time": "0.026122", + "pts_time": "6.191020" + }, + { + "duration_time": "0.026122", + "pts_time": "6.217143" + }, + { + "duration_time": "0.026122", + "pts_time": "6.243265" + }, + { + "duration_time": "0.026122", + "pts_time": "6.269388" + }, + { + "duration_time": "0.026122", + "pts_time": "6.295510" + }, + { + "duration_time": "0.026122", + "pts_time": "6.321633" + }, + { + "duration_time": "0.026122", + "pts_time": "6.347755" + }, + { + "duration_time": "0.026122", + "pts_time": "6.373878" + }, + { + "duration_time": "0.026122", + "pts_time": "6.400000" + }, + { + "duration_time": "0.026122", + "pts_time": "6.426122" + }, + { + "duration_time": "0.026122", + "pts_time": "6.452245" + }, + { + "duration_time": "0.026122", + "pts_time": "6.478367" + }, + { + "duration_time": "0.026122", + "pts_time": "6.504490" + }, + { + "duration_time": "0.026122", + "pts_time": "6.530612" + }, + { + "duration_time": "0.026122", + "pts_time": "6.556735" + }, + { + "duration_time": "0.026122", + "pts_time": "6.582857" + }, + { + "duration_time": "0.026122", + "pts_time": "6.608980" + }, + { + "duration_time": "0.026122", + "pts_time": "6.635102" + }, + { + "duration_time": "0.026122", + "pts_time": "6.661224" + }, + { + "duration_time": "0.026122", + "pts_time": "6.687347" + }, + { + "duration_time": "0.026122", + "pts_time": "6.713469" + }, + { + "duration_time": "0.026122", + "pts_time": "6.739592" + }, + { + "duration_time": "0.026122", + "pts_time": "6.765714" + }, + { + "duration_time": "0.026122", + "pts_time": "6.791837" + }, + { + "duration_time": "0.026122", + "pts_time": "6.817959" + }, + { + "duration_time": "0.026122", + "pts_time": "6.844082" + }, + { + "duration_time": "0.026122", + "pts_time": "6.870204" + }, + { + "duration_time": "0.026122", + "pts_time": "6.896327" + }, + { + "duration_time": "0.026122", + "pts_time": "6.922449" + }, + { + "duration_time": "0.026122", + "pts_time": "6.948571" + }, + { + "duration_time": "0.026122", + "pts_time": "6.974694" + }, + { + "duration_time": "0.026122", + "pts_time": "7.000816" + }, + { + "duration_time": "0.026122", + "pts_time": "7.026939" + }, + { + "duration_time": "0.026122", + "pts_time": "7.053061" + }, + { + "duration_time": "0.026122", + "pts_time": "7.079184" + }, + { + "duration_time": "0.026122", + "pts_time": "7.105306" + }, + { + "duration_time": "0.026122", + "pts_time": "7.131429" + }, + { + "duration_time": "0.026122", + "pts_time": "7.157551" + }, + { + "duration_time": "0.026122", + "pts_time": "7.183673" + }, + { + "duration_time": "0.026122", + "pts_time": "7.209796" + }, + { + "duration_time": "0.026122", + "pts_time": "7.235918" + }, + { + "duration_time": "0.026122", + "pts_time": "7.262041" + }, + { + "duration_time": "0.026122", + "pts_time": "7.288163" + }, + { + "duration_time": "0.026122", + "pts_time": "7.314286" + }, + { + "duration_time": "0.026122", + "pts_time": "7.340408" + }, + { + "duration_time": "0.026122", + "pts_time": "7.366531" + }, + { + "duration_time": "0.026122", + "pts_time": "7.392653" + }, + { + "duration_time": "0.026122", + "pts_time": "7.418776" + }, + { + "duration_time": "0.026122", + "pts_time": "7.444898" + }, + { + "duration_time": "0.026122", + "pts_time": "7.471020" + }, + { + "duration_time": "0.026122", + "pts_time": "7.497143" + }, + { + "duration_time": "0.026122", + "pts_time": "7.523265" + }, + { + "duration_time": "0.026122", + "pts_time": "7.549388" + }, + { + "duration_time": "0.026122", + "pts_time": "7.575510" + }, + { + "duration_time": "0.026122", + "pts_time": "7.601633" + }, + { + "duration_time": "0.026122", + "pts_time": "7.627755" + }, + { + "duration_time": "0.026122", + "pts_time": "7.653878" + }, + { + "duration_time": "0.026122", + "pts_time": "7.680000" + }, + { + "duration_time": "0.026122", + "pts_time": "7.706122" + }, + { + "duration_time": "0.026122", + "pts_time": "7.732245" + }, + { + "duration_time": "0.026122", + "pts_time": "7.758367" + }, + { + "duration_time": "0.026122", + "pts_time": "7.784490" + }, + { + "duration_time": "0.026122", + "pts_time": "7.810612" + }, + { + "duration_time": "0.026122", + "pts_time": "7.836735" + }, + { + "duration_time": "0.026122", + "pts_time": "7.862857" + }, + { + "duration_time": "0.026122", + "pts_time": "7.888980" + }, + { + "duration_time": "0.026122", + "pts_time": "7.915102" + }, + { + "duration_time": "0.026122", + "pts_time": "7.941224" + }, + { + "duration_time": "0.026122", + "pts_time": "7.967347" + }, + { + "duration_time": "0.026122", + "pts_time": "7.993469" + }, + { + "duration_time": "0.026122", + "pts_time": "8.019592" + }, + { + "duration_time": "0.026122", + "pts_time": "8.045714" + }, + { + "duration_time": "0.026122", + "pts_time": "8.071837" + }, + { + "duration_time": "0.026122", + "pts_time": "8.097959" + }, + { + "duration_time": "0.026122", + "pts_time": "8.124082" + }, + { + "duration_time": "0.026122", + "pts_time": "8.150204" + }, + { + "duration_time": "0.026122", + "pts_time": "8.176327" + }, + { + "duration_time": "0.026122", + "pts_time": "8.202449" + }, + { + "duration_time": "0.026122", + "pts_time": "8.228571" + }, + { + "duration_time": "0.026122", + "pts_time": "8.254694" + }, + { + "duration_time": "0.026122", + "pts_time": "8.280816" + }, + { + "duration_time": "0.026122", + "pts_time": "8.306939" + }, + { + "duration_time": "0.026122", + "pts_time": "8.333061" + }, + { + "duration_time": "0.026122", + "pts_time": "8.359184" + }, + { + "duration_time": "0.026122", + "pts_time": "8.385306" + }, + { + "duration_time": "0.026122", + "pts_time": "8.411429" + }, + { + "duration_time": "0.026122", + "pts_time": "8.437551" + }, + { + "duration_time": "0.026122", + "pts_time": "8.463673" + }, + { + "duration_time": "0.026122", + "pts_time": "8.489796" + }, + { + "duration_time": "0.026122", + "pts_time": "8.515918" + }, + { + "duration_time": "0.026122", + "pts_time": "8.542041" + }, + { + "duration_time": "0.026122", + "pts_time": "8.568163" + }, + { + "duration_time": "0.026122", + "pts_time": "8.594286" + }, + { + "duration_time": "0.026122", + "pts_time": "8.620408" + }, + { + "duration_time": "0.026122", + "pts_time": "8.646531" + }, + { + "duration_time": "0.026122", + "pts_time": "8.672653" + }, + { + "duration_time": "0.026122", + "pts_time": "8.698776" + }, + { + "duration_time": "0.026122", + "pts_time": "8.724898" + }, + { + "duration_time": "0.026122", + "pts_time": "8.751020" + }, + { + "duration_time": "0.026122", + "pts_time": "8.777143" + }, + { + "duration_time": "0.026122", + "pts_time": "8.803265" + }, + { + "duration_time": "0.026122", + "pts_time": "8.829388" + }, + { + "duration_time": "0.026122", + "pts_time": "8.855510" + }, + { + "duration_time": "0.026122", + "pts_time": "8.881633" + }, + { + "duration_time": "0.026122", + "pts_time": "8.907755" + }, + { + "duration_time": "0.026122", + "pts_time": "8.933878" + }, + { + "duration_time": "0.026122", + "pts_time": "8.960000" + }, + { + "duration_time": "0.026122", + "pts_time": "8.986122" + }, + { + "duration_time": "0.026122", + "pts_time": "9.012245" + }, + { + "duration_time": "0.026122", + "pts_time": "9.038367" + }, + { + "duration_time": "0.026122", + "pts_time": "9.064490" + }, + { + "duration_time": "0.026122", + "pts_time": "9.090612" + }, + { + "duration_time": "0.026122", + "pts_time": "9.116735" + }, + { + "duration_time": "0.026122", + "pts_time": "9.142857" + }, + { + "duration_time": "0.026122", + "pts_time": "9.168980" + }, + { + "duration_time": "0.026122", + "pts_time": "9.195102" + }, + { + "duration_time": "0.026122", + "pts_time": "9.221224" + }, + { + "duration_time": "0.026122", + "pts_time": "9.247347" + }, + { + "duration_time": "0.026122", + "pts_time": "9.273469" + }, + { + "duration_time": "0.026122", + "pts_time": "9.299592" + }, + { + "duration_time": "0.026122", + "pts_time": "9.325714" + }, + { + "duration_time": "0.026122", + "pts_time": "9.351837" + }, + { + "duration_time": "0.026122", + "pts_time": "9.377959" + }, + { + "duration_time": "0.026122", + "pts_time": "9.404082" + }, + { + "duration_time": "0.026122", + "pts_time": "9.430204" + }, + { + "duration_time": "0.026122", + "pts_time": "9.456327" + }, + { + "duration_time": "0.026122", + "pts_time": "9.482449" + }, + { + "duration_time": "0.026122", + "pts_time": "9.508571" + }, + { + "duration_time": "0.026122", + "pts_time": "9.534694" + }, + { + "duration_time": "0.026122", + "pts_time": "9.560816" + }, + { + "duration_time": "0.026122", + "pts_time": "9.586939" + }, + { + "duration_time": "0.026122", + "pts_time": "9.613061" + }, + { + "duration_time": "0.026122", + "pts_time": "9.639184" + }, + { + "duration_time": "0.026122", + "pts_time": "9.665306" + }, + { + "duration_time": "0.026122", + "pts_time": "9.691429" + }, + { + "duration_time": "0.026122", + "pts_time": "9.717551" + }, + { + "duration_time": "0.026122", + "pts_time": "9.743673" + }, + { + "duration_time": "0.026122", + "pts_time": "9.769796" + }, + { + "duration_time": "0.026122", + "pts_time": "9.795918" + }, + { + "duration_time": "0.026122", + "pts_time": "9.822041" + }, + { + "duration_time": "0.026122", + "pts_time": "9.848163" + }, + { + "duration_time": "0.026122", + "pts_time": "9.874286" + }, + { + "duration_time": "0.026122", + "pts_time": "9.900408" + }, + { + "duration_time": "0.026122", + "pts_time": "9.926531" + }, + { + "duration_time": "0.026122", + "pts_time": "9.952653" + }, + { + "duration_time": "0.026122", + "pts_time": "9.978776" + }, + { + "duration_time": "0.026122", + "pts_time": "10.004898" + }, + { + "duration_time": "0.026122", + "pts_time": "10.031020" + }, + { + "duration_time": "0.026122", + "pts_time": "10.057143" + }, + { + "duration_time": "0.026122", + "pts_time": "10.083265" + }, + { + "duration_time": "0.026122", + "pts_time": "10.109388" + }, + { + "duration_time": "0.026122", + "pts_time": "10.135510" + }, + { + "duration_time": "0.026122", + "pts_time": "10.161633" + }, + { + "duration_time": "0.026122", + "pts_time": "10.187755" + }, + { + "duration_time": "0.026122", + "pts_time": "10.213878" + }, + { + "duration_time": "0.026122", + "pts_time": "10.240000" + }, + { + "duration_time": "0.026122", + "pts_time": "10.266122" + }, + { + "duration_time": "0.026122", + "pts_time": "10.292245" + }, + { + "duration_time": "0.026122", + "pts_time": "10.318367" + }, + { + "duration_time": "0.026122", + "pts_time": "10.344490" + }, + { + "duration_time": "0.026122", + "pts_time": "10.370612" + }, + { + "duration_time": "0.026122", + "pts_time": "10.396735" + }, + { + "duration_time": "0.026122", + "pts_time": "10.422857" + }, + { + "duration_time": "0.026122", + "pts_time": "10.448980" + }, + { + "duration_time": "0.026122", + "pts_time": "10.475102" + }, + { + "duration_time": "0.026122", + "pts_time": "10.501224" + }, + { + "duration_time": "0.026122", + "pts_time": "10.527347" + }, + { + "duration_time": "0.026122", + "pts_time": "10.553469" + }, + { + "duration_time": "0.026122", + "pts_time": "10.579592" + }, + { + "duration_time": "0.026122", + "pts_time": "10.605714" + }, + { + "duration_time": "0.026122", + "pts_time": "10.631837" + }, + { + "duration_time": "0.026122", + "pts_time": "10.657959" + }, + { + "duration_time": "0.026122", + "pts_time": "10.684082" + }, + { + "duration_time": "0.026122", + "pts_time": "10.710204" + }, + { + "duration_time": "0.026122", + "pts_time": "10.736327" + }, + { + "duration_time": "0.026122", + "pts_time": "10.762449" + }, + { + "duration_time": "0.026122", + "pts_time": "10.788571" + }, + { + "duration_time": "0.026122", + "pts_time": "10.814694" + }, + { + "duration_time": "0.026122", + "pts_time": "10.840816" + }, + { + "duration_time": "0.026122", + "pts_time": "10.866939" + }, + { + "duration_time": "0.026122", + "pts_time": "10.893061" + }, + { + "duration_time": "0.026122", + "pts_time": "10.919184" + }, + { + "duration_time": "0.026122", + "pts_time": "10.945306" + }, + { + "duration_time": "0.026122", + "pts_time": "10.971429" + }, + { + "duration_time": "0.026122", + "pts_time": "10.997551" + }, + { + "duration_time": "0.026122", + "pts_time": "11.023673" + }, + { + "duration_time": "0.026122", + "pts_time": "11.049796" + }, + { + "duration_time": "0.026122", + "pts_time": "11.075918" + }, + { + "duration_time": "0.026122", + "pts_time": "11.102041" + }, + { + "duration_time": "0.026122", + "pts_time": "11.128163" + }, + { + "duration_time": "0.026122", + "pts_time": "11.154286" + }, + { + "duration_time": "0.026122", + "pts_time": "11.180408" + }, + { + "duration_time": "0.026122", + "pts_time": "11.206531" + }, + { + "duration_time": "0.026122", + "pts_time": "11.232653" + }, + { + "duration_time": "0.026122", + "pts_time": "11.258776" + }, + { + "duration_time": "0.026122", + "pts_time": "11.284898" + }, + { + "duration_time": "0.026122", + "pts_time": "11.311020" + }, + { + "duration_time": "0.026122", + "pts_time": "11.337143" + }, + { + "duration_time": "0.026122", + "pts_time": "11.363265" + }, + { + "duration_time": "0.026122", + "pts_time": "11.389388" + }, + { + "duration_time": "0.026122", + "pts_time": "11.415510" + }, + { + "duration_time": "0.026122", + "pts_time": "11.441633" + }, + { + "duration_time": "0.026122", + "pts_time": "11.467755" + }, + { + "duration_time": "0.026122", + "pts_time": "11.493878" + }, + { + "duration_time": "0.026122", + "pts_time": "11.520000" + }, + { + "duration_time": "0.026122", + "pts_time": "11.546122" + }, + { + "duration_time": "0.026122", + "pts_time": "11.572245" + }, + { + "duration_time": "0.026122", + "pts_time": "11.598367" + }, + { + "duration_time": "0.026122", + "pts_time": "11.624490" + }, + { + "duration_time": "0.026122", + "pts_time": "11.650612" + }, + { + "duration_time": "0.026122", + "pts_time": "11.676735" + }, + { + "duration_time": "0.026122", + "pts_time": "11.702857" + }, + { + "duration_time": "0.026122", + "pts_time": "11.728980" + }, + { + "duration_time": "0.026122", + "pts_time": "11.755102" + }, + { + "duration_time": "0.026122", + "pts_time": "11.781224" + }, + { + "duration_time": "0.026122", + "pts_time": "11.807347" + }, + { + "duration_time": "0.026122", + "pts_time": "11.833469" + }, + { + "duration_time": "0.026122", + "pts_time": "11.859592" + }, + { + "duration_time": "0.026122", + "pts_time": "11.885714" + }, + { + "duration_time": "0.026122", + "pts_time": "11.911837" + }, + { + "duration_time": "0.026122", + "pts_time": "11.937959" + }, + { + "duration_time": "0.026122", + "pts_time": "11.964082" + }, + { + "duration_time": "0.026122", + "pts_time": "11.990204" + }, + { + "duration_time": "0.026122", + "pts_time": "12.016327" + }, + { + "duration_time": "0.026122", + "pts_time": "12.042449" + }, + { + "duration_time": "0.026122", + "pts_time": "12.068571" + }, + { + "duration_time": "0.026122", + "pts_time": "12.094694" + }, + { + "duration_time": "0.026122", + "pts_time": "12.120816" + }, + { + "duration_time": "0.026122", + "pts_time": "12.146939" + }, + { + "duration_time": "0.026122", + "pts_time": "12.173061" + }, + { + "duration_time": "0.026122", + "pts_time": "12.199184" + }, + { + "duration_time": "0.026122", + "pts_time": "12.225306" + }, + { + "duration_time": "0.026122", + "pts_time": "12.251429" + }, + { + "duration_time": "0.026122", + "pts_time": "12.277551" + }, + { + "duration_time": "0.026122", + "pts_time": "12.303673" + }, + { + "duration_time": "0.026122", + "pts_time": "12.329796" + }, + { + "duration_time": "0.026122", + "pts_time": "12.355918" + }, + { + "duration_time": "0.026122", + "pts_time": "12.382041" + }, + { + "duration_time": "0.026122", + "pts_time": "12.408163" + }, + { + "duration_time": "0.026122", + "pts_time": "12.434286" + }, + { + "duration_time": "0.026122", + "pts_time": "12.460408" + }, + { + "duration_time": "0.026122", + "pts_time": "12.486531" + }, + { + "duration_time": "0.026122", + "pts_time": "12.512653" + }, + { + "duration_time": "0.026122", + "pts_time": "12.538776" + }, + { + "duration_time": "0.026122", + "pts_time": "12.564898" + }, + { + "duration_time": "0.026122", + "pts_time": "12.591020" + }, + { + "duration_time": "0.026122", + "pts_time": "12.617143" + }, + { + "duration_time": "0.026122", + "pts_time": "12.643265" + }, + { + "duration_time": "0.026122", + "pts_time": "12.669388" + }, + { + "duration_time": "0.026122", + "pts_time": "12.695510" + }, + { + "duration_time": "0.026122", + "pts_time": "12.721633" + }, + { + "duration_time": "0.026122", + "pts_time": "12.747755" + }, + { + "duration_time": "0.026122", + "pts_time": "12.773878" + }, + { + "duration_time": "0.026122", + "pts_time": "12.800000" + }, + { + "duration_time": "0.026122", + "pts_time": "12.826122" + }, + { + "duration_time": "0.026122", + "pts_time": "12.852245" + }, + { + "duration_time": "0.026122", + "pts_time": "12.878367" + }, + { + "duration_time": "0.026122", + "pts_time": "12.904490" + }, + { + "duration_time": "0.026122", + "pts_time": "12.930612" + }, + { + "duration_time": "0.026122", + "pts_time": "12.956735" + }, + { + "duration_time": "0.026122", + "pts_time": "12.982857" + }, + { + "duration_time": "0.026122", + "pts_time": "13.008980" + }, + { + "duration_time": "0.026122", + "pts_time": "13.035102" + }, + { + "duration_time": "0.019841", + "pts_time": "13.061224" + } +] diff --git a/test/utils.py b/test/utils.py index d1cdd47dd..70f32bfbe 100644 --- a/test/utils.py +++ b/test/utils.py @@ -429,6 +429,23 @@ def sample_format(self) -> str: }, ) +# This file is the same as NASA_AUDIO_MP3, with a sample rate of 44_100. It was generated with: +# ffmpeg -i test/resources/nasa_13013.mp4.audio.mp3 -ar 44100 test/resources/nasa_13013.mp4.audio_44100.mp3 +NASA_AUDIO_MP3_44100 = TestAudio( + filename="nasa_13013.mp4.audio_44100.mp3", + default_stream_index=0, + frames={}, # Automatically loaded from json file + stream_infos={ + 0: TestAudioStreamInfo( + sample_rate=44_100, + num_channels=2, + duration_seconds=13.09, + num_frames=501, + sample_format="fltp", + ) + }, +) + NASA_AUDIO = TestAudio( filename="nasa_13013.mp4", default_stream_index=4,