我在 macOS 12.2 中使用 Homebrew 安装了 ffmpeg。我有一个来自旧相机的 MOD 文件文件夹,我需要将其转换为 MOV 或 MP4 才能编辑它们,我的 Windows 计算机中有一个 .bat 文件,我可以在包含 MOD 文件的文件夹上运行该文件以将其批量转换为我可以轻松调整 MP4 或 MOV,但我对如何在我的新(也是第一台)Mac 上执行此操作有点无能为力,我遇到了这个脚本,我设法通过终端使用了一次,但尝试将其放入可执行文件中这样我就可以轻松运行它并将其复制到新项目所需的每个文件夹中。当我创建 exec 文件时,我不确定我是否做得正确。
for i in *.MOD;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.MOV"
done
此脚本位于我使用 TextEdit 编辑的 exec 文件内,如果我通过终端进入该目录并运行它,它有时会起作用,但如果我运行它,双击它,我会得到一个“.MOD:不是这样的文件或目录”即使我将 exec 放在有多个 .MOD 文件的文件夹中。
这是完整的终端输出
Last login: Sat Apr 23 20:00:38 on ttys001
/Users/anwar/Movies/FILMS/ANWAR/BLUE/old/batmodmp4 ; exit;
anwar@MacBook-Pro-de-Anwar ~ % /Users/anwar/Movies/FILMS/ANWAR/BLUE/old/batmodmp4 ; exit;
*
ffmpeg version 5.0 Copyright (c) 2000-2022 the FFmpeg developers
built with Apple clang version 13.0.0 (clang-1300.0.29.30)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
*.MOD: No such file or directory
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
当您在终端会话中使用
cd
时,您正在更改“工作目录”,因此脚本能够将 *.MOD
解析为该工作目录中的文件。当您通过在 Finder 中双击运行脚本时,工作目录将作为您的主目录/Users/anwar
开始。由于 shell 脚本的位置不会影响当前目录,因此无法找到任何与该模式匹配的文件。
实现这项工作的一些可能的方法:
在终端中执行所有操作,并使用
cd
。经过一些练习,您会发现这是一个灵活的环境,可以提供更好的反馈,并且更容易自定义。通过设置一些首选项,您可以打开终端选项卡,并将工作目录设置为 Finder 中的文件夹。
将工作目录硬编码到脚本的每个副本中:
cd '/Users/anwar/Movies/FILMS/ANWAR/BLUE/old'
for i in *.MOD; do
name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.MOV"
done
更改脚本,使工作目录基于脚本位置:
#!/usr/bin/env zsh
cd "$0:h:a"
print "working directory:"
pwd
for infile in *.MOD; do
outfile=${infile:r}.MOV
print "infile: $infile"
print "outfile: $outfile"
ffmpeg -i "$infile" "$outfile"
done
这使用了一些
zsh
参数扩展和修饰符。请注意,hashbang(以 #!
开头的行)必须是文件中的第一行。