Added more verbosity for the scanning process. Changed the filename. Added ffmpeg detection

This commit is contained in:
Fabrice Quenneville 2020-11-05 05:37:48 -05:00
parent 1c383a582e
commit e84695cb9a
3 changed files with 36 additions and 46 deletions

View File

@ -2,7 +2,7 @@
MediaCurator is a Python command line tool to manage a media database. MediaCurator is a Python command line tool to manage a media database.
* List all the video's and their codecs with or without filters * List all the video's and their codecs with or without filters
* Batch recode videos based on filters: extentions, codecs ... * Batch recode videos to more modern codecs (x265 / AV1) based on filters: extentions, codecs ...
## Installation ## Installation

View File

@ -8,14 +8,19 @@
import sys import sys
import os import os
import subprocess import subprocess
import distro
from pathlib import Path from pathlib import Path
from pprint import pprint from pprint import pprint
from hurry.filesize import size from hurry.filesize import size
def main(): def main():
ffmpeg_version = detect_ffmpeg()
if not ffmpeg_version:
print("No ffmpeg version detected")
exit()
print(f"ffmpeg installed: {ffmpeg_version}")
if len(sys.argv) >= 2: if len(sys.argv) >= 2:
if sys.argv[1] == "list": if sys.argv[1] == "list":
if "-file" in sys.argv: if "-file" in sys.argv:
@ -85,74 +90,51 @@ def main():
delete(folder + newfilename) delete(folder + newfilename)
return False return False
def get_wmv_list(path):
return list(path.rglob("*.[wW][mM][vV]"))
def get_avi_list(path):
return list(path.rglob("*.[aA][vV][iI]"))
def get_mkv_list(path):
return list(path.rglob("*.[mM][kK][vV]"))
def get_mp4_list(path):
return list(path.rglob("*.[mM][pP]4"))
def get_m4v_list(path):
return list(path.rglob("*.[mM]4[vV]"))
def get_flv_list(path):
return list(path.rglob("*.[fF][lL][vV]"))
def get_videolist(parentdir): def get_videolist(parentdir):
print(f"Scanning files in {parentdir} for videos")
videolist = [] videolist = []
path = Path(parentdir) path = Path(parentdir)
if "-all_wmv" in sys.argv or "-any" in sys.argv: if "-all_wmv" in sys.argv or "-any" in sys.argv:
videolist += get_wmv_list(path) videolist += list(path.rglob("*.[wW][mM][vV]"))
if "-all_avi" in sys.argv or "-any" in sys.argv: if "-all_avi" in sys.argv or "-any" in sys.argv:
videolist += get_avi_list(path) videolist += list(path.rglob("*.[aA][vV][iI]"))
if "-all_mkv" in sys.argv or "-any" in sys.argv: if "-all_mkv" in sys.argv or "-any" in sys.argv:
videolist += get_mkv_list(path) videolist += list(path.rglob("*.[mM][kK][vV]"))
if "-all_mp4" in sys.argv or "-any" in sys.argv: if "-all_mp4" in sys.argv or "-any" in sys.argv:
videolist += get_mp4_list(path) videolist += list(path.rglob("*.[mM][pP]4"))
if "-all_m4v" in sys.argv or "-any" in sys.argv: if "-all_m4v" in sys.argv or "-any" in sys.argv:
videolist += get_m4v_list(path) videolist += list(path.rglob("*.[mM]4[vV]"))
if "-all_flv" in sys.argv or "-any" in sys.argv: if "-all_flv" in sys.argv or "-any" in sys.argv:
videolist += get_flv_list(path) videolist += list(path.rglob("*.[fF][lL][vV]"))
# Remove folders
videolist_tmp = videolist videolist_tmp = videolist
videolist = [video for video in videolist_tmp if video.is_file()] videolist = [video for video in videolist_tmp if video.is_file()]
# Filter the list for specifi codecs
videolist_tmp = videolist
print(f"Filtering {len(videolist)} videos for the requested parameters")
if "-old" in sys.argv: if "-old" in sys.argv:
videolist = get_old(videolist) videolist += [video for video in videolist_tmp if get_codec(video) not in ["hevc", "av1"]]
if "-mpeg4" in sys.argv: if "-mpeg4" in sys.argv:
videolist = get_mpeg4(videolist) videolist += [video for video in videolist_tmp if get_codec(video) in ["mpeg4", "msmpeg4v3"]]
if "-wmv3" in sys.argv: if "-wmv3" in sys.argv:
videolist = get_wmv3(videolist) videolist += [video for video in videolist_tmp if get_codec(video) in ["wmv3"]]
if "-x264" in sys.argv: if "-x264" in sys.argv:
videolist = get_x264(videolist) videolist += [video for video in videolist_tmp if get_codec(video) in ["x264"]]
print(f"Found {len(videolist)} videos for the requested parameters")
return videolist return videolist
def get_old(videolist_temp):
return [video for video in videolist_temp if get_codec(video) not in ["hevc", "av1"]]
def get_mpeg4(videolist_temp):
return [video for video in videolist_temp if get_codec(video) in ["mpeg4", "msmpeg4v3"]]
def get_wmv3(videolist_temp):
return [video for video in videolist_temp if get_codec(video) in ["wmv3"]]
def get_x264(videolist_temp):
return [video for video in videolist_temp if get_codec(video) in ["x264"]]
def get_codec(filename): def get_codec(filename):
try: try:
args = ["/usr/bin/ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_name", "-of", "default=noprint_wrappers=1:nokey=1", str(filename)] args = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_name", "-of", "default=noprint_wrappers=1:nokey=1", str(filename)]
output = subprocess.check_output(args, stderr=subprocess.STDOUT) output = subprocess.check_output(args, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
print(f"There seams to be an error with {filename}") print(f"There seams to be an error with {filename}")
@ -164,7 +146,7 @@ def convert(oldfilename, newfilename):
print(f"Starting conversion of {oldfilename}({oldsize}) from {get_codec(oldfilename)} ...") print(f"Starting conversion of {oldfilename}({oldsize}) from {get_codec(oldfilename)} ...")
# Preparing ffmpeg command and input file # Preparing ffmpeg command and input file
args = ['/usr/bin/ffmpeg', '-i', oldfilename] args = ['ffmpeg', '-i', oldfilename]
# conversion options # conversion options
args += ['-c:v', 'libx265'] args += ['-c:v', 'libx265']
@ -173,7 +155,7 @@ def convert(oldfilename, newfilename):
# conversion output # conversion output
args += [newfilename] args += [newfilename]
#args = ['/usr/bin/ffmpeg', '-i', oldfilename, newfilename] #args = ['ffmpeg', '-i', oldfilename, newfilename]
try: try:
if "-verbose" in sys.argv: if "-verbose" in sys.argv:
subprocess.call(args) subprocess.call(args)
@ -199,5 +181,12 @@ def delete(filename):
print(f"Deleted {filename}") print(f"Deleted {filename}")
return True return True
def detect_ffmpeg():
try:
txt = subprocess.check_output(['ffmpeg', '-version'], stderr=subprocess.STDOUT).decode()
return txt.partition('\n')[0]
except:
return False
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@ -1,2 +1,3 @@
hurry.filesize hurry.filesize
pathlib pathlib
distro