Сценарий или команда аналогового захвата видео Hauppauge 610

У меня Xubuntu 14.04. Я использую видеокамеру Sony CCD-TRV16 NTSC с 180-кратным цифровым увеличением. Я использую аналоговое видео дигитайзер и устройство видеозахвата Hauppauge 610 USB-Live 2 для преобразования 8-мм лент в формат mp4. Я использую VLC для конвертации видео.

Я буду конвертировать довольно много лент. Было бы неплохо иметь те же настройки графического интерфейса VLC, которые я использую в команде или скрипте. Также была бы отличной возможность обрезать запись через определенный промежуток времени. Мне все равно, какую программу я использую для преобразования этих. Этот клиент сказал, что они смогли успешно использовать ffmpeg. Тем не менее, я в порядке с использованием любой программы, которая работает. Большое спасибо заранее!

Вот вывод ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:2,0,

Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 8535.656468, bitrate: 165722 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 720x480, 165722 kb/s, 29.97 fps, 29.97 tbr, 1000k tbn, 1000k tbc
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:2,0':
  Duration: N/A, start: 1450034548.361553, bitrate: 1536 kb/s
    Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s

3 ответа

Решение

Предварительные шаги

Запустите VLC с vlc -vvv, Это превращает многословие в 2 (debug), Это также можно увидеть в графическом интерфейсе VLC, перейдя в Инструменты > Сообщения. Затем выполните шаги, перечисленные выше на снимках экрана, чтобы отобразить необходимую информацию для команды в журнале отладки. Затем вы можете настроить соответствующий синтаксис, посмотрев на скрипт ниже и онлайн. Вы также можете увидеть код и синтаксис, выбрав Показать дополнительные параметры. (Первый снимок экрана в моем вопросе выше.) Однако, только так я смог создать команду cvlc ниже. Вы можете просто настроить приведенный ниже скрипт под свои нужды.

Первоначально я не мог заставить звук работать с одним аудиопортом RCA на моей видеокамере. Я исправил это, зайдя в Инструменты > Настройки > Все (переключатель слева внизу). Затем я пошел в Input / Codecs > Модули доступа > ALSA. Я изменил частоту дискретизации до 48000 Гц. После изменения этого параметра вы сможете транслировать видео. Другие частоты дискретизации вызывали ошибку.

Перейдите в Media > Open Capture Device. Выберите Имя видеоустройства и Имя аудиоустройства (обратите внимание, что на снимке экрана выше это по умолчанию, потому что вместо этого я использовал порт микрофона. Ваш будет другим, если вы используете подключение RCA на устройстве Hauppauge.) Выберите NTSC (или в любом формате ваши видеокассеты). Нажмите Play. Во время игры перейдите в Инструменты > Информация о кодеке. Вы можете настроить приведенный ниже скрипт в соответствии с информацией, приведенной там. Я настроил частоту кадров до 29,97 и частоту дискретизации до 48000 Гц. в моем сценарии из-за информации, приведенной там.

О сценарии

а. Вам будет предложено ввести имя файла и метаданные. Файлы настроены на сохранение в ~ / Видео.

б. VLC (cvlc)

  1. Я установил время ожидания на 122 минуты, потому что мои 8-миллиметровые ленты - два часа. --foreground опция позволяет вам нажать "ctrl c" и остановит только эту часть скрипта и перейдет к следующей части. (Некоторые видео у меня короче.)
  2. Вы можете использовать VLC GUI, чтобы найти имена аудио и видео устройств. (Смотрите скриншот выше.)
  3. Узнайте, является ли ваше видео NTSC или другой формат.
  4. vcodec а также acodec установлены в mpeg2 а также mpga, На странице продукта Amazon для Hauppauge 610 говорится, что он кодирует в MPEG-2.
  5. Для MPEG-2 VLC GUI предоставил только опцию для формата.ts. (См. Второй скриншот выше.) Поэтому я использую mux=ts, Первоначально я использовал vcodec=h264acodec=mpga а также mux=mp4, Однако были проблемы с синхронизацией звука, и звук в некоторых местах на видео выпадал. Также смотрите раздел mux= здесь.
  6. мне было нужно samplerate=48000 чтобы это работало.
  7. Количество кадров в секунду, указанное в информации кодека, составило 29,97. Это стандарт для лент VHS / 8 мм. Поэтому я решил соответствовать этому.
  8. Я выбрал деинтерлейсинг. Я думал, что это выглядело лучше.
  9. С помощью mux=ts создаст большой файл. Мои два часа видео 5-7 ГБ.

с. FFmpeg сжимает дальше с libx264 (от около 5 ГБ до около 1,5 ГБ) и добавляет в метаданные. На каждой 8-миллиметровой ленте были дополнительные рукописные заметки, и я хотел включить эту дополнительную информацию в файл. В той же команде FFmpeg перемещает звук левого канала только из левого канала в левый и правый каналы в виде потоковой копии без дополнительного сжатия звука. Моя видеокамера имеет только один аудиопорт RCA. Так что это устраняет проблему с одним оратором. Спасибо mondaugen за ответ на вопрос об одноканальном аудио.

д. Наконец, вы получите уведомление о завершении скрипта. Для моего личного сценария я на самом деле использую следующее.

На моем компьютере:

exo-open --launch WebBrowser $HOME/Videos/video-finished.htm

