ffmpeg中带有音频的屏幕截图

Ada*_*icz 4 ffmpeg screen-capture audio-recording

我正在使用在Fedora 20的此修订版中从源代码构建的ffmpeg 。

我可以使用以下命令完美录制音频:

FFmpeg/ffmpeg -f alsa -ac 2 -i pulse -- output.wav
Run Code Online (Sandbox Code Playgroud)

但是,当我同时尝试屏幕捕获和音频时,如下所示:

FFmpeg/ffmpeg -video_size 800x600 -framerate 25 -ac 2 -f x11grab -i :0.0+0,0 -ac 2 -f alsa -i pulse -ac 2 -acodec copy output.mpeg -ac 2
Run Code Online (Sandbox Code Playgroud)

我正在获取一个音频通道为0的视频,我可以检查其运行情况 FFmpeg/ffplay output.mpeg

Input #0, mpeg, from 'output.mpeg':
  Duration: 00:00:09.44, start: 0.540000, bitrate: 2743 kb/s
    Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv), 800x600 [SAR 1:1 DAR 4:3], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
    Stream #0:1[0x1c0]: Audio: mp2, 0 channels, s16p
   7.26 M-V:  0.000 fd=   0 aq=    0KB vq=   33KB sq=    0B f=0/0   
Run Code Online (Sandbox Code Playgroud)

并且没有播放声音。的位置-ac 2不会改变行为,也不会重复一次。尽管ffmpeg声称要录制2个声道的音频,但这是输入:

ffmpeg version N-71312-ga66dcfe Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8.3 (GCC) 20140911 (Red Hat 4.8.3-7)
  configuration: 
  libavutil      54. 22.100 / 54. 22.100
  libavcodec     56. 34.100 / 56. 34.100
  libavformat    56. 29.100 / 56. 29.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 13.101 /  5. 13.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
Trailing options were found on the commandline.
Input #0, x11grab, from ':0.0+0,0':
  Duration: N/A, start: 1428348285.201679, bitrate: N/A
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 800x600, 25 fps, 25 tbr, 1000k tbn, 25 tbc
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, alsa, from 'pulse':
  Duration: N/A, start: 1428348285.225901, bitrate: 1536 kb/s
    Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
 File 'output.mpeg' already exists. Overwrite ? [y/N] y
[mpeg @ 0x2d079a0] VBV buffer size not set, using default size of 130KB
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 'output.mpeg':
  Metadata:
    encoder         : Lavf56.29.100
    Stream #0:0: Video: mpeg1video, yuv420p, 800x600, q=2-31, 200     kb/s, 25 fps, 90k tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.34.100 mpeg1video
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, 1536 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg1video (native))
  Stream #1:0 -> #0:1 (copy)
Run Code Online (Sandbox Code Playgroud)

我一无所知。如果有人可以通过以下任何一种方法告诉我如何使其工作:

  • 解决命令行标志中的错误
  • 如果是回归,则从哪个修订版本开始构建。
  • 任何其他方式

我给他买一品脱。

小智 8

版本4.2.2

获取你的音频

ffmpeg -list_devices true -f dshow -i dummy
Run Code Online (Sandbox Code Playgroud)

然后

ffmpeg -rtbufsize 1500M -f dshow -i audio="Microphone (Realtek High Definition Audio)" -f -y -rtbufsize 100M -f gdigrab -t 00:00:30 -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "d:\ffmpeg_testing.mp4"
Run Code Online (Sandbox Code Playgroud)

  • 该命令有一些很棒的好处,但不幸的是他们所做的事情为零。官方 ffmpeg 文档的外部链接,或者更好的是对某些特定设置/标志的作用的快速解释会很棒。 (8认同)

Ada*_*icz 5

解决方案似乎是同时使用不同的视频和音频编码器。这行有效:

FFmpeg/ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -acodec aac -strict experimental output.flv
Run Code Online (Sandbox Code Playgroud)

-acodec aac -strict experimental与ffmpeg wiki上的HOWTO相反,我无法使它工作。

我收到的错误消息是:

Output #0, flv, to 'output.flv':
    Stream #0:0: Video: flv1 (flv), yuv420p, 1024x768, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.34.100 flv
    Stream #0:1: Audio: adpcm_swf, 0 channels
    Metadata:
      encoder         : Lavc56.34.100 adpcm_swf
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> flv1 (flv))
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> adpcm_swf (native))
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
Run Code Online (Sandbox Code Playgroud)

我不能使用以下方法来工作:

FFmpeg/ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -acodec copy output.mpeg
Run Code Online (Sandbox Code Playgroud)

其中-ac 2可能包含在正确的位置。我反复得到的错误是:

[mp2 @ 0x7faffc007da0] Header missing

这很可能是错误/回归。

综上所述,我(大概)在ffmpeg中发现了1个错误,在ffmpeg的wiki中发现了1个错误。看来我必须自己买定做的啤酒;)