Mac 终端命令 Concatenate 介绍许多视频

Mac 终端命令 Concatenate 介绍许多视频

我想将 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以匹配其他输入。

  • 如果 macOSprintf与我的 Linux 中的版本不同,并且不起作用,那么您可以改用两个实例echo

    echo "file 'intro.mp4' > input.txt
    echo "file '$f'" >> input.txt
    

相关内容