Skip to content

MouJieQin/iina-for-varchive

 
 

Repository files navigation

IINA for Varchive

Based on the original iina porject, this project add websocket module to implement IPC(Internet Process Connection) with Varchive(video archive), a web extension app to archive videos. Besides that, there are additional custom features, such as mpv-like commands using keyboard shortcuts.

Tip

The following chart shows the key and its action. The key binding is already included in the IINA for Varchive default key bindings config when its key is not empty. Otherwise you will have to add key bindings you need in the config you are using in your IINA preferences.

Key Action
a varchive archive
o varchive open-in-varchive
1 sub-text
secondary-sub-text
2 sub-start
secondary-sub-start
3 custom-ab-loop current 1.0 1.0
4 custom-ab-loop sub
custom-ab-loop secondary-sub
5 custom-ab-loop bookmarks
bookmark sub-start
bookmark secondary-sub-start
6 bookmark mark-preview
7 bookmark mark
8 bookmark seek-prev
9 bookmark seek-next
0 bookmark remove
Shift+BS bookmark clear
B skip-manager prev
F skip-manager next

Features

varchive <flag>

Tip

You could check varchive to know more information about it.

  • archive

Send current video url to varchive server to archive the video, even if it's a network resource.

  • open-in-varchive

Open the varchive page of this video in varchive app if it's running, or in browser, but only when the video is archived.

sub-text

Show the current subtitle text regardless of sub visibility.

secondary-sub-text

Same as sub-text, but for the secondary subtitle.

sub-start

Seek to the current subtitle start time.

secondary-sub-start

Same as sub-start, but for the secondary subtitle.

custom-ab-loop <flag>

It does what the abloop of mpv do, but provides a conevience.

the flag argument:

  • sub

    Cycle through A-B loop states, in which the current subtitle start time will be set as A point, and the current subtitle end time will be set as B point.

  • secondary-sub

    Same as sub above, but for the secondary subtitle.

  • current [<value1>] [<value2>]

    The value1 and value2 should be positive decimals. The default value of the value1 and the valu2 is 1.0. The point that is 'value1' seconds leftward away from the current position will be set as A point and the point that is 'value2' seconds rightward away from the current position will be set as B point. It might be used to listen to a word hard to understand.

  • bookmarks

    Cycle the adjacent pairs of bookmarks in which the current position is (see bookmark following).

bookmark <flag>

It marks some timestamps as bookmarks and shows knobs on progress bar, enabling to seek between timestamps marked. You can edit bookmarks on the corresponding varchive page of a video.

the flag argument:

  • mark

    Mark the current timestamp position as a bookmark.

    The current video will be archived by varchive if it's not archived yet.

  • mark-preview

    Same as mark, but additionally generate the preview(images) of the current position.

  • seek-prev

    Seek to the previous bookmark closest to the current position.

  • seek-next

    Same as seek-prev, but seek to the next bookmark .

  • remove

    Remove the bookmark marked at the current position.

  • clear

    Clear all bookmarks marked.

skip-manager <flag>

The skip-manager keeps the latest 100 skip(seeking) records of current playing video. When you accidentally move the progress knob away from the point you are watching, you could use it to quickly reach back to the original timestamp. Note: The vlaue of the index to locate records will be reset when a new seek coming in. The skip-manager doesn't keep the skip records caused by itself.

  • prev

    Seek to the previous timestamp you skipped from.

  • next

    Same as the prev, but seek to the next skipped timestamp.


IINA

IINA is the modern video player for macOS.

Website · Releases · Telegram Group


Crowdin

Features

  • Based on mpv, which provides the best decoding capacity on macOS
  • Designed with modern versions of macOS (10.11+) in mind
  • All the features you need for video and music: subtitles, playlists, chapters…and much, much more!
  • Force Touch, picture-in-picture and advanced Touch Bar support
  • Customizable user interface including multiple color schemes and on screen controller (OSC) layout positioning
  • Standalone Music Mode designed for audio files
  • Video thumbnails
  • Online subtitle searching and intelligent local subtitle matching
  • Unlimited playback history
  • Convenient and interactive settings for video/audio filters
  • Fully customizable keyboard, mouse, trackpad, and gesture controls
  • mpv configuration files and script system for advanced users
  • Command line tool and browser extensions provided
  • In active development

Building

IINA uses mpv for media playback. To build IINA, you can either fetch copies of these libraries we have already built (using the instructions below) or build them yourself by skipping to these instructions.

Using the pre-compiled libraries

  1. Download pre-compiled libraries by running
./other/download_libs.sh
  • Tips:
    • Change the URL in the shell script if you want to download arch-specific binaries. By default, it will download the universal ones. You can download other binaries from https://iina.io/dylibs/${ARCH}/fileList.txt where ARCH can be universal, arm64 and x86_64.
    • If you want to build an older IINA version, make sure to download the corresponding dylibs. For example, https://iina.io/dylibs/1.2.0/universal/fileList.txt.
  1. Open iina.xcodeproj in the latest public version of Xcode. IINA may not build if you use any other version.

  2. Build the project.

Building mpv manually

  1. Build your own copy of mpv. If you're using a package manager to manage dependencies, the steps below outline the process.

    With Homebrew

    Use our tap as it passes in the correct flags to mpv's configure script:

    brew tap iina/homebrew-mpv-iina
    brew install mpv-iina

    With MacPorts

    Pass in these flags when installing:

    port install mpv +uchardet -bundle -rubberband configure.args="--enable-libmpv-shared --enable-lua --enable-libarchive --enable-libbluray --disable-swift --disable-rubberband"
  2. Copy the corresponding mpv and FFmpeg header files into deps/include/, replacing the current ones. You can find them on GitHub (e.g. mpv), but it's recommended to copy them from the Homebrew or MacPorts installation. Always make sure the header files have the same version of the dylibs.

  3. Run other/parse_doc.rb. This script will fetch the latest mpv documentation and generate MPVOption.swift, MPVCommand.swift and MPVProperty.swift. Copy them from other/ to iina/, replacing the current files. This is only needed when updating libmpv. Note that if the API changes, the player source code may also need to be changed.

  4. Run other/change_lib_dependencies.rb. This script will deploy the dependent libraries into deps/lib. If you're using a package manager to manage dependencies, invoke it like so:

    With Homebrew

    other/change_lib_dependencies.rb "$(brew --prefix)" "$(brew --prefix mpv-iina)/lib/libmpv.dylib"

    With MacPorts

    port contents mpv | grep '\.dylib$' | xargs other/change_lib_dependencies.rb /opt/local
  5. Open iina.xcodeproj in the latest public version of Xcode. IINA may not build if you use any other version.

  6. Remove all references to .dylib files from the Frameworks group in the sidebar and add all the .dylib files in deps/lib to that group by clicking "Add Files to iina..." in the context menu.

  7. Add all the imported .dylib files into the "Copy Dylibs" phase under "Build Phases" tab of the iina target.

  8. Make sure the necessary .dylib files are present in the "Link Binary With Libraries" phase under "Build Phases". Xcode should have already added all dylibs under this section.

  9. Build the project.

Contributing

IINA is always looking for contributions, whether it's through bug reports, code, or new translations.

  • If you find a bug in IINA, or would like to suggest a new feature or enhancement, it'd be nice if you could search your problem first; while we don't mind duplicates, keeping issues unique helps us save time and consolidates effort. If you can't find your issue, feel free to file a new one.

  • If you're looking to contribute code, please read CONTRIBUTING.md — it has information on IINA's process for handling contributions, and tips on how the code is structured to make your work easier.

  • If you'd like to translate IINA to your language, please visit IINA's instance of Crowdin. You can create an account for free and start translating and/or approving. Please do not send a pull request to this repo directly, Crowdin will automatically sync new translations with our repo. If you want to translate IINA into a new language that is currently not on the list, feel free to open an issue.

Packages

No packages published

Languages

  • Swift 91.7%
  • Rich Text Format 5.8%
  • Objective-C 1.1%
  • Ruby 0.7%
  • JavaScript 0.3%
  • HTML 0.2%
  • Shell 0.2%