ffmpeg - 如何从捕获设备捕获带有音频的简单视频输入

标签 ffmpeg video-capture v4l2

我在 Arch linux 上使用 ffmpeg 并尝试将一些旧视频转换为数字视频。设置非常简单,如果我使用 VLC 连接到捕获设备,我可以很好地获得视频和音频。所以现在我想用 ffmpeg 捕获它并将其写入一个文件,以便我可以编辑它并清理它。我对 ffmpeg 非常熟悉,而且我一直在研究手册页,这就是我所在的位置。
此命令捕获完美的音频,但没有视频:

ffmpeg -f alsa -ac 2 -i front:CARD=Capture,DEV=0 out.mpeg
此命令捕获完美的视频;
ffmpeg -f video4linux2 -i /dev/video0 out.mpeg
捕获视频信号很好,但没有音频。所以将它们结合在一起应该给我:
ffmpeg -y -f alsa -ac 2 -i front:CARD=Capture,DEV=0 -f video4linux2 -i /dev/video0 out.mpeg
但这个命令有点落在它的脸上。我得到了音频,但没有视频:
ffmpeg -y -f alsa -ac 2 -i front:CARD=Capture,DEV=0 -f video4linux2 -i /dev/video0 out.mpeg
ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, alsa, from 'front:CARD=Capture,DEV=0':
  Duration: N/A, start: 1608093176.894565, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
[video4linux2,v4l2 @ 0x56248fe0ab80] Dequeued v4l2 buffer contains corrupted data (0 bytes).
Input #1, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 0.000000, bitrate: 995328 kb/s
    Stream #1:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 995328 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #1:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
  Stream #0:0 -> #0:1 (pcm_s16le (native) -> mp2 (native))
Press [q] to stop, [?] for help
[video4linux2,v4l2 @ 0x56248fe0ab80] Dequeued v4l2 buffer contains corrupted data (0 bytes).
    Last message repeated 30 times
[alsa @ 0x56248fdb3840] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[mpeg @ 0x56248fe0dfc0] VBV buffer size not set, using default size of 230KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size
Output #0, mpeg, to 'out.mpeg':
  Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Video: mpeg1video, yuv420p(progressive), 1920x1080, q=2-31, 200 kb/s, 30 fps, 90k tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.91.100 mpeg1video
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s
    Metadata:
      encoder         : Lavc58.91.100 mp2
frame=    2 fps=0.0 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=2.0 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=1.3 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=1.0 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.8 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.7 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.6 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.5 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.4 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.4 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.4 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.3 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.3 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.3 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.3 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.2 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/sframe=    2 fps=0.1 q=3.2 size=       0kB time=01:48:49.26 bitrate=   0.0kbits/s[video4linux2,v4l2 @ 0x56248fe0ab80] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=0 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=2020 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=4061 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=6102 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=8143 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=10184 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=12225 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=14266 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=16307 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=18348 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=20389 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=22430 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=24471 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=26512 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=28553 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=30594 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=32635 size=36451
[mpeg @ 0x56248fe0dfc0] buffer underflow st=0 bufi=34676 size=36451
frame=    2 fps=0.1 q=2.0 Lsize=    1470kB time=01:48:49.30 bitrate=   1.8kbits/s speed= 221x    
video:63kB audio:1388kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.314351%
Exiting normally, received signal 2.
理想情况下,我想要的只是一个相当原始的 2ch 立体声“转储”来自采集卡的内容。
一如既往,我非常感谢任何建议

最佳答案

您可以使用无损压缩 H.264,具有编辑器友好的帧内模式 (-g 1),作为编辑的中间文件:

ffmpeg -y -f alsa -channels 2 -i front:CARD=Capture,DEV=0 -f video4linux2 -i /dev/video0 -c:v libx264 -crf 0 -g 1 -c:a copy output.mkv
优点是它是无损的,但仍然是压缩的,所以它不是 super 大。速度足够快,可以实时编码。解码相对容易。
文件大小将明显大于典型的有损 H.264,但它仅用于编辑,您可以从编辑器输出典型格式以供一般使用。
这适用于 Openshot,但可能不适用于 Premiere 和其他昂贵的编辑器。

关于ffmpeg - 如何从捕获设备捕获带有音频的简单视频输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65317386/

相关文章:

linux - 是什么导致 v4l2 中的 "resource temporarily unavailable"

opencv - 如何从 DrawMatches() 方法返回的 Mat 对象中分离查询和训练图像

c++ - 通过 C/C++ 使用 JPEG 像素格式在 v4l2 中设置/获取相机 jpeg 压缩质量

google-chrome - 谷歌浏览器无法检测到 v4l2loopback 设备

android - 如何使用FFMPEG保存rtsp流不丢包

ffmpeg - 基于I帧生成P帧

ffmpeg - 带 Alpha channel 的自适应视频编码

video - avi 文件开头的特殊不可见帧。如何正确识别/处理它们?

android - 错误的视频捕获Android应用程序

linux - 将/dev/video0 的输出转储到 fifo 文件