用 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
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") ``` |
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 歪个楼,,, 这个是怎么生成的,有什么专用的小工具或脚本命令吗? |
3
eason1874 2022-07-31 00:39:09 +08:00 1
发出来空格被吞了,你自己加上吧,也就几句,应该不难
|
6
monzuguan 2022-07-31 17:40:25 +08:00 1
|
7
kkocdko 2022-08-01 02:53:19 +08:00
建议直接输出 m3u8 ,会自动切好 ts ,然后再批量转回 mp4 。
使用 -c copy 参数,不会重新编码。 |
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 |
9
zjvbqla OP @ruidoBlanco 给力。
|