এমপিভি দিয়ে স্বয়ংক্রিয়ভাবে সাবটাইটেল খেলুন


13

সাবটাইটেল ফাইলগুলি .srt থেকে .sub থেকে .ass এবং আরও অনেক কিছু ফর্ম্যাটে আসে। মিডিয়া ফাইল সহ সাবটাইটেল ফাইলগুলি অনুসন্ধান করার জন্য এবং যদি এটি স্বয়ংক্রিয়ভাবে ফাইলটি চালানো শুরু করে তবে এমপিভি কে বলার উপায় আছে কি? বর্তমানে আমাকে এই জাতীয় কিছু করতে হবে যা ফাইলের নামের উপর নির্ভর করে বেশ দীর্ঘ হতে পারে -

[$] mpv --list-options | grep sub-file                                                                                              
(null) requires an argument
 --sub-file                       String list (default: ) [file]

উত্তর প্রত্যাশী।

আপডেট 1 - একটি সাধারণ সিনেমা যা। এসআরটি (বা সাবস্ক্রিপ্ট) রয়েছে

[$] mpv Winter.Sleep.\(Kis.Uykusu\).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv                                                    
(null) requires an argument
Playing: Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 (aac)
 (+) Subs  --sid=1 'Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.srt' (subrip) (external)
[vo/opengl] Could not create EGL context!
[sub] Using subtitle charset: UTF-8-BROKEN
AO: [alsa] 48000Hz stereo 2ch float
VO: [opengl] 1280x536 yuv420p
AV: 00:02:14 / 03:16:45 (1%) A-V:  0.000

সবচেয়ে আকর্ষণীয় লাইনটি হ'ল: -

(+) Subs  --sid=1 'Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.srt' (subrip) (external)

এখন যদি ফাইলটি একই ফাইলের সাথে .ass বা .sub হিসাবে থাকে তবে এটি কাজ করবে না। আমি এটি অনেকগুলি মিডিয়া ফাইলগুলিতে চেষ্টা করেছি যার সেই এক্সটেনশনগুলি রয়েছে এবং প্রতিবার এমপিভি ভিডিও এবং অডিও এবং প্রোটোকল লোড করে তবে বাহ্যিক সাবটাইটেল ফাইলগুলি নয়।

আপডেট 2 - .p স্ক্রিপ্ট অংশটি এমপিভির বিটিএস-এ বাগ হিসাবে তালিকাভুক্ত করা হয়েছে - https://github.com/mpv-player/mpv/issues/2846

আপডেট 3 - আপস্ট্রিমের সাহায্যে ডিবাগ করার চেষ্টা করা হয়েছে, তার জন্য https://github.com/mpv-player/mpv/issues/3091 দায়ের করেছেন ।

দেখে মনে হচ্ছে এটি এমপিভি নয় যা দায়বদ্ধ তবে ffmpeg (এবং libavformat) যা সাবটাইটেলগুলি ডিকোড করার কথা। সুতরাং এটিতেও ffmpeg যুক্ত করেছে।


যদি সাবটাইটেল ফাইলটির মিডিয়া ফাইলের ঠিক একই নাম থাকে (সাবস্ক্রিপ্ট বাদে অবশ্যই) এমপিভি এটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে, আমি মনে করি।
ফাহিম মিঠা

এটা হয় না। .Rrt ব্যতীত এটি অন্যের সম্পর্কে জানে না। এটি 0.14 ডান্নোতে হয় যদি এটি ০.০৫, ০.০ in বা ০.০ in এ স্থির করা হয়েছে তবে তিনটি প্রকাশনা এখনও দেবিয়ানে নেই।
শিরিশ

উহু. হ্যাঁ, আমি সবসময় ব্যবহার করি srt। আপনি এটি সম্পর্কে একটি সমস্যা দায়ের করতে পারেন।
ফাহিম মিঠা

