使用 ffmpeg 从 EasyCAP STK1160 捕获和查看 PAL-B 原始视频和立体声 ALSA 声音并编码为 x264

使用 ffmpeg 从 EasyCAP STK1160 捕获和查看 PAL-B 原始视频和立体声 ALSA 声音并编码为 x264

我想将旧的 VHS 录像带数字化EasyCAP STK1160在linux下。复合视频输入为/dev/video1hw:2,0其USB ALSA复合双声道音频为 。

为了捕获原始格式的流,我使用:

ffmpeg -f alsa -ac 2 -i hw:2,0 -f rawvideo -r 25 -s 720x576 -i /dev/video1 -codec:a pcm_s16le -codec:v rawvideo -f rawvideo raw_streams.raw

为了通过两次传递将原始文件编码为 h264,我使用:

time ffmpeg -f rawvideo -codec:v rawvideo -s:v 720x576 -r 25 -pix_fmt yuyv422 -deinterlace -i raw_streams.raw -pass 1 -codec:v libx264 -codec:a libfdk_aac -b:a 128k -preset ultrafast -y -b:v 6100k -f mp4 /dev/null
time ffmpeg -f rawvideo -codec:v rawvideo -s:v 720x576 -r 25 -pix_fmt yuyv422 -deinterlace -i raw_streams.raw -pass 2 -codec:v libx264 -codec:a libfdk_aac -b:a 128k -preset ultrafast -y -b:v 6100k -f mp4 "final.mp4"

问题 1: 生成的编码 .mp4 具有良好的视频,但没有声音。如何将声道添加到原始文件,然后添加到 mp4?使用以下命令成功仅捕获声音表明线路中有声音。

ffmpeg -f alsa -i hw:2,0 output.wav

问题2: 如何指定 PAL-B 作为原始视频的视频捕获格式?man ffmpeg似乎没有关于此事的任何信息。

问题 3: 由于并非所有磁带都包含完整长度的录音,因此我还想在录制时查看直播,以便知道何时停止。我这样做:

mplayer -fps 25 tv:// -tv driver=v4l2:device=/dev/video1

我要么查看流,要么捕获。尝试同时执行这两项操作会产生以下错误:/dev/video1: Device or resource busy我如何才能同时执行这些操作?

答案1

#1您正在保存到原始视频流,因此不会保存音频。您需要保存到容器,例如 NUT:

ffmpeg -f rawvideo -framerate 25 -s 720x576 -i /dev/video1 -f alsa -ac 2 -i hw:2,0
       -c:a pcm_s16le -c:v rawvideo raw.nut

#2这需要在捕获设备的驱动程序/配置中进行设置。FFmpeg 正在接收由 USB 设备数字化的原始视频流。您需要具体设置哪个属性?所有 PAL 变体都共享帧大小和速率。

#3您可以使用 tee muxer 将捕获的内容传输到 ffplay

ffmpeg -f rawvideo -framerate 25 -s 720x576 -i /dev/video1 -f alsa -ac 2 -i hw:2,0
       -c:a pcm_s16le -c:v rawvideo -f tee "raw.nut|[f=nut]pipe:" | ffplay -f nut -

相关内容