我正在尝试执行 find bash 命令来处理数百个视频文件,这些文件全部命名为video-original.mp4
但位于父目录的子目录中。
这是目录结构的示例:
videos
├── 01a
│ └── video-original.mp4
├── 01b
│ └── video-original.mp4
├── 02a
│ └── video-original.mp4
├── 02b
│ └── video-original.mp4
├── 03a
│ └── video-original.mp4
└── 03b
└── video-original.mp4
我正在使用以下命令:
find ./ -name 'video-original.mp4' -exec bash -c 'ffmpeg -i "$0" -f mp4 -vcodec libx264 -preset veryslow -profile:v high -acodec aac -movflags faststart video.mp4 -hide_banner' {} \;
我遇到的问题是它正在保存文件video.mp4
在父级中videos
目录,而不是原始目录旁边的子目录video-original.mp4
之后我想删除该文件video-original.mp4
。目前,我的过程需要等待所有视频重新编码,然后完成后发出单独的命令来删除文件video-original.mp4
:
find ./ -name 'video-original.mp4' -exec bash -c 'rm -rf "$0"' {} \;
我的最后一步是提取新的屏幕截图video.mp4
10秒后保存为thumbnail.jpg
。同样,我目前正在将其作为一个单独的步骤,在前两个步骤完成后执行。
find ./ -name 'video.mp4' -exec bash -c 'ffmpeg -i "$0" -ss 00:00:10 -vframes 1 thumbnail.jpg' {} \;
我想做的是将这三个步骤组合成一个命令,因此最终结果将是:
videos
├── 01a
│ ├── thumbnail.jpg
│ └── video.mp4
├── 01b
│ ├── thumbnail.jpg
│ └── video.mp4
├── 02a
│ ├── thumbnail.jpg
│ └── video.mp4
├── 02b
│ ├── thumbnail.jpg
│ └── video.mp4
├── 03a
│ ├── thumbnail.jpg
│ └── video.mp4
└── 03b
├── thumbnail.jpg
└── video.mp4
最后,最好将其保存为 bash 脚本并将其包含在我的路径中/usr/local/bin
or ~/bin
作为可执行文件,这样我就可以发出命令reencode
它会运行。如果输入文件可以有任何视频文件就更好了,例如,random_name.mp4
or random_name.mov
or random_name.webm
,基本上任何视频文件(但跳过video.mp4
在编码步骤)。