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

    视频合并

  • 相关阅读:
    如何用grep命令同时显示匹配行上下的n行 (美团面试题目)
    Maven面试宝典
    Java经典设计模式 总览
    Java设计模式之工厂模式
    Java设计模式
    三次握手,四次挥手 具体发送的报文和状态都要掌握(阿里)
    运动与饮食结合
    健身计划
    Java中的多线程=你只要看这一篇就够了
    js禁止复制粘贴
  • 原文地址:https://www.cnblogs.com/future-dream/p/14747011.html
Copyright © 2011-2022 走看看