V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zjvbqla
V2EX  ›  问与答

求个小脚本写法!

  •  
  •   zjvbqla · 2022-07-30 23:51:49 +08:00 · 1457 次点击
    这是一个创建于 845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 ffmpeg 把目录 a 下的所有 mp4 文件切割成 8 秒一段,并且建立视频名称为名的文件夹。

    比如 a 文件夹下 123.mp4 40 秒钟,234.mp4 80 秒, 运行后就变成目录下这 2 个 mp4 不变,a 目录内多了 2 个文件夹,分别是 123 和 234 。 123 存放了切成 5 段的 123.mp4 。 234 成放了切成 10 段的 234.mp4

    a
    ├── 123.mp4
    ├── 234.mp4
    ├── 123
    │   ├── 123+0001.mp4
    │   ├── 123+0002.mp4
    │   └── 123+0003.mp4
    └── 234
        ├── 234+0001.mp4
       ├── 234+0002.mp4
        ├── 234+0003.mp4
        └── 234+0004.mp4
    

    最后的输出最好是“目录名+0001.mp4”“目录名+0002.mp4”“目录名+0003.mp4”

    shell 和 python 均可。

    ffmpeg 写法是

    ffmpeg -i /Users/abu/Movies/示例.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
    
    9 条回复    2022-08-01 18:57:57 +08:00
    eason1874
        1
    eason1874  
       2022-07-31 00:38:09 +08:00
    大概这样,目录名最好别跟文件同名,我这里的格式是 123 对应 123-segments

    ```
    import os
    import glob

    mp4filelist = glob.glob("/opt/videos/*.mp4")
    for mp4file in mp4filelist:
    basename = os.path.basename(mp4file)
    segmentsdir= f"{mp4file}-segments"
    if not os.path.exists(segmentsdir):
    os.makedirs(segmentsdir)
    os.system(f"ffmpeg -i {mp4file} -c copy -map 0 -segment_time 8 -f segment {segmentsdir}/{basename}+%03d.mp4")
    ```
    anlegong
        2
    anlegong  
       2022-07-31 00:38:16 +08:00
    a
    ├── 123.mp4
    ├── 234.mp4
    ├── 123
    │ ├── 123+0001.mp4
    │ ├── 123+0002.mp4
    │ └── 123+0003.mp4
    └── 234
    ├── 234+0001.mp4
    ├── 234+0002.mp4
    ├── 234+0003.mp4
    └── 234+0004.mp4

    歪个楼,,,

    这个是怎么生成的,有什么专用的小工具或脚本命令吗?
    eason1874
        3
    eason1874  
       2022-07-31 00:39:09 +08:00   ❤️ 1
    发出来空格被吞了,你自己加上吧,也就几句,应该不难
    zjvbqla
        4
    zjvbqla  
    OP
       2022-07-31 01:04:09 +08:00
    @anlegong tree 命令
    zjvbqla
        5
    zjvbqla  
    OP
       2022-07-31 01:04:47 +08:00
    @eason1874 好 我研究下,还不太会玩。
    monzuguan
        6
    monzuguan  
       2022-07-31 17:40:25 +08:00   ❤️ 1
    kkocdko
        7
    kkocdko  
       2022-08-01 02:53:19 +08:00
    建议直接输出 m3u8 ,会自动切好 ts ,然后再批量转回 mp4 。
    使用 -c copy 参数,不会重新编码。
    ruidoBlanco
        8
    ruidoBlanco  
       2022-08-01 10:45:06 +08:00   ❤️ 1
    不能一行写了算我输。

    for i in *.mp4; do name=${i%%.mp4} ; mkdir -p $name; ffmpeg -i $i -c copy -map 0 -segment_time 8 -f segment "${name}/${name}%03d.mp4"; done
    zjvbqla
        9
    zjvbqla  
    OP
       2022-08-01 18:57:57 +08:00
    @ruidoBlanco 给力。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5509 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:12 · PVG 11:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.