我有一些文件
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' ::: $@