我有大量名为不同内容和不同扩展名的视频(一些 mp4 一些 wmv 等)。
我想运行下面的命令,但在特定目录中的每个视频上运行,然后将其保存在另一个目录中,不覆盖原始文件。
有些视频可能会重复,如果发生这种情况,应该暂停脚本。例如,可能video1.mp4
&video1.avi
两者都不能是video1.mp4,/home/videos/processed
因此脚本应该暂停。
ffmpeg -i '/home/videos/unprocessed/vidabc.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidabc.mp4'
ffmpeg -i '/home/videos/unprocessed/vidxyz.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidxyz.mp4'
答案1
find
您可以使用带有标志的命令来处理目录中的每个文件-execdir
。
例子:
find /home/videos/unprocessed -type f \
-execdir ffmpeg -i '{}' -f mp4 -vcodec libx264 -preset fast \
-profile:v main -acodec aac -movflags +faststart '/home/videos/processed/{}.mp4' \;
-type f
表示您只想查找文件,而不是目录。
标志后-execdir
,'{}'
替换为文件的路径,例如./vidabc.mp4
.
在命令末尾-execdir
包含 a\;
来终止命令。
请注意,在此示例中,生成的文件名可能如下所示:
/home/videos/processed/vidabc.mp4.mp4
/home/videos/processed/vidxyz.avi.mp4
/home/videos/processed/vidxyz.mp4.mp4
如果这是一个问题,有一些方法可以解决这个问题。看命令“find”-exec替换字符串举一个类似的例子。