我有几个大视频需要分割成几部分。我知道的唯一方法是用 OpenShot 一次分割一个部分。我必须分割,等待很长时间,删除该部分,分割下一部分,...
有没有更好的方法?我尝试谷歌搜索,但似乎所有方法都需要一次分割一个部分。这真的很不方便,因为我需要将每个视频分割成 20-30 个部分。我希望能够标记所有分割点,然后稍后再回来发现一切都完成了。有人知道方法吗?
更新:现在我正在研究一个命令行解决方案。我尝试了这个命令,但唯一的问题是,在每个输出分割的开始(和结束)处,视频都会有几秒钟的冻结。
avconv -i x.mp4 -ss 00:00:00 -t 00:01:00 -c:v copy -c:a copy out.mp4 -ss 00:01:00 -t 00:01:00 -c:v copy -c:a copy out1.mp4 -ss 00:02:00 -t 00:01:00 -c:v copy -c:a copy out2.mp4 -ss 00:03:00 -t 00:04:00 -c:v copy -c:a copy out3.mp4
答案1
这是一个对我有用的解决方案。
例如:
avconv -ss 0 -i x.mp4 -t 180 -vcodec copy -acodec copy -metadata track="1" "Part I.mp4"
avconv -ss 180 -i x.mp4 -t 164 -vcodec copy -acodec copy -metadata track="2" "Part II.mp4"
avconv -ss 344 -i x.mp4 -t 185 -vcodec copy -acodec copy -metadata track="3" "Part III.mp4"
我有 50 个条目,我把它们放在一个脚本里。我首先把骨架放在
avconv -ss -i x.mp4 -t -vcodec copy -acodec copy -metadata track=" " ".mp4"
然后我填写了 -ss 并输入了标题。之后,我使用 libreoffice Calc 并以空格作为分隔符。我使用公式和拖动获得了 -t 和 track 的值。
答案2
如果你经常这样做,你可以尝试创建一个 bash 脚本。从以下脚本开始:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
FILES=$(ls *.mp4|sort)
let START=0
for FILE in $FILES
do
echo Processing $FILE
mkdir "${FILE}-chop"
for COUNT in {1..59}
do
exec avconv -i "${FILE}" -ss $START -t 60 -c:v copy -c:a copy "./${FILE}-chop/${COUNT} - ${FILE}"
let START=$START+60
done
done
IFS=$SAVEIFS
请记住,这是一个非常丑陋的代码,它可能会产生许多错误和空文件,并且如果输入文件超过一个小时,它将无法正常工作,但它可以帮助您入门。