代码之家  ›  专栏  ›  技术社区  ›  elbarna

usb v4l2卡的ffmpeg捕获

  •  0
  • elbarna  · 技术社区  · 4 年前

    我有一张Grabby Terratec USB卡。

    Bus 001 Device 006: ID 0ccd:10af TerraTec Electronic GmbH Terratec G1
    

    使用mencoder,我使用这样的脚本捕获了精美的视频和音频

    #!/bin/sh
    #script for capture
    #settings for pal 25 fps 720:576 normid=5
    #settings for ntsc 30000/1001 fps normid 0 720:480
    #settings for INPUT,0=composite,1=s-video,but depend on card
    
    TITLE="MYMOVIE"
    CROP="612:467:16:1"
    SCALE="560:432"
    DEVVID=0
    INPUT=1
    ADEVICE=hw.2,0
    NORMID=5
    WIDTH=640
    HEIGHT=480
    FPS=25
    AUDIORATE=48000
    ASPECT=4/3
    VFS="yadif,crop=$CROP,scale=$SCALE,harddup"
    
    mencoder tv:// -tv driver=v4l2:normid=$NORMID:width=$WIDTH:height=$HEIGHT:device=/dev/video$DEVVID:input=$INPUT:fps=$FPS:alsa:adevice=$ADEVICE:audiorate=${AUDIORATE}:amode=1:forceaudio:immediatemode=0 -of mpeg -mpegopts format=dvd -oac lavc -ovc lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=8000:vbitrate=6000:keyint=15:acodec=ac3:abitrate=320 -aspect $ASPECT -vf $VFS -o "$TITLE".mpg
    

    脚本捕获音频,因为存在此行

    :amode=1:forceaudio:immediatemode=0
    

    现在的问题是,我想使用带有libx265和aac的ffmpeg进行捕获

    #!/bin/sh
    SCALE=528:400
    CROP=616:471:14:0
    ASPECT=4:3
    TITLE="MYTITLE"
    
    #usbstream:CARD=Generic
    #    HD-Audio Generic
    #    USB Stream Output
    #sysdefault:CARD=G1
    #    Terratec G1, USB Audio
    #    Default Audio Device
    #front:CARD=G1,DEV=0
    #    Terratec G1, USB Audio
    #    Front output / input
    #usbstream:CARD=G1
    #    Terratec G1
    #    USB Stream Output
    
    ffmpeg -y -f video4linux2 -i /dev/video0  -thread_queue_size 512 -f alsa -i hw:CARD=G1 -ac 2 -vf yadif,crop=$CROP,scale=$SCALE -c:v libx265 -c:a aac -b:v 1200k -b:a 320k -metadata language=eng -metadata title="Mymovie" -aspect $ASPECT "$TITLE".mkv
    

    问题是..视频被捕获,但没有音频,我试过这条线

     -f alsa -i hw:CARD=G1
    

     -f alsa -i hw:CARD=G1,DEV=0
    

     -f alsa -i hw:2,0
    

    但不可能。ffmpeg上不存在选项“:amode=1:forceaudio:immediatemode=0”。 有什么建议吗?谢谢

    0 回复  |  直到 4 年前
        1
  •  0
  •   elbarna    4 年前

    已找到解决方案,在运行脚本之前,必须使用此命令将捕获卡“取消静音”

    v4l2-ctl --set-ctrl mute=0
    

    我还将hw:2用于音频设备,并为alsa设置队列大小,完整的脚本现在如下

     #!/bin/sh
    SCALE=528:400
    CROP=616:471:14:0
    ASPECT=4:3
    TITLE="MYMOVIE"
    
    ffmpeg -y -f video4linux2 -i /dev/video0 -thread_queue_size 2048 -f alsa -i hw:2 -ac 2 -vf yadif,crop=$CROP,scale=$SCALE -c:v libx265 -c:a aac -b:v 1200k -b:a 320k -metadata language=eng -metadata title="My movie" -aspect $ASPECT "$TITLE".mkv
    
    推荐文章