how to playback Zoom webinar with text chat on screen?
March 18, 2022 10:39 AM   Subscribe

I help to create Zoom webinars which consist of presenters answering questions raised in the live text chat. We want to play back the video file along with the chat. Is there any solution for this?

If you haven't seen a webinar organised like this, it's like a YouTube live stream with a video feed and the audience commenting in text chat at the side - but in Zoom.

We have a video file of each webinar and also a text file which contains each timestamped chat from the participants:
00:04:23 Annabell Xiong: Good morning!
00:05:42 Ameer Valenzuela: Question for either of the presenters; why is the sky blue?
00:06:22 Ameer Valenzuela: Thanks for the answer!
00:06:53 Mina Bright: I have a question about mushrooms....

We want to combine the video and text so that people who didn't attend the webinar can see the text questions as well as hearing the answers.

My sense is that there must be other Zoom users with our requirements, but I haven't been able to find any discussion of this; perhaps there's a key term I'm missing. It doesn't seem like something technically difficult either, not being very different from playing a .srt or .vtt subtitle file. I suspect the solution may involve a very complicated combination of ffmpeg options but I'm hoping there will be a simpler way to achieve it.

Or maybe we should be doing something different within Zoom when we record the webinars?
posted by Busy Old Fool to Computers & Internet (6 answers total) 2 users marked this as a favorite
You want the chat hard-subtitled onto the video? A simple script could convert your chat log to .srt, then you can either embed the SRT into the video file or render it out with ffmpeg.

Rendering with ffmpeg is a bit complicated, yes. Here, you can crib from me. The "\" bits are just to split the lines, this is all one line, substitute as appropriate:
ffmpeg \
  -hide_banner \
  -i "$file" \
  -filter_complex "\
    subtitles =
      filename = '$subfile':
      fontsdir = 'fonts':
      force_style = 'Fontname=Albertus'
  " \
[just some example video output options, the meat is the filter above]
  -b:v 5M \
  -c:v h264 \
  -acodec aac \
  -b:a 192k \
Yes, you can't just specify a font file to render (as far as I know), you have to put it in a dir and then specify it by font name. I haven't specified any style options. FFMPEG docs here. This may not work depending on which FFMPEG features were compiled in.
posted by neckro23 at 12:23 PM on March 18, 2022 [1 favorite]

Here's the command line/FFMPEG version -- I didn't see an easier way, hopefully someone else will chime in.

I found a tool that says it will convert a zoom chat to a SRT, but not having a zoom chat handy I was unable to test. You'd enter something like:
python3 zoom_log.txt
If you want the chats to be able to be turned on and off and people are going to play the videos on their computers with VLC or similar -- there was recently a question with some good answers.

If you want the chats to be hard-coded into the video FFMPEG will do a great job:
ffmpeg -i input.mp4 -c:a copy -c:v libx264 -vb 20M -c:a copy -vf output-with-subs.mp4
For bigger/smaller font:
ffmpeg -i input.mp4 -c:a copy -c:v libx264 -vb 20M -vf "'Fontsize=24'" output-with-subs.mp4
posted by gregr at 12:25 PM on March 18, 2022

Response by poster: Fantastic answers so far, thank you.

To clarify, subtitling is slightly different from what I want. Subtitles appear singly and are replaced by the next subtitle. Each chat appears at the bottom of the screen and then scrolls up as new chats appear below it. (something like this: desktop/mobile)

I don't mind if they are overlaying the video rather than in their own area, but they come in so fast that having them appear on screen only for as long as it takes for the next one to appear would make them very hard to read.

I see ffmpeg can do scrolling text, but I don't see how that can be combined with the timestamps of an srt.
not having a zoom chat handy I was unable to test

Zoom chat files look like the italicised text in my question. A single timestamp, a space (or maybe tab) and then the text.
posted by Busy Old Fool at 4:29 PM on March 18, 2022

Ah, that's much more difficult.

I did find a tool that takes Twitch comments and generates a video, but you'd need to convert your Zoom chat to something that the tool would understand. Which could range from pretty easy to annoying depending on how much of the metadata is actually being used by the Twitch comment video generator, I'd suspect though, that it really only cares about the content_offset_seconds, display_name, and message body, but hard to tell without digging in.

Then you could use ffmpeg to combine your zoom video with the chat video side by side:
ffmpeg -i zoom.mp4 -i chat.mp4 -filter_complex hstack output.mp4
re: sample zoom chat -- I tried using your italicized text with that tool, but it didn't work. Reading the code in the tool seemed to indicate it was a tab, so I replaced the spaces separating the timestamp & the message with a tab, but that also didn't work.
posted by gregr at 2:38 PM on March 19, 2022

In theory (I haven't tried it), you can select the Zoom chat window as a window when recording in OBS.

I've also seen webinars use instead of the zoom chat function... not sure what the output/ overlay feature would look like.
posted by oceano at 2:42 PM on March 19, 2022

Response by poster: It turns out that if you share screen during a Zoom webinar, then the recording is of that screenshare, not just the video. As a result, if the chat window is visible while you screenshare, it gets recorded along with everything else. So no technical solution was needed in the end, but I certainly learned something. Thanks all!
posted by Busy Old Fool at 3:23 PM on April 8, 2022

« Older One Night in Cancun   |   How to help non-English speaking elementary school... Newer »
This thread is closed to new comments.