web-dev-qa-db-fra.com

Commande ou script de capture vidéo analogique Hauppauge 610

J'ai Xubuntu 14.04. Le caméscope que j'utilise est le Sony CCD-TRV16 NTSC 180x Zoom numérique . J'utilise le Hauppauge 610 USB-Live 2 Analog Video Digitizer et Video Capture Device pour convertir des bandes 8 mm en mp4. J'utilise VLC pour convertir les vidéos.

Je vais convertir pas mal de cassettes. Ce serait bien d'avoir exactement les mêmes paramètres GUI VLC que j'utilise dans une commande ou un script. De plus, la possibilité de couper l'enregistrement après une certaine période serait formidable. Je me fiche du programme que j'utilise pour les convertir. Ce client a dit qu'il avait réussi à utiliser ffmpeg. Cependant, je suis d'accord avec l'utilisation de tout programme qui fonctionne. Merci d'avance!

Voici la sortie de 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
jbrock

Étapes préliminaires

Lancez VLC avec vlc -vvv. Cela active la verbosité sur 2 (debug). Cela peut également être vu dans l'interface graphique de VLC en allant à Tools> Messages. Suivez ensuite les étapes répertoriées ci-dessus dans les captures d'écran pour afficher les informations nécessaires pour la commande dans le journal de débogage. Ensuite, vous pouvez ajuster la syntaxe appropriée en consultant le script ci-dessous et en ligne. Vous pouvez également voir le code et la syntaxe en sélectionnant Afficher plus d'options. (La première capture d'écran de ma question ci-dessus.) Cependant, ce n'est que de cette façon que j'ai pu créer la commande cvlc ci-dessous. Vous pouvez simplement adapter le script ci-dessous à vos besoins.

Au départ, je n'ai pas réussi à faire fonctionner l'audio avec le seul port audio RCA de mon caméscope. J'ai corrigé cela en allant dans Outils> Préférences> Tous (bouton radio, en bas à gauche). Ensuite, je suis allé à Input/Codecs> Accéder aux modules> [~ # ~] alsa [~ # ~]. J'ai changé le Taux d'échantillonnage en 48000 Hz. Après avoir modifié ce paramètre, vous pourrez diffuser votre vidéo. Les autres taux d'échantillonnage provoquaient une erreur.

Allez dans Media> Open Capture Device. Sélectionnez Nom du périphérique vidéo et Nom du périphérique audio (notez que dans la capture d'écran ci-dessus, c'est par défaut parce que j'utilisais le port du microphone à la place. La vôtre sera différente si vous utilisez la connexion RCA sur votre appareil Hauppauge.) Sélectionnez NTSC (ou quel que soit le format de vos cassettes vidéo). Cliquez sur Lecture. Pendant la lecture, accédez à Outils> Informations sur le codec. Vous voudrez ajuster le script ci-dessous en fonction des informations qui y sont données. J'ai ajusté la fréquence d'images à 29,97 et la fréquence d'échantillonnage à 48000 Hz. dans mon script à cause des informations qui y sont données.

À propos du script

a. Vous êtes invité à saisir le nom de fichier et les métadonnées. Les fichiers sont configurés pour être enregistrés dans ~/Vidéos.

b. VLC (cvlc)

  1. J'ai réglé le délai à 122 minutes car mes bandes de 8 mm durent deux heures. L'option --foreground Vous permet d'appuyer sur 'ctrl c', et elle arrêtera uniquement cette partie du script et passera à la partie suivante. (Certaines vidéos que j'ai sont plus courtes.)
  2. Vous pouvez utiliser l'interface graphique VLC pour rechercher les noms des périphériques audio et vidéo. (Voir la capture d'écran ci-dessus.)
  3. Sachez si votre vidéo est NTSC ou un autre format.
  4. vcodec et acodec sont définis sur mpeg2 et mpga. La page produit Amazon pour le Hauppauge 61 indique qu'il code pour MPEG-2.
  5. Pour MPEG-2, VLC GUI ne donnait que l'option pour le format .ts. (Voir la deuxième capture d'écran ci-dessus.) J'utilise donc mux=ts. Au départ, j'utilisais vcodec=h264acodec=mpga Et mux=mp4. Cependant, il y avait des problèmes de synchronisation audio et le son tombait à certains endroits de la vidéo. Voir également la section mux =ici .
  6. J'avais besoin de samplerate=48000 Pour que cela fonctionne.
  7. Les images par seconde données sur les informations du codec étaient de 29,97. Ceci est standard pour les bandes VHS/8 mm. Par conséquent, j'ai décidé de le faire correspondre.
  8. J'ai choisi de désentrelacer. Je pensais que ça allait mieux.
  9. L'utilisation de mux=ts Créera un fichier volumineux. Mes vidéos de deux heures font 5-7 Go.