প্যাকেজিং 0.17ব্যবহারের জন্য ডেবিয়ান প্যাকেজটি তৈরি করা মোটামুটি সহজ হওয়া উচিত 0.140.14প্যাকেজিং মূল প্রজেক্টের বিরুদ্ধে 4 প্যাচ আছে, কিন্তু তারা বেশিরভাগই বেশ তুচ্ছ দেখুন।
ফাহিম মিঠা

উত্তর:


15

যেমন দেখা গেছে man mpv:

   --sub-auto=<no|exact|fuzzy|all>, --no-sub-auto
          Load additional subtitle files matching the video filename. The
          parameter specifies how external subtitle files are matched.
          exact is enabled by default.

          no     Don't automatically load external subtitle files.

          exact  Load the media filename with subtitle file extension
                 (default).

          fuzzy  Load all subs containing media filename.

          all    Load all subs in the current and --sub-paths directories.

exactউপযুক্ত পছন্দ মত মনে হবে, কিন্তু যেহেতু এটি ডিফল্ট এবং এটি ফাইলগুলি লোড করে না [video name minus extension].srt, fuzzyএটি পরের সেরা বাজি এবং এটি আমার সিস্টেমে কাজ করে।

তাই ঠিক echo "sub-auto=fuzzy" >> ~/.config/mpv/mpv.conf


2

আমি একটি সাধারণ ফাংশন ব্যবহার করি:

mpvs() {
   local file="$1"
   mpv --sub-file="${file%.*}".srt "$file"
}

আপনি যদি বিভিন্ন এক্সটেনশান সহ সাবটাইটেল ফাইল উপস্থিতির জন্য পরীক্ষা করতে চান তবে আপনি আরও জটিল পদ্ধতির ব্যবহার করতে পারেন:

#!/usr/bin/env bash
# Play subtitles for a film if they exist

movie="$1"
mdir="${movie%/*}"
name="${movie##*/}"

cd "$mdir"
for file in *; do
  if [[ ${file%.*} == ${name%.*} ]]; then
    title="${file%.*}"
    for match in "$title"*; do
      if [[ $match =~ @*.(ass|srt|sub) ]]; then
        subtitles="$match"
      fi
    done
  fi
done

if [[ -n $subtitles ]]; then
  mpv --subfile="$subtitles" "$name"
else
  printf "%s\n" "No subs found, playing film anyway..."
  mpv "$name"
fi

# vim:set sw=2 ts=2 et:

জেসনওয়ারিয়ান, আমি এটিকে সহজ এবং আশাবাদী .config ফাইলটিতে রাখতে পছন্দ করব। আমি আরও তথ্য দিয়ে আমার প্রশ্ন আপডেট করেছি।
শিরিশ

@ শিরীশ আমি সহজ কিছু কল্পনাও করতে পারি না; এবং যদি আপনি এটি কনফিগার ফাইলে চান তবে আপনার একটি বৈশিষ্ট্য অনুরোধ খুলতে হবে।
জেসনওয়ারিয়ান

0

আপনি যদি এই জাতীয় কিছু তৈরি করতে চান, (এমপিভি সম্পর্কিত কোনও ফাইল ক্লিক করুন এবং উপশিরোনাম দিয়ে খেলুন)

ভিতরে /usr/share/applications/mpv.desktop:

     ...
     Exec=/home/username/custom_apps/mpv2.sh %F
     ...

তারপরে mpv2.shস্ক্রিপ্টের ভিতরে :

#!/usr/bin/env bash
subtitles=""
movie="$1"
mdir="${movie%/*}"
name="${movie##*/}"
dir="$(readlink -f "$1")"
mdir="${dir1%/*}"
for file in $mdir/*; do
  if [[ ${file%.*} == ${1%.*} ]]; then
    title="${file%.*}"
    for match in "$title"*; do
      if [[ $match =~ @*.(vtt|ass|srt|sub) ]]; then
        subtitles="$match"
      fi
    done
  fi
done
if [[ -n $subtitles ]]; then
        mpv "$mdir1" --sub-file="$subtitles"
else
    mpv "$name"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.