This is an old revision of the document!
Table of Contents
Video capture on Linux
The following guide is specifically targeted to capture analog video signals.
Checklist:
- Capturing Video+Audio
- Capturing Subtitle with VBI

- Authoring subtitles

- Authoring chapters

- Lossless content encoding

- Lossy content encoding
Video path types
Composite
Y/C - S-Video
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).
Luma and Chroma are transported with separate wire pairs with this connector.
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.
RGBHV
Component - YPbPr
The only way to get analog progressive scan content. The other peculiarity is you can transport HDTV content with it (up to 1080i/p).
MUSE - Hi-Vision
Best way to deal with it is getting through a MUSE decoder, then capturing the components.
Capture cards
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:
- 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:
- 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
- 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 <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 for x265.