Сценарий или команда аналогового захвата видео 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
2
задан 26 December 2015 в 22:35

3 ответа

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

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

Первоначально, я не мог заставить аудио работать с одним звуковым портом RCA на моей видеокамере. Я зафиксировал это путем движения в Инструменты> Предпочтения> Все (переключатель, левая нижняя часть). Затем я перешел к Входному / Кодеки> модули Доступа> ALSA. Я изменил Частоту дискретизации на 48 000 Гц. После изменения этих настроек Вы сможете передать свое видео потоком. Другие частоты дискретизации вызывали ошибку.

Перейдите к Медиа> Открытое Устройство захвата изображения. Выберите название Видеоустройства, и название Аудиоустройства (обратите внимание, что в снимке экрана выше его значение по умолчанию, потому что я использовал порт микрофона вместо этого. Ваш будет отличаться, если Вы будете использовать соединение RCA на своем устройстве Hauppauge.) Выбирают NTSC (или независимо от того, что форматируют Ваши видеоленты). Нажмите Play. При проигрывании перейдите к Инструментам> информация о Кодеке. Вы захотите корректироваться ниже сценария согласно информации, данной там. Я скорректировал частоту кадров к 29,97 и частоту дискретизации к 48 000 Гц. в моем сценарии из-за информации, данной там.

О сценарии

a. Вам предлагают ввести имя файла и метаданные. Файлы установлены сохранить к ~ / Видео.

b. VLC (cvlc)

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

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

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

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

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 Calendar, когда сценарий завершается. Ниже, дата и время в течение двух минут в будущем помещается в переменную. Затем календарная запись создается в течение того времени. Напоминание установлено для запуска того события. Google Calendar нужен двухминутный буфер. (Я попробовал одну минуту.) Так, Вы были бы уведомлены спустя две минуты после закодировать концов.

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%-м использовании CPU. Однако 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"
2
ответ дан 27 December 2015 в 08:35
  • 1
    @mikewhatever рџ™\, „как Вы так уверены?! Это дважды уже произошло со мной и it' s сразу после обновления ядра. Модуль Nvidia пропадает, и система никогда не заканчивает загружаться. Удаление драйвера (для очистки чего-либо, что осталось) и затем установка его снова (таким образом создающий модуль для нового ядра) решает проблему. I' d радоваться, можно ли доказать, это не имеет никакого отношения к этому, и объясните нас почему. Это не " nonsense". – Enrico 3 July 2018 в 11:57

Вот пример для 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 минуты производят.

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

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

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

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

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

  • можно добавить -metadata title="Title" и другие метаданные, если Вы чувствуете себя подобно ему.

Включение дополнительного спама

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

ffmpeg -ss 10 -i input -c copy -t 600 output
1
ответ дан 27 December 2015 в 08:35
  • 1
    или тип journalctl и проверяет то, что продолжается там – swietyy 17 October 2018 в 05:56

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

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
0
ответ дан 27 December 2015 в 08:35
  • 1
    Спасибо, да, который имеет смысл также. У меня есть alienware 13 R-3, Для установки ubuntu I добавленный nomodeset, чтобы включить человечности OS для загрузки. Как только я установил драйвер Nvidia, я получал вышеупомянутую ошибку. Таким образом на личинке я потребовал у e редактирования и удалил nomodeset и ctrl+x к перезагрузке. После этого я стал настольным весь штраф. – Mian Asbat Ahmad 12 March 2019 в 02:31

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

Похожие вопросы: