Use shutil.which to discover ffmpeg.

How did I miss such an easy solution for so long??
So glad I did not go the env var route.
This commit is contained in:
voussoir 2018-03-18 17:03:11 -07:00
parent 84599b44f7
commit e186653e36
2 changed files with 29 additions and 9 deletions

View file

@ -55,7 +55,6 @@ If you are interested in helping, please raise an issue before making any pull r
- Add a `Photo.merge` to combine duplicate entries.
- Generate thumbnails for vector files without falling victim to bombs.
- Allow photos to have nonstandard, orderby-able properties like "release year". How?
- Make the FFmpeg path configurable. Some kind of global config? Or part of the database config file? It's not like every photodb needs a separate one. I don't like using environment variables for application config but maybe it would be appropriate here.
- Improve the appearance of album page. Too many section headers and the "Create album" interface should allow giving a title immediately.
- When users have '%' or '#', etc. in their username, it is difficult to access their /user/ URL. I would prefer to fix it without simply blacklisting those characters.
- Currently, the Jinja templates are having a tangling influence on the backend objects, because Jinja cannot import my other modules like bytestring, but it can access the methods of the objects I pass into the template. As a result, the objects have excess helper methods. Consider making them into Jinja filters instead. Which is also kind of ugly but will move that pollution out of the backend at least.

View file

@ -4,18 +4,39 @@ This file provides data and objects that do not change throughout the runtime.
import converter
import logging
import shutil
import string
import traceback
import warnings
FFMPEG_NOT_FOUND = '''
ffmpeg or ffprobe not found.
Add them to your PATH or use symlinks such that they appear in:
Linux: which ffmpeg & which ffprobe
Windows: where ffmpeg & where ffprobe
'''
def _load_ffmpeg():
ffmpeg_path = shutil.which('ffmpeg')
ffprobe_path = shutil.which('ffprobe')
if (not ffmpeg_path) or (not ffprobe_path):
warnings.warn(FFMPEG_NOT_FOUND)
return None
try:
ffmpeg = converter.Converter(
ffmpeg_path='D:\\software\\ffmpeg\\bin\\ffmpeg.exe',
ffprobe_path='D:\\software\\ffmpeg\\bin\\ffprobe.exe',
ffmpeg_path=ffmpeg_path,
ffprobe_path=ffprobe_path,
)
except converter.ffmpeg.FFMpegError:
traceback.print_exc()
ffmpeg = None
return ffmpeg
ffmpeg = _load_ffmpeg()
FILENAME_BADCHARS = '\\/:*?<>|"'
# Note: Setting user_version pragma in init sequence is safe because it only