FFmpeg: максимальное качество VHS?

Я оцифровываю несколько кассет VHS в видеофайлы без потерь с помощью FFmpeg. Как я могу дополнительно оптимизировать команду FFmpeg, чтобы приблизиться к запрошенным ниже спецификациям с максимально возможным качеством?

Целевые (идеальные) характеристики без потерь

  • Формат файла: MKV/AVI/MOV/MXF.
  • Видеокодеки: FFV1/JPG2000 без потерь/HuffYUV/Dirac/H.264 без потерь
  • Цветность: 4:2:2
  • Размер пикселя: Rec.601
  • Соотношение сторон: 4:3
  • Разрешение: 720x576
  • ПАЛ
  • 25 кадров в секунду
  • Аудио: 48 кГц/24 бит PCM 48 кГц/16

команда FFmpeg

(ОС — Ubuntu Studio, процессор имеет 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. (После этого я использую chown, чтобы изменить владельца видеофайла от root.)

err_detect предназначен для обнаружения любых ошибок. Если что-то произойдет, я перезапущу сеанс оцифровки. Не знаю, являются ли какие-либо из флагов полностью дублирующими друг друга и/или влияющими на производительность.

Насколько я понимаю, поскольку ffv1 является « внутрикадровым », а не межкадровым кодеком , ошибки DTS следует безопасно игнорировать с помощью fflags +igndts. (Довольно часто они появляются во время сеанса, и из-за них кажется ненужным перезапускать сеанс.)

Без чрезмерного размера thread_queue_size 1024 ffmpeg имеет тенденцию предупреждать о «блокировке очереди сообщений потока».

ffv1 кажется самым мощным доступным видеокодеком без потерь, а параметры кажутся самыми мощными из возможных: https://trac.ffmpeg.org/wiki/Encode/FFV1

Входной звук достаточно близок к целевым характеристикам (и AFAIK не может быть улучшен), поэтому он просто копируется как есть.

Изменить: оказывается, у меня 8 ядер, а не 16. Соответственно обновлен параметр -threads ffv1.

1 ответ

Сегодня аналоговая лента полностью перешла на FM RF для «лучшего и окончательного» формата со сжатием FLAC. Это сохраненные необработанные данные видео и HiFi FM-сигнала, а с понижением частоты до минимальных скоростей меньше, чем 10-битный FFV1, но при этом обеспечивающий весь сигнал. кадр после программного декодирования и коррекции временной развертки, включая данные строки 21, т. е. временной код CC/VITC и т. д.

Декодированный кадр 4fsc NTSC, пример канала Y/Luma

Стоит прочитать вики VHS-Decode .

Другие вопросы по тегам