我带上了我的旧 NV-GS500 松下摄像机;为了最终将我们所有的录音转换成数字媒体。
到目前为止,事情进展顺利:
- 在 Ubuntu 16.04 上,我只需通过 DV/firewire 电缆连接设备和笔记本电脑即可
- 仅使用标准设置(我没有选择任何输出格式;只是选择“单一”无限文件)...基诺为我创建了一个 capture.dv 文件
- 这创建了一个约 8 GB 的文件,用于存放 40 分钟的视频……我同意
- 然后我使用一个小脚本将
ffmpeg -i infile -pix_fmt yuv420p -crf 23 outfile
dv 文件转换为 mp4
但遗憾的是,mp4 的质量并不那么令人信服。特别是在快速移动时,有很多像素化的东西。
因此,我想改善整个事情。现在我发现基诺实际上是“死了”;我想知道什么工具组合可以给我带来良好的质量;尽可能容易。
更新:上面已经给出了 ffmpeg 的完整命令,下面是我运行该命令时收到的输出:
> ffmpeg -i capture001.dv -pix_fmt yuv420p -crf 23 测试.mp4 ffmpeg 版本 2.8.10-0ubuntu0.16.04.1 版权所有 (c) 2000-2016 FFmpeg 开发人员 使用 gcc 5.4.0 构建(Ubuntu 5.4.0-6ubuntu1~16.04.4)20160609 配置:--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 --启用 libmodplug --启用 libmp3lame --启用 libopenjpeg --启用 libopus --启用 libpulse --启用 librtmp --启用 libschroedinger --启用 libshine --启用 libsnappy --启用 libsoxr --启用 libspeex --启用 libssh --启用 libtheora --启用 libtwolame --启用 libvorbis --启用 libvpx --启用 libwavpack --启用 libwebp --启用 libx265 --启用 libxvid --启用 libzvbi --启用 openal --启用 opengl --启用 x11grab --启用 libdc1394 --启用 libiec61883 --启用 libzmq --启用 frei0r --启用 libx264 --启用 libopencv 警告:库配置不匹配 avcodec 配置:--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 --启用-libgsm --启用-libmodplug --启用-libmp3lame --启用-libopenjpeg --启用-libopus --启用-libpulse --启用-librtmp --启用-libschroedinger --启用-libshine --启用-libsnappy --启用-libsoxr --启用-libspeex --启用-libssh --启用-libtheora --启用-libtwolame --启用-libvorbis --启用-libvpx --启用-libwavpack --启用-libwebp --启用-libx265 --启用-libxvid --启用-libzvbi --启用-openal --启用-opengl --启用-x11grab --启用-libdc1394 --启用-libiec61883 --启用-libzmq --启用-frei0r --启用-libx264 --启用-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] 检测到的时间码无效 [dv @ 0x2566420] 根据比特率估算时长,可能不准确 输入 #0,dv,来自‘capture001.dv’: 时长:00:39:45.36,开始:0.000000,比特率:28800 kb/s 流 #0:0:视频:dvvideo,yuv420p,720x576 [SAR 64:45 DAR 16:9],28800 kb/s,25 fps,25 tbr,25 tbn,25 tbc 流 #0:1:音频:pcm_s16le,32000 Hz,立体声,s16,1024 kb/s 流 #0:2:音频:pcm_s16le,32000 Hz,立体声,s16,1024 kb/s [libx264 @ 0x256dea0] 使用 SAR=64/45 [libx264 @ 0x256dea0] 使用 CPU 功能:MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x256dea0] 配置文件高,级别 3.0 [libx264 @ 0x256dea0] 264 - 核心 148 r2643 5c65704 - H.264/MPEG-4 AVC 编解码器 - Copyleft 2003-2015 - http://www.videolan.org/x264.html - 选项:cabac=1 ref=3 deblock=1:0:0 analyze=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 hybrid_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2threads=12 lookahead_threads=2sliced_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 输出 #0,mp4,到‘test.mp4’: 元数据: 编码器:Lavf56.40.101 流 #0:0:视频:h264 (libx264) ([33][0][0][0] / 0x0021),yuv420p,720x576 [SAR 64:45 DAR 16:9],q=-1--1,25 fps,12800 tbn,25 tbc 元数据: 编码器:Lavc56.60.100 libx264 流 #0:1:音频:aac (libvo_aacenc) ([64][0][0][0] / 0x0040),32000 Hz,立体声,s16,128 kb/s 元数据: 编码器:Lavc56.60.100 libvo_aacenc 流映射: 流 #0:0 -> #0:0 (dvvideo (本机) -> h264 (libx264)) 流 #0:1 -> #0:1 (pcm_s16le (本机) -> aac (libvo_aacenc)) 按 [q] 停止,按 [?] 获取帮助 帧=1449 fps=112 q=-1.0 Lsize=10373kB 时间=00:00:57.93 比特率=1466.7kbits/s 视频:9424kB 音频:906kB 字幕:0kB 其他流:0kB 全局标头:0kB 多路复用开销:0.411332% [libx264 @ 0x256dea0] 帧 I:29 平均 QP:22.01 大小: 23022 [libx264 @ 0x256dea0] 帧 P:826 平均 QP:24.37 大小:8655 [libx264 @ 0x256dea0] 帧 B:594 平均 QP:25.43 大小:3086 [libx264 @ 0x256dea0] 连续 B 帧:29.4% 42.9% 14.7% 13.0% [libx264 @ 0x256dea0] mb 我 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% 跳过:28.9% [libx264 @ 0x256dea0] mb B I16..4: 0.0% 0.1% 0.0% B16..8: 48.5% 2.5% 0.6% 直接: 3.3% 跳过:44.8% L0:46.0% L1:50.8% BI: 3.2% [libx264 @ 0x256dea0] 8x8 变换帧内:73.6% 帧间:82.2% [libx264 @ 0x256dea0] 编码 y、uvDC、uvAC 帧内:66.2% 56.2% 6.0% 帧间: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 直流,H,V,P:56%20%21%3% [libx264 @ 0x256dea0] 加权 P 帧:Y:14.9% UV:1.5% [libx264 @ 0x256dea0] 参考 P L0: 62.5% 14.1% 15.9% 6.8% 0.7% [libx264 @ 0x256dea0] 参考 B L0: 81.5% 17.0% 1.5% [libx264 @ 0x256dea0] 参考 B L1: 94.9% 5.1% [libx264 @ 0x256dea0] kb/秒:1331.94 正常退出,收到信号2。
(几秒后按 ctrl-c 中断)
答案1
在视频编码期间运行反隔行视频过滤器非常值得,这很可能减少输出视频中看到的一些奇怪的屏幕效果。第二个想法与运动伪影无关,但非常值得添加,即使用去噪过滤器。
1. 去隔行:
对于 FFmpeg 来说,最好和最快的选择是yadif
,以通常古怪的极客方式简单地代表“另一个去隔行过滤器”!
yadif
可以不使用任何选项,也可以为以下三个字段分别指定一个选项:
- 模式:采用的基本隔行扫描模式
- 平价:假设输入隔行视频的图像场奇偶校验
- 德因特:指定要去隔行的帧
可以在 FFmpeg 命令行上指定安全默认值,如下所示:
-vf yadif=0:-1:0
如果您希望更改这些内容,请参阅此处提供的所有更深入的细节:
FFmpeg 过滤器文档:yadif
https://ffmpeg.org/ffmpeg-filters.html#yadif-1
mcdeint
还可以应用称为(运动补偿去隔行)的进一步去隔行滤波器,但您可能会发现这痛苦地慢。使用此过滤器的典型命令行是:
-vf yadif=1:-1:0,mcdeint=2:1:10
mcdeint
您还可以在 FFmpeg 文档中查看选项的详细信息:
FFmpeg 过滤器文档:mcdeint
https://ffmpeg.org/ffmpeg-filters.html#mcdeint
2.去噪:
最后,值得尝试的一点是使用去噪滤波器,虽然这不会影响运动伪影,但仍然值得添加。在 FFmpeg 下有几个选择,但其中一个值得一看的是nlmeans
(使用非局部均值算法对帧进行去噪)。您将需要最新的 FFmpeg对于这个。
要在最简单的命令行中使用它,请尝试以下操作:
-vf yadif=0:-1:0,nlmeans
在编码时间方面存在影响nlmeans
,虽然惩罚不像所见的那么严重,mcdeint
但仍需要考虑......
如果您拥有旧版 FFmpeg 且无法使用此最新过滤器,则可以使用较旧的降噪过滤器,并可放心使用合理的默认设置:
-vf yadif=0:-1:0,hqdn3d
我注意到,我的系统hqdn3d
比新系统快得多nlmeans
。更好?好吧,我怀疑这是另一个论坛的辩论 :)
希望这些想法的组合能够解决您的问题...
参考: