我有兴趣从数千个 jpeg 中加快对 mp4 文件的编码。我的启动命令如下
singularity exec --bind $work_dir:/mnt $work_dir/container.sif ffmpeg -y -f concat -safe 0 -i <(for f in /mnt/processed_images/$image_folder/image-%06d.jpeg; do echo "file '$f'";done) -vf "crop=trunc(iw/3)*2:trunc(ih/2)*2" -movflags +faststart /mnt/processed_images/summary_files/${image_folder}.mp4
所以我有很多图像,所以我不得不跳过箍将它们传送到 ffmpeg。我实际上并没有对编码器进行任何调整。我什至不确定我使用的是什么编码器,因为我没有指定(我认为)。我在分布式计算环境中,但我根本没有利用它。一项工作大约需要 8 个小时才能完成,这并不理想。理论上我可以访问大量内存和内核,但我不确定如何利用这种能力。有人有这方面的经验吗?
最佳答案
要在 slurm 机器上使用多个内核,最简单的方法是使用提交脚本,然后提交作业。如果以下文件名为 submit.sh,则提交命令为 sbatch submit.sh
.该脚本将在 24 小时内请求 20 个内核和 50 GB 内存。您可能必须在脚本的开头添加一些特定于集群的 slurm 选项。
#!/bin/bash
#SBATCH --time=24:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=20
#SBATCH --mem=50GB
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
srun singularity exec --bind $work_dir:/mnt $work_dir/container.sif ffmpeg -y -f concat -safe 0 -i <(for f in /mnt/processed_images/$image_folder/image-%06d.jpeg; do echo "file '$f'";done) -vf "crop=trunc(iw/3)*2:trunc(ih/2)*2" -movflags +faststart /mnt/processed_images/summary_files/${image_folder}.mp4
关于multithreading - 在 SLURM 环境中运行 FFMPEG 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70837408/