批处理媒体的命令行工具

batchmp的Python项目详细描述


状态: 偶尔开发的雨天周末项目:)

要求:

安装:

  • pypi$pip install batchmp
  • 最新源代码库:$pip install git+https://github.com/akpw/batch mp tools.git

博客:

说明

对媒体文件进行批处理管理,从基本属性(如文件名、标签/插图元数据)到媒体内容的高级操作。

该项目是用python 3.4编写的,目前由三个主要的命令行实用程序组成。这三种方法共享应用于生成的文件系统条目流的各种转换的核心概念,因此它们也共享相同的全局选项集。一个快速检查的方法是运行:

    $ renamer -h
    $ tagger -h
    $ bmfp -h

它将显示全局选项以及每个工具的特定命令。可以使用类似的方法获取有关命令级别的更多信息,例如了解有关renamer replace的更多信息

    $ renamer replace -h

默认情况下,工具总是在实际处理之前(只要可能)可视化目标更改。

有关每个实用程序的更多详细信息:

重命名程序是一个多平台批量重命名工具。除了基于regexp的replace、添加文本/日期等常见操作外,它还支持高级操作,如replace期间的可扩展模板处理、跨嵌套目录的多级索引、展开文件夹和清理非媒体文件。 最简单的是,重命名器可用于打印当前目录的内容:

    $ renamer

没有命令参数,重命名器使用print作为默认命令。这也适用于$tagger$bmfp,每个工具都显示与其预期用途相关的信息。 更高级一点,查看第7层嵌套文件夹中隐藏的内容:

    $ renamer print -sl 7

对于当前文件夹的所有子目录中的所有M4A文件的多级索引:

    $ renamer -r -in '*.m4a' index
    /Desktop/_test/Gould
      |-/1
        |- 01 Glenn Gould French Suite 1 In D, BWV812 1 Allemande.m4a
        |- 02 Glenn Gould French Suite 1 In D, BWV812 2 Courante.m4a
        |- 03 Glenn Gould French Suite 1 In D, BWV812 3 Sarabande.m4a
      |-/2
        |- 01 Bach, Johann Sebastian French Suite 5 In G Major, BWV816 1 Allemande.m4a
        |- 02 Bach, Johann Sebastian French Suite 5 In G Major, BWV816 2 Courante.m4a
        |- 03 Bach, Johann Sebastian French Suite 5 In G Major, BWV816 3 Sarabande.m4a
      |-/_Art
    6 files, 3 folders

    Proceed? [y/n]:

使用-sq开关也支持顺序索引。这里有一个重要的细节,默认情况下,重命名程序是可视化目标更改,并在实际执行任何操作之前请求继续操作的权限。

标记器管理媒体元数据,如标记和图片。在多个嵌套目录上设置所选媒体文件中的那些文件现在变得轻而易举了,只需几个简单的命令就可以在几乎任何实际可想象的音频/视频媒体格式上统一工作。虽然易于使用,标记器支持高级元数据操作,例如基于regexp的替换、可扩展的模板处理等。例如,将title标记设置为相应的文件名,后跟track和tracktotal标记的值:

    $ tagger -r -in '*BWV816 1*' set --title '$filename, $track of $tracktotal'
    Targeted after processing:
    /Desktop/_test/Gould
      |-/1
      |-/2
        |- Bach, Johann Sebastian French Suite 5 In G Major, BWV816 1 Allemande.m4a
            Title: Bach, Johann Sebastian French Suite 5 In G Major, BWV816 1 Allemande, 1 of 26
            Album: Bach French Suites BWV 812-817 Vol. II; Glenn Gould
            Artist: Glenn Gould
            Album Artist: Glenn Gould
            Genre: Classical
            Composer: Johann Sebastian Bach (1685-1750)
            Year: 1994
            Track: 1/26
            Disk: 2/2
      |-/Art
    1 files, 3 folders

    Proceed? [y/n]: n

上面的命令显示了一些可用的全局选项:-r用于递归到嵌套文件夹和-in选择媒体文件。在上面的例子中,只选择了一个文件(为了输出简洁),这也可以通过使用文件源模式的-f来实现。

bmfp都是关于高效的媒体内容处理,例如各种格式之间的转换、标准化音量、分割/分割媒体文件、去噪由于处理媒体文件通常会消耗资源,因此bmfp被设计为利用多核处理器。默认情况下,它会自动将作业分解为单独的任务,然后在可用的CPU内核上作为单独的进程运行。 bmfp是在ffmpeg上构建的,需要在命令行中安装并提供。bmfp可以看作是一个批处理ffmpeg运行程序,旨在使ffmpeg的常见使用变得容易,同时又不限制其全部功率。

例如,要将上述示例中的所有文件从m4a转换为flac:

    $ bmfp -r convert -la -tf FLAC

-tf开关指定目标格式,而-la显式地告诉bmfp进行无损转换。