c. FFmpeg compresse davantage avec libx264 (d'environ 5 Go à environ 1,5 Go) et ajoute les métadonnées. Il y avait des notes manuscrites supplémentaires sur chaque bande de 8 mm et je voulais inclure ces informations supplémentaires dans le fichier. Dans la même commande, FFmpeg déplace le son du canal gauche de gauche uniquement vers les canaux gauche et droit en tant que copie de flux sans compression audio supplémentaire. Mon caméscope n'a qu'un seul port audio RCA. Cela corrige donc le problème d'un haut-parleur. Merci à mondaugen pour sa réponse sur le problème audio à un canal.

d. Enfin, vous êtes averti lorsque le script se termine. Pour mon script personnel, j'utilise en fait ce qui suit à la place.

Sur mon ordinateur:

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

Le fichier contient: <p style="font-size: 128px; color: green; font-family: sans; text-align: center; margin-top: 10%; font-weight: bold;">VIDEO FINISHED</p>

Sur mon téléphone: Vous pouvez installer gcalcli pour recevoir une notification sur votre téléphone via Google Agenda lorsque le script est terminé. Ci-dessous, la date et l'heure de deux minutes dans le futur sont mises dans une variable. Ensuite, une entrée d'agenda est créée pour cette heure. Un rappel est défini pour le début de cet événement. Google Agenda a besoin d'un tampon de deux minutes. (J'ai essayé une minute.) Donc, vous seriez averti deux minutes après la fin de l'encodage.

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

Produit fini

Le résultat final produit le fichier .ts plus volumineux et un autre .mp4 compressé.

L'utilisation du processeur

J'ai un processeur AMD A8-6500B. cvlc fonctionne à environ 15% d'utilisation du processeur. Cependant, ffmpeg fonctionnait à environ 97%. Par conséquent, dans mon script (pas dans celui ci-dessous), j'ai ajouté l'option -threads 3 Pour maintenir l'utilisation du processeur à 75%. Je peux le faire car mon processeur est quad core.

#!/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
jbrock

Voici un exemple pour 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 est pour la durée. Cet exemple fera une sortie de 2 heures et 2 minutes.

  • Voir FFmpeg Wiki: H.264 Video Encoding Guide pour le x264 -crf et -preset Info.

  • yadif est un désentrelaceur. Vous devez tester les paramètres pour voir quel mode fonctionne le mieux pour votre contenu. Alternativement, vous pouvez essayer w3fdif .

  • hqdn3d est un débruiteur. Peut être utile si votre contenu est bruyant, mais trop de débruitage provoquera un flou évident et ce filtre peut être lent.

  • Le filtre format garantira un schéma de sous-échantillonnage chromatique largement compatible. Sinon, ffmpeg supposera que vous voulez éviter ou minimiser le sous-échantillonnage de chrominance et la sortie risque de ne pas être lisible par des lecteurs non basés sur FFmpeg comme QuickTime.

  • -movflags +faststart déplacera certaines données une fois l'encodage terminé de la fin du fichier au début. Cela permet à la lecture de commencer avant que le fichier ne soit complètement téléchargé si vos téléspectateurs regardent via un téléchargement progressif.

  • Vous pouvez ajouter -metadata title="Title" et d'autres métadonnées si vous en avez envie.

Éliminer les déchets supplémentaires

Après avoir regardé la sortie et que vous souhaitez la couper, en vous débarrassant de toute vidéo vierge bleue ou noire par exemple, vous pouvez simplement recomposer sans recoder. Cela sautera les 10 premières secondes et fera une sortie de 600 secondes (10 minutes). Ce n'est peut-être pas l'image exacte, mais ce sera probablement assez proche.

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

J'utilisais également une variante de la méthode ffmpeg lorsque j'ai obtenu ce matériel pour la première fois, mais j'ai remarqué que le transcodage par défaut de vlc donnait de meilleurs résultats visuels sur mon système que ffmpeg, alors j'ai fait des gaffes avec la ligne de commande vlc (cvlc) et compris le ligne de commande pour demander ce que fait l'exemple GUI ci-dessus.

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
Matt Rossmiller