强制程序(FFmpeg)在 BASH 中分叉

强制程序(FFmpeg)在 BASH 中分叉

我正在尝试分叉 FFmpeg 的一个实例,以便它可以在后台运行,以便我可以将其包含在脚本中,但显而易见的方法似乎不适用于它:

 ffmpeg -stream_loop -1 -re -f concat -i list.txt -c copy -f flv -flvflags no_duration_filesize -bsf:a aac_adtstoasc -preset veryfast rtmp://[streaming_server_info] &

虽然 & 符号通常会顺利地发送一个进程,但在这种情况下,如果我以这种方式启动它,ffmpeg 永远不会开始流式传输。它显示了基本的 ffmpeg 启动信息,没有任何错误,然后当我尝试按回车键将 tty 用于其他任何操作时,它就被终止了。

以下是它的开始方式:

ffmpeg version 3.4.8 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --extra-cflags=' ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-fontconfig --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libcdio --enable-libdrm --enable-indev=jack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopus --disable-encoder=libopus --enable-libpulse --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi --enable-avfilter --enable-avresample --enable-libmodplug --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-libmfx --enable-runtime-cpudetect
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100

设法让 ffmpeg 配合,但只能通过在不使用 & 符号的情况下启动它,让它开始流式传输,使用 Ctrl+Z 停止它,然后使用 重新启动它bg。之后,它在后台运行良好。

这个过程很好,但我想以一种可以放入 bash 脚本中的方式完成等效操作。有没有办法以一种可编写脚本的方式完成 Ctrl+Z plus 的等效操作,bg就像使用 & 符号一样?

边注:如果提及此事不合适,请删除此附注,但如果有人了解 FFmpeg,碰巧读到这个问题(我将这个问题放在 SuperUser 上,因为实际问题与 FFmpeg 无关,而是 bash/forking 问题),我将非常感激,如果该人也能看看我一周前发布的一个问题,该问题专门针对我在不太繁忙的服务器上使用的 FFmpeg 参数的问题视频制作 StackExchange

答案1

使用-d守护进程模式的全局选项:

ffmpeg -d -stream_loop -1 -re -f concat -i list.txt -c copy -f flv -flvflags no_duration_filesize -bsf:a aac_adtstoasc -preset veryfast rtmp://[streaming_server_info]

相关内容