要检查结果,我们只需使用标记器的打印媒体文件信息的能力:

    $ tagger -r -in '*BWV816 1*' print -st -ss
    /Users/AKPower/Desktop/_test/Gould
      |-/1
      |-/2
        |-  7.4MB Bach, Johann Sebastian French Suite 5 in G major, BWV816 1 Allemande.flac
            Title: French Suite 5 in G major, BWV 816 - 1 Allemande
            Album: Bach French Suites BWV 812-817 Vol. II; Glenn Gould
            Artist: Glenn Gould
            Album Artist: Glenn Gould
            Genre: Classical
            Composer: Johann Sebastian Bach (1685-1750)
            Year: 1994
            Track: 1/26
            Disk: 2/2
            Format: FLAC
            Duration: 0:01:48, Bit rate: 548kb/s, Sample rate: 44100Hz, Bit depth: 16
        |-/_backup_15Mar25_094341
          |-  7.9MB Bach, Johann Sebastian French Suite 5 in G major, BWV816 1 Allemande.m4a
              Title: French Suite 5 in G major, BWV 816 - 1 Allemande
              Album: Bach French Suites BWV 812-817 Vol. II; Glenn Gould
              Artist: Glenn Gould
              Album Artist: Glenn Gould
              Genre: Classical
              Composer: Johann Sebastian Bach (1685-1750)
              Year: 1994
              Track: 1/26
              Disk: 2/2
              Format: ALAC
              Duration: 0:01:48, Bit rate: 579kb/s, Sample rate: 44100Hz, Bit depth: 16
      |-/Art
    2 files, 4 folders
    Total size: 15.2MB

从一个简短的一瞥,一切看起来都很好。bmfp使用ffmpeg进行实际的转换,同时处理所有其他事情,如保存标签/图片等。

我将在以后的博客中继续提供更多的示例和常见用例。

cli命令的简要说明(使用-h展开单个命令的详细信息)

重命名程序

Batch renaming of files and directories
  . source directory or source file modes
  . visualises original / targeted folders structure before actual processing
  . supports recursion, can optionally stop at specified end_level
  . supports flattening folders beyond specified target_level
  . supports include / exclude patterns (Unix style)
  . display sorting:
      .. by size/date, ascending/descending
  . action commands:
      .. print      Prints source directory
      .. flatten    Flatten all folders below target level, moving the
                    files up at the target level. By default, deletes all empty flattened folders
      .. index      Adds index to files and directories names
      .. replace    RegExp-based replace in files and directories names. Supports expandable templates, 
                    such as $dirname, $pardirname, $atime, $ctime, etc. For media files, also can process 
                    tag-based templates such as $title, $album, $artist, $albumartist, $genre, $year, $track, 
                    etc.
      .. add_date   Adds date to files and directories names
      .. add_text   Adds text to files and directories names
      .. remove     Removes n characters from files and directories names
      .. capitalize Capitalizes words in files / directories names
      .. delete     Delete selected files and directories

Usage: renamer [-h] [-d DIR] [-f FILE] [Global Options] {Commands} [Commands Options]
Global Options:
  Input source mode:
    [-d, --dir]                 Source directory (default is the current directory)
    [-f, --file]                File to process

  Recursion mode:
    [-r, --recursive]           Recurse into nested folders
    [-el, --end-level]          End level for recursion into nested folders

  Filter files or folders:
    [-in, --include]            Include: Unix-style name patterns separated by ';'
    [-ex, --exclude]            Exclude: Unix-style name patterns separated by ';'
                                  (excludes hidden files by default)
    [-fd, --filter-dirs]        Enable  Include/Exclude patterns on directories
    [-af, --all-files]          Disable Include/Exclude patterns on files
                                  (shows hidden files excluded by default)
  Miscellaneous:
    [-s, --sort]{na|nd|sa|sd}   Sort order for files / folders (name | date, asc | desc)
    [-ni, nested-indent]        Indent for printing nested directories
    [-q, --quiet]               Do not visualise changes / show messages during processing

  Commands:
    {print, index, add_date, add_text, remove, replace, capitalize, flatten, delete, version, info}
    $ renamer {command} -h  #run this for detailed help on individual commands

标记器

支持的格式:

"MP3"、"MP4"、"M4A"、"M4V"、"AIFF"、"ASF"、"QuickTime/MOV", 'flac'、'monkeysaudio'、'musepack', "ogg flac"、"ogg speex"、"ogg theora"、"ogg vorbis", "真音频"、"wavpack"、"optimfrog"

通过ffmpeg支持:"avi"、"flv"、"mkv"、"mka"

    $ renamer -h
    $ tagger -h
    $ bmfp -h
0

bmfp(需要ffmpeg

    $ renamer -h
    $ tagger -h
    $ bmfp -h
1

安装开发版本

  • 克隆repo,然后运行:$python setup.py develop

运行测试

  • 运行路径:$python setup.py test

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

推荐PyPI第三方库


热门话题
java使用并发hashmap减少线程池的内存使用?   java为什么在提交片段后出现错误“getParentActivityIntent:badActivity name”?   vim UltiSnips扩展java包   java给出了一个名称列表,如何插入、删除、显示、搜索和退出?Java程序   java Spring集成:只从FTP服务器下载新的或更新的文件?   使用Java中的Scala:将函数作为参数传递   java线程1每秒填充一个映射,线程2每60秒保存一个条目   java从私有类访问公共类中的方法/字段   如何使用ApacheSpark流媒体和JavaAPI从所有人那里获取英语推文?   java是否可以在父标记和子标记中编写XMLSchemainstance?   java无法读取文本文件,也找不到解决方案   java在运行时加载类时无法创建bean