更新2

更新2

我有一些文件

Joapira___BERLINA_DEL_HIERRO.mp4
Joapira___EL_BAILE_DEL_VIVO.mp4
Joapira___EL_CONDE_CABRA.mp4
Joapira___FLAIRE.mp4
Joapira___MAZULKA_DEL_HIERRO.mp4
Joapira___MEDA_A_MANOLITO_DIAZ_ARTESANO_TALLISTA.mp4

ffmpeg我想使用GNU转换为其他格式parallel。例如,我将它们转换为 flac

parallel --bar ffmpeg -i "{}" -map_metadata 0 "{/.}.flac" ::: *

或者将它们转换为 mp3 我这样做

parallel --bar ffmpeg -i "{}" -vn -ar 44100 -ab 128k -map_metadata 0 "{/.}.mp3" ::: $@

但这个过程永远持续下去,第一个文件总是丢失。为什么?

信息

我在 Fedora 22 上使用

GNU 并行 20160222

ffmpeg 版本 N-80953-gd4c8e93-statichttp://johnvansickle.com/ffmpeg/

更新

令人着迷,我尝试过ffmpeg 版本 2.6.8(Fedora 附带)并且它有效!即使使用 git 的最新静态构建,它也不会。 :-(

更新2

当我运行ps auxwww并搜索 ffmpeg 时,我会看到所有具有状态的作业瑞尔,除了丢失的文件的命令,其状态为时间

GNU 并行有状态S+,但有时在处理工作文件期间会更改为右+

的手册页ps对状态进行了以下说明:

D    uninterruptible sleep (usually IO)
R    running or runnable (on run queue)
S    interruptible sleep (waiting for an event to complete)
T    stopped by job control signal
t    stopped by debugger during the tracing
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    defunct ("zombie") process, terminated but not reaped by its parent

<    high-priority (not nice to other users)
N    low-priority (nice to other users)
L    has pages locked into memory (for real-time and custom IO)
s    is a session leader
l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+    is in the foreground process group

也许这有助于理解这个问题。

答案1

解决方案是 - 正如 @OleTange 在评论中所建议的 - 更新到并行的新版本,即GNU parallel 20161122.一切又恢复正常了。

最好用单引号保护命令免受 shell 交互,即:

parallel --bar 'ffmpeg -i {} -map_metadata 0 {/.}.flac' ::: *

parallel --bar 'ffmpeg -i {} -vn -ar 44100 -ab 128k -map_metadata 0 {/.}.mp3' ::: $@

相关内容