ffmpeg记录在应用过滤器之前和之后

时间:2019-05-07 13:45:04

标签: video ffmpeg tee

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

  • 获取输入流[确定]
  • 按[TODO]保存视频到磁盘
  • 应用过滤器,即drawtext [确定]
  • 将覆盖的视频保存到磁盘[确定]
  • 预览叠加的视频[确定]

这是我当前的命令行:

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”和预览均无效。我当然忘记了语法。

1 个答案:

答案 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: