如何使用 ffmpeg 分割多个 mp4 视频?当前解决方案太慢
How to split multiple mp4 videos using ffmpeg? current solution is too slow
我想在 30-40 秒后将多个 mp4 视频分成更小的块,我找到了一个使用 ffmpeg 的答案,即
ffmpeg -i /home/msz/Downloads/CartoonVideos/1.mp4 -ss 180 -t 30 /home/msz/Downloads/NewCartoonVideos/1-7.mp4
但这是单行命令,它占用了太多时间,我必须每隔 time.Can 更改一次,有人告诉我其他方法或更改 script/loop 中的代码吗?
嗯,
#!/usr/bin/bash
N_FRAGS=
SEG_LEN=
shift 2
for $FILE in "$@" ; do
SS=0
for (( segment = 1; segment <= N_FRAGS; ++segment )) ; do
OUTPUT=$(dirname $FILE)/(basename $FILE .mp4)-$segment.mp4
ffmpeg -i "$FILE" -ss $SS -t "$SEG_LEN $OUTPUT"
SS=$((SS + SEG_LEN))
done
done
将其保存在 massive_split.sh
下,并将其命名为
./massive_split.sh 10 30 /home/msz/Downloads/CartoonVideos/*.mp4
其中 10 是每个文件的片段数量,30 是每个片段的长度。
这可能需要一些调试(尚未测试),并且可以更复杂,例如自动检测每个文件的长度(以及因此可用的片段数量),在输出文件中用零填充段号根据需要命名等
我想在 30-40 秒后将多个 mp4 视频分成更小的块,我找到了一个使用 ffmpeg 的答案,即
ffmpeg -i /home/msz/Downloads/CartoonVideos/1.mp4 -ss 180 -t 30 /home/msz/Downloads/NewCartoonVideos/1-7.mp4
但这是单行命令,它占用了太多时间,我必须每隔 time.Can 更改一次,有人告诉我其他方法或更改 script/loop 中的代码吗?
嗯,
#!/usr/bin/bash
N_FRAGS=
SEG_LEN=
shift 2
for $FILE in "$@" ; do
SS=0
for (( segment = 1; segment <= N_FRAGS; ++segment )) ; do
OUTPUT=$(dirname $FILE)/(basename $FILE .mp4)-$segment.mp4
ffmpeg -i "$FILE" -ss $SS -t "$SEG_LEN $OUTPUT"
SS=$((SS + SEG_LEN))
done
done
将其保存在 massive_split.sh
下,并将其命名为
./massive_split.sh 10 30 /home/msz/Downloads/CartoonVideos/*.mp4
其中 10 是每个文件的片段数量,30 是每个片段的长度。
这可能需要一些调试(尚未测试),并且可以更复杂,例如自动检测每个文件的长度(以及因此可用的片段数量),在输出文件中用零填充段号根据需要命名等