登录 立即注册

首页 > 绿虎论坛 > 电脑 > Linux/Unix > ARM (发帖)

【备份】ROC-RK3588S-PC开发板资料


『回复列表(63|隐藏机器人聊天)』

40.

@老虎会游泳,usb口啊
你的那个应该是用type-C口吧
一加8Pro

(/@Ta/2022-10-05 14:46//)

41.

需要一个双usb口的线来刷
一加8Pro

(/@Ta/2022-10-05 14:47//)

42.

@罐子,嗯我的是type-c。

(/@Ta/2022-10-05 15:19//)

43.

@ChatGPT,写一个ffmpeg命令,从/dev/video10和pulseaudio默认麦克风捕捉视频,并保存为mp4文件

(/@Ta/2023-04-07 15:39//)

44.

@老虎会游泳,以下是一个使用 ffmpeg 命令从 /dev/video10 和 PulseAudio 默认麦克风捕获视频并保存为 mp4 文件的示例:

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video10 -f pulse -i default -c:v libx264 -preset ultrafast -c:a aac output.mp4

该命令使用了以下参数:

  • -f v4l2:指定使用 Video4Linux2 视频输入。
  • -input_format mjpeg:指定输入视频的格式为 MJPEG。
  • -i /dev/video10:指定输入视频的设备路径为 /dev/video10
  • -f pulse:指定使用 PulseAudio 输入音频。
  • -i default:指定输入音频的默认设备。
  • -c:v libx264:指定使用 libx264 编码器进行视频编码。
  • -preset ultrafast:指定编码器的速度预设为 ultrafast,以保证高帧率和低延迟。
  • -c:a aac:指定使用 AAC 编码器进行音频编码。
  • output.mp4:指定输出文件的名称为 output.mp4

运行该命令后,将开始捕获视频和音频,并将其保存为 mp4 格式的文件。你可以在终端中使用 Ctrl+C 终止捕获和保存。

(/@Ta/2023-04-07 15:39//)

45.

@ChatGPT,列出视频设备支持的模式

(/@Ta/2023-04-07 15:47//)

46.

@老虎会游泳,在 Linux 中,可以使用 v4l2-ctl 命令列出视频设备支持的模式。v4l2-ctl 是一个命令行工具,用于控制 Video4Linux2 视频设备。

以下是列出视频设备支持的模式的步骤:

  1. 打开终端。

  2. 运行以下命令,以列出支持的视频设备列表:

    v4l2-ctl --list-devices
    

    该命令会输出系统中所有可用的视频设备列表。

  3. 选择你要查询的视频设备,并运行以下命令,以列出支持的模式:

    v4l2-ctl -d /dev/videoX --list-formats-ext
    

    其中 /dev/videoX 是你要查询的视频设备路径。该命令会输出设备支持的所有格式及其详细信息,包括分辨率、帧率、像素格式等。

    例如,以下是使用 v4l2-ctl 命令列出一个视频设备支持的模式的示例输出:

    ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : MJPEG
    
        Index       : 1
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUYV 4:2:2
    
        Index       : 2
        Type        : Video Capture
        Pixel Format: 'RGB3'
        Name        : RGB3
    
        Index       : 3
        Type        : Video Capture
        Pixel Format: 'BGR3'
        Name        : BGR3
    
        Index       : 4
        Type        : Video Capture
        Pixel Format: 'YU12'
        Name        : YU12
    
        Index       : 5
        Type        : Video Capture
        Pixel Format: 'NV12'
        Name        : NV12
            Size: Discrete 1920x1080
                    Interval: Discrete 0.033s (30.000 fps)
    
        Index       : 6
        Type        : Video Capture
        Pixel Format: 'NV21'
        Name        : NV21
            Size: Discrete 1920x1080
                    Interval: Discrete 0.033s (30.000 fps)
    
        Index       : 7
        Type        : Video Capture
        Pixel Format: 'GREY'
        Name        : Greyscale
            Size: Discrete 1920x1080
                    Interval: Discrete 0.033s (30.000 fps)
    

    该输出显示了一个名为 /dev/video0 的视频设备支持的所有格式及其详细信息。例如,该设备支持分辨率为 1920x1080、帧率为 30 fps 的 NV12 格式。

(/@Ta/2023-04-07 15:47//)

47.

@ChatGPT,写一个gst-launch-1.0命令,从/dev/video10和pulseaudio默认麦克风捕捉视频,并保存为mp4文件

(/@Ta/2023-04-07 15:47//)

48.

@老虎会游泳,ChatGPT接口报错(网络错误),请重试。

可发送“@ChatGPT,重试”来快速重试。

您也可以尝试@其他机器人,当前在线的机器人有:

(/@Ta/2023-04-07 15:48//)

49.

@ChatGPT,重试

(/@Ta/2023-04-07 15:57//)

50.

@老虎会游泳,以下是使用 gst-launch-1.0 命令从 /dev/video10 和 PulseAudio 默认麦克风捕获视频并保存为 mp4 文件的示例:

gst-launch-1.0 -v v4l2src device=/dev/video10 ! video/x-raw, width=640, height=480, framerate=30/1 ! tee name=t ! queue ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4 t. ! queue ! audioconvert ! audioresample ! pulsesrc device=alsa_input.pci-0000_00_1b.0.analog-stereo ! audio/x-raw, rate=44100, channels=2 ! voaacenc ! mp4mux ! filesink location=output.mp4

该命令使用了以下元素:

  • v4l2src:从 /dev/video10 设备中读取视频流。
  • tee:将视频流分成两个分支,一个用于视频编码,一个用于输出。
  • queue:队列元素用于平衡流水线中不同元素之间的速度差异。
  • videoconvert:将视频流从摄像头格式转换为编码器所需的格式。
  • x264enc:使用 H.264 编码器对视频进行编码。
  • audioconvert:将音频流从麦克风格式转换为编码器所需的格式。
  • audioresample:重新采样音频流以匹配编码器的要求。
  • pulsesrc:从 PulseAudio 默认麦克风中读取音频流。
  • voaacenc:使用 AAC 编码器对音频进行编码。
  • mp4mux:将视频和音频流组合为一个 MP4 文件。
  • filesink:将输出写入到 output.mp4 文件中。

该命令捕获视频和音频,将它们编码为 H.264 和 AAC 格式,将它们混合在一起,并将它们保存到 output.mp4 文件中。你可以在终端中使用 Ctrl+C 终止捕获和保存。

(/@Ta/2023-04-07 15:57//)

51.

@ChatGPT,你给的命令不能运行:
错误管道: 无法将 queue1 链接到 audioconvert0

(/@Ta/2023-04-07 16:23//)

52.

@老虎会游泳,非常抱歉,我的之前的回答可能有误。在 gst-launch-1.0 命令中,确实存在一个链接错误。

以下是一个可以工作的示例命令,它使用 v4l2src 元素从 /dev/video10 捕获视频,使用 pulsesrc 元素从默认的 PulseAudio 麦克风捕获音频,并使用 tee 元素将音视频流分别送入编码和保存的管道中:

gst-launch-1.0 -e -v \
v4l2src device=/dev/video10 ! \
video/x-raw,width=640,height=480,framerate=30/1 ! \
tee name=t_vid ! \
queue ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4 \
t_vid. ! queue ! videoconvert ! autovideosink sync=false \
pulsesrc device=alsa_input.pci-0000_00_1b.0.analog-stereo ! \
audio/x-raw,rate=44100,channels=2 ! \
tee name=t_aud ! \
queue ! audioconvert ! voaacenc ! mp4mux ! filesink location=output.mp4 \
t_aud. ! queue ! audioconvert ! autoaudiosink sync=false

这个命令具体使用了以下元素:

  • v4l2src:从 /dev/video10 设备中读取视频流。
  • video/x-raw, width=640, height=480, framerate=30/1:指定视频流的格式和帧率。
  • tee name=t_vid:将视频流分成两个分支,一个用于编码,一个用于显示。
  • queue:在管道中添加一个队列元素,以便在多个元素之间平衡速度差异。
  • videoconvert:将视频流从摄像头格式转换为编码器所需的格式。
  • x264enc:使用 H.264 编码器对视频进行编码。
  • mp4mux:将视频和音频流组合为一个 MP4 文件。
  • filesink:将输出写入到 output.mp4 文件中。
  • autovideosink:自动选择合适的视频输出插件,实现视频显示。
  • pulsesrc:从 PulseAudio 默认麦克风中读取音频流。
  • audio/x-raw, rate=44100, channels=2:指定音频流的格式。
  • tee name=t_aud:将音频流分成两个分支,一个用于编码,一个用于输出。
  • audioconvert:将音频流从麦克风格式转换为编码器所需的格式。
  • voaacenc:使用 AAC 编码器对音频进行编码。
  • autoaudiosink:自动选择合适的音频输出插件,实现音频输出。

这个命令会同时显示摄像头的视频并将其保存为 mp4 文件。当你按下 Ctrl+C 键时,命令会停止并退出。

(/@Ta/2023-04-07 16:23//)

53.

gstreamer通过摄像头录像,通过麦克风录音,使用RKMPP硬件加速视频编码,同时打开一个预览窗口

# 安装依赖包
sudo apt install --no-install-recommends --no-install-suggests gstreamer1.0-plugins-bad

export GST_DEBUG=2

VIDEO_DEVICE="/dev/video0"
VIDEO_WIDTH="640"
VIDEO_HEIGHT="480"
VIDEO_FPS="30"

# 视频编码:h264 或 h265
VIDEO_CODEC="h264"

AUDIO_DEVICE="$(pactl get-default-source)"
AUDIO_SAMPLE_RATE="44100"
AUDIO_CHANNEL="2"

# 输出格式:matroska (mkv), mpegts 或 mp4
# 建议使用 matroska 或 mpegts,因为 mp4 未正常结束录制会无法观看
OUTPUT_FORMAT="matroska"
OUTPUT_FILE="./output.mkv"

echo "-------------------------------------"
echo "Video: $VIDEO_DEVICE (resolution: ${VIDEO_WIDTH}x${VIDEO_HEIGHT}, fps: $VIDEO_FPS, codec: $VIDEO_CODEC)"
echo "Audio: $AUDIO_DEVICE (sample rate: $AUDIO_SAMPLE_RATE, channel: $AUDIO_CHANNEL)"
echo "Output: $OUTPUT_FILE (format: $OUTPUT_FORMAT)"
echo "-------------------------------------"

gst-launch-1.0 -e \
    v4l2src device="$VIDEO_DEVICE" \
        ! video/x-raw,width="$VIDEO_WIDTH",height="$VIDEO_HEIGHT",framerate="$VIDEO_FPS"/1 \
        ! tee name=preview \
        ! queue \
        ! videoconvert \
        ! mpp"$VIDEO_CODEC"enc \
        ! "$VIDEO_CODEC"parse \
        ! mx. \
    preview. \
        ! queue \
        ! videoconvert \
        ! autovideosink sync=false \
    pulsesrc device="$AUDIO_DEVICE" \
        ! audio/x-raw,rate="$AUDIO_SAMPLE_RATE",channels="$AUDIO_CHANNEL" \
        ! queue \
        ! audioconvert \
        ! voaacenc \
        ! mx. \
    "$OUTPUT_FORMAT"mux name=mx \
        ! filesink location="$OUTPUT_FILE"
(/@Ta/2023-05-08 11:01//)

54.

@ChatGPT,列出默认pulseaudio source device name

(/@Ta/2023-04-07 17:05//)

55.

@老虎会游泳,你可以使用 pacmd 命令列出默认的 PulseAudio 输入设备名称。PulseAudio 是一种音频服务器,它可以让你在 Linux 系统中轻松管理音频输入和输出设备。

以下是列出默认的 PulseAudio 输入设备名称的步骤:

  1. 打开终端。

  2. 运行以下命令,以打开 PulseAudio 控制台:

    pacmd
    
  3. 运行以下命令,以列出所有可用的 PulseAudio 输入设备及其属性:

    list-sources
    

    该命令会输出所有可用的输入设备列表,包括默认的输入设备。

  4. 在输出中查找名称为 alsa_input.XXX 的设备,其中 XXX 是设备的标识符。默认输入设备的名称通常是 alsa_input.XXX.analog-stereo 或类似的形式。

例如,以下是使用 pacmd 命令列出默认 PulseAudio 输入设备名称的示例输出:

1 source(s) available.
    index: 0
    name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
    driver: <module-alsa-card.c>
    flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
    state: SUSPENDED
    suspend cause: IDLE
    priority: 9049
    volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
            balance 0.00
    base volume: 65536 / 100% / 0.00 dB
    volume steps: 65537
    muted: no
    current latency: 0.00 ms
    max request: 344 KiB
    max rewind: 344 KiB
    monitor source: 0
    sample spec: s16le 2ch 44100Hz
    channel map: front-left,front-right
                 Stereo
    used by: 0
    linked by: 0
    configured latency: 0.00 ms; range is 0.50 .. 371.52 ms
    card: 0 <alsa_card.pci-0000_00_1b.0>
    module: 6
    properties:
        alsa.resolution_bits = "16"
        device.api = "alsa"
        device.class = "sound"
        alsa.class = "generic"
        alsa.subclass = "generic-mix"
        alsa.name = "STAC9200 Analog"
        alsa.id = "STAC9200 Analog"
        alsa.subdevice = "0"
        alsa.subdevice_name = "subdevice #0"
        alsa.device = "0"
        alsa.card = "0"
        alsa.card_name = "HDA Intel"
        alsa.long_card_name = "HDA Intel at 0xf2000000 irq 45"
        alsa.driver_name = "snd_hda_intel"
        device.bus_path = "pci-0000:00:1b.0"
        sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card0/input0"
        device.bus = "pci"
        device.vendor.id = "808
(/@Ta/2023-04-07 17:06//)

56.

@ChatGPT,把这个gstreamer命令翻译成C++代码

# 安装依赖包
sudo apt install --no-install-recommends --no-install-suggests gstreamer1.0-plugins-bad

export GST_DEBUG=2

VIDEO_DEVICE="/dev/video0"
VIDEO_WIDTH="640"
VIDEO_HEIGHT="480"
VIDEO_FPS="30"

# 视频编码:h264 或 h265
VIDEO_CODEC="h264"

AUDIO_DEVICE="$(pactl get-default-source)"
AUDIO_SAMPLE_RATE="44100"
AUDIO_CHANNEL="2"

# 输出格式:matroska (mkv), mpegts 或 mp4
# 建议使用 matroska 或 mpegts,因为 mp4 未正常结束录制会无法观看
OUTPUT_FORMAT="matroska"
OUTPUT_FILE="./output.mkv"

echo "-------------------------------------"
echo "Video: $VIDEO_DEVICE (resolution: ${VIDEO_WIDTH}x${VIDEO_HEIGHT}, fps: $VIDEO_FPS, codec: $VIDEO_CODEC)"
echo "Audio: $AUDIO_DEVICE (sample rate: $AUDIO_SAMPLE_RATE, channel: $AUDIO_CHANNEL)"
echo "Output: $OUTPUT_FILE (format: $OUTPUT_FORMAT)"
echo "-------------------------------------"

gst-launch-1.0 -e \
    v4l2src device="$VIDEO_DEVICE" \
        ! video/x-raw,width="$VIDEO_WIDTH",height="$VIDEO_HEIGHT",framerate="$VIDEO_FPS"/1 \
        ! tee name=preview \
        ! queue \
        ! videoconvert \
        ! mpp"$VIDEO_CODEC"enc \
        ! "$VIDEO_CODEC"parse \
        ! mx. \
    preview. \
        ! queue \
        ! videoconvert \
        ! autovideosink sync=false \
    pulsesrc device="$AUDIO_DEVICE" \
        ! audio/x-raw,rate="$AUDIO_SAMPLE_RATE",channels="$AUDIO_CHANNEL" \
        ! queue \
        ! audioconvert \
        ! voaacenc \
        ! mx. \
    "$OUTPUT_FORMAT"mux name=mx \
        ! filesink location="$OUTPUT_FILE"
(/@Ta/2023-05-08 12:04//)

57.

@老虎会游泳,以下是将给定的GStreamer命令翻译为C++代码的实现示例。需要使用GStreamer C++库来实现以下代码:

#include <gst/gst.h>

int main(int argc, char *argv[]) {
    GstElement *pipeline, *v4l2src, *tee, *preview_queue, *preview_videoconvert, *mpp_video_encoder,
               *video_parser, *preview_videosink, *pulsesrc, *audio_queue, *audioconvert, *voaacenc,
               *audio_mixer, *muxer, *file_sink;
    GstCaps *video_caps, *audio_caps;
    GstBus *bus;
    GstMessage *msg;
    GMainLoop *loop;

    // Initialize GStreamer
    gst_init(&argc, &argv);
    loop = g_main_loop_new(NULL, FALSE);

    // Create elements
    pipeline = gst_pipeline_new("video-audio-record-pipeline");
    v4l2src = gst_element_factory_make("v4l2src", "video-source");
    tee = gst_element_factory_make("tee", "preview-and-encode-tee");
    preview_queue = gst_element_factory_make("queue", "preview-queue");
    preview_videoconvert = gst_element_factory_make("videoconvert", "preview-videoconvert");
    mpp_video_encoder = gst_element_factory_make("mpph264enc", "video-encoder");
    video_parser = gst_element_factory_make("h264parse", "video-parser");
    preview_videosink = gst_element_factory_make("autovideosink", "preview-videosink");
    pulsesrc = gst_element_factory_make("pulsesrc", "audio-source");
    audio_queue = gst_element_factory_make("queue", "audio-queue");
    audioconvert = gst_element_factory_make("audioconvert", "audio-convert");
    voaacenc = gst_element_factory_make("voaacenc", "audio-encoder");
    audio_mixer = gst_element_factory_make("audiomixer", "audio-mixer");
    muxer = gst_element_factory_make("matroskamux", "muxer");
    file_sink = gst_element_factory_make("filesink", "file-sink");

    // Set element properties
    g_object_set(G_OBJECT(v4l2src), "device", "/dev/video0", NULL);
    g_object_set(G_OBJECT(mpp_video_encoder), "bitrate", 8000000, NULL);
    g_object_set(G_OBJECT(v4l2src), "num-buffers", 1000, NULL);
    g_object_set(G_OBJECT(pulsesrc), "device", "alsa_input.pci-0000_00_1f.3.analog-stereo", NULL);
    g_object_set(G_OBJECT(voaacenc), "bitrate", 128000, NULL);
    g_object_set(G_OBJECT(muxer), "streamable", TRUE, NULL);
    g_object_set(G_OBJECT(file_sink), "location", "./output.mkv", NULL);

    // Create caps
    video_caps = gst_caps_new_simple("video/x-raw",
                                     "width", G_TYPE_INT, 640,
                                     "height", G_TYPE_INT, 480,
                                     "framerate", GST_TYPE_FRACTION, 30, 1,
                                     NULL);
    audio_caps = gst_caps_new_simple("audio/x-raw",
                                     "rate", G_TYPE_INT, 44100,
                                     "channels", G_TYPE_INT, 2,
                                     NULL);

    // Add elements to pipeline
    gst_bin_add_many(GST_BIN(pipeline), v4l2src, tee, preview_queue, preview_videoconvert,
                     mpp_video_encoder
(/@Ta/2023-05-08 12:04//)

58.

@ChatGPT,继续

(/@Ta/2023-05-08 12:06//)

59.

@老虎会游泳

                 , video_parser, preview_videosink, pulsesrc, audio_queue, audioconvert, voaacenc,
                 audio_mixer, muxer, file_sink, NULL);

// Link elements
gst_element_link_many(v4l2src, tee, NULL);
gst_element_link_many(preview_queue, preview_videoconvert, preview_videosink, NULL);
gst_element_link_many(pulsesrc, audio_queue, audioconvert, voaacenc, audio_mixer, NULL);
gst_element_link_many(mpp_video_encoder, video_parser, muxer, NULL);
gst_element_link_many(audio_mixer, muxer, NULL);
gst_element_link_many(muxer, file_sink, NULL);

// Link preview branch
GstPadTemplate *tee_src_pad_template;
GstPad *tee_preview_pad, *preview_videoconvert_sink_pad;
tee_src_pad_template = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(tee), "src_%u");
tee_preview_pad = gst_element_request_pad(tee, tee_src_pad_template, NULL, NULL);
preview_videoconvert_sink_pad = gst_element_get_static_pad(preview_videoconvert, "sink");
gst_element_link(tee_preview_pad, preview_queue);
gst_element_link(preview_queue, preview_videoconvert);
gst_element_link(preview_videoconvert, preview_videosink);
gst_object_unref(preview_videoconvert_sink_pad);

// Link audio branch
GstPad *tee_audio_pad, *audio_mixer_sink_pad;
tee_audio_pad = gst_element_request_pad(tee, tee_src_pad_template, NULL, NULL);
audio_mixer_sink_pad = gst_element_get_static_pad(audio_mixer, "sink_0");
gst_element_link(tee_audio_pad, pulsesrc);
gst_element_link(pulsesrc, audio_queue);
gst_element_link(audio_queue, audioconvert);
gst_element_link(audioconvert, voaacenc);
gst_element_link(voaacenc, audio_mixer);
gst_element_link(audio_mixer, muxer);
gst_object_unref(audio_mixer_sink_pad);

// Start pipeline
gst_element_set_state(pipeline, GST_STATE_PLAYING);

// Wait until error or EOS
bus = gst_element_get_bus(pipeline);
msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
if (msg != NULL) {
    gst_message_unref(msg);
}
gst_object_unref(bus);

// Stop pipeline
gst_element_set_state(pipeline, GST_STATE_NULL);

// Free resources
gst_object_unref(GST_OBJECT(pipeline));
gst_caps_unref(video_caps);
gst_caps_unref(audio_caps);
g_main_loop_unref(loop);

return 0;
}

上述代码基于GStreamer C++库,使用C++编写了与给定的GStreamer命令相同的功能,可以实现视频和音频的录制和编码,并将其保存到Matroska格式的输出文件中。

(/@Ta/2023-05-08 12:10//)

下一页 上一页 3/4页,共63楼

回复需要登录

11月24日 19:34 星期天

本站由hu60wap6华为CPU驱动

备案号: 京ICP备18041936号-1