Ghi từ hai thiết bị và không ghi từ thiết bị phần cứng, ffmpeg


0

Tôi nhận ra rằng việc hỏi hai câu hỏi cùng một lúc có khả năng vi phạm giao thức bình thường, nhưng vì tôi nghĩ có lẽ hai vấn đề của tôi có liên quan với nhau (và tôi chỉ thực sự cần sửa câu hỏi thứ nhất nếu câu hỏi thứ hai không liên quan), có vẻ như đó là vấn đề duy nhất cách hợp lý về phía trước để mô tả cả hai cùng một lúc.

Những gì tôi thực sự muốn đạt được là lấy hai thiết bị đầu vào âm thanh USB riêng biệt và ghi lại từ cả hai đồng thời (được đồng bộ hóa, vì vậy các tệp riêng biệt thực sự không phải là một lựa chọn khả thi).

Một vấn đề là tôi không chắc làm thế nào tôi có thể bày tỏ yêu cầu này với ffmpeg, các tài liệu rất lớn và rất khó để người mới bắt đầu biết phải bắt đầu tìm ở đâu. Theo một cách nào đó, đó có lẽ là vì tôi không biết tên khái niệm là gì, vì vậy các mục chỉ mục không gọi cho tôi.

Một vấn đề khác là để đạt được điều này, tôi khá chắc chắn rằng tôi cần tham khảo trực tiếp các thiết bị phần cứng (vì -f alsa -i pulsetôi có thể tin rằng, chỉ tham khảo thiết bị xung "hiện được chọn"). Bây giờ, nếu tôi cố gắng ghi lại từ một thiết bị duy nhất, một trong số chúng hoạt động tốt nếu tôi gọi nó bằng tên hw:2. Một cái khác, hiện đang hw:3có xu hướng gây khó chịu khi báo cáo bận, nhưng nếu tôi vượt qua điều đó, tôi luôn gặp lỗi: cannot set sample format 0x10000 2 (Invalid argument) hw:3: Input/output errorTuy nhiên, nếu tôi cố gắng ghi lại từ đó thông qua xung (đó là thay đổi duy nhất; hãy chọn nó làm đầu vào mặc định, và đề cập đến nó như -i pulse, thay vì -i hw:3sau đó nó hoạt động (vẫn đơn lẻ, rõ ràng) chỉ tốt.

Bất kỳ con trỏ? Tôi đang thử điều gì đó không thể? Phần nào của tài liệu ffmpeg tôi nên đề cập đến?

EDIT: Khi tìm kiếm của tôi tiếp tục, tôi tự hỏi liệu đây có phải là thứ mà tôi phải hiểu "bộ lọc phức tạp" hay có thể là thứ mà hệ thống "jack" có thể xử lý. Tôi chưa thành công trong việc thực sự hiểu, nhưng họ có vẻ như là ứng cử viên có thể?

EDIT (thêm thông tin):

Đây là một lựa chọn các lệnh và đầu ra mà tôi đã cố gắng sử dụng, với các dòng chú thích, như thường lệ [...]cho thấy tôi đã bỏ qua những thứ không hữu ích trong việc giúp hiểu:

toby@LinuxStudio:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
[...]
card 1: PCH [HDA Intel PCH], device 0: 92HD99BXX Analog [92HD99BXX Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: U192k [UMC404HD 192k], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

toby@LinuxStudio:~$ ffmpeg -f alsa -i hw:3 -sample_rate 48000 -channels 4 -channel_layout quad test.wav
[...]
[alsa @ 0x563b07aa6960] cannot set sample format 0x10000 2 (Invalid argument)
hw:3: Input/output error

toby@LinuxStudio:~$ ffmpeg -f alsa -i hw:2 -sample_rate 48000 -channels 2 -channel_layout quad test.wav
[...]
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, quad, s16, 3072 kb/s
[...]
Exiting normally, received signal 2.

toby@LinuxStudio:~$ ffmpeg -f alsa -i pulse -sample_rate 48000 -channels 4 -channel_layout quad test.wav
[...]
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, quad, s16, 3072 kb/s
Exiting normally, received signal 2.

toby@LinuxStudio:~$ ffmpeg -f alsa -i pulse -sample_rate 48000 -channels 4 -i hw:2 -sample_rate 48000 -channels 2 -channel_layout hexagonal test.wav
[...]
hw:2: Protocol not found
Did you mean file:hw:2?

Vì vậy, đặc biệt lưu ý rằng lệnh có hw:2hoạt động cho hai kênh, lệnh hw:3không thành công với "Đối số không hợp lệ", lệnh tương đương hoạt động khi tham chiếu pulsethay vì hw:3(và với thiết bị mặc định xung được đặt thành hw:3sử dụng pavucontrolđể chúng phải là cùng mục tiêu).

Ngoài ra, dự đoán tốt nhất của tôi về một định dạng để lấy từ hai đầu vào rõ ràng là một lỗi cú pháp, nhưng tôi đoán, vì vậy đó không phải là một bất ngờ!

Cuối cùng, tôi thấy rằng khoảng chín lần mười, nếu tôi cố gắng sử dụng hwđịnh dạng để truy cập thiết bị bốn kênh, ffmpeg từ chối nỗ lực với cannot open audio device hw:2 (Device or resource busy) hw:2: Input/output errorĐiều đó luôn xảy ra tôi sử dụng pavucontrolđể chọn thiết bị làm mặc định, nhưng không biến mất nếu tôi bỏ chọn nó và thường xảy ra ngay cả khi thiết bị không bao giờ được mặc định.


1
Lệnh đầy đủ mà bạn đang cố gắng là gì?
Gyan

Chỉnh sửa để cố gắng trở nên hữu ích hơn. Lưu ý rằng tôi hoàn toàn đoán được đầu vào nhiều thẻ; Tôi không biết phải bắt đầu từ đâu và nỗ lực của tôi khá ngẫu nhiên :(
Toby Eggitt

Tôi sẽ nói thêm rằng tôi nghĩ thế này: trac.ffmpeg.org/wiki/AudioChannelManipulation đang cố nói với tôi điều gì đó (có nhiều tệp nhập vào ví dụ định dạng 5.1), nhưng tôi không tìm thấy tài liệu về cách sử dụng filter_complex và đang hy vọng (một cách phi thực tế!) rằng ffmpeg có thể có một mặc định hoàn toàn khả thi!
Toby Eggitt

1
Hai thiết bị phần cứng sẽ có đồng hồ hơi khác nhau, vì vậy nếu bạn muốn làm điều này trong bất kỳ khoảng thời gian dài nào, bạn cần phải lấy mẫu lại để giữ cho nó được đồng bộ hóa.
dirkt

1
Dù sao đi nữa, đó là thứ để kiểm tra bản ghi của bạn - nếu chúng vẫn đồng bộ ở cuối, tốt thôi. Nếu không, bạn cần phải tìm ra một cái gì đó - ví dụ: nếu bạn không làm cho nó hoạt động tự động, bạn vẫn có thể làm nó bằng tay.
dirkt

Câu trả lời:


2

Tôi khuyên bạn nên đặt hw: 3 làm thiết bị mặc định và sau đó thử các cách sau,

ffmpeg -f alsa -sample_rate 48000 -channels 4 -i pulse -f alsa -sample_rate 48000 -channels 2 -i hw:2 -filter_complex amerge test.wav

Điều này có vẻ như có thể hoạt động ... Không thể kiểm tra đúng cách ngay bây giờ, nhưng sẽ làm như vậy trong vài giờ tới. Cảm ơn nhiều!
Toby Eggitt

Vâng, rất biết ơn bạn có thể chỉ cho tôi phiên bản đơn giản của bộ lọc_complex! Tôi đã thực sự hy vọng nó sẽ có một chế độ dễ dàng, nhưng không thể có cơ sở đầu tiên tìm thấy nó.
Toby Eggitt
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.