[Cin] Segmented Recording from input stream
Phyllis Smith
phylsmith2017 at gmail.com
Fri Jun 13 21:23:43 CEST 2025
With the patch (and even using extension of mpeg instead of seg), I simply
have not been able to get this to work. So either I keep doing something
wrong or it does. Patch to fileffmpeg.C is:
0001-Fixup-seg-name-to-segment-so-format-gui-button-work.patch . And the 2
presets are bluray_lpcm.seg and mpeg2hd422p.seg
On Tue, Jun 10, 2025 at 1:52 PM Phyllis Smith <phylsmith2017 at gmail.com>
wrote:
> Andrew, that does get rid of the "muxer" error but still a problem and
> getting error message:
>
>> FFMPEG::encode_activate: write header failed /tmp/ccc.mpg
>> err: Invalid argument
>>
> So commented out all but first 2 lines and still error. Going to try
> something else next! I did a full build just in case tool
>
> On Tue, Jun 10, 2025 at 12:35 PM Andrew Randrianasulu <
> randrianasulu at gmail.com> wrote:
>
>>
>>
>> вт, 10 июн. 2025 г., 20:13 Phyllis Smith <phylsmith2017 at gmail.com>:
>>
>>> I haven't had a chance to analyze it yet but I already fixed the
>>> comment. It reads:
>>>
>>
>> Ah, hit the same problem
>>
>> just replace auto-filled seg extension in filename with mpg!
>>
>>
>>
>>
>>
>> segment mpeg2video
>>>> segment_format=mpegts
>>>> # Change the segment time in the next line as needed
>>>> segment_time=00:10
>>>> reset_timestamps=1
>>>> cin_pix_fmt=yuv422p
>>>> b=35M
>>>> dc=10
>>>> muxrate=38M
>>>> minrate=35M
>>>> maxrate=35M
>>>> bufsize=38M
>>>>
>>> bf=2
>>>> profile=high
>>>> refs=1
>>>>
>>>
>>> On Tue, Jun 10, 2025 at 9:48 AM Andrew Randrianasulu <
>>> randrianasulu at gmail.com> wrote:
>>>
>>>>
>>>>
>>>> вт, 10 июн. 2025 г., 18:43 Phyllis Smith <phylsmith2017 at gmail.com>:
>>>>
>>>>> Although the patch
>>>>> 0001-Fixup-seg-name-to-segment-so-format-gui-button-work.patch works at
>>>>> our current version of ffmpeg 7.0 as does the audio render format
>>>>> "bluray_lpcm.seg" with the first line of "segment_format=mpegts", the
>>>>> corresponding video render format "mpeg2hd422p.seg" does not -- at least it
>>>>> fails for me. Its error message is:
>>>>>
>>>>> FFMPEG::encode_activate: write header failed /tmp/ccc.seg
>>>>>> err: Muxer not found
>>>>>>
>>>>>
>>>>> I will see what I may have done wrong.
>>>>>
>>>>
>>>> if it literally reads
>>>>
>>>>
>>>> segment mpeg2video
>>>> segment_format=mpegts
>>>> segment_time=00:10 <= your segment time
>>>> reset_timestamps=1
>>>> cin_pix_fmt=yuv422p
>>>>
>>>> then "your segment time" was comment not meant to put in there in this
>>>> form, just reminder for human reader .... may be it choke on this?
>>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>> On Mon, Jun 9, 2025 at 10:39 AM Andrew Randrianasulu <
>>>>> randrianasulu at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> пн, 9 июн. 2025 г., 19:32 Phyllis Smith <phylsmith2017 at gmail.com>:
>>>>>>
>>>>>>> Andrew, I have been contemplating this since you brought it up again
>>>>>>> with Terje. Should it be checked into GIT after Terje checks it?
>>>>>>>
>>>>>>
>>>>>> if it works ....
>>>>>>
>>>>>> May be with # comment line saying for different seg duration change
>>>>>> value here and in corresponding audio file.
>>>>>>
>>>>>>
>>>>>>
>>>>>>> On Sun, Jun 1, 2025 at 1:06 AM Andrew Randrianasulu via Cin <
>>>>>>> cin at lists.cinelerra-gg.org> wrote:
>>>>>>>
>>>>>>>> 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
>>>>>>>> <randrianasulu at gmail.com> wrote:
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > вс, 1 июн. 2025 г., 00:03 Terje J. Hanssen <
>>>>>>>> terjejhanssen at gmail.com>:
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >> On 31.05.2025 05:33, Andrew Randrianasulu wrote:
>>>>>>>> >>
>>>>>>>> >> On Fri, May 30, 2025 at 4:27 PM Andrew Randrianasulu
>>>>>>>> >> <randrianasulu at gmail.com> wrote:
>>>>>>>> >>
>>>>>>>> >> пт, 30 мая 2025 г., 15:55 Terje J. Hanssen <
>>>>>>>> terjejhanssen at gmail.com>:
>>>>>>>> >>
>>>>>>>> >> Den 30.05.2025 00:15, skrev Andrew Randrianasulu:
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >> пт, 30 мая 2025 г., 00:30 Andrew Randrianasulu <
>>>>>>>> randrianasulu at gmail.com>:
>>>>>>>> >>
>>>>>>>> >> чт, 29 мая 2025 г., 23:42 Terje J. Hanssen via Cin <
>>>>>>>> cin at lists.cinelerra-gg.org>:
>>>>>>>> >>
>>>>>>>> >> 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 at 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 at 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 at 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.
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> --
>>>>>>>> Cin mailing list
>>>>>>>> Cin at lists.cinelerra-gg.org
>>>>>>>> https://lists.cinelerra-gg.org/mailman/listinfo/cin
>>>>>>>>
>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20250613/09a28d0e/attachment-0001.htm>
More information about the Cin
mailing list