用于 usb v4l2 卡的 ffmpeg 捕获
ffmpeg capture for usb v4l2 card
我有一张 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
现在的问题是,我想使用 ffmpeg 与 libx265 和 aac 进行捕获
#!/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”。
有什么建议吗?谢谢
已找到解决方案,在 运行 脚本之前,捕获卡必须使用此命令“取消静音”
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
我有一张 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
现在的问题是,我想使用 ffmpeg 与 libx265 和 aac 进行捕获
#!/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”。 有什么建议吗?谢谢
已找到解决方案,在 运行 脚本之前,捕获卡必须使用此命令“取消静音”
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