管理媒体的脚本

media-management-scripts的Python项目详细描述


媒体管理脚本

这是一组用于管理媒体文件(如电影或电视节目)的命令行工具。

安装

安装工具:

pip安装媒体管理脚本

您还需要安装其他程序:

Mac操作系统

brew安装ffmpeg对话框

ubuntu

apt install ffmpeg dialog

TVDB

如果要使用TVDB执行某些命令,请在https://www.thetVDB.com上创建一个帐户,然后在此处创建API密钥

创建一个包含以下内容的文件

[tvdb]username=<your_user_name>userkey=<your_user_key>apikey=<your_api_key>

用法

--help传递给子命令以获取详细帮助。下面将详细介绍主要功能。

大多数重命名或移动文件的命令都有一个dry run模式(-n--dry run),该模式将输出操作,以便您可以验证结果。

主要工具

转换

元数据

重命名

搜索

电视重命名

帮助输出

usage: manage-media [-h] [-v]

Sub commands
    combine-subtitles   Combine a video files with subtitle file
    combine-all         Combine a directory tree of video files with subtitle
                        file
    concat-mp4          Concat multiple mp4 files together
    convert             Convert a file
    find-episodes       Find Season/Episode/Part using file names
    itunes              Attempts to rename iTunes episodes to the standard
                        Plex format.
    metadata            Show metadata for a file
    compare             Compare metadata between files
    compare-directory   Show metadata for a file
    movie-rename        Renames a file based on TheMovieDB
    rename              Renames a set of files to the specified template
    select-streams      Extract specific streams in a video file to a new file
    split               Split a file
    subtitles           Convert subtitles to SRT
    tv-rename           Renames files in a directory to sXXeYY. Can also use
                        TVDB to name files (<show> - SxxeYY - <episode_name>)

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version

转换

将视频文件转换为不同的视频或音频编解码器

示例:

  • 转换为H.264
    • 管理媒体转换--视频编解码器h264<;输入>;<;输出>;
  • 转换为HEVC/H.265:
    • 管理媒体转换--视频编解码器HEVC<;输入>;<;输出>;
  • 使用AC3音频转换为HEVC:
    • 管理媒体转换--视频编解码器HEVC--音频编解码器AC3<;输入>;<;输出>;
  • 转换为HEVC,但不转换音频:
    • 管理媒体转换--vc hevc--ac copy<;input>;<;output>;
  • 缩放到480p
    • 管理媒体转换--缩放480
  • 转换为H.264并删除隔行扫描(例如在MPEG2 DVD上)
    • 管理媒体转换--VC H264--取消交错
  • 转换整个文件目录
    • 管理媒体转换--vc h264--大容量<;输入目录>;<;输出目录>;

元数据

获取文件的元数据的简单输出。或者以json格式获取大量元数据

简单输出

管理媒体元数据<;输入>;

Battlestar Galatica (2003) - s00e01 - Battlestar Galactica The Miniseries (1).mkv
   Directory: /Volumes/Media/TV Shows/Battlestar Galactica/Season 0/
   Title: Battlestar Galactica: Season 1 (Disc 1)
   Size: 6.8GB
   Format: matroska,webm
   Duration: 1h34m39s
   Bitrate: 10117 Kbps
   Video: h264 8 bit (1920x1080)
   Audio:
     aac (eng, 5.1)
   Subtitles: eng, spa, fra
   Ripped: True

json

管理媒体元数据--json<;input>;

{"file":"/Volumes/Media/TV Shows/Battlestar Galactica/Season 0/Battlestar Galatica (2003) - s00e01 - Battlestar Galactica The Miniseries (1).mkv","title":"Battlestar Galactica: Season 1 (Disc 1)","duration":5679.362,"duration_str":"1h34m39s","size":7354722701,"size_str":"6.8GB","resolution":"HIGH_DEF","bit_rate":10359928,"bit_rate_str":"10117 Kbps","ripped":true,"format":"matroska,webm","format_long_name":"Matroska / WebM","mime_type":"video/x-matroska","tags":{"title":"Battlestar Galactica: Season 1 (Disc 1)","RIPPED":"true","ENCODER":"Lavf57.56.100"},"video_streams":[...],"audio_streams":[...],"subtitle_streams":[...],"other_streams":[...],"chapters":[...],"interlace":null}

重命名

重命名文件的灵活工具

根据模板重命名文件。

模板可以通过用${…}包围来包含变量或表达式。函数可以像${upper(i)}${i upper}那样调用

以下变量可用:

  • i/索引-正在重命名的当前文件的索引
  • wo_ext-不带扩展名的文件名basename
  • ext-当前文件的文件扩展名(不带".")
  • 文件名-当前文件的文件名(basename)
  • re/regex-regex匹配组的列表(使用re[0]re[1]等)

提供以下功能:

  • 大写-大写输入
  • 小写-小写输入
  • if empty(a,b,c)-如果a为空,则b,否则c
  • lpad(a,b:int)-左焊盘a到长度b(默认为2+),带空格
  • zpad(a,b:int)-左焊盘a到长度b(默认为2+)带零

lpad/zpad-默认情况下,pad至少为2个字符。如果有100多个文件,则为3个字符、1000多个文件、4个字符等。

