13 Stimmen

Wie kann ich Audio UND Video gleichzeitig mit ffmpeg von einem Linux-USB-Aufnahmegerät aufnehmen?

Ich nehme ein Video mit einem USB Terratec Grabster AV350 (der auf dem em2860 Chip basiert) auf.

Es gelingt mir nicht, den Ton zu hören, wenn er abgespielt wird. Wenn ich das aufgenommene Video mit vlc oder ffplay abspiele, bekomme ich nur 3 Sekunden Ton und dann Stille für den Rest des Videos ...

Während der Erfassung erhalte ich keine Fehlermeldungen. Am Ende wird die Größe der aufgenommenen Video- und Audiodaten angezeigt ....

Ich verwende dafür den Befehl ffmpeg:

ffmpeg -f alsa -ac 2 -i hw:3 -f video4linux2 -i /dev/video0 -acodec ac3 -ab 128k -vcodec mpeg4 -b 6000k -r 25 test5.avi

Das Protokoll lautet:

[alsa @ 0x9bcd420]Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'hw:3':
Duration: N/A, start: 69930.998994, bitrate: N/A
Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
[video4linux2 @ 0x9bf5d30]Estimating duration from bitrate, this may be inaccurate
Input #1, video4linux2, from '/dev/video0':
Duration: N/A, start: 1307111377.654173, bitrate: -2147483 kb/s
Stream #1.0: Video: rawvideo, yuyv422, 720x576, -2147483 kb/s, 1000k tbr, 1000k tbn, 1000k tbc
[ac3 @ 0x9bf9590]No channel layout specified. The encoder will guess the layout, but it might be incorrect.
Output #0, avi, to 'test5.avi':
Metadata:
ISFT : Lavf52.64.2
Stream #0.0: Video: mpeg4, yuv420p, 720x576, q=2-31, 6000 kb/s, 25 tbn, 25 tbc
Stream #0.1: Audio: ac3, 44100 Hz, stereo, s16, 128 kb/s
Stream mapping:
Stream #1.0 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 1283 fps= 25 q=2.3 Lsize= 38677kB time=51.32 bitrate=6173.9kbits/s
**video:37755kB audio:846kB** global headers:0kB muxing overhead 0.198922%

Wenn ich den Befehl nur auf die Aufnahme von Audio reduziere, kann die Audiodatei erfolgreich abgespielt werden:

ffmpeg -f alsa -ac 2 -i hw:3,0 -acodec ac3 -ab 128k test5.avi

[alsa @ 0x8ede420]Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'hw:3,0':
Duration: N/A, start: 70395.998935, bitrate: N/A
Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
[ac3 @ 0x8eebac0]No channel layout specified. The encoder will guess the layout, but it might be incorrect.
Output #0, avi, to 'test5.avi':
Metadata:
ISFT : Lavf52.64.2
Stream #0.0: Audio: ac3, 44100 Hz, stereo, s16, 128 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
size= 227kB time=13.62 bitrate= 136.8kbits/s
**video:0kB audio:213kB** global headers:0kB muxing overhead 6.902375%

Wenn ich den Befehl nur für die Videoaufzeichnung ausführe, kann vlc oder ffplay das Video erfolgreich abspielen:

ffmpeg -f video4linux2 -i /dev/video0 -vcodec mpeg4 -b 12000k -r 25 test5.avi

[video4linux2 @ 0x91d6420]Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2, from '/dev/video0':
Duration: N/A, start: 1307112044.025687, bitrate: -2147483 kb/s
Stream #0.0: Video: rawvideo, yuyv422, 720x576, -2147483 kb/s, 1000k tbr, 1000k tbn, 1000k tbc
Output #0, avi, to 'test5.avi':
Metadata:
ISFT : Lavf52.64.2
Stream #0.0: Video: mpeg4, yuv420p, 720x576, q=2-31, 12000 kb/s, 25 tbn, 25 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
frame= 388 fps= 25 q=2.0 Lsize= 12963kB time=15.52 bitrate=6842.5kbits/s
**video:12949kB audio:0kB** global headers:0kB muxing overhead 0.114584%

Ein seltsames Verhalten ist mir aufgefallen: Wenn ich versucht habe, Video und Audio aufzunehmen, kann ich den Ton danach nicht mehr aufnehmen, es sei denn, ich ziehe zuerst den Stecker des AV350.

Das G350 befindet sich auf Karte 3:

htpc@htpc-01:/proc/asound/G350/pcm0c$ more info
card: 3
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1

Das Betriebssystem ist ein Linux 2.6.38-8-generic mit der Ubuntu Natty Narwhal Version

Jede Hilfe zur Lösung dieses Problems wäre großartig ....

Danke!

7voto

Number 11 Punkte 81

Ich habe an etwas Ähnlichem gearbeitet und diesen Befehl verwendet:

ffmpeg -y -f alsa -i default -f v4l2 -i /dev/video0 -acodec aac -strict -2 -ac 1 -b:a 64k -vcodec libx264 -b:v 300k -r 30 -g 30 prueba1.mp4

Am Anfang hatte ich Schwierigkeiten mit hw:3 Komponente. Stattdessen habe ich in default und der Code hat tatsächlich funktioniert. Ich hoffe, das hilft.

3voto

doug Punkte 31

Sie eignet sich für Videos in hoher Qualität:

ffmpeg -f alsa -ac 2 -i hw:1,0 -f video4linux2 -i /dev/video0 -acodec ac3 -ab \
128k -f matroska -s 1280x720 -vcodec libx264 -preset ultrafast -qp 16 testsize.mkv

1voto

norway-firemen Punkte 376

Ich habe herausgefunden, dass der Befehl unten für eine externe USB-Webkamera funktioniert (meine ist derzeit eine Logitech C310). Ich habe diesen Befehl auf meinem Laptop verwendet, der bereits ein eingebautes Mikrofon/Webcam hat, und er hat trotzdem das Audio und Video von meiner C310 aufgenommen. Natürlich müssen Sie /dev/video0 an Ihre Bedürfnisse anpassen. Sie können verwenden

ls /dev/video*

im Terminal, um zu sehen, welche Videoaufnahmegeräte Ihr Betriebssystem eingerichtet hat.

ffmpeg -f alsa -i default -itsoffset 00:00:00 -f video4linux2 -s 1280x720 -r 25 -i /dev/video0 out.avi

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X