บันทึกเฉพาะเสียงเดสก์ท็อปด้วย ffmpeg


13

ฉันต้องการที่จะรู้ว่าฉันจะจับเสียงบนเดสก์ท็อปได้อย่างไร (หมายถึงไม่มีไมโครโฟน!)

ฉันใช้คำสั่งนี้:

$ ffmpeg -f x11grab -s 1360x768 -r 30 -i :0.0 -preset ultrafast ~/Videos/out.mp4
ffmpeg version 2.4.3-1ubuntu1~trusty6 Copyright (c) 2000-2014 the FFmpeg developers
  built on Nov 22 2014 17:07:19 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --prefix=/usr --extra-version='1ubuntu1~trusty6' --build-suffix=-ffmpeg --toolchain=hardened --extra-cflags= --extra-cxxflags= --libdir=/usr/lib/x86_64-linux-gnu --shlibdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --enable-avresample --enable-avisynth --enable-fontconfig --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-opengl --enable-x11grab --enable-libxvid --enable-libx265 --enable-libdc1394 --enable-libiec61883 --enable-libzvbi --enable-libzmq --enable-frei0r --enable-libx264 --enable-libsoxr --enable-openal --enable-libopencv
  libavutil      54.  7.100 / 54.  7.100
  libavcodec     56.  1.100 / 56.  1.100
  libavformat    56.  4.101 / 56.  4.101
  libavdevice    56.  0.100 / 56.  0.100
  libavfilter     5.  1.100 /  5.  1.100
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  0.100 /  3.  0.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  0.100 / 53.  0.100
[x11grab @ 0x16051e0] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 1360 height: 768
[x11grab @ 0x16051e0] shared memory extension found
Input #0, x11grab, from ':0.0':
  Duration: N/A, start: 1444234613.435347, bitrate: 1002700 kb/s
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1360x768, 1002700 kb/s, 30 tbr, 1000k tbn, 30 tbc
File '/home/elderzz/Videos/out.mp4' already exists. Overwrite ? [y/N] ^A

ฉันสามารถจับไมค์ด้วยแอปอื่น แต่ฉันต้องการให้เสียงไมโครโฟนเป็นไฟล์อื่น ฉันต้องการจับเสียงบนเดสก์ท็อปเท่านั้น!


@LordNeckbeard ฉันวางเอาต์พุตคอนโซลบน pastebin: pastebin.com/9GSZ1eTr
Elderzz

คำตอบ:


12

pavucontrol

ป้อนคำอธิบายรูปภาพที่นี่

  1. pavucontrolติดตั้ง
  2. เริ่มการบันทึกด้วยffmpeg(ดูคำสั่งตัวอย่างด้านล่าง)
  3. pavucontrolเริ่มต้น
  4. ไปที่แท็บการบันทึกแล้วคุณจะพบffmpegหรือLavf56.15.102(หรือที่คล้ายกัน) อยู่ในรายการ
  5. เปลี่ยนการจับภาพเสียงจากภายในเครื่องเสียงสเตอริโออนาล็อกเพื่อการตรวจสอบภายในเสียงสเตอริโออนาล็อก

ตอนนี้ควรบันทึกระบบและแอปพลิเคชันเสียงแทนไมโครโฟน

การตั้งค่านี้จะถูกจดจำ ในครั้งต่อไปที่คุณต้องการจับภาพffmpegมันจะเริ่มบันทึกเสียงของระบบโดยอัตโนมัติ หากคุณต้องการย้อนกลับให้ใช้pavucontrolอีกครั้งเพื่อเปลี่ยนกลับเป็นอินพุตไมโครโฟน

ข้อความข้างต้นถูกดัดแปลงมาจากHOWTO: screencasting บน Linux

ตัวอย่างคำสั่ง ffmpeg

เสียงเท่านั้น

ffmpeg -f pulse -i default output.wav

ด้วยการจับภาพหน้าจอ

ffmpeg -f x11grab -video_size 1360x768 -framerate 30 -i :0.0 -f pulse -i default -preset ultrafast -crf 18 -pix_fmt yuv420p out.mkv

การบันทึกนี้จะไม่สูญหายหรือไม่?
Anmol Singh Jaggi

@AnmolSinghJaggi No. -crf 18เป็นความสูญเสียและยังมีการสูญเสียเนื่องจากการแปลงสี RGB เป็น YUV 4: 2: 0
llogan

ไม่ฉันพูดถึงส่วนของเสียงเท่านั้น
Anmol Singh Jaggi

1
@AnmolSinghJaggi ใช่เสียงควรจะไม่สูญเสีย
llogan

2
หากคุณไม่ต้องการสลับแหล่งที่มาด้วยตนเองคุณสามารถใช้คำสั่งpactl list sorucesเพื่อหาชื่อภายในของแหล่งที่มาของจอภาพแล้วใช้-f pulse -i NAMEแทนdefaultเช่น-f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitorชื่อที่แน่นอนจะแตกต่างกันไปตามระบบ
regnarg

1

คุณยังสามารถบันทึกเป็น MP3 ที่ถูกบีบอัด (ด้วยอัตราบิตที่คุณเลือก) เช่น:

ffmpeg -f alsa -ac 2 -i default -acodec libmp3lame -ab 320k ouput.mp3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.