with this patch (git am variety) I can set segment_time in gui, but for short test video actual cut time was dominated by same set of six keyframes, in my case.
On Sun, Jun 1, 2025 at 4:56 AM Andrew Randrianasulu <[email protected]> wrote: > > > > вс, 1 июн. 2025 г., 00:03 Terje J. Hanssen <[email protected]>: >> >> >> >> On 31.05.2025 05:33, Andrew Randrianasulu wrote: >> >> On Fri, May 30, 2025 at 4:27 PM Andrew Randrianasulu >> <[email protected]> wrote: >> >> пт, 30 мая 2025 г., 15:55 Terje J. Hanssen <[email protected]>: >> >> Den 30.05.2025 00:15, skrev Andrew Randrianasulu: >> >> >> >> пт, 30 мая 2025 г., 00:30 Andrew Randrianasulu <[email protected]>: >> >> чт, 29 мая 2025 г., 23:42 Terje J. Hanssen via Cin >> <[email protected]>: >> >> Is it possible with CinGG's Record utility (via FFMPEG) to record a stream >> to file segments of same duration or file size and use auto-naming? >> >> Typical example: >> Record a video/audio input stream (i.e from playing a camcorder tape >> cassette) and encode to output file segments of 10 minutes or 10 GB each and >> auto-name file numbers. >> >> Similar example code using an input file instead at >> https://unix.stackexchange.com/questions/1670/how-can-i-use-ffmpeg-to-split-mpeg-video-into-10-minute-chunks >> >> Just use what is built into ffmpeg to do exactly this. >> >> ffmpeg -i invid.mp4 -threads 3 \ >> -vcodec copy -f segment -segment_time 10:00 \ >> -reset_timestamps 1 \ >> cam_out_h264_%02d.mp4 >> >> This will split it into roughly 10-minute chunks, split at the relevant >> keyframes, and will output to the files cam_out_h264_01.mp4, >> cam_out_h264_02.mp4, etc. >> >> Very interesting question! Never tried this, did not even know it existed! >> >> As long as this -f just ordinary avformat muxer you probably can copy your >> favourite ffmpeg video/audio profiles with new .seg name and put "segmented" >> at very first line there , where "mov" or "matroska" or other format name >> was, and add rest of options. And add pattern (%02d) into name just as with >> ffmpeg-based image lists. >> >> I'll try this with termux's version, but I do not have audio here so it will >> be incomplete. >> >> so I created this file: >> >> cat ffmpeg/video/mpeg2.seg >> segment mpeg2video >> segment_format=mpeg >> segment_time=00:10 >> reset_timestamps=1 >> trellis=2 >> mbd=rd >> cmp=2 >> subcmp=2 >> b=4000000 >> >> >> and it worked! in sense it created six segments, each with corresponding >> increasing timecode. But they all uneven duration, probably due to mpeg2 >> codec placing keyframes at will. >> >> You can try to modify it back to 10:00 segment time and see how it work for >> longer encode? >> >> >> As I'm not sure if and how you applied your file above with regards to Cingg >> Record, >> >> just put file where other video profiles live? (ffmpeg/video folder of your >> cingg installation) >> >> Attaching test profile trying to utilize segmented muxer for mpeg >> system streams >> >> Put them according to their content into >> >> /usr/share/cin/ffmpeg/video and /usr/share/cin/ffmpeg/audio for >> standard rpm/deb cinelerra install >> >> make sure they readable by your user (chown -R your_username:users >> /usr/share/cin/ffmpeg might fix weird issues like "bad file format") >> >> >> I upgraded to the latest rpm for Leap15.6 >> >> terje@localhost:/usr/share/cin/ffmpeg> ls -lt audio/*.seg audio/seg.* >> video/*.seg video/seg.* >> -rw-r--r-- 1 terje users 159 mai 31 17:49 video/mpeg2.seg >> -rw-r--r-- 1 terje users 14 mai 31 17:49 video/seg.dfl >> -rw-r--r-- 1 terje users 77 mai 31 17:47 audio/mpeg2_mp2.seg >> -rw-r--r-- 1 terje users 14 mai 31 17:47 audio/seg.dfl >> >> In cingg shift-R, select seg from dropdown menu, select both audio and >> video encoding (there will be grand total of one choice in each >> category), >> then put filename like /dev/shm/file%02d.mpeg and try to render >> >> It will give you files: >> >> >> Loaded a hdv 1080i50 file >> Very short segments, maybe just 10 sec each >> >> root@slax:~# ls -la /dev/shm/seg* >> -rw-r--r-- 1 guest users 0 мая 31 06:19 /dev/shm/seg%02d.mpeg >> -rw-r--r-- 1 guest users 0 мая 31 05:57 /dev/shm/seg%02d.seg >> -rw-r--r-- 1 guest users 2375680 мая 31 06:19 /dev/shm/seg00.mpeg >> -rw-r--r-- 1 guest users 1980416 мая 31 06:19 /dev/shm/seg01.mpeg >> -rw-r--r-- 1 guest users 1947648 мая 31 06:19 /dev/shm/seg02.mpeg >> -rw-r--r-- 1 guest users 2009088 мая 31 06:19 /dev/shm/seg03.mpeg >> -rw-r--r-- 1 guest users 2170880 мая 31 06:19 /dev/shm/seg04.mpeg >> -rw-r--r-- 1 guest users 2205696 мая 31 06:19 /dev/shm/seg05.mpeg >> -rw-r--r-- 1 guest users 2535424 мая 31 06:19 /dev/shm/seg06.mpeg >> -rw-r--r-- 1 guest users 1966080 мая 31 06:19 /dev/shm/seg07.mpeg >> -rw-r--r-- 1 guest users 1945600 мая 31 06:19 /dev/shm/seg08.mpeg >> -rw-r--r-- 1 guest users 2023424 мая 31 06:19 /dev/shm/seg09.mpeg >> -rw-r--r-- 1 guest users 2101248 мая 31 06:19 /dev/shm/seg10.mpeg >> -rw-r--r-- 1 guest users 1026048 мая 31 06:19 /dev/shm/seg11.mpeg >> >> Now you can play all fo them gapless with mpv: >> >> >> mpv worked best for audio, though blocking pixels in the video >> vlc got dropouts in audio also within a segment >> >> Tried similar with Shift-P: 1920x1080, 50fps, yuv422 and mpeg2_hq profile >> changed to 50Mbps bitrate, then r (record from v4l2 /dev/video0 (ms2130) >> Got short segments, yuv422 at low bitrate > > > > You need to set bitrate explicitly for this profile, I think? > > in GUI or just add b=16M or what you like. > > Right now for longer segments you need to modify both profiles manually and > set segment_time to value you want in both audio and video *.seg profiles > > If it works I think I know where in cingg code I should put override so our > gui for format (muxer) options will work (right now it stumbles on > difference between seg and segment ) > >> >> root@slax:~# mpv /dev/shm/se*.mpeg >> Playing: /dev/shm/seg%02d.mpeg >> Failed to recognize file format. >> Playing: /dev/shm/seg00.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AO: [pulse] 48000Hz stereo 2ch s16 >> VO: [gpu] 720x576 => 768x576 yuv420p >> AV: 00:00:02 / 00:00:02 (97%) A-V: 0.000 >> Playing: /dev/shm/seg01.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg02.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg03.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg04.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg05.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg06.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:02 / 00:00:02 (98%) A-V: 0.000 >> Playing: /dev/shm/seg07.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg08.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg09.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg10.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:01 / 00:00:01 (98%) A-V: 0.000 >> Playing: /dev/shm/seg11.mpeg >> (+) Video --vid=1 (mpeg2video 720x576 25.000fps) >> (+) Audio --aid=1 (mp2 2ch 48000Hz) >> AV: 00:00:00 / 00:00:01 (91%) A-V: 0.000 >> Exiting... (Some errors happened) >> >> >> I've verified that at least audio track exist, but you better to run >> your own liestening test to hear if audio get desynchronized over >> longer runs >> >> What worries me is audio. If segmented audio muxer cut it differently from >> video we will get desync. >> >> May be setting labels at specific intervals and then using "write new file >> at label" checkbox is better idea? >> >> >> I simply did a test with my system's ffmpeg segment muxer: >> https://ffmpeg.org/ffmpeg-formats.html#segment_002c-stream_005fsegment_002c-ssegment >> >> Input file: hdv09_04_h264.mp4 >> Duration: 00:03:58.88, start: 0.000000, bitrate: 8963 kb/s >> >> Tried 1 minute segment time: >> >> ffmpeg -hide_banner -i hdv09_04_h264.mp4 -threads 3 \ >> -vcodec copy -f segment -segment_time 01:00 \ >> -reset_timestamps 1 \ >> cam_out_h264_%02d.mp4 >> >> [segment @ 0x563c2874fa80] Opening 'cam_out_h264_01.mp4' for writingeed=52.1x >> [segment @ 0x563c2874fa80] Opening 'cam_out_h264_02.mp4' for writingeed=55.5x >> [segment @ 0x563c2874fa80] Opening 'cam_out_h264_03.mp4' for writingeed= 57x >> [out#0/segment @ 0x563c28727680] video:257421KiB audio:3749KiB subtitle:0KiB >> other streams:0KiB global headers:0KiB muxing overhead: unknown >> frame= 5972 fps=1445 q=-1.0 Lsize=N/A time=00:03:58.80 bitrate=N/A >> speed=57.8x >> [aac @ 0x563c28721a40] Qavg: 454.522 >> >> 68M cam_out_h264_00.mp4 >> 63M cam_out_h264_01.mp4 >> 59M cam_out_h264_02.mp4 >> 68M cam_out_h264_03.mp4 >> -------- >> >> Duration: 00:01:00.38, start: 0.058000, bitrate: 9394 kb/s >> Duration: 00:01:00.00, start: 0.000000, bitrate: 8672 kb/s >> Duration: 00:01:00.60, start: 0.000000, bitrate: 8104 kb/s >> Duration: 00:00:57.93, start: 0.000000, bitrate: 9705 kb/s >> >> In total: 00:03:58.93 which is 00:00:00.03 (=3/100 sek) more than the >> input file >> which I think is good enough for practical purposes (editing and >> backup/preservation/archival) >> >> I wonder if it is within or out of our reach to make some targeted profiles >> for backup/preservation? >> I.e would it be of interest and possible to utilize/integrate/use oss tools >> and scripts as found here: >> https://avpres.net/Bash_AVpres/ >> https://avpres.net/FFmpeg/im_FFV1.html >> >> Up to interested party, I guess. >> >> >> The programs dvgrab and possibly the newer vrecord can also autosplit by >> scenes >> https://linux.die.net/man/1/dvgrab >> https://github.com/amiaopensource/vrecord >> https://github.com/mipops/dvrescue >> >> Yes, I was thinking about this, but unfortunately without any testable idea. >> Sorry. >> >>
From 44597cc37b62258fd21cd44c444dc8ea52efabd2 Mon Sep 17 00:00:00 2001 From: Andrew Randrianasulu <[email protected]> Date: Sun, 1 Jun 2025 09:58:08 +0300 Subject: [PATCH] Fixup seg name to segment so format gui button work --- cinelerra-5.1/cinelerra/fileffmpeg.C | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cinelerra-5.1/cinelerra/fileffmpeg.C b/cinelerra-5.1/cinelerra/fileffmpeg.C index abed22da..e405f1d7 100644 --- a/cinelerra-5.1/cinelerra/fileffmpeg.C +++ b/cinelerra-5.1/cinelerra/fileffmpeg.C @@ -1976,12 +1976,15 @@ int FFOptionsFormatView::handle_event() char replace_name0[] = "mov"; char replace_name1[] = "mpegts"; char replace_name2[] = "matroska"; + char replace_name3[] = "segment"; if (!strcmp(format_name, "qt")) format_name = replace_name0; // fixup if (!strcmp(format_name, "m2ts")) format_name = replace_name1; // fixup if (!strcmp(format_name, "mkv")) format_name = replace_name2; // fixup + if (!strcmp(format_name, "seg")) + format_name = replace_name3; // fixup avformat_free_context(fmt_ctx); fmt_ctx = 0; int ret = avformat_alloc_output_context2(&fmt_ctx, 0, format_name, 0); if( ret || !fmt_ctx ) { -- 2.49.0
-- Cin mailing list [email protected] https://lists.cinelerra-gg.org/mailman/listinfo/cin

