diff --git a/record-and-playback/core/lib/recordandplayback/edl/video.rb b/record-and-playback/core/lib/recordandplayback/edl/video.rb index 8faa73814638225dce8f5d014e35557c0b3b8d8f..35a0fc152dc61c92070279a7c66df8a3333f6f5b 100644 --- a/record-and-playback/core/lib/recordandplayback/edl/video.rb +++ b/record-and-playback/core/lib/recordandplayback/edl/video.rb @@ -403,8 +403,8 @@ module BigBlueButton else # Webcam videos are variable, low fps; it might be that there's # no frame until some time after the seek point. Start decoding - # 30s before the desired point to avoid this issue. - seek = video[:timestamp] - 30000 + # 10s before the desired point to avoid this issue. + seek = video[:timestamp] - 10000 seek = 0 if seek < 0 end @@ -443,10 +443,18 @@ module BigBlueButton ffmpeg_filter << ",fps=#{FFMPEG_WF_FRAMERATE}:start_time=#{ms_to_s(video[:timestamp])}" # Reset the timestamps to start at 0 so that everything is synced # for the video tiling, and scale to the desired size. - ffmpeg_filter << ",setpts=PTS-STARTPTS,scale=#{scale_width}:#{scale_height}" + ffmpeg_filter << ",setpts=PTS-STARTPTS,scale=#{scale_width}:#{scale_height},setsar=1" # And finally, pad the video to the desired aspect ratio ffmpeg_filter << ",pad=w=#{tile_width}:h=#{tile_height}:x=#{offset_x}:y=#{offset_y}:color=white" - ffmpeg_filter << "[#{pad_name}];" + ffmpeg_filter << "[#{pad_name}_movie];" + + # In case the video was shorter than expected, we might have to pad + # it to length. do that by concatenating a video generated by the + # color filter. (It would be nice to repeat the last frame instead, + # but there's no easy way to do that.) + ffmpeg_filter << "color=c=white:s=#{tile_width}x#{tile_height}:r=#{FFMPEG_WF_FRAMERATE}" + ffmpeg_filter << "[#{pad_name}_pad];" + ffmpeg_filter << "[#{pad_name}_movie][#{pad_name}_pad]concat=n=2:v=1:a=0[#{pad_name}];" tile_x += 1 if tile_x >= tiles_h