我想将 1 个介绍视频合并到多个视频中?(批量)
文件名与我的视频保持一致
我发现了一个有用的代码,但问题是,它是用 Windows 命令行编写的,你能将它翻译成终端(mac)命令行吗?
以下是代码
for %%A IN (*.mp4) DO ffmpeg -i "concat:intro.mp4|%%A" -c copy "new_%%A"
现在在这里发现了新代码: FFMPEG 将介绍视频连接到目录中的每个文件(所有 mp4)
但它是在 Windows 上,你能转换成终端命令吗?这是上面线程中的代码
@echo off
mkdir output
for %%i in (videos/*.mp4) do (
echo file 'intro.mp4' > list.txt
echo file 'videos/%%~nxi' >> list.txt
ffmpeg -safe 0 -y -f concat -i list.txt -c copy "output/%%~nxi"
)
del list.txt
答案1
我在姊妹网站 SuperUser 上也有类似的答案:自动执行 fmpeg 任务
我会在这里放一份副本,并进行必要的修改,将相同的介绍文件放在每个视频的开头。
更新:根据以下评论进行了修改,现在它会将“intro.mp4”添加到当前目录中的所有其他 MP4 文件的前面。我对其进行了测试,它可以在我的 Mac 上使用以下文件:
-rw-r--r--@ 1 jim staff 25M Apr 19 2019 1.mp4
-rw-r--r--@ 1 jim staff 21M Apr 19 2019 2.mp4
-rw-r--r--@ 1 jim staff 16M Jun 13 2017 intro.mp4
只需调用脚本(无参数),它就会生成 2 个“合并”文件。
#!/bin/bash
if [ -f merge.txt ]
then
rm merge.txt
fi
for f in *[.mp4,.mov]
do
if [ "$f" = "intro.mp4" ]
then
continue
fi
echo "file intro.mp4" > merge.txt
echo "file $f" >> merge.txt
basename=`echo $f | sed -e 's/\(.*\)\.[^.]*$/\1/'`
ffmpeg -f concat -safe 0 -i merge.txt -c copy "$basename.merged.mp4"
done
答案2
#!/bin/bash
mkdir output
for f in *.mp4; do
printf "file 'intro.mp4'\nfile '%s'\n" "$f" > input.txt
ffmpeg -f concat -safe 0 -i input.txt -c copy output/"$f"
done
假设:
所有文件都位于同一目录中。
您的简介名为
intro.mp4
。所有输入都具有相同的属性(格式、流数量、流类型、宽度、高度、配置文件、采样率、通道布局等)。如果不是,那么您必须重新编码
intro.mp4
以匹配其他输入。如果 macOS
printf
与我的 Linux 中的版本不同,并且不起作用,那么您可以改用两个实例echo
:echo "file 'intro.mp4' > input.txt echo "file '$f'" >> input.txt