I took my old NV-GS500 Panasonic camcorder; in order to finally turn all our recordings into digital media.
So far, things worked easily:
- On Ubuntu 16.04; I just had to connect the device and my laptop; via the DV/firewire cable
- Just using the standard settings (I didnt select any output format; just went for "single" unlimited file) ... kino created a capture.dv file for me
- That created a ~8 GB file for 40 minutes of video ... ok with me
- I then used a little script that reads does
ffmpeg -i infile -pix_fmt yuv420p -crf 23 outfile
to turn that dv file into an mp4
But alas, the quality of the mp4 isn't that convincing. Especially on rapid movements, lots of pixelish stuff.
Thus, I want to improve the whole thing. And as now discovered that kino is actually "dead"; I am wondering what combination of tools gives me good quality; as easily as possible.
Update: the full command for ffmpeg is already given above, here is the output I am receiving when running that:
> ffmpeg -i capture001.dv -pix_fmt yuv420p -crf 23 test.mp4 ffmpeg version 2.8.10-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609 configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv WARNING: library configuration mismatch avcodec configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 [dv @ 0x2566420] Detected timecode is invalid [dv @ 0x2566420] Estimating duration from bitrate, this may be inaccurate Input #0, dv, from 'capture001.dv': Duration: 00:39:45.36, start: 0.000000, bitrate: 28800 kb/s Stream #0:0: Video: dvvideo, yuv420p, 720x576 [SAR 64:45 DAR 16:9], 28800 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc Stream #0:1: Audio: pcm_s16le, 32000 Hz, stereo, s16, 1024 kb/s Stream #0:2: Audio: pcm_s16le, 32000 Hz, stereo, s16, 1024 kb/s [libx264 @ 0x256dea0] using SAR=64/45 [libx264 @ 0x256dea0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x256dea0] profile High, level 3.0 [libx264 @ 0x256dea0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'test.mp4': Metadata: encoder : Lavf56.40.101 Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc Metadata: encoder : Lavc56.60.100 libx264 Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 32000 Hz, stereo, s16, 128 kb/s Metadata: encoder : Lavc56.60.100 libvo_aacenc Stream mapping: Stream #0:0 -> #0:0 (dvvideo (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libvo_aacenc)) Press [q] to stop, [?] for help frame= 1449 fps=112 q=-1.0 Lsize= 10373kB time=00:00:57.93 bitrate=1466.7kbits/s video:9424kB audio:906kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.411332% [libx264 @ 0x256dea0] frame I:29 Avg QP:22.01 size: 23022 [libx264 @ 0x256dea0] frame P:826 Avg QP:24.37 size: 8655 [libx264 @ 0x256dea0] frame B:594 Avg QP:25.43 size: 3086 [libx264 @ 0x256dea0] consecutive B-frames: 29.4% 42.9% 14.7% 13.0% [libx264 @ 0x256dea0] mb I I16..4: 21.0% 76.6% 2.3% [libx264 @ 0x256dea0] mb P I16..4: 1.7% 5.9% 0.5% P16..4: 46.9% 9.4% 6.7% 0.0% 0.0% skip:28.9% [libx264 @ 0x256dea0] mb B I16..4: 0.0% 0.1% 0.0% B16..8: 48.5% 2.5% 0.6% direct: 3.3% skip:44.8% L0:46.0% L1:50.8% BI: 3.2% [libx264 @ 0x256dea0] 8x8 transform intra:73.6% inter:82.2% [libx264 @ 0x256dea0] coded y,uvDC,uvAC intra: 66.2% 56.2% 6.0% inter: 19.5% 23.4% 0.1% [libx264 @ 0x256dea0] i16 v,h,dc,p: 14% 39% 12% 35% [libx264 @ 0x256dea0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 16% 33% 5% 5% 6% 6% 5% 7% [libx264 @ 0x256dea0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 9% 60% 14% 3% 3% 3% 3% 2% 2% [libx264 @ 0x256dea0] i8c dc,h,v,p: 56% 20% 21% 3% [libx264 @ 0x256dea0] Weighted P-Frames: Y:14.9% UV:1.5% [libx264 @ 0x256dea0] ref P L0: 62.5% 14.1% 15.9% 6.8% 0.7% [libx264 @ 0x256dea0] ref B L0: 81.5% 17.0% 1.5% [libx264 @ 0x256dea0] ref B L1: 94.9% 5.1% [libx264 @ 0x256dea0] kb/s:1331.94 Exiting normally, received signal 2.
(interrupted after a few seconds with ctrl-c)
It is well worth running a deinterlacing video filter during your video encode and this may very well lessen some of the odd screen effects that you are seeing in your output video. A second thought, unrelated to motion artefact but well worth adding in, is the use of a de-noising filter.
1. Deinterlacing:
For FFmpeg the best and fastest choice is
yadif
which in the usual quirky geek fashion simply stands for 'Yet Another DeInterlacing Filter'!yadif
can be used with no options or you can specify an option for each of 3 fields:The safe defaults can be specified on the FFmpeg command line as:
If you wish to alter these all of the deeper detail is contained here:
FFmpeg Filter Documentation: yadif
https://ffmpeg.org/ffmpeg-filters.html#yadif-1
A further deinterlacing filter called
mcdeint
(motion-compensation deinterlacing) can also be applied but you may find this painfully slow. A typical command line for use of this filter would be:And again the fine detail of the
mcdeint
options can be seen in the FFmpeg documentation:FFmpeg Filter Documentation: mcdeint
https://ffmpeg.org/ffmpeg-filters.html#mcdeint
2. Denoising:
A final though that may well be worth some experimentation is the use of a denoising filter, although this should not effect motion artefact it is still a well worth addition. Under FFmpeg there are a few choices but one well worth looking at is
nlmeans
(denoise frames using Non-Local Means algorithm). You will need the very latest FFmpeg for this one.To use this in the easiest command line try the following:
There is a hit with
nlmeans
in terms of encoding time, not as severe a penalty as is seen withmcdeint
but still a consideration...If you have an older copy of FFmpeg with no access to this newest filter there is an older denoise filter that can safely be used with trust in the sane defaults:
I note on my own system that
hqdn3d
is very, very much faster than the newernlmeans
. Better? Well I suspect that is a debate for another forum :)And hopefully a combination of any of these thoughts will solve your problem...
References:
You can quickly and easily achieve very good quality using Handbrake app. Install it with:
I suggest you encode to x264, it's currently most commonly used coded and you can have quite small file while preserving good quality. For private archive I recommend setting up Constant RF (rate factor) to between 16 and 18 (lower = higher quality and larger size).
If your video is noisy (it's probably is), there's also very neat denoise filter:
You might also need to deinterlance your source. As for audio... 320 kbps MP3 or AAC should give great results for personal archive. Everything can be set in Handbrake's GUI.