ইউটিউব-ডিএল কমান্ড দিয়ে কীভাবে ভিডিওর অংশটি ডাউনলোড করবেন?


61

আমি উবুন্টু ব্যবহার করছি, এবং ইউটিউব-ডিএল কমান্ডটি পুরোপুরি ঠিকঠাকভাবে কাজ করছে।

আমি খুব দীর্ঘ ভিডিওর অংশটিই ডাউনলোড করতে চাই। সুতরাং আমি ভিডিওটির কয়েক মিনিটের অংশটি ডাউনলোড করতে চাই। 13 মিনিট থেকে 17 মিনিটের উদাহরণ।

এটি করার কোনও উপায় আছে কি?

উত্তর:


44

আমি বিশ্বাস করি না youtube-dlএকা আপনি যা করতে চান তা করবে। তবে আপনি এটিকে ffmpeg এর মতো একটি কমান্ড লাইন ইউটিলিটির সাথে একত্রিত করতে পারেন।

ইউটিউব-ডিএল ব্যবহার করে প্রথমে আসল URL টি অর্জন করুন:

youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"

কমান্ডের আউটপুট অনুলিপি করুন এবং এটি -iপরবর্তী কমান্ডের প্যারামিটারের অংশ হিসাবে আটকান :

ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4

-ssএই অবস্থান রাজ্যে প্যারামিটার ভিডিওতে 15 সেকেন্ড পর্যন্ত সমস্ত ইনপুট আপ বাতিল করার। -tবিকল্প রাজ্যের 10 সেকেন্ডের জন্য ক্যাপচার। কমান্ডের বাকী অংশটি এটি এমপি 4 হিসাবে সঞ্চয় করতে বলে।

ffmpeg একটি জনপ্রিয় সরঞ্জাম এবং জনপ্রিয় ওএস সংগ্রহস্থল / প্যাকেজ পরিচালকদের যে কোনও একটিতে হওয়া উচিত।


8
অতএব মূলত, আপনাকে এখনও পুরো ভিডিওটি ডাউনলোড করতে হবে এবং এটি নিজেই
অ্যান্টনি

12
আপনি যদি ভিডিও স্লাইজ শেষ করার সময় নির্দিষ্ট করতে চান তবে আপনি -t এর পরিবর্তে -to বিকল্পটি ব্যবহার করতে পারেন। ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
4

5
@ অ্যান্টনি ffmpegআসলে আপনার নির্দিষ্ট করা অংশটি ডাউনলোড করবে।
আকাইহোলা

17
ffmpeg $(youtube-dl -g 'https://www.youtube.com/watch?v=oHg5SJYRHA0' | sed "s/.*/-ss 00:05 -i &/") -t 01:00 -c copy out.mkv

5
আপনি কি ব্যাখ্যা করতে পারেন, এটি কী করে, কীভাবে এটি কাজ করে?
ব্যবহারকারী 259412

3
এটি ইউটিউবগুলি নিজেই দখল করতে এবং শুরুর সময়গুলিতে অনুলিপি / পেস্ট করার জন্য কিছু সময় বাঁচাতে সেড ব্যবহার করে @ গুডোফগ্রান্টস উত্তরের আরও সংক্ষিপ্ত সংস্করণ-(-এসএস)। @godofgrunts এর কিছু অতিরিক্ত পতাকা রয়েছে -map 0:v -map 1:a -c:v libx264 -c:a aacযা মানের উন্নতি করতে পারে। আমি youtube-dl -f bestvideo+bestaudioসর্বোচ্চ মানের সংস্করণ পাচ্ছি তা নিশ্চিত করতে আমি যুক্ত করতে চাই ।
স্টিভ গুরানসন


16

জনির উত্তরে যুক্ত করা:

youtube-dl -g "URL"ভিডিও এবং অডিও স্ট্রিমগুলি পেতে ব্যবহার করুন ।

এখন ব্যবহার করুন:

ffmpeg -ss 12:15 -i "1st-URL" -ss 12:15 -i "2nd-URL" -t 5:15 -map 0:v -map 1:a -c:v libx264 -c:a aac output.mkv

-ssপ্রতিটি স্ট্রিমের জন্য আপনাকে বিকল্পটি ব্যবহার করতে হবে । আমি প্রায় 30 সেকেন্ড আগে এটি করার এবং পরে -ss 30কোনও কী ফ্রেম হারাতে এড়াতে অন্যটি ব্যবহার করার পরামর্শ দিচ্ছি । আমার ইউটিউব ভিডিওগুলির একটি ব্যবহার করে এটির বাস্তব উদাহরণ's

ভিডিও

youtube-dl -g https://www.youtube.com/watch?v=gESHIrvIQQo

আউটপুট:

https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/signature/4FFB9B0B7E1703B31F5D07DAD579B55F17EF7BAA.0CB63905C89DD4D33F90CF3AAD728F1ECDFCB9B3/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/
https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/signature/4CD42047D1D5C714377350905C1CC5CBA37C0009.6EED1FC92D17A096235C32E48F4B15DEF7DD99B0/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/

আমি ৪৩:০০ থেকে ৫০:১০ অবধি কাটতে চেয়েছিলাম তাই আমি -ss 42:30উভয় ইনপুটগুলিতে (একটি ভাল কীফ্রেম ধরতে আমাকে কয়েক সেকেন্ড দিয়ে) করতে যাচ্ছি এবং তারপরে -ss 30ইনপুটগুলির পরে 43:00-এ শুরু করতে পারি ।

আমি তারপরে mapভিডিও 0:vএবং অডিও মানচিত্র করতে ব্যবহার করব 1:a(0 এর অর্থ প্রথম ইনপুট, যা ভিডিও এবং 1 এর অর্থ দ্বিতীয় ইনপুট, যা অডিও হয়) এবং তারপরে আমার এনকোডিং বিকল্পগুলি চয়ন করব।

ffmpeg -ss 42:30 -i "https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/8CCFBF5CAB97341D0CB1F34E85AB6EE20FC7A03E.7679F39A8603CF41A95F10232E2A921EB0774101/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" -ss 42:30 -i "https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/4AACC8E27F9036D36D4D623A771A9F2BAC4674BA.7E4F4FB4DC023E3FE491A991F0F9F2329648DE9D/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/" -map 0:v -map 1:a -ss 30 -t 7:10 -c:v libx264 -c:a aac gog-vs-triv.mkv

ধন্যবাদ। @ জন্নি পোস্টের জন্য কীভাবে শব্দ পাবেন তা নিশ্চিত ছিলাম না। আপনার পোস্ট এটি উত্তর।
মানি_মার

বাহ, আমি জানতাম না ffmpeg এর -iপতাকাটি ইউআরএল নিতে পারে। ঝরঝরে
জেরেমিয়া

12

এই বৈশিষ্ট্যটির অনুরোধটি ইউটিউব-ডিএল-তে এখনও প্রয়োগ করা হয়নি। # 622 সংখ্যা এবং গিথুব এ এর ​​বহু নকল দেখুন on


9

youtube-dl অন্তর্নিহিত পোস্টপ্রসেসরের কাছে আর্গুমেন্টগুলি সমর্থন করে (সংস্করণ 2017.08.27.1 এর সাথে পরীক্ষিত):

youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...

এটি ffmpegপ্রথমে ফাইলটি ডাউনলোড করার পরে নিজের সাথে পোস্টপ্রসেসিংয়ের মতোই ।


4
তবে এটির জন্য এখনও পুরো ভিডিওটি ডাউনলোড করতে হবে, তারপরে কাঙ্ক্ষিত অংশটি কেটে
ফেলুন

আমার unable to obtain file audio codec with ffprobeত্রুটি হচ্ছে আপনি কি আমাকে এটি সাহায্য করতে পারেন? আমি CentOS 7
হাসান

3
লক্ষ্য করুন যে -xপতাকাটি কেবল অডিও ডাউনলোড করে। আপনি যদি অডিও এবং ভিডিও উভয়ই চান তবে কমান্ড থেকে এটি ছাড়ুন। :)
গ্রোভেলপ্লেক্স

2

আপনি পুরো জিনিসটি ডাউনলোড এবং সম্পাদনা না করে শুরু থেকে এক পয়েন্ট পর্যন্ত ডাউনলোড করতে পারেন । এই প্রশ্নটি এর অর্ধেক:

সাথে ডাউনলোডে বাধা দিন ^C

  • আমি কেবল এটি দিয়ে চেষ্টা করেছি mp4
  • পৃথক ভিডিও এবং অডিও নিয়ে কাজ করবে না, আপনার উভয়ের সাথে একটি ফর্ম্যাট দরকার। ডিফল্টরূপে ytdl প্রায়শই পৃথক ভিডিও এবং অডিও পায়, তারপরে সেগুলিকে মার্জ করে। -Fউপলভ্য ফর্ম্যাটগুলি দেখতে ব্যবহার করুন এবং mp4দুটিতে একটি চয়ন করুন । যেমন -f18বা -f22সাধারণত সেখানে থাকে
  • আপনাকে ডাউনলোড করা শতাংশ (যা লিনিয়ার নয়; সংক্ষেপণের হার সময়ের সাথে সাথে পরিবর্তিত হয়) থেকে অনুমান করতে হবে।

হ্যাঁ. এটি একটি হ্যাক

আরও প্রশ্ন: আপনি যদি পৃথক ভিডিও এবং অডিও ফর্ম্যাটগুলি চান, তবে আপনি কি আলাদা আলাদাভাবে ( ^cএখানে হিসাবে ব্যবহার করে ) প্রতিটি অংশ ডাউনলোড করতে পারবেন এবং সেগুলি ম্যানুয়ালি মার্জ করতে পারবেন? আমি মনে করি না এটি কিছু ফর্ম্যাটের জন্য কাজ করবে।


1

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

আমরা প্রথমে স্ট্রিমের ইউআরএল আনি:

$ youtube-dl -g https://www.youtube.com/watch?v=yysk8s2vih8
https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...
https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...

এটিতে দুটি ইউআরএল আউটপুট করা উচিত (প্রতিটি ভিডিও এবং অডিও স্ট্রিমের জন্য)।

এই স্ট্রিমের মোট সামগ্রীর দৈর্ঘ্য আনতে এখন প্রথম ইউআরএলকে (যা ভিডিও স্ট্রিমের সাথে লিঙ্ক করে) একটি প্রধান অনুরোধ প্রেরণ করুন:

$ curl "1st-URL" -sI | grep Content-Length
Content-Length: 64380504

এখন, আমরা মোট সামগ্রীর দৈর্ঘ্যকে ভিডিওতে মোট সেকেন্ড দ্বারা ভাগ করি (ইউটিউব ভিডিওটির দৈর্ঘ্য 4 মিনিট এবং 7 সেকেন্ড যা 247 সেকেন্ড হয়)) আনুমানিক 1 সেকেন্ডের সামগ্রীর দৈর্ঘ্য পেতে:

64380504 / 247 ≈ 260650

আমরা এই মানটি দিয়ে গুন করি (শুরু থেকে আমরা যে সেকেন্ডে আনতে চাইছি +1)

(আমরা মেটাডেটা দ্বারা নেওয়া অতিরিক্ত জায়গার জন্য প্রায় একাউন্টে যোগ করি যা স্ট্রিমের শুরুতে স্থাপন করা হয়)

উদাহরণস্বরূপ প্রায় প্রথম 10 সেকেন্ড আনার জন্য, আপনাকে প্রথম 260650 * 11 = 2867150বাইট আনতে হবে , সুতরাং আমরা Rangeশিরোনামের সাথে একটি অনুরোধ করব :

$ curl "1st-URL" -H "Range: bytes=0-2867150" -o ten_secs.mp4

এটি কেবল প্রথম 10 সেকেন্ড ডাউনলোড করা উচিত। ডাউনলোড করা ফাইলটি খেলতে সক্ষম হওয়া উচিত তবে FFmpeg ভুল মেটাডেটা ঠিক করতে দেয়:

$ ffmpeg -i ten_secs.mp4 -c copy corrected_ten_secs.mp4

আমরা একই ধরণের অডিওর (২ য়-ইউআরএল) প্রাথমিক অংশটিও ডাউনলোড করতে পারি (সামগ্রীর দৈর্ঘ্য পৃথক হবে তবে মোট সেকেন্ড একই থাকবে)।

ভিডিও থেকে মধ্যের কোনও অংশ ডাউনলোড করাও এইভাবে সম্ভব হওয়া উচিত তবে সম্ভবত এটি অনেক বেশি জটিলতর হচ্ছে কারণ ইউটিউব স্ট্রিমের শুরুতে মেটাটাটা রাখে (প্রথম কয়েকটি বাইটে) এবং ডাউনলোড মিডিয়ায় উপস্থিত না হয়ে, স্ট্রিম মোটেও খেলবে না।

সম্পাদনা: ইউটিউব বলুন, এটি কেবল পুনরায়সূত্র সমর্থন সহ ওয়েবসাইটগুলিতে কাজ করবে। এটি অন্যান্য ওয়েবসাইটের জন্য কাজ করবে না।


0

Ffmpeg সম্পাদনা করতে (প্রসেসর) অডিও / ভিডিও আউটপুট পাস করার জন্য --postprocessor-args পরামিতি ব্যবহার করুন , সুতরাং ffmpeg ইনস্টল করা প্রয়োজন।

- পোষ্টপ্রসেসর-আরগস 3 টি আর্গুমেন্ট এবং মান নেয় (উদাহরণস্বরূপ, আরও রয়েছে, ffmpeg এর ম্যানুয়াল পৃষ্ঠা পরীক্ষা করুন):

  • -ss এইচএইচ: এমএম: এসএস: সময় শুরু করতে
  • -এইচএইচ: এমএম: এসএস: শেষ সময়
  • -t এইচএইচ: এমএম: এসএস: সময় নিতে হবে

উদাহরণ:

  • 15 সেকেন্ডে এনকোডিং শুরু করুন এবং 1 মিনিট 20 সেকেন্ডে থামুন

$ ইউটিউব-ডিএল - পোস্টপ্রসেসর-আরগস "-এসএস 0: 0: 15-থেকে 0: 1: 20" '[ভিডিও_ URL]'

  • 15 সেকেন্ডে এনকোডিং শুরু করুন এবং পরের 3 মিনিট 5 সেকেন্ডে নিন

$ youtube-dl - পোষ্টপ্রসেসর-আরগস "-এসএস 0: 0: 15 -t 0: 3: 5" '[ভিডিও_ URL]'

পিএস: ইউটিউব-ডিএল এটি প্রক্রিয়া করার আগে পুরো মিডিয়াটি ডাউনলোড করবে এবং পরে এটি সরিয়ে ফেলবে।

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