[mythtv-users] Recording from input video on demand, no tuner; update: troubles capturing video using RPI4
Peter Bennett
pb.mythtv at gmail.com
Thu Mar 2 14:39:33 UTC 2023
On 3/1/23 15:58, Jay Harbeston wrote:
>
>
>> On Mar 1, 2023, at 1:12 PM, Peter Bennett <pb.mythtv at gmail.com> wrote:
>>
>>
>> On 3/1/23 11:00, Jay Harbeston wrote:
>>> I did check out your lean capture page, and I used the test on it to
>>> see how it fared as far as cpu usage, and the RPI4 stinks in
>>> comparison to what you are using. The events per second for the RPi
>>> 4 processor is 393, so that is a non starter for trying to use
>>> transcode with H264.
>>>
>>> I did try just copying to mpegts , but I couldn’t view video using
>>> it, either with vlc or mythtv.
>>>
>>> The best success I have had is creating an mkv, or an avi, but have
>>> not been able to get mythtv to accept it via a pipe.
>>>
>>> Looks like I am SOL then when using the RPI4 as the capture for the
>>> USB HDMI .
>>>
>>> UNLESS there is some other magic!?
>>>
>>> Some of the other experiments I tried were to treat it as a v4l2
>>> capture device(there look like there are a couple of choices as
>>> tuners in Mythtv) since it is v4l2 video, but that was also a fail.
>>> I’m guessing the v4l2 driver is only looking for 640x480 video likes
>>> old school analog tv?
>>>
>> Did you try using ffmpeg using copy to prevent encoding and
>> specifying ts output, something like this -
>>
>> ffmpeg -hide_banner -loglevel error -f v4l2 -thread_queue_size 256
>> -input_format mjpeg \
>> -framerate 60 -video_size 1280x720 \
>> -use_wallclock_as_timestamps 1 \
>> -i /dev/video0 -f alsa -ac 2 -ar 48000 -thread_queue_size 1024 \
>> -itsoffset 0.150 -i hw:2.0 \
>> -c:v copy -vf format=yuv420p -c:a copy \
>> -f mpegts outfile.ts
>>
>> This may not work if ts format does not support mjpeg or the audio
>> format.
>>
>> The alsa audio requires you to find the correct audio device and to
>> disable pulseaudio. I have a script to find the alsa device.
>
> I am using fixes/32.0-40 from the mythtv lite packages from Peter if
> that makes a difference regarding how mythtv accepts the output.
>
>
> I tried the above example, modified slightly to suit my command, and
> the following occurred:
>
> The only big change to your command was to use pulse default instead
> of also as the input for audio. I also used 1920x1080 resolution and
> 30 fps frame rate.
>
> ffmpeg -f pulse -thread_queue_size 1024 -i default -f v4l2
> -thread_queue_size 1024 -input_format mjpeg -video_size 1920x1080
> -framerate 30 -use_wallclock_as_timestamps 1 -i /dev/video0 -f mpegts
> -c:v yuv420p -c:a copy ~/outfile.ts
>
> The output encoder is having troubles as shown in the error:
>
> libavutil 56. 51.100 / 56. 51.100
> libavcodec 58. 91.100 / 58. 91.100
> libavformat 58. 45.100 / 58. 45.100
> libavdevice 58. 10.100 / 58. 10.100
> libavfilter 7. 85.100 / 7. 85.100
> libavresample 4. 0. 0 / 4. 0. 0
> libswscale 5. 7.100 / 5. 7.100
> libswresample 3. 7.100 / 3. 7.100
> libpostproc 55. 7.100 / 55. 7.100
> Guessed Channel Layout for Input Stream #0.0 : stereo
> Input #0, pulse, from 'default':
> Duration: N/A, start: 1677702787.763392, bitrate: 1536 kb/s
> Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
> [mjpeg @ 0x1606550] EOI missing, emulating
> Input #1, video4linux2,v4l2, from '/dev/video0':
> Duration: N/A, start: 1677702788.117759, bitrate: N/A
> Stream #1:0: Video: mjpeg (Baseline), yuvj422p(pc,
> bt470bg/unknown/unknown), 1920x1080, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
> Unknown encoder 'yuv420p'
>
>
> Here is what I am using that gives me audio and video that can be
> played by vlc. The bit rate for mkv is around 10,000kbps less than
> the avi.
>
> The bit rate for mkv is ~34,000 kbps while Avi below is ~45,000kbps.
>
> ###################################################################################
>
> ffmpeg to create mkv stream that works correctly, including being
> able to watch using vlc while recording:
>
> ffmpeg -f pulse -thread_queue_size 1024 -i default -f v4l2
> -thread_queue_size 1024 -input_format mjpeg -video_size 1920x1080
> -framerate 30 -i /dev/video0 -f matroska -codec copy pipe:1 > ~/file.mkv
>
>
> ffprobe file.mkv
>
> libavutil 56. 51.100 / 56. 51.100
> libavcodec 58. 91.100 / 58. 91.100
> libavformat 58. 45.100 / 58. 45.100
> libavdevice 58. 10.100 / 58. 10.100
> libavfilter 7. 85.100 / 7. 85.100
> libavresample 4. 0. 0 / 4. 0. 0
> libswscale 5. 7.100 / 5. 7.100
> libswresample 3. 7.100 / 3. 7.100
> libpostproc 55. 7.100 / 55. 7.100
> [mjpeg @ 0x16e0c60] EOI missing, emulating
> [matroska,webm @ 0x16de540] Estimating duration from bitrate, this may
> be inaccurate
> Input #0, matroska,webm, from 'file.mkv':
> Metadata:
> ENCODER : Lavf58.45.100
> Duration: 01:25:19.33, start: 0.000000, bitrate: 1536 kb/s
> Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc,
> bt470bg/unknown/unknown), 1920x1080, 30 fps, 30 tbr, 1k tbn, 1k tbc
> (default)
> Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
> (default)
>
>
> #######################################################################################
>
> ffmpeg to create avi stream that works correctly including being able
> to watch using vlc while recording:
>
> ffmpeg -f v4l2 -thread_queue_size 1024 -input_format mjpeg -video_size
> 1920x1080 -framerate 30 -i /dev/video0 -f pulse -thread_queue_size
> 1024 -i default -codec copy vid_1080p_30.avi
>
> I have had no dropouts using the above methods, and ffmpeg uses ~15%
> of cpu according to top while capturing with either of the above.
>
> Regards!
>
> _______________________________________________
Looks good, so if you change your format to -f mpegts and the file to
have a ts extension, does that work? If so you may be able to use that
ffmpeg command to create a stream into mythtv using the external recorder.
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mythtv.org/pipermail/mythtv-users/attachments/20230302/7a2d4637/attachment.htm>
More information about the mythtv-users
mailing list