FFmpeg:最高 VHS 质量?

FFmpeg:最高 VHS 质量?

我正在使用 FFmpeg 将一些 VHS 磁带数字化为无损视频文件。如何进一步优化我的 FFmpeg 命令,以便更接近下面要求的规格,同时获得最佳质量?

目标(理想)无损规格

  • 文件格式:MKV/AVI/MOV/MXF
  • 视频编解码器:FFV1/JPG2000 无损/HuffYUV/Dirac/H.264 无损
  • 色度:4:2:2
  • 像素大小:Rec.601
  • 长宽比:4:3
  • 分辨率:720x576
  • 朋友
  • 25 帧/秒
  • 音频:48Khz/24 位 PCM 48Khz/16

FFmpeg 命令

(操作系统为Ubuntu Studio,CPU有8核)

sudo \
nice --20 \
ffmpeg \
-hide_banner \
-v verbose \
-report \
-err_detect +crccheck+bitstream+buffer+compliant+aggressive \
-fflags +igndts \
-f video4linux2 -thread_queue_size 1024 -i "/dev/video4" \
-f alsa -thread_queue_size 1024 -channel_layout stereo -ac 2 -i "hw:1" \
-vcodec ffv1 -level 3 -threads 8 -coder 1 -context 1 -g 1 -slices 30 -slicecrc 1 \
-acodec copy \
-aspect 4:3 \
-colorspace bt470bg \
-t 00:00:00 \
"NAME_HERE.mkv"

附加信息

捕获设备是USB-Live2来自 Hauppauge,使用半官方车手Linux 兼容性

FFmpeg 来自捕获设备的输入流:

Input #0, video4linux2,v4l2, from '/dev/video4':
  Duration: N/A, start: 1048.849074, bitrate: 165888 kb/s
  Stream #0:0: Video: rawvideo, 1 reference frame (YUY2 / 0x32595559), yuyv422, 720x576, 165888 kb/s, 25 fps, 25 tbr, 1000k tbn
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:1':
  Duration: N/A, start: 1673449766.232483, bitrate: 1536 kb/s
  Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> ffv1 (native))
  Stream #1:0 -> #0:1 (copy)

FFprobe 流用于示例输出视频文件:

ffprobe -hide_banner sample.mkv
Input #0, matroska,webm, from 'sample.mkv':
  Metadata:
    ENCODER         : Lavf59.27.100
  Duration: 00:00:10.01, start: 0.000000, bitrate: 52324 kb/s
  Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p(tv, bt470bg/unknown/unknown, progressive), 720x576, SAR 16:15 DAR 4:3, 25 fps, 25 tbr, 1k tbn
    Metadata:
      ENCODER         : Lavc59.37.100 ffv1
      DURATION        : 00:00:10.000000000
  Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Metadata:
      DURATION        : 00:00:10.006000000

当前指挥合理化

sudo nice --20 确保 ffmpeg 进程获得 CPU 的最大优先级。(之后,我使用 chown 从 root 更改视频文件的所有权。)

err_detect 用于捕获任何和所有错误。如果出现问题,我会重新启动数字化会话。不知道是否有任何标志彼此完全冗余和/或影响性能。

据我了解,因为 ffv1 是“帧内“编解码器,而不是帧间一、通过 fflags +igndts 可以安全地忽略 DTS 错误。(它们在会话期间弹出的情况相当常见,而且似乎没有必要因为它们而重新启动。)

如果没有过大的thread_queue_size 1024,ffmpeg 往往会警告“线程消息队列阻塞”

ffv1 似乎是目前最强大的无损视频编解码器,并且其参数似乎也是最强大的:https://trac.ffmpeg.org/wiki/Encode/FFV1

输入音频足够接近目标规格(据我所知无法改进)因此它们只是按原样复制。

编辑:结果我有 8 个核心,而不是 16 个。相应地更新了 ffv1 的 -threads 参数。

答案1

如今,模拟磁带已全部采用 FM RF 作为“最佳和最终”格式,并采用 FLAC 压缩,这是保存的原始视频和 HiFi FM 信号数据,并且通过下采样到最低速率小于 FFV1 10 位,同时仍提供经过软件解码和时间基校正后的整个信号帧,包括第 21 行数据,即 CC/VITC 时间码等。

4fsc NTSC 解码帧,例如 Y/Luma 通道

值得给予VHS 解码 维基读一读。

相关内容