【结贴】求个小脚本写法!~

63次阅读

共计 3881 个字符,预计需要花费 10 分钟才能阅读完成。

用 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 写法是 ffmpeg -i /Users/abu/Movies/ 示例.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.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
复制代码
这样吗?

zxxx 发表于 2022-7-30 22:58
这样吗?

是的输入参数就是一个文件夹 a 吗?然后递归遍历 a 里面的所有 mp4?

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

理想化是 a 文件夹名称为任意,只要在任意文件夹下运行该脚本就能起到这个效果。不过我比较菜,就不考虑太多,固定文件夹名字,正在学习。还不会写

ShqBql 发表于 2022-7-30 23:06
理想化是 a 文件夹名称为任意,只要在任意文件夹下运行该脚本就能起到这个效果。不过我比较菜,就不考虑太 …

a 就是一个例子而已,比如输入
./video-splitter.sh /path/to/folder
开始处理 /path/to/folder/ 的所有 mp4 文件?

zxxx 发表于 2022-7-30 23:09
a 就是一个例子而已,比如输入
./video-splitter.sh /path/to/folder

是的 https://paste.org.cn/gV4UlMU0L2
密码 mjj
有问题你改改就差不多了

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

感谢,我试试去,

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

python3 /Users/abu/Desktop/temp/fenge.py
usage: fenge.py [-h] path
fenge.py: error: the following arguments are required: path 复制代码
这里需要指定个啥路径?

ShqBql 发表于 2022-7-31 01:00
这里需要指定个啥路径?

比如 a

ShqBql 发表于 2022-7-31 01:00
这里需要指定个啥路径?

指定你的文件夹路径 只会扫描文件夹下的 不会遍历子文件夹

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

还是搞不定,谢谢
$ python /Users/abu/Desktop/temp/fenge.py/Users/abu/Desktop/temp
ffmpeg call: /Users/abu/Desktop/temp/222.mp4
ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with Apple clang version 13.1.6 (clang-1316.0.21.2.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
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59.4.100 / 59.4.100
libavfilter 8. 24.100 /8. 24.100
libswscale 6.4.100 /6.4.100
libswresample 4.3.100 /4.3.100
libpostproc 56.3.100 / 56.3.100
Unrecognized option ‘o’.
Error splitting the argument list: Option not found
Traceback (most recent call last):
File "/Users/abu/Desktop/temp/fenge.py", line 47, in <module>
main()
File "/Users/abu/Desktop/temp/fenge.py", line 43, in main
ffmpeg_call(file)
File "/Users/abu/Desktop/temp/fenge.py", line 22, in ffmpeg_call
result = [file for file in os.listdir(path) if file.endswith(‘.mp4’) and file.startswith(path)]
NotADirectoryError: [Errno 20] Not a directory: ‘/Users/abu/Desktop/temp/222.mp4’ 复制代码看看这个行不行?
https://paste.org.cn/VceVcs40JY 保存以下代码为 main.sh
运行./main.sh~/path/video/
确保视频文件名没有特殊字符
#!/usr/bin/bash
echo $1
homedir=(`find $1-maxdepth 1 -name ‘*.mp4’ -o -name ‘*.mkv’`)
for res in ${homedir[@]}
do
echo $res
filename=${res##*/}
mkdir ${filename:0:-4}
ffmpeg -i $res -c copy -map 0 -segment_time 8 -f segment ${res:0:-4}/${filename:0:-4}+%03d.mp4
done 复制代码感谢各位大佬,最终我用了
#!/bin/bash
BASEDIR=`pwd`
echo "Base dir: $BASEDIR"
read -p "Do you want to proceed? (yes/no) " yn
case $yn in
yes ) echo ok, we will proceed;;
no ) echo exiting…;
exit;;
* ) echo invalid response;
exit 1;;
esac
for MP4 in `find . -type f -name "*.mp4"`; do
MP4DIR=$(echo $MP4 | sed ‘s/.mp4$//’)
OUTPUTNAME=$(echo $MP4DIR | awk -F / ‘{print $NF}’)
mkdir -p $MP4DIR
ffmpeg -i $MP4 -c copy -map 0 -segment_time 8 -f segment "${MP4DIR}/${OUTPUTNAME}+%04d.mp4"
done
复制代码
楼上各位大佬的我多少有点问题,迫于太菜,不会修改,努力学习,争取过段时间不提这样的问题,或者是自己逐渐会修改。

正文完
 0