cf. [Linux boxでラジオ番組を自動録音する](https://typeinf-memo.blogspot.com/2016/01/linux-box.html)
今回、再び同じtitleで記事を書いたのは、録音に使っているLinux box (Debian sid)のinit systemを遂にsystemd化した (ずっとsysvinitで粘っていたが限界が訪れた)のが原因で録音に失敗したためである。
症状
* ffmpegを使って指定したpulseaudioのsourceから録音できない (cronからのみ)
logを取ってみるとこんな感じだった:
ffmpeg version N-92645-gc782e7aa9e Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8 (Debian 8.2.0-10)
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libpulse --enable-gnutls --enable-ladspa --enable-libbluray --enable-libflite --enable-libmodplug --enable-libaom --enable-opencl --enable-vaapi --enable-vdpau --enable-pic --enable-shared --extra-cflags='-fPIC -Ofast'
libavutil 56. 24.101 / 56. 24.101
libavcodec 58. 41.102 / 58. 41.102
libavformat 58. 23.102 / 58. 23.102
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 46.101 / 7. 46.101
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
alsa_input.pci-0000_00_1f.3.analog-stereo: Input/output error
これは多分前回の記事と同じerrorで、XDG_RUNTIME_DIRを指定すれば解決するはず。
なお、以前に記事を書いた時とpulseaudioのsourceが少し違っているが、以前systemd→sysvinitに戻した際変化した (cf. [PulseAudio w/o systemd](https://typeinf-memo.blogspot.com/2016/10/pulseaudio-wo-systemd.html))。
その時の変更をまた戻すことになった訳である。
対策
* XDG_RUNTIME_DIRを指定してffmpegを実行する
ついでに、backgroundでinvokeしたffmpegのPIDを取得しておき録音時間sleepさせた後kill -TERMで殺す、という方法ではなく、ffmpegの-t optionでduration指定する方法に改めた。
XDG_RUNTIME_DIR=/usr/user/1000 "${FFMPEG}" -f pulse -ac 2 -ar 44100 -i "${SOURCE}" -acodec libvorbis -q 3 -t ${DURATION} "${FILEPATH}" >${LOGFILE} 2>&1 &
なお、${FFMPEG}のような大文字の定数はscript内で
FFMPEG=/usr/local/bin/ffmpeg
といった具合に定義してある。
今後の展望
headless運用をしていて普段loginしない (maintenanceのためにたまにsshでloginするくらいの) Linux boxで自動録音をするなら、PulseAudioをsystem-wideなdaemonとして立ち上げておく方法が考えられる。
loginしていない時にはPulseAudioのper-user daemonが立ち上がっていないのでsourceも存在せずerrorを吐くと思うので。
ちなみにPulseAudioのdeveloperはPulseAudioのsystem-wide modeを推奨していない:
cf. [SystemWide](https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/)
0 件のコメント:
コメントを投稿