Файл содержит: <p style="font-size: 128px; color: green; font-family: sans; text-align: center; margin-top: 10%; font-weight: bold;">VIDEO FINISHED</p>

На моем телефоне: Вы можете установить gcalcli получить уведомление на свой телефон через Календарь Google, когда скрипт завершится. Ниже дата и время в течение двух минут в будущем помещаются в переменную. Затем создается запись календаря для этого времени. Напоминание установлено для начала этого события. Календарю Google нужен двухминутный буфер. (Я попробовал одну минуту.) Итак, вы получите уведомление через две минуты после завершения кодирования.

new_date=`date --date="2min"`
gcalcli --calendar 'Name of Your Calendar' --title 'Video Finished' --where '' --when \'"$new_date"\' --duration 5 --description '' --reminder 0 add

Конечный продукт

Окончательный результат дает больший файл.ts и еще более сжатый.mp4.

Использование процессора

У меня процессор AMD A8-6500B. cvlc работает на 15% использования процессора. Тем не мение, ffmpeg был на уровне около 97%. Поэтому в моем сценарии (а не в приведенном ниже) я добавил -threads 3 возможность сохранить загрузку процессора на уровне 75%. Я могу сделать это, потому что мой процессор четырехъядерный.

#!/bin/bash

# Name:         Hauppauge 610 USB-Live 2 Analog Video Digitizer and Video Capture Device Conversion Script
# Author:       jbrock
# Dependencies: VLC media player; ffmpeg, in Ubuntu you will need to add a ppa to install.  
# License:      GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)
# Usage:        Digitize analog tapes to .ts format. Then convert to mp4, add metadata, and make sound work on left and right channels.

# Enter the name of the file.
echo -n "Enter file name: "
read archivo

# This is for metadata. It will show up in the media player playlist or after clicking Properties (in OS X Info) on the file context.
echo -n "Enter a description: "
read comentarios

# Encode video and stop after 122 minutes. The foreground option allows you to hit 'ctrl c,' and it will only stop this portion of the script.
timeout --foreground 122m cvlc v4l2:///dev/video0 :input-slave=alsa://hw:2,0 :v4l2-standard=NTSC :live-caching=300 --sout '#transcode{vcodec=mpeg2,acodec=mpga,ab=128,channels=2,samplerate=48000,fps=29.97,deinterlace}:std{access=file{no-overwrite},mux=ts,dst='$HOME/Videos/$archivo.ts'}'

# Convert to H.264 to compress further, add in the metadata comments, and make output from the left speaker to both speakers. 
ffmpeg -i $HOME/Videos/$archivo.ts -c:v libx264 -preset medium -crf 22 -metadata comment="$comentarios" -af "pan=mono|c0=FL" $HOME/Videos/$archivo.mp4

# Show the 'finished' message. 
notify-send "VIDEO FINISHED"

Вот пример для ffmpeg

ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default -t 02:02:00 \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -strict experimental -ac 1 -b:a 96k \
-vf yadif,hqdn3d,format=yuv420p -movflags +faststart output.mp4
  • -t на время. Этот пример будет производить 2 часа и 2 минуты.

  • Смотрите FFmpeg Wiki: Руководство по кодированию видео H.264 для x264 -crf а также -preset Информация.

  • Ядиф это деинтерлейсер. Вы должны поэкспериментировать с настройками, чтобы увидеть, какой режим лучше всего подходит для вашего контента. В качестве альтернативы, вы можете попробовать w3fdif.

  • hqdn3d - это шумоподавитель. Может быть полезно, если ваш контент шумный, но слишком много шума будет вызывать явную размытость, и этот фильтр может быть медленным.

  • Фильтр формата обеспечит широкую совместимость схемы подвыборки цветности. Иначе, ffmpeg будет предполагать, что вы хотите избежать или минимизировать подвыборку цветности, и выходные данные могут не воспроизводиться игроками, не основанными на FFmpeg, такими как QuickTime.

  • -movflags +faststart переместит некоторые данные после завершения кодирования из конца файла в начало. Это позволяет начать воспроизведение до того, как файл будет полностью загружен, если ваши зрители смотрят через прогрессивную загрузку.

  • Можете добавить -metadata title="Title" и другие метаданные, если вы этого хотите.

Вырезать лишний мусор

После просмотра выходных данных вы захотите обрезать их, например, избавившись от любого синего или черного пустого видео, вы можете просто выполнить повторное мультиплексирование без перекодирования. Это пропустит первые 10 секунд и выдаст 600 секунд (10 минут). Это может быть не точно кадр, но, вероятно, будет достаточно близко.

ffmpeg -ss 10 -i input -c copy -t 600 output

Я также использовал вариант метода ffmpeg, когда впервые получил это оборудование, но я заметил, что транскод по умолчанию для vlc дает лучшие визуальные результаты в моей системе, чем ffmpeg, поэтому я дурачился с командной строкой vlc (cvlc) и выяснил командная строка для запроса того, что делает приведенный выше пример с графическим интерфейсом.

cvlc  v4l2:///dev/video1:standard=NTSC :input-slave=alsa://hw:3,0 :live-caching=1000 --sout "#transcode{vcodec=h264,acodec=mpga,vb=3000,fps=29.97,ab=128,audio-sync,channels=2,deinterlace}:file{dst=rec122015.mp4,no-overwrite}" --sout-keep
Другие вопросы по тегам