On Monday, December 27, 2021, Terje J. Hanssen <terjejhanssen@gmail.com> wrote:


Den 26.12.2021 23:44, skrev Andrew Randrianasulu:


On Monday, December 27, 2021, Terje J. Hanssen via Cin <cin@lists.cinelerra-gg.org> wrote:



    Den 26.12.2021 21:13, skrev Andrew Randrianasulu via Cin:


    On Sunday, December 26, 2021, Phyllis Smith via Cin
    <cin@lists.cinelerra-gg.org> wrote:

            for now it seems only ffv1.avi defaults to v.0 and mkv
            defaults to 3.4

        For now, how about if I just add a comment to ffv1.mkv about
        level numbers?   That way the user will see this if they look
        and can decide for themselves.  Otherwise if we make every
        possible setting available we will end up with millions of
        choices and then if we have new ones labeled _3, when level 4
        comes along we would need even more as _4.


    ok, add comment please}


    Ok, maybe I'm thinking aload quite "outside the box" here with my
    questions * below:

    I seems for me Cin-GG supports ffv1.mkv in two instances (did't
    find other mentioned in the manual either):

        1) File > Save as: ffv1.mkv (that is save current edited video
    from Cin-GG)

            and

        2) File > Record
            using Video compression according to

            Settings > Preferences > Record
                File format: FFMPEG mkv
                Video wrench: Compression: ffv1.mkv or user_ffv1.mkv

        * Could i.e the empty <Format box> here be used to input
    levels and/or other user options?

        Further down on this window

            Video IN
                Record driver: i.e Video4Linux

        * Or possibly get BM Intensity/declink SDK card
    working/integrated with ffmpeg/Cin-GG?


if you find programmer familiar with both ends.. Cin-gg uses her own code for dealing with v4l2, not ffmpeg's.


So Cin-gg doesn't use ffmpeg to capture/record video directly from a video/TV capture card?

she uses ffmpeg for compression/muxing (and some effects), but not for interfacing with device... 

But I'm not sure I really understand where Record/prefs/preset ffv1.mkv (2 above) get into this picture?
Just to record (encode and save) the pre-captured video in a lossless ffv1.mkv file format?

no, you are right - this option selects capture codec

What would possible benefits be if ffmpeg had been used to capture/record video via the capture card?
Or do we miss something without ffmpeg doing this?

we miss declink support ) 


In the case of BM Decklink or Intensity Pro 4k, Media Express is available (deb, rpm on Linux) for free capture and playback uncompressed 8 or 10-bit video or compressed ProRes.

