multithreading - 在 SLURM 环境中运行 FFMPEG 多线程

标签 multithreading ffmpeg encoding multiprocessing slurm

我有兴趣从数千个 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/

相关文章:

c# - "Thread was being aborted."在测试中,测试在后台线程上触发委托(delegate)的代码

android - 生成透明视频覆盖或其他方式?

java - Java UDP多线程通信的一个问题

java - EJB 3.1 : Kick off asynchronous task in stateless bean

ubuntu - 创建一个虚拟麦克风 Ubuntu 16.04 并将音频从 RTSP IP 摄像机流式传输到其中

java - 在java中将字符串从一种编码解释为另一种编码

c++ - char 类型并将 ASCII 文本重新编码为 UTF-16

c++ - 将字节数组转换为十六进制时的空格 std::string C++

multithreading - pthread 库中缺少调试符号

ffmpeg - 如果源/目标下降,则使用 ffmpeg 重新流式传输