প্রতি 5 মিনিটে একাধিক ভিডিও থেকে প্লেব্যাক এলোমেলো বিভাগ


9

আমি এই উইকএন্ডে একটি হলিডে পার্টির জন্য এ / ভি সেট আপ করছি এবং একটি ধারণা আছে যে আমি কীভাবে প্রয়োগ করব তা নিশ্চিত নই।

আমার কাছে ক্রিসমাস মুভিগুলির একটি গুচ্ছ (ক্রিসমাস ভ্যাকেশন, ক্রিসমাস স্টোরি, ইটস আ ওয়ান্ডারফুল লাইফ ইত্যাদি) রয়েছে যা আমি পার্টিতে ধারাবাহিকভাবে চালিয়ে যেতে চাই। সেটআপ হ'ল একটি ম্যাকবুক যা একটি প্রজেক্টরের সাথে সংযুক্ত। আমি এটি একটি পটভূমির বিষয়বস্তু হতে চাই যাতে এটি নিঃশব্দে চলতে চলেছে।

যেহেতু সমস্ত সিনেমাগুলি শুরু থেকে শেষ অবধি কেবলমাত্র সমস্ত চালানোর পরিবর্তে, +1 ঘন্টার পরিসরে থাকে, আমি এলোমেলোভাবে এবং ধারাবাহিকভাবে ছোট নমুনাগুলি দেখাতে চাই। আদর্শভাবে এটি যেভাবে কাজ করবে তা হ'ল প্রতি পাঁচ মিনিটে এটি প্লেলিস্ট / ডিরেক্টরিতে কোনও র্যান্ডম মুভি থেকে একটি এলোমেলো 5 মিনিটের নমুনা বেছে নেবে এবং প্রদর্শন করবে। একবার ক্লিপটি শেষ হয়ে গেলে, এটি অন্য একটি ক্লিপটি চয়ন করে এবং নির্বাচিত ক্লিপটিতে কিছু ধরণের বিবর্ণ / মুছা উচিত।

আমার কোন প্লেয়ারটি ব্যবহার করা উচিত তা দিয়ে শুরু করে এটি কোথায় শুরু করব তা নিশ্চিত। ভিএলসি কি এরকম কিছু করতে পারে? MPlayer? যদি বিস্তৃত স্ক্রিপ্টিং ভাষা (র্যান্ডের জন্য সমর্থন), ভিডিও দৈর্ঘ্যের আবিষ্কার, এলোমেলো ভিডিও অ্যাক্সেস সহ কোনও প্লেয়ার থাকে। যদি তা হয় তবে আমি সম্ভবত আরটিএফএম সক্ষম হয়ে এটিকে কাজ করতে সক্ষম করব; এটা ঠিক যে আমার মৃতপ্রান্ত থেকে ব্যাকট্র্যাক করার সময় নেই তাই আমি সঠিক ট্র্যাক থেকে যাত্রা শুরু করতে চাই। কোন পরামর্শ?

উত্তর:


11

সময় মতো উত্তর না পাওয়ার পরে (এক সপ্তাহ আগে এটি পোস্ট করা উচিত), আমি ভিএলসিকে স্বয়ংক্রিয়তায় ডুব দিয়ে শেষ করেছি। আমি ইউএনআইএক্স সকেট ব্যবহার করে ভিএলসি নিয়ন্ত্রণ করার বিষয়ে একটি ব্লগ পোস্টের এই রত্নটি পেয়েছি । এর সংক্ষিপ্তসারটি হ'ল আপনি যদি ভিএলসি সঠিকভাবে কনফিগার করেন তবে আপনি আদেশ কমান্ড লাইন সিনট্যাক্সের মাধ্যমে এটি পাঠাতে পারেন:

echo [VLC Command] | nc -U /Users/vlc.sock

যেখানে [ভিএলসি কমান্ড] হ'ল কোনও কমান্ড যা ভিএলসি সমর্থন করে (আপনি " লংহেল্প " কমান্ডটি পাঠিয়ে কমান্ডের একটি তালিকা পেতে পারেন )।

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

import subprocess
import random
import time
import os
import sys

## Just seed if you want to get the same sequence after restarting the script
## random.seed()

SocketLocation = "/Users/vlc.sock"

## You can enter a directory as a command line argument; otherwise it will use the default
if(len(sys.argv) >= 2):
    MoviesDir = sys.argv[1]
else:
    MoviesDir = "/Users/Movies/Xmas"

## You can enter the interval in seconds as the second command line argument as well
if(len(sys.argv) >= 3):
    IntervalInSeconds = int(sys.argv[2])
else:
    IntervalInSeconds = 240 

## Sends an arbitrary command to VLC
def RunVLCCommand(cmd):
    p = subprocess.Popen("echo " + cmd + " | nc -U " + SocketLocation, shell = True, stdout = subprocess.PIPE)
    errcode = p.wait()
    retval = p.stdout.read()
    print "returning: " + retval
    return retval 

## Clear the playlist
RunVLCCommand("clear")

RawMovieFiles = os.listdir(MoviesDir)
MovieFiles = []
FileLengths = []

## Loop through the directory listing and add each avi or divx file to the playlist
for MovieFile in RawMovieFiles:
    if(MovieFile.endswith(".avi") or MovieFile.endswith(".divx")):
        MovieFiles.append(MovieFile)
        RunVLCCommand("add \"" + MoviesDir + "/" + MovieFile + "\"")

PlayListItemNum = 0

## Loop forever
while 1==1:
    ## Choose a random movie from the playlist
    PlayListItemNum = random.randint(1, len(MovieFiles))
    RunVLCCommand("goto " + str(PlayListItemNum))

    FileLength = "notadigit"
    tries = 0

    ## Sometimes get_length doesn't work right away so retry 50 times
    while tries < 50 and FileLength .strip().isdigit() == False or FileLength.strip() == "0":
        tries+=1
        FileLength = RunVLCCommand("get_length")    

    ## If get_length fails 50 times in a row, just choose another movie
    if tries < 50:
        ## Choose a random start time 
        StartTimeCode = random.randint(30, int(FileLength) - IntervalInSeconds);


        RunVLCCommand("seek " + str(StartTimeCode))

        ## Turn on fullscreen
        RunVLCCommand("f on")

        ## Wait until the interval expires
        time.sleep(IntervalInSeconds)   
        ## Stop the movie
        RunVLCCommand("stop")   
        tries = 0
        ## Wait until the video stops playing or 50 tries, whichever comes first
        while tries < 50 and RunVLCCommand("is_playing").strip() == "1":    
            time.sleep(1) 
            tries+=1

ওহ এবং পার্শ্ব নোট হিসাবে, আমাদের এটি একটি প্রজেক্টরের উপর চলছিল এবং এটি পার্টির হিট। প্রত্যেকেই সেকেন্ডের মানগুলি নিয়ে ঘোরাফেরা করতে এবং যুক্ত করতে নতুন ভিডিওগুলি পছন্দ করত। আমাকে শায়িত করিনি , তবে প্রায়!

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


বাহ, এটি সত্যিই চতুর সমাধান। আপনি রিয়েল-টাইম হিসাবে যেমনটি চেয়েছিলেন ঠিক ঠিক তেমন চালানোর চেষ্টা করুন।
ফিদেলি

1
আমি এই ধারণাটি একটি ছোট মিডিয়া ব্যবহারকারীর কাছে প্রসারিত করার বিষয়ে ভাবছি, যা বৈশিষ্ট্যগুলি: সুনির্দিষ্ট ক্রম, পছন্দসই কাট-আউটস, ফিল্টার মিশ্রণ, একটি কনফিগারেশন সংরক্ষণ / কোনও ফাইল থেকে এটি পড়া এবং মিডিয়াতে ইভেন্ট ভিত্তিক প্লে। কেউ কি এমন প্রকল্পে আগ্রহী?
2'12

4

আমি অর্ধ উত্তর পোস্ট না করে এই মন্তব্য করতে পছন্দ করব, তবে আমার যথেষ্ট খ্যাতি নেই। সম্ভবত এটি অন্য কেউ তৈরি করতে পারেন।

আমি পুরো ভিডিওটি আগেই তৈরি করার পরামর্শ দেব। নিম্নোক্ত কমান্ড ব্যবহার করে একটি ক্লিপ তৈরি করতে মেনকোডার ব্যবহার করতে বাশ স্ক্রিপ্ট লিখুন:

mencoder -ss START -endpos 300 MOVIE.AVI -oac copy \
-ovc copy -o MOVIE-CLIP-##.avi

এই কমান্ডে, START হ'ল একটি এলোমেলো পয়েন্ট হতে পারে, MOVIE.AVI এলোমেলো উত্স মুভি এবং মুভি-ক্লিপ - ## আভি হল একটি উত্পন্ন ক্লিপ। -Oac এবং -ovc স্যুইচগুলি নির্দিষ্ট করে যে আউটপুট কোডেকগুলি উত্সের মতো হওয়া উচিত। -Endpos স্যুইচটি ক্লিপটির দৈর্ঘ্য নির্দিষ্ট করে 300 এস to নোট করুন যে এর ভিডিও দৈর্ঘ্যের আবিষ্কার নেই, যা আমি প্রতিটি সমস্যার জন্য ম্যানুয়ালি সহজেই সমাধান করা এমন একটি সমস্যা হিসাবে বিবেচনা করি (আপনার কেবলমাত্র হাতে গোনা কিছু রয়েছে)। আপনার স্ক্রিপ্টটি বেশ কয়েকটি ক্লিপ তৈরি করতে সেই আদেশের সাহায্যে লুপ করতে পারে।

ক্লিপগুলিতে যোগ দিতে, আপনি একটি কমান্ড ব্যবহার করতে পারেন:

mencoder -oac copy -ovc copy -idx -o MOVIE-CLIPS.AVI \
MOVIE-CLIP-01.AVI MOVIE-CLIP-02.AVI ... MOVIE-CLIP-NN.AVI

এখান থেকে আমি আরও অভিজ্ঞতার সাথে কাউকে বাছাইয়ের পরামর্শ দেব। আমি নিশ্চিত নই যে ক্লিপগুলির মধ্যে ম্লান / দ্রবীভূত রূপান্তরগুলি মেনকোডারের কোনও উপায় আছে কিনা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.