zoukankan      html  css  js  c++  java
  • 使用python编写shell脚本并运行

    一、场景

    使用爬虫爬取一些分段的MP4的文件的时候,需要使用到FFmpeg将MP4合并成一个文件,这里记录一下遇到的问题,方便以后的查询。

    二、问题与解决方法

    首先是编写shell文件,直接通过文件读写的方式就可以完成一系列指令的生成,这里举一个视频分割重组的shell脚本例子。

    #! /bin/bash
    # 将 mp4 文件封装为 ts 格式
    ffmpeg -i 20210506113922.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
    ffmpeg -i 20210506114000.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
    ffmpeg -i 20210506114035.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts
    ffmpeg -i 20210506114154.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts
    # 拼接 ts 并导出最终 mp4 文件
    ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
    # 删除过程中生成的 ts 文件
    rm *.ts

    2.1 文件格式

    编写完文件格式使用以下的命令执行shell的时候出现了Not Found的指令

    # new_shell.sh文件就是上面的视频切割文件。
    os.systeim("sh new_shell.sh")
    
    # 报错信息
    """
    not found *.ts ...
    """

    看到上述问题,第一个反应就是shell的格式不正确,通过notepad++进行查看,可以得到他的换行符是CRLF,而shell执行的时候需要是LF,因此需要进行格式转换。

    # 将shell文件变成unix的文件格式
    # 使用的sed指令
    sed -i 's/
    //g' [filename]
    # 示例:
    sed -i 's/
    //g' new_shell.sh

    2.2 注意

    python执行cmd指令的时候需要注意指令中的正则和工作区

    # 工作区的转化
    # 使用os.getcwd()获取当前的工作区
    os.chdir('[目标区域]')
    
    # 指令的正则
    # 由于使用到了
    等需要和正则区分,避免系统错误识别

    三、总结

    3.1 Windows下的shell脚本转化

    使用指令转化,或者notepad++转化

    3.2 注意格式,工作区等

    如正则、路径问题

    参考

    转换CRLF

    视频合并

  • 相关阅读:
    SpringBoot统一全局响应(5)
    SpringBoot统一异常处理(4)
    Spring Cloud Alibaba-Gateway搭配Nacos实现动态路由(4)
    SpringBoot使用javax.validation进行参数校验(3)
    SpringBoot使用日志(2)
    WPF 之 ObservableCollection 动态数据集合的使用(二)
    WPF 之 INotifyPropertyChanged 接口的使用 (一)
    数据库访问框架 Chloe
    Navicat Premium 的破解安装教程
    C#定位文件位置并修改字节数据
  • 原文地址:https://www.cnblogs.com/future-dream/p/14747011.html
Copyright © 2011-2022 走看看