应用过滤器前后的ffmpeg记录

ffmpeg record before and after applying filters

我正在尝试使用 ffmpeg 来做以下事情:

这是我当前的命令行:

ffmpeg -rtsp_transport tcp -i <path-to-stream> -vf "[in]drawtext=textfile='text.txt': reload=1: font=arial: fontcolor=red: fontsize=80: box=1: boxcolor=yellow@0.5: boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2[out]" -vcodec libx264 -f tee -map 0:v "[f=mp4]test.mp4|[f=nut]pipe:" | ffplay pipe:

我唯一不明白的是之前drawtext的视频录制。我想我必须创建另一个 tee:

INPUT ---> TEE ---->RECORD
                |
                |-->FILTERS---> TEE ---->RECORD
                                     |
                                     |-->PLAY

所以我尝试了这个繁琐的命令:

ffmpeg -rtsp_transport tcp -i <path-to-stream> -vcodec libx264 -f tee -map 0:v "[f=mp4]before.mp4|[f=nut]pipe:" | ffmpeg -f mp4 -i pipe: -vf "[in]drawtext=textfile='text.txt': reload=1: font=arial: fontcolor=red: fontsize=80: box=1: boxcolor=yellow@0.5: boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2[out]" -vcodec libx264 -f tee -map 0:v "[f=mp4]after.mp4|[f=nut]pipe:" | ffplay pipe:

它不会抛出错误,记录 "before.mp4" 但 "after.mp4" 和预览都不起作用。我当然忘记了语法中的某些内容。

两次映射视频并仅将过滤器应用于第一个输出流。

使用

ffmpeg -rtsp_transport tcp -i <path-to-stream> -map 0:v -map 0:v -filter:v:0 "drawtext=textfile='text.txt': reload=1: font=arial: fontcolor=red: fontsize=80: box=1: boxcolor=yellow@0.5: boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -f tee "[f=mp4:select=\'v:0\']withtext.mp4|[f=mp4:select=\'v:1\']notext.mp4|[f=nut:select=\'v:0\']pipe:" | ffplay pipe: