Hợp nhất hai nguồn âm thanh với x11grab, có thể?


11

Hiện tại tôi đang chạy với thiết lập sau.

ffmpeg \
 -i http://pub1.di.fm:80/di_vocaltrance \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 \
 -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 \
 -c:a libmp3lame -ab 96k -ar 22050 \
 -threads 0 \
 -f flv "rtmp://...."

Những gì tôi muốn nướng trong:

 -f alsa -ac 2 -i hw:0 -acodec pcm_s32le -aq 1 -ab 128k\

Điều này có thể không? Và thậm chí có thể trộn lẫn trong "những gì tôi nghe" (hay còn gọi là phát lại) để nói?

Tôi đã thử một cái gì đó dọc theo dòng (nhưng không hiểu đầy đủ -map)

 -i http://pub1.di.fm:80/di_vocaltrance -map 0:1 \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 -map 0:0 \

Nhưng điều đó không thực sự tốt như vậy.

Bây giờ tôi đang ở rất gần, điều này mang lại cho tôi các kênh âm thanh, nhưng mọi thứ nghe có vẻ như tôi đang ở trong một hộp thiếc nhỏ.

#!/bin/bash
KEY=`cat key.db`

ffmpeg \
 -i http://pub1.di.fm:80/di_vocaltrance \
 -f alsa -ac 2 -i hw:0 -acodec mp3 -aq 1 -ab 128k \
 -f x11grab -s 1920x1080 -r 25 -i :0.0 \
 -c:v libx264 -preset fast -pix_fmt yuv420p -s 1280x800 \
 -c:a mp3 -ab 96k -ar 22050 \
 -threads 0 \
 -map 0:0 -map 1:0 -map 2:0 \
 -f flv "rtmp://live.twitch.tv/app/$KEY"

Nó chỉ xuất hiện khi tôi trộn hai âm thanh với nhau. Cố gắng để có được JACK ở đây là tốt, nhưng không có bất kỳ kết quả thực tế nào (tôi nghĩ rằng tôi đã vượt qua tất cả mọi thứ thông qua một bảng trộn để dỡ ffmpeg khỏi sự pha trộn).

Chạy với:

 -f alsa -ac 2 -i jack \
 ....

Cung cấp điều này tuy nhiên:

[alsa @ 0x1399280] không thể đặt định dạng mẫu 0x10000 2 (Đối số không hợp lệ)

jack: Lỗi đầu vào / đầu ra


Chỉ là một gợi ý, nhưng Sox là một tiện ích cli được triển khai đơn giản được thiết kế cho loại điều này. đông lạnh dường như có một xử lý khá vững chắc trên nó mặc dù.
mikeerv

Câu trả lời:


2

Bạn sẽ có thể sử dụng bộ lọc amix để trộn lẫn âm thanh của mình.

Thí dụ:

ffmpeg \
  -i http://pub1.di.fm:80/di_vocaltrance \ # internet radio
  -f alsa    -i hw:0 \                     # microphone
  -f x11grab -i :0.0 \                     # computer desktop
  -f v4l2    -i /dev/video0 \              # webcam or
  # -f iec61883 -i auto \                  # firewire camcorder
  -filter_complex '[0:a:0][1:a:0]amix=inputs=2;[3:v:0]scale=200:-1[webcam],[2:v:0][webcam]overlay=main_w-overlay_w-10:main_h-overlay_h-10' \
  <output>

Tôi cũng đã thêm một lớp phủ webcam, để loại bỏ nó, tắt dòng webcam, dấu chấm phẩy và các định nghĩa sau dấu chấm phẩy.

Hãy lưu trữ rằng bạn có thể phải xác định -maps nếu bạn thêm bất kỳ đầu vào nào có nhiều luồng để loại bỏ các luồng không liên quan.

Giải trình:

-filter_complex
xác định bộ lọc có nhiều đầu vào hoặc đầu ra
[0:a:0]
Số luồng âm thanh đầu vào 0 0. (radio internet)
[1:a:0]
Luồng âm thanh đầu vào số 1 0. (micrô)
amix=inputs=2
Trộn hai luồng âm thanh với nhau, nếu không có luồng đầu vào nào được xác định, nó sẽ tự động chọn hai luồng, vì vậy trong trường hợp này , bạn sẽ có thể bỏ qua hai định nghĩa trên.
;
Bắt đầu một chuỗi bộ lọc mới
[3:v:0]
Nhập luồng video số 3 của số 0. (webcam)
scale=200:-1
Chia tỷ lệ video thành 200x ???, -1 giữ tỷ lệ khung hình, do đó, video 600x480 trở thành 200x160.
[webcam]
Gọi đầu ra được thu nhỏ "webcam".
,
Tiếp tục đến bộ lọc tiếp theo trong chuỗi này.
[2:v:0]
Số luồng video đầu vào của 2 số 0. (máy tính để bàn)
[webcam]
Các luồng webcam thu nhỏ.
overlay=main_w-overlay_w-10:main_h-overlay_h-10
Xếp chồng đầu vào thứ hai lên trên đầu vào thứ nhất, đặt đầu vào thứ hai 10 pixel từ phải và 10 pixel từ dưới lên.

Ngoài ra, bạn có thể đặt nguồn thu âm của card âm thanh để trộn những gì máy tính phát ra và bạn thường có thể bật micrô để lấy lại vòng lặp của màn hình micrô, nhưng để nó hoạt động bình thường, bạn phải sử dụng giắc cắm hoặc xung. Tôi không biết tại sao jack không làm việc cho bạn, vì vậy tôi không thể giúp bạn với điều đó, xin lỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.