正则表达式: 如果包含正则表达式,则匹配组(0=完全匹配,>;0=匹配组)在列表"re"或"regex"中可用。 如果可能的话,每个匹配组都会转换为int,因此填充了零的int将丢失零。

示例:

Input: S02E04.mp4
Regex: S(\d+)E(\d+)

Template: 'Season ${re[1]} Episode ${re[2]}.{ext}'
Result: 'Season 2 Episode 4.mp4'

Template: 'Season ${re[1] | zpad} Episode ${zpad(re[2], 3)}.{ext}'
Results: 'Season 02 Episode 004.mp4'
Input: whatever.mp4
Regex: S(\d+)E(\d)
Template: 'Season ${ifempty(re[1], 'unknown', re[1])} Episode ${re[2]}.{ext}'
Result: 'Season unknown Episode .mp4'

搜索

在目录中搜索匹配参数的视频文件。注意:这可能需要很长时间,因为它必须读取每个文件的元数据。 您可以使用缓存元数据的--db<;file加速同一目录中的多个搜索。

如果视频有多个流,则比较意味着至少有一个流匹配。

可用参数:

视频:

  • v.codec-视频编解码器(h264、h265、mpeg2等)
  • v.width-视频像素宽度
  • v.height-视频像素高度

音频:

  • a.codec-音频编解码器(AAC,AC3)
  • a.频道-音频频道的数量(立体声=2、5.1=6等)
  • a.lang-音频曲目的语言

字幕:

  • s.codec-字幕编解码器(srt、hdmv-pgs、mov-text等)
  • s.lang-字幕曲目的语言

其他:

  • 翻录-视频是否标记为翻录
  • 比特率-总平均比特率
  • 分辨率-分辨率名称(低分辨率、高分辨率等)

元数据:

  • meta.xyz-遵循基本的JSON元数据输出

功能:

  • is null(xyz)-如果值为null,则返回true
  • 全部(xyz)-检查所有流而不是一个流匹配

示例:

  • 查找所有H264视频
    • v.codec=h264
  • 查找所有带有立体声AAC的H264视频
    • v.codec=h264和a.codec=aac和a.channels=2
  • 查找所有H265或H264和AAC视频
    • a.codec=aac和(v.codec=h265或v.codec=h264)
    • a.codec=aac和v.codec输入[h265,h264]
  • 查找所有没有英文字幕的视频
    • s.lang!=发动机
  • 查找分辨率低于1080的视频
    • v.height<;1080
  • 查找所有只有AAC音频的视频
    • 全部(a.codec)=AAC

电视重命名

将目录中的文件重命名为sxxeyy

例如,如果你撕下了一些battlestar galactica的图片,你可能会有一个类似这样的文件结构:

  • 第1季
    • bsg_季节1_disc1_t00.mkv
    • bsg_季节1_disc1_t01.mkv
    • bsg_季节1_disc1_t02.mkv
    • bsg_季节1_disc1_t03.mkv
  • 第1季第2集
    • bsg_季节1_disc2_t00.mkv
    • bsg_季节1_disc2_t01.mkv
    • bsg_季节1_disc2_t02.mkv
    • bsg_季节1_disc2_t03.mkv

管理媒体电视重命名-s 1-e1--tvdb--show"battlestar galactica"--输出"bsg/seasy 1"bsg\u seasure1\u光盘*

结果

    BRG
    • 第1季
      • 太空堡垒Galatica(2003)-s01e01-33.mkv
      • 太空堡垒Galatica(2003)-s01e02-water.mkv
      • 太空堡垒加拉蒂卡(2003)-s01e03-巴士底狱日.mkv
      • 太空堡垒加拉蒂卡(2003)-s01e04-悔罪法案.mkv
      • 太空堡垒加拉蒂卡(2003)-s01e05-你不能再回家了。mkv
      • 太空堡垒加拉蒂卡(2003)-s01e06-石蕊.mkv
      • 太空堡垒Galatica(2003)-s01e07-六度分离.mkv
      • 太空堡垒加拉蒂卡(2003)-s01e08-肉和bone.mkv

配置

您可以通过创建文件~/.config/mms/config.ini来配置在何处查找各种可执行文件。默认情况下,命令将使用路径中的可执行文件。

您可以看到哪些工具与管理介质一起使用

配置文件示例

[main]ffmpeg=/path/to/ffmpeg

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring数据JPA+Hibernate在不首先找到父实体的情况下保存子实体   php Java:如何从CLI接收命令   spring为java中的导出数据创建访问文件   java在Windows 8.1上安装Play Framework   java Spring启动白标签错误页面(类型=未找到,状态=404)   java如何在单击时从数组中绘制?   java fn:substringAfter()上次出现   java在IFR语句中使用方法返回   java onPause()或onStop()的名称   对关联对象的关联对象具有条件的java HQL查询   java只打印一次总值,无需迭代   java如何使用抽象Uri buildOn()方法?   如何在Java中执行sudo命令并获得错误输出?   java反射:避免对getConstructor(类<?>…)的未经检查的警告调用作为原始类型类的成员   Java:如何从类中创建的对象调用类方法?   java如何在电子邮件中嵌入图像?   java如何在Android上启用详细GC?   java什么是串行版本id?