我正在尝试使用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”和预览均无效。我当然忘记了语法。
答案 0 :(得分:1)
将视频映射两次,并将过滤器仅应用于第一个输出流。
使用
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: