У меня есть скрипт, который локально сохраняет видео продолжительностью 5 секунд и в нем не указывается имя файла.
Вот команда bash
ffmpeg -i http://0.0.0.0:8080/stream/video.mjpeg -vcodec copy -map 0 -f segment -segment_time 2 -loglevel 40 -segment_format mp4 capture-%05d.mp4 2>&1 | grep --line-buffered -Eo "segment:.+ended" | gawk -F "'" '{print $2; system("")}' | xargs -n1
Если я выполню эту команду в терминале, она вернет ожидаемое имя файла, как таковое
capture-00001.mp4
Обратите внимание, что команда xargs
в конце легко позволяет мне передать имя файла скрипту Python в качестве нового аргумента. Но теперь я хочу выполнить эту команду внутри самого Python, а именно получить имя файла с subprocess
.
Вот что я сделал до сих пор. При запуске сценария, как и ожидалось, терминал напечатает имя файла, но никогда не передаст его в виде строки в fName
. Я пробовал subprocess.check_output
, но он никогда ничего не пропускает, так как команда непрерывно записывает видео и сохраняет его локально.
FFMPEG_SCRIPT = r"""ffmpeg -i http://0.0.0.0:8080/stream/video.mjpeg -vcodec copy -map 0 -f segment -segment_time 2 -loglevel 40 -segment_format mp4 capture-%05d.mp4 2>&1 | grep --line-buffered -Eo "segment:.+ended" | gawk -F "'" '{print $2; system("")}' | xargs -n1 """
try:
fName = subprocess.check_call(FFMPEG_SCRIPT, stderr=subprocess.STDOUT, shell=True).decode('utf-8')
print(">>> {}".format(fName))
except subprocess.CalledProcessError as e:
print(e.output)