====== Video capture on Linux ======
The following guide is specifically targeted to capture analog video signals.
Checklist:
* Capturing Video+Audio FIXME
* Capturing Subtitle with VBI TODO
* Authoring subtitles TODO
* Authoring chapters TODO
* Lossless content encoding TODO
* Lossy content encoding FIXME
===== Video path types =====
==== Composite ====
TODO
[[https://superuser.com/questions/1677633/simultaneous-capture-and-monitor-with-ffmpeg]]
==== Y/C - S-Video ====
FIXME
Luma and Chroma are transported on distinct wire pairs.
Recommended over Composite if your A/V equipment has no better signal to offer, especially if Digital->Analog conversion is performed onboard (e.g. LaserDisc player with digital framebuffer, D-VHS w/o Components, etc).
It's also recommended
* If your capture card has a poor comb filter (your mileage may vary, make an A/B test with your specific setup). Typical artefacts of a poor comb filter is a blurry luma, and a smudged chroma, especially if you have an OSD.
* If your video path from source to acquisition goes through processing equipment, so that losses induced by comb filters is minimized.
==== RGBHV ====
Best solution if you don't have access to Components video, when it comes to signal accuracy.
Capture hardware is scarce and expensive.
* [[http://www.micomsoft.co.jp/xcapture-1.htm|Micomsoft XCapture-1]]
* [[https://junkerhq.net/xrgb/index.php/XRGB-mini_FRAMEMEISTER|XRGB Framemeister]]
==== Component - YPbPr ====
TODO
The only way to get analog progressive scan content. The other peculiarity is you can transport HDTV content with it (up to 1080i/p).
Capture cards I've found:
* Osprey 260e with a suitable cable. Apparently supported by Linux, according to a quick search.
Alternatively, you can use a components to HDMI converter, then a digital acquisition card to process those signals.
==== MUSE - Hi-Vision ====
Best way to deal with it is getting through a MUSE decoder, then capturing the components.
===== Capture cards =====
==== August VGB100 ====
^ Input ^ Works? ^
| Composite | Yes, OOB, (input=0) |
| S-Video | Yes, black and white only on Linux (input=1) |
| Audio | Yes, OOB |
Remarks:
* ''VIDIOC_S_PARM'' ioctl natively supported.
* I suspect there is a signal integrity issue with this device, since I've had frequent video glitches that are unrelated to the video source (cross-tested with an Easycap DC60).
==== Easy Cap DC60 ====
Sourcing: [[https://fr.aliexpress.com/item/32485611956.html|Aliexpress product page]]
If you have issues with this card (dmesg yelling that it's a model with the generic USB PVID), you need either to reload the kernel module with ''modprobe em28xx card=64'', or adding ''options em28xx card64'' to ''/etc/modprobe.d/easycap-em28xx.conf'', but this will screw with other capture cards using the eMPIA em28xx controllers.
^ Input ^ Works? ^
| S-Video | Yes, OOB, in color (input=0) |
| Composite | Yes, OOB, (input=1) |
| Audio | Muted by default, need to be unmuted with v4lctl |
Remarks:
* All settings need to be preset with v4lctl, setting format and framerate with ffmpeg will fail with the following error: ''ioctl(VIDIOC_S_PARM): Inappropriate ioctl for device em28xx''.
* Signal integrity is satisfactory, no specific remarks to add.
===== Monitoring video signal =====
You can do this in realtime using the following commands:
Display NTSC:
ffmpeg -f v4l2 -standard NTSC -video_size ntsc -framerate ntsc -i /dev/video2 -f alsa -i hw:1,0 -vcodec ayuv -acodec copy -map 0:0 -map 1:0 -f avi pipe:1 | ffplay -
Display PAL:
ffmpeg -f v4l2 -standard PAL -video_size pal -framerate pal -i /dev/video2 -f alsa -i hw:1,0 -vcodec ayuv -acodec copy -map 0:0 -map 1:0 -f avi pipe:1 | ffplay -
If your card doesn't support ''VIDIOC_S_PARM'' ioctls:
ffmpeg -f v4l2 -i /dev/video2 -f alsa -i hw:1,0 -vcodec ayuv -acodec copy -map 0:0 -map 1:0 -f avi pipe:1 | ffplay -
===== Capturing video signal =====
Unless you have a decent machine, it is recommended to first save an uncompressed capture that you will process in a second time, then compress (either losslessly for mastering/archival, or lossily for final consumption).
===== Authoring chapters =====
This can be performed using a ''ffmetadata'' file. Add the following options to insert an external metadata file:
-i example.ini -map_metadata 1
File example:
;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team
[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line
Doc for more info: [[https://ffmpeg.org/ffmpeg-formats.html#Metadata-1]]
===== Lossy content encoding =====
* Transparent, x264
ffmpeg -i master.avi -c:v libx264 -preset slow -crf 18 -c:a opus -b:a 192 output.mkv
* Transparent, x265
ffmpeg -i master.avi -c:v libx265 -preset slow -crf 24 -c:a opus -b:a 192 output.mkv
Additionally, you should tune the encoder by inserting -tune