I should mention that this one of a few fixes needed to enable successful copying of GoPro metadata when using concat to join files, but wanted to start with from its size was the simplest one :)
On Sat, 2 Jul 2022 at 11:44, Steven Hartland <stevenmhartl...@gmail.com> wrote: > I'm using concat to join multiple files from a GoPro camera including the > three metadata streams, with the early return it fails as the metadata > stream information is missing so map fails. > > Example of the command line is: > ffmpeg \ > -y \ > -safe 0 \ > -f concat \ > -i list.txt \ > -c copy \ > -c:v libx264 \ > -vf scale=1920:1080 \ > -crf 24 \ > -copy_unknown \ > -map_metadata 0 \ > -movflags use_metadata_tags \ > -map 0:v \ > -map 0:a \ > -map 0:m:handler_name:" GoPro TCD" \ > -map 0:m:handler_name:" GoPro MET" \ > -map 0:m:handler_name:" GoPro SOS" \ > test/concat.mp4 > > Here is the error without the change: > > ffmpeg version N-107034-g77b529fbd2 Copyright (c) 2000-2022 the FFmpeg > developers > built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1) > configuration: --prefix=/home/steveh/ffmpeg_build > --pkg-config-flags=--static > --extra-cflags=-I/home/steveh/ffmpeg_build/include > --extra-ldflags=-L/home/steveh/ffmpeg_build/lib --extra-libs='-lpthread > -lm' --ld=g++ --bindir=/home/steveh/bin --enable-gpl --enable-gnutls > --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype > --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libdav1d > --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 > --enable-nonfree > libavutil 57. 25.100 / 57. 25.100 > libavcodec 59. 32.102 / 59. 32.102 > libavformat 59. 24.100 / 59. 24.100 > libavdevice 59. 6.100 / 59. 6.100 > libavfilter 8. 40.100 / 8. 40.100 > libswscale 6. 6.100 / 6. 6.100 > libswresample 4. 6.100 / 4. 6.100 > libpostproc 56. 5.100 / 56. 5.100 > [mov,mp4,m4a,3gp,3g2,mj2 @ 0x55be9e9aac00] Auto-inserting h264_mp4toannexb > bitstream filter > [concat @ 0x55be9e9a1140] Could not find codec parameters for stream 2 > (Unknown: none): unknown codec > Consider increasing the value for the 'analyzeduration' (0) and > 'probesize' (5000000) options > [concat @ 0x55be9e9a1140] Could not find codec parameters for stream 4 > (Unknown: none): unknown codec > Consider increasing the value for the 'analyzeduration' (0) and > 'probesize' (5000000) options > Input #0, concat, from 'list.txt': > Duration: N/A, start: 0.000000, bitrate: 60098 kb/s > Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, > bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 59932 kb/s, 23.98 fps, > 23.98 tbr, 24k tbn > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AVC > vendor_id : [0][0][0][0] > encoder : GoPro AVC encoder > timecode : 15:38:07:03 > Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, > fltp, 128 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AAC > vendor_id : [0][0][0][0] > timecode : 15:38:07:03 > Stream #0:2: Unknown: none > Stream #0:3(eng): Data: bin_data (gpmd / 0x646D7067), 38 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro MET > Stream #0:4: Unknown: none > Stream map '0:m:handler_name: GoPro TCD' matches no streams. > To ignore this, add a trailing '?' to the map. > > With this change it works as expected: > ffmpeg version N-107034-g77b529fbd2 Copyright (c) 2000-2022 the FFmpeg > developers > built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1) > configuration: --prefix=/home/steveh/ffmpeg_build > --pkg-config-flags=--static > --extra-cflags=-I/home/steveh/ffmpeg_build/include > --extra-ldflags=-L/home/steveh/ffmpeg_build/lib --extra-libs='-lpthread > -lm' --ld=g++ --bindir=/home/steveh/bin --enable-gpl --enable-gnutls > --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype > --enable-libmp3lame --enable-libopus --enable-libsvtav1 --enable-libdav1d > --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 > --enable-nonfree > libavutil 57. 25.100 / 57. 25.100 > libavcodec 59. 32.102 / 59. 32.102 > libavformat 59. 24.100 / 59. 24.100 > libavdevice 59. 6.100 / 59. 6.100 > libavfilter 8. 40.100 / 8. 40.100 > libswscale 6. 6.100 / 6. 6.100 > libswresample 4. 6.100 / 4. 6.100 > libpostproc 56. 5.100 / 56. 5.100 > [mov,mp4,m4a,3gp,3g2,mj2 @ 0x557f730b3c00] Auto-inserting h264_mp4toannexb > bitstream filter > Input #0, concat, from 'list.txt': > Duration: N/A, start: 0.000000, bitrate: 60108 kb/s > Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, > bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 59932 kb/s, 23.98 fps, > 23.98 tbr, 24k tbn > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AVC > vendor_id : [0][0][0][0] > encoder : GoPro AVC encoder > timecode : 15:38:07:03 > Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, > fltp, 128 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AAC > vendor_id : [0][0][0][0] > timecode : 15:38:07:03 > Stream #0:2(eng): Data: none (tmcd / 0x64636D74) > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro TCD > timecode : 15:38:07:03 > Stream #0:3(eng): Data: bin_data (gpmd / 0x646D7067), 38 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro MET > Stream #0:4(eng): Data: none (fdsc / 0x63736466), 9 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro SOS > [mp4 @ 0x557f732f6240] You requested a copy of the original timecode track > so timecode metadata are now ignored > Output #0, mp4, to 'test/concat.mp4': > Metadata: > encoder : Lavf59.24.100 > Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, > bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 59932 kb/s, > 23.98 fps, 23.98 tbr, 24k tbn > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AVC > vendor_id : [0][0][0][0] > encoder : GoPro AVC encoder > timecode : 15:38:07:03 > Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, > fltp, 128 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro AAC > vendor_id : [0][0][0][0] > timecode : 15:38:07:03 > Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default) > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro TCD > timecode : 15:38:07:03 > Stream #0:3(eng): Data: bin_data (gpmd / 0x646D7067), 38 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro MET > Stream #0:4(eng): Data: none (fdsc / 0x63736466), 9 kb/s > Metadata: > creation_time : 2022-05-31T15:39:02.000000Z > handler_name : GoPro SOS > Stream mapping: > Stream #0:0 -> #0:0 (copy) > Stream #0:1 -> #0:1 (copy) > Stream #0:2 -> #0:2 (copy) > Stream #0:3 -> #0:3 (copy) > Stream #0:4 -> #0:4 (copy) > Press [q] to stop, [?] for help > frame= 24 fps= 16 q=-1.0 size= 768kB time=00:00:01.00 > bitrate=6275.1kbits/s speed=0.668x > ... > > I believe the reason for the failure is that this early return prevents > the metadata from being preserved. > > > On Sun, 19 Jun 2022 at 21:18, Marton Balint <c...@passwd.hu> wrote: > >> >> >> On Sun, 12 Jun 2022, Steven Hartland wrote: >> >> > Remove return after copying extradata as this prevents metadata >> > being duplicated correctly. >> >> The return there originated from commit >> b24d6c53037aaaa20fbd59cbd25c392229450660 and seems very much intentional >> to not overwrite stream parameters after every packet. >> >> So what is the issue you are trying to fix? Some parameters change after >> the avformat_find_stream_info() returned? >> >> Regards, >> Marton >> >> > >> > Signed-off-by: Steven Hartland <stevenmhartl...@gmail.com> >> > --- >> > libavformat/concatdec.c | 1 - >> > tests/ref/fate/concat-demuxer-simple2-lavf-ts | 2 +- >> > 2 files changed, 1 insertion(+), 2 deletions(-) >> > >> > diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c >> > index e57da59e04..11ed2bd4c3 100644 >> > --- a/libavformat/concatdec.c >> > +++ b/libavformat/concatdec.c >> > @@ -182,7 +182,6 @@ static int copy_stream_props(AVStream *st, AVStream >> > *source_st) >> > } >> > memcpy(st->codecpar->extradata, source_st->codecpar->extradata, >> > source_st->codecpar->extradata_size); >> > - return 0; >> > } >> > if ((ret = avcodec_parameters_copy(st->codecpar, >> source_st->codecpar)) >> > < 0) >> > return ret; >> > diff --git a/tests/ref/fate/concat-demuxer-simple2-lavf-ts >> > b/tests/ref/fate/concat-demuxer-simple2-lavf-ts >> > index 9603ca21d0..d98e8b71e1 100644 >> > --- a/tests/ref/fate/concat-demuxer-simple2-lavf-ts >> > +++ b/tests/ref/fate/concat-demuxer-simple2-lavf-ts >> > @@ -211,5 +211,5 @@ >> > >> video|1|171982|1.910911|168382|1.870911|3600|0.040000|17440|206988|__|MPEGTS >> > Str >> > >> > >> video|1|175582|1.950911|171982|1.910911|3600|0.040000|15019|224848|__|MPEGTS >> > Stream ID|224 >> > >> > >> -0|mp2|unknown|audio|[3][0][0][0]|0x0003|s16p|44100|1|mono|0|N/A|0/0|0/0|1/90000|0|0.000000|N/A|N/A|64000|N/A|N/A|N/A|N/A|89|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this >> > is stream 0 >> > >> +0|mp2|unknown|audio|[3][0][0][0]|0x0003|fltp|44100|1|mono|0|N/A|0/0|0/0|1/90000|0|0.000000|N/A|N/A|64000|N/A|N/A|N/A|N/A|89|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this >> > is stream 0 >> > >> 1|mpeg2video|4|video|[2][0][0][0]|0x0002|352|288|0|0|0|0|1|1:1|11:9|yuv420p|8|tv|unknown|unknown|unknown|left|progressive|1|N/A|25/1|25/1|1/90000|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|60|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this >> > is stream 1|CPB properties|0|0|0|49152|-1 >> > -- >> > 2.25.1 >> > _______________________________________________ >> > ffmpeg-devel mailing list >> > ffmpeg-devel@ffmpeg.org >> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> > >> > To unsubscribe, visit link above, or email >> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". >> > >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> To unsubscribe, visit link above, or email >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". >> > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".