I also noticed there is no way to capture 10 bit rgb/yuv via v4l2.. ( (simply no define for such formats) 

https://github.com/torvalds/linux/blob/master/include/uapi/linux/videodev2.h



A forum user had found out that Quicktime uncompressed 10 bit 4:2:2 .MOV was the same codec as AJA v210 for 10-bit uncompressed, i.e. it did not require rendering when placed into the FCP timeline. Bit rates examples:

625 PAL uncompressed 10 bit @ 720 x 576 @ 25fps = 26 MB per/sec, or 93 GB per/hr.
720p HDTV uncompressed 10 bit @ 1280 x 720 @ 59.94 = 140 MB per/sec, or 494 GB per/hr.
1080i and 1080p HDTV uncompressed:
10 bit @ 1920 x 1080 @ 25fps = 132 MB per/sec, or 463 GB per/hr.

yeah, and if you want more than 1 stream multiply this by num. of streams.. 



https://gist.github.com/afriza/879fed4ede539a5a6501e0f046f71463

(sdk 12 should be compatible with ffmpeg 4.4?)

note --extra-cflags="-I$HOME/ffmpeg_build/include -I$HOME/ffmpeg_sources/BMD_SDK/include -I/usr/lib/cuda/include" \

  and

--enable-nonfree \
  --enable-decklink \

addditional confugure switches for ffmpeg (you can drop cuda includes if you do not have proprietary nvidia driver/card installed, if course)

---
List devices:

ffmpeg -f decklink -list_devices 1 -i dummy

List supported formats:

ffmpeg -f decklink -list_formats 1 -i 'DeckLink Quad HDMI Recorder (1)'

Capture Camera at 23.976fps to h264:

ffmpeg -y -thread_queue_size 90 -hwaccel cuda \
-channels 2 -raw_format yuv422p10 -format_code 23ps -f decklink -i 'DeckLink Quad HDMI Recorder (1)' \
-c:a pcm_s16le -c:v libx264 -preset ultrafast -crf 10 ~/camera264.mov

---

obviously you can try to just copy frames into mov for 'as uncompressed as possible' and hope your disk(s) will keep up! (I've heard stories some ssd dislike being full - their write speed drop down dramatically.. so try to write to not very full ssd. Not sure abount newer nvme.. or raids from them!)

from

https://github.com/wonderunit/storyboarder/wiki/Recording-Live-Camera-and-Desktop-on-Linux-using-Blackmagic-Decklink




        * Get the option to preserve/archive transcoded ffv1.mkv
    directly to a storage device?


probably not? (no support for arbitrary compressed frames and their metadata in internal representation.. not impossible, but no one did it yet)



        * And/or get the option to load /pipe (uncompressed) video
    files recorded on one storage (SSD) device,
          compress it with the right preset ffv1.mkv and save it to
    another storage device.


should be default mode of operation for files (not sure about purely raw video w/o any container, apart from dvvideo, but some types of raw rgb/yuv in avi/mov should work.. test a bit?) , for piping...

try video loopback?

https://github.com/umlaeute/v4l2loopback

it may even work for declink input, if your ffmpeg can input frames from declink and output to v4l2..


https://superuser.com/questions/1330959/what-is-the-right-ffmpeg-output-format-for-a-v4l2-loopback-device

some variation of

 ffmpeg examples
Grab desktop:

ffmpeg -f x11grab -framerate 25 -video_size 1280x720 -i :0.0+0,0 -f v4l2 /dev/video0
Send file:

ffmpeg -re -i input.mp4 -f v4l2 /dev/video0

or (in answers)

ffmpeg -f x11grab -r 60 -s 1920x1080 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0

guess you can try variation of such cmdline  with declink input after compiling non-free ffmpeg with Blackmagick sdk...

we also probably can use such line for testing non-trivial v4l2 formats in Cinelerra-gg ..



        On Sat, Dec 25, 2021 at 9:29 PM Andrew Randrianasulu via Cin
        <cin@lists.cinelerra-gg.org> wrote:



            On Sunday, December 26, 2021, Terje J. Hanssen via Cin
            <cin@lists.cinelerra-gg.org> wrote:



                Den 25.12.2021 17:35, skrev Andrew Randrianasulu via Cin:

                    seems to miss level=3 setting

                    $ cat bin/ffmpeg/video/ffv1.avi
                    avi ffv1
                    $ cat bin/ffmpeg/video/ffv1.mkv
                    matroska ffv1
                    threads=8
                    context=1
                    slices=30
                    $ cat bin/ffmpeg/video/ffv1.mov
                    mov ffv1
                    #coder=0
                    context=1
                    g=1
                    level=3
                    threads=16
                    slices=16
                    slicecrc=1
                    #pass=2
                    $

                    not sure if we should modify our avi/mkv profikes
                    or add new (may be with _v3 name) ones?


                Without own experience yet, I would ask if there any
                reason to not use the latest and more feature rich
                FFV1 level=version 3? Backward compitibility, typical
                can v. 3 uncompress v. 1 compressed archives?

            good question... I have older avplay (~2012)  here and
            will test.

            for now it seems only ffv1.avi defaults to v.0 and mkv
            defaults to 3.4 due to crc protection per slice, i think
            (looked into ffmpeg encoder source)

            {filenames were just that I had in inputbox, not
            indicative of content}


            $ mediainfo ~/h265-p2.avi
            General
            Complete name : /data/data/com.termux/files/home/h265-p2.avi
            Format : AVI
            Format/Info : Audio Video Interleave
            File size : 8.82 MiB
            Duration : 3 s 720 ms
            Overall bit rate mode : Variable
            Overall bit rate : 19.9 Mb/s
            Writing application : Lavf58.76.100

            Video
            ID : 0
            Format : FFV1
            Format version : Version 0
            Codec ID : FFV1
            Duration : 3 s 720 ms
            Bit rate mode : Variable
            Bit rate : 19.9 Mb/s
            Width : 720 pixels
            Height : 576 pixels
            Display aspect ratio : 5:4
            Frame rate : 25.000 FPS
            Standard : PAL
            Color space : YUV
            Chroma subsampling : 4:2:0
            Bit depth : 8 bits
            Compression mode : Lossless
            Bits/(Pixel*Frame) : 1.916
            Stream size : 8.81 MiB (100%)
            coder_type : Golomb Rice


            $ mediainfo ~/h265-p2.mkv
            General
            Unique ID : 3614689160526176147752985704114819283
            (0x2B829EF6988D4EEDCB446A8612210D3)
            Complete name : /data/data/com.termux/files/home/h265-p2.mkv
            Format : Matroska
            Format version : Version 4
            File size : 7.48 MiB
            Duration : 3 s 80 ms
            Overall bit rate mode : Variable
            Overall bit rate : 20.4 Mb/s
            Writing application : Lavf58.76.100
            Writing library : Lavf58.76.100
            ErrorDetectionType : Per level 1

            Video
            ID : 1
            Format : FFV1
            Format version : Version 3.4
            Codec ID : V_MS/VFW/FOURCC / FFV1
            Duration : 3 s 80 ms
            Bit rate mode : Variable
            Bit rate : 20.0 Mb/s
            Width : 720 pixels
            Height : 576 pixels
            Display aspect ratio : 5:4
            Frame rate mode : Constant
            Frame rate : 25.000 FPS
            Standard : PAL
            Color space : YUV
            Chroma subsampling : 4:2:0
            Bit depth : 8 bits
            Scan type : Progressive
            Compression mode : Lossless
            Bits/(Pixel*Frame) : 1.927
            Stream size : 7.34 MiB (98%)
            Default : Yes
            Forced : No
            Color range : Full
            Matrix coefficients : BT.470 System B/G
            coder_type : Golomb Rice
            MaxSlicesCount : 30
            ErrorDetectionType : Per slice



                I conclude that a couple of referense papers on the
                web say and use level 3 in their profile/presets:

                1) Video into Matroska/FFV1
                https://avpres.net/FFmpeg/im_FFV1.html
                <https://avpres.net/FFmpeg/im_FFV1.html>

                We advise to use only the version 3 of FFV1 in
                production, because the version 1 is deprecated, the
                version 2 has never really existed, and the version 4
                is currently under development.


                Transcode a video file using the FFV1 codec into the
                Matroska container for preservation purposes.
                Solution

                    ffmpeg \
                        -i input_file \
                        -c:v ffv1 \
                        -level 3 \
                        -coder 1 \
                        -context 1 \
                        -g 1 \
                        -slices 24 \
                        -slicecrc 1 \
                        -c:a copy \
                        output_file.mkv

                2) Presets for FFV1 and MKV: Choosing the right
                parameters for the job (ffv1_params.pdf)
                https://docs.google.com/viewer?url=https%3A%2F%2Fmediaarea.net%2FEvents%2F2019-12-05_NoTimeToWait4%2F03.%2520Peter%2520B.%2520-%2520Presets%2520for%2520FFV1%2520and%2520MKV%2C%2520Choosing%2520the%2520right%2520parameters%2520for%2520the%2520job%2Fffv1_params.pdf&pdf=true
                <https://docs.google.com/viewer?url=https%3A%2F%2Fmediaarea.net%2FEvents%2F2019-12-05_NoTimeToWait4%2F03.%2520Peter%2520B.%2520-%2520Presets%2520for%2520FFV1%2520and%2520MKV%2C%2520Choosing%2520the%2520right%2520parameters%2520for%2520the%2520job%2Fffv1_params.pdf&pdf=true>

                Level = FFV1 version
                page 9 (of 30)

                    0
                    1 (Default)
                    3 (Recommended)


                FFmpeg recipe (PAL)
                page 27 (of 30)

                ffmpeg -i VIDEO_IN \
                    -c:v ffv1 -level 3 -coder 1 -context 0 -slices 24
                -slicecrc 1 \
                    -color_primaries bt470bg \
                    -color_trc bt709 \
                    -colorspace bt470bg \
                    -color_range mpeg \
                    -map 0 \
                    -top 1 \
                    -c:a copy \
                    -g 1 -pix_fmt + \
                    VIDEO_OUT.mkv











                --                 Cin mailing list
                Cin@lists.cinelerra-gg.org
                https://lists.cinelerra-gg.org/mailman/listinfo/cin
                <https://lists.cinelerra-gg.org/mailman/listinfo/cin>

            --             Cin mailing list
            Cin@lists.cinelerra-gg.org
            https://lists.cinelerra-gg.org/mailman/listinfo/cin
            <https://lists.cinelerra-gg.org/mailman/listinfo/cin>