(学习用) rosbag文件中抽取特定topics 转 mp4 格式

有时 .bag 文件包含多个您想提取的视频, 例如使用 D435i 录制 RGB 和 Depth视频并打包成.bag文件. 一种简单的方法来在bag 文件里提取您需要的视频。


参考链接:https://gist.github.com/wngreene/835cda68ddd9c5416defce876a4d7dd9

一、测试环境

本人使用 Ubuntu 20.04 LTS

二、前置要求

下好 ROS Noetic (只要是ROS1,问题都不大)

安装依赖包:

1. ffmpeg

sudo apt install ffmpeg

2. Opencv, roslib, sensor-msgs

sudo apt install python3-roslib python3-sensor-msgs python3-opencv

三、bag_to_images.py源码

你可以在 GitHub 下载,或复制下面的代码。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Copyright 2016 Massachusetts Institute of Technology

"""Extract images from a rosbag.
"""

import os
import argparse

import cv2

import rosbag
from sensor_msgs.msg import Image
from cv_bridge import CvBridge

def main():
    """Extract a folder of images from a rosbag.
    """
    parser = argparse.ArgumentParser(description="Extract images from a ROS bag.")
    parser.add_argument("bag_file", help="Input ROS bag.")
    parser.add_argument("output_dir", help="Output directory.")
    parser.add_argument("image_topic", help="Image topic.")

    args = parser.parse_args()

    print "Extract images from %s on topic %s into %s" % (args.bag_file,
                                                          args.image_topic, args.output_dir)

    bag = rosbag.Bag(args.bag_file, "r")
    bridge = CvBridge()
    count = 0
    for topic, msg, t in bag.read_messages(topics=[args.image_topic]):
        cv_img = bridge.imgmsg_to_cv2(msg, desired_encoding="passthrough")

        cv2.imwrite(os.path.join(args.output_dir, "frame%06i.png" % count), cv_img)
        print "Wrote image %i" % count

        count += 1

    bag.close()

    return

if __name__ == '__main__':
    main()

把 bag_to_images.py (上面的代码,我更改了文件名), 保存图像的文件, 和你的bag文件放到同一個地方。

四、查看 .bag文件的topics 和抽取视频為图片

bag文件里不一定是你想要的東西,要自己去看。下面是你查看 bag文件的命令行。

rosbag info location1.bag

把 location1.bag 換成你自己的就可以了. 下面是打開之後。

 假如紅色圈起来的, 是我要的东西 Depth视频. 当我们知道topic (/device_0sensor_0/Depth_0/image/data) 叫什么之后,我们就要把他们抽出来就要用到 extract.py跟運作下面的命令行。

python3 bag_to_images.py bag文件 保存图像的文件 你要的topics

命令行會把你的视频在文件里, 以图片的方式保留下来。

五、把图片转化为 mp4 

ffmpeg -framerate 30 -pattern_type glob -i 保存图像的文件/'*.png'   -c:v libx264 -pix_fmt yuv420p 生成视频名稱.mp4

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 好的,这是一个简单的方法来抽取 txt 格式文件包含关键词的句子: ``` # 首先,我们需要打开文件并读取内容 with open('file.txt', 'r') as f: text = f.read() # 然后,我们可以使用正则表达式来匹配句子 import re pattern = r'(?:[^.!?]|(?<!\d)[.!?]|[.!?](?!\d))+' sentences = re.findall(pattern, text) # 最后,我们可以遍历句子列表并检查是否包含关键词 keyword = '关键词' for sentence in sentences: if keyword in sentence: print(sentence) ``` 这段代码首先打开文件并读取内容,然后使用正则表达式来匹配句子,最后遍历句子列表并检查是否包含关键词。希望这对你有帮助。 ### 回答2: 你可以使用Python的正则表达式库re来抽取txt格式文件包含关键词的句子。以下是一个示例代码: ```python import re # 关键词列表 keywords = ['关键词1', '关键词2', '关键词3'] # 读取txt文件 with open('file.txt', 'r') as file: text = file.read() # 将文本拆分成句子 sentences = re.split('[。!?]', text) # 遍历每个句子,查找包含关键词的句子 matched_sentences = [] for sentence in sentences: for keyword in keywords: if re.search(keyword, sentence): matched_sentences.append(sentence) break # 打印匹配的句子 for sentence in matched_sentences: print(sentence) ``` 在上述代码,首先定义了一个关键词列表,将需要匹配的关键词添加到列表。然后使用with语句读取txt文件的内容,并将文本拆分成句子。接下来,通过遍历每个句子,使用正则表达式来查找包含关键词的句子,并将匹配成功的句子添加到`matched_sentences`列表。最后,通过遍历`matched_sentences`列表来打印所有匹配的句子。 你需要将上述代码的`file.txt`替换为你要读取的txt文件路径,并根据实际需求修改关键词列表。 ### 回答3: 可以使用Python编写一个程序来实现抽取txt格式文件包含关键词的句子。以下是一个可能的实现: ```python import re def extract_sentences_with_keywords(file_path, keywords): sentences = [] with open(file_path, 'r') as file: text = file.read() # 将文本按句子分割 sentence_list = re.split(r'[。!?]', text) # 遍历每个句子,检查是否包含关键词 for sentence in sentence_list: for keyword in keywords: if keyword in sentence: sentences.append(sentence) break return sentences # 示例用法: file_path = 'example.txt' keywords = ['关键词1', '关键词2', '关键词3'] result = extract_sentences_with_keywords(file_path, keywords) # 输出抽取的句子 for sentence in result: print(sentence) ``` 以上代码实现了一个`extract_sentences_with_keywords`函数,该函数接受文件路径和关键词列表作为输入,返回一个包含抽取的句子的列表。首先,它打开指定文件,并将文件内容读取为文本字符串。然后,它使用正则表达式将文本按句子分割成一个句子列表。接下来,它遍历每个句子,并检查是否包含任何关键词。如果找到包含关键词的句子,它将该句子添加到结果列表。最后,该函数返回结果列表。 在使用时,你需要将`file_path`变量设置为你要处理的txt文件的路径,将`keywords`变量设置为你要抽取的关键词列表。最后,你可以遍历`result`列表并打印或使用该列表进行其他操作,以获取抽取的句子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值