Table of Contents

Video capture on Linux

The following guide is specifically targeted to capture analog video signals.

Checklist:

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

RGBHV

Best solution if you don't have access to Components video, when it comes to signal accuracy.

Capture hardware is scarce and expensive.

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:

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:

Easy Cap DC60

Sourcing: 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:

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:

example.ini
;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

ffmpeg -i master.avi -c:v libx264 -preset slow -crf 18 -c:a opus -b:a 192 output.mkv
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 <option> depending on the kind of content you're encoding:

Option Target
film use for high quality movie content; lowers deblocking
animation good for anime and cartoons; uses higher deblocking and more reference frames
grain preserves the grain structure in old, grainy film material
stillimage good for slideshow-like content

If you wish to have a smaller file, you can tune the CRF up to 28 for x264, and FIXME for x265.