全球主机交流论坛

标题: 【结贴】求个小脚本写法!~ [打印本页]

作者: ShqBql    时间: 2022-7-30 22:45
标题: 【结贴】求个小脚本写法!~
本帖最后由 ShqBql 于 2022-7-31 19:52 编辑

用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

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

shell和python均可。

ffmpeg写法是
  1. ffmpeg -i /Users/abu/Movies/示例.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
复制代码

作者: zxxx    时间: 2022-7-30 22:58
  1. a
  2. ├── 123.mp4
  3. ├── 234.mp4
  4. ├── 123
  5. │   ├── 123+0001.mp4
  6. │   ├── 123+0002.mp4
  7. │   └── 123+0003.mp4
  8. └── 234
  9.    ├── 234+0001.mp4
  10.    ├── 234+0002.mp4
  11.    ├── 234+0003.mp4
  12.    └── 234+0004.mp4
复制代码

这样吗?
作者: ShqBql    时间: 2022-7-30 23:00
zxxx 发表于 2022-7-30 22:58
这样吗?

是的
作者: zxxx    时间: 2022-7-30 23:02
输入参数就是一个文件夹a吗?然后递归遍历a里面的所有mp4?
作者: ShqBql    时间: 2022-7-30 23:06
zxxx 发表于 2022-7-30 23:02
输入参数就是一个文件夹a吗?然后递归遍历a里面的所有mp4?

理想化是a文件夹名称为任意,只要在任意文件夹下运行该脚本就能起到这个效果。不过我比较菜,就不考虑太多,固定文件夹名字,正在学习。还不会写
作者: zxxx    时间: 2022-7-30 23:09
ShqBql 发表于 2022-7-30 23:06
理想化是a文件夹名称为任意,只要在任意文件夹下运行该脚本就能起到这个效果。不过我比较菜,就不考虑太 ...

a就是一个例子而已,比如输入

./video-splitter.sh /path/to/folder

开始处理 /path/to/folder/ 的所有 mp4 文件?
作者: ShqBql    时间: 2022-7-30 23:13
zxxx 发表于 2022-7-30 23:09
a就是一个例子而已,比如输入

./video-splitter.sh /path/to/folder

是的
作者: 小心二次元    时间: 2022-7-31 00:23
https://paste.org.cn/gV4UlMU0L2
密码mjj
有问题你改改就差不多了
作者: ShqBql    时间: 2022-7-31 00:47
小心二次元 发表于 2022-7-31 00:23
https://paste.org.cn/gV4UlMU0L2
密码mjj
有问题你改改就差不多了

感谢,我试试去,
作者: ShqBql    时间: 2022-7-31 01:00
小心二次元 发表于 2022-7-31 00:23
https://paste.org.cn/gV4UlMU0L2
密码mjj
有问题你改改就差不多了
  1. python3 /Users/abu/Desktop/temp/fenge.py
  2. usage: fenge.py [-h] path
  3. fenge.py: error: the following arguments are required: path
复制代码


这里需要指定个啥路径?
作者: zxxx    时间: 2022-7-31 03:46
ShqBql 发表于 2022-7-31 01:00
这里需要指定个啥路径?

比如 a


作者: 小心二次元    时间: 2022-7-31 10:25
ShqBql 发表于 2022-7-31 01:00
这里需要指定个啥路径?

指定你的文件夹路径 只会扫描文件夹下的 不会遍历子文件夹
作者: ShqBql    时间: 2022-7-31 14:01
小心二次元 发表于 2022-7-31 10:25
指定你的文件夹路径 只会扫描文件夹下的 不会遍历子文件夹

还是搞不定,谢谢
  1. $ python /Users/abu/Desktop/temp/fenge.py  /Users/abu/Desktop/temp
  2. ffmpeg call: /Users/abu/Desktop/temp/222.mp4
  3. ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  4.   built with Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  5.   configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  6.   libavutil      57. 17.100 / 57. 17.100
  7.   libavcodec     59. 18.100 / 59. 18.100
  8.   libavformat    59. 16.100 / 59. 16.100
  9.   libavdevice    59.  4.100 / 59.  4.100
  10.   libavfilter     8. 24.100 /  8. 24.100
  11.   libswscale      6.  4.100 /  6.  4.100
  12.   libswresample   4.  3.100 /  4.  3.100
  13.   libpostproc    56.  3.100 / 56.  3.100
  14. Unrecognized option 'o'.
  15. Error splitting the argument list: Option not found
  16. Traceback (most recent call last):
  17.   File "/Users/abu/Desktop/temp/fenge.py", line 47, in <module>
  18.     main()
  19.   File "/Users/abu/Desktop/temp/fenge.py", line 43, in main
  20.     ffmpeg_call(file)
  21.   File "/Users/abu/Desktop/temp/fenge.py", line 22, in ffmpeg_call
  22.     result = [file for file in os.listdir(path) if file.endswith('.mp4') and file.startswith(path)]
  23. NotADirectoryError: [Errno 20] Not a directory: '/Users/abu/Desktop/temp/222.mp4'
复制代码

作者: zxxx    时间: 2022-7-31 15:30
看看这个行不行?

https://paste.org.cn/VceVcs40JY
作者: amily    时间: 2022-7-31 19:31
保存以下代码为main.sh
运行./main.sh  ~/path/video/
确保视频文件名没有特殊字符

  1. #!/usr/bin/bash

  2. echo $1
  3. homedir=(`find $1  -maxdepth 1 -name '*.mp4' -o -name '*.mkv'`)
  4. for res in ${homedir[@]}
  5. do
  6.     echo $res
  7.     filename=${res##*/}
  8.     mkdir ${filename:0:-4}
  9.     ffmpeg -i $res -c copy -map 0 -segment_time 8 -f segment ${res:0:-4}/${filename:0:-4}+%03d.mp4
  10. done
复制代码

作者: ShqBql    时间: 2022-7-31 19:51
感谢各位大佬,最终我用了
  1. #!/bin/bash
  2. BASEDIR=`pwd`
  3. echo "Base dir: $BASEDIR"

  4. read -p "Do you want to proceed? (yes/no) " yn
  5. case $yn in
  6.         yes ) echo ok, we will proceed;;
  7.         no ) echo exiting...;
  8.                 exit;;
  9.         * ) echo invalid response;
  10.                 exit 1;;
  11. esac

  12. for MP4 in `find . -type f -name "*.mp4"`; do
  13. MP4DIR=$(echo $MP4 | sed 's/\.mp4$//')
  14. OUTPUTNAME=$(echo $MP4DIR | awk -F / '{print $NF}')
  15. mkdir -p $MP4DIR
  16. ffmpeg -i $MP4 -c copy -map 0 -segment_time 8 -f segment "${MP4DIR}/${OUTPUTNAME}+%04d.mp4"
  17. done
复制代码


楼上各位大佬的我多少有点问题,迫于太菜,不会修改,努力学习,争取过段时间不提这样的问题,或者是自己逐渐会修改。




欢迎光临 全球主机交流论坛 (https://loc.010206.xyz/) Powered by Discuz! X3.4