ffmpeg সহ ভিডিও (+ অডিও) এর সঠিক কাটিয়া


10

আমি চাই যে আমার ওয়েবসাইটটি ব্যবহারকারীদের আমার সরবরাহ করা উত্স ভিডিও থেকে নির্ভুলভাবে তাদের নিজস্ব ক্লিপগুলি তৈরি করতে দেয়।

আমার কাছে একটি উত্স ভিডিও ফাইল রয়েছে যা আমি প্রথমে কোনও ওয়েবসাইটের জন্য উপযুক্ত কিছুতে রূপান্তর করতে চাই:

Input #0, matroska,webm, from 'source.mkv': 
Duration: 00:28:18.57, start: 0.000000, bitrate: 10183 kb/s 
Stream #0:0: Video: h264 (Constrained Baseline), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 48 tbc (default)
Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s (default)

আমি এ জাতীয় রূপান্তর করতে ffmpeg ব্যবহার করি:

ffmpeg -i source.mkv -c:v libx264 -c:a aac -strict experimental -vf scale="960:-1" source.mp4

এই ভিডিওটি ফিরে দেখানো এটি আমার প্রয়োজনের জন্য যথেষ্ট ভাল মানের এবং ছোট ফাইলের আকার এবং আমার ওয়েবসাইটে লোড / প্লে।

আমার কাছে একটি ওয়েবপৃষ্ঠা রয়েছে যা ব্যবহারকারীদের এই ভিডিওর একটি সূচনা এবং শেষ পয়েন্ট নির্বাচন করতে - এবং একটি ক্লিপ তৈরি করতে দেয়। এখানে ffmpeg কমান্ডের একটি উদাহরণ যা আমি এর জন্য ব্যবহার করি:

-ss 577.920 -i source.mp4 -t 011.980 -codec:v copy -codec:a copy -vf scale="960:-1" clip1.mp4

সমস্যাটি হ'ল ক্লিপটি সর্বদা সময়-সঠিক নয় not সাধারণত অডিও পর্যাপ্ত নির্ভুল হয় তবে ভিডিওটি আধ সেকেন্ড শুরুর দিকে বা কোনও কিছু বন্ধ করে দেয়।

এই সুনির্দিষ্ট এবং ইন সিঙ্ক করার কোনও উপায় কি, এক সেকেন্ডের 0.2?

সম্পাদনা: যোগ করা -force_key_frames 00:00:00.2সাহায্য করে না।

সম্পাদনা: আমি ক্লিপিংটি ভাল (ইশ) ফলাফলের -c:v libx264 -c:a aac -strict experimentalপরিবর্তে ব্যবহারের জন্য পরিবর্তন করেছি -codec:v copy -codec:a copy

ফাইলটি ইস্যু ছাড়াই বাহ্যিকভাবে খেলতে পারে - তবে যখন আমি এটি আমার এইচটিএমএল 5 ভিডিও উপাদানটিতে লোড করি এবং এটি খেলি - তখন ভিডিওর শেষ অংশটি (অডিও ভাল আছে) হিমশীতল। শেষ অংশটি জমা হয় যা দ্বিতীয় সেকেন্ডের চেয়ে কম হয় is

আমি কি অন্য ভিডিও এনকোডার দিয়ে চেষ্টা করব? Libx264 এর জন্য সেরা বিকল্পটি কী? মনে মনে রেখে আমি সম্ভবত এটি একটি পাবলিক ওয়েবসাইটে থাকতে চাই।

তবে স্তব্ধ হোন যে এমপিসি বা উইন্ডোজ মিডিয়া প্লেয়ারের মতো প্লেয়ারকে ইস্যু না করে এটি সঠিকভাবে খেলেছে তা Google Chrome বা এইচটিএমএল ভিডিও উপাদানগুলির সাথে সমস্যা বলে মনে করে না? বা আমি একটি অসমর্থিত এনকোডিং বা কিছু ব্যবহার করছি?


কী ফ্রেমের সময়সীমার সাথে এটি হতে পারে। যাই হোক না কেন, এটি সুপার ইউজার ডটকম এ সরানো উচিত।
ব্র্যাড

হাই, ffmpeg কোনও মুহুর্তে ভিডিওটি কাটতে পারে না, এটি কেবল কীফ্রেমে কাটতে পারে; এই কারণে অডিওটি প্রায় সুনির্দিষ্ট, যদিও ভিডিওটি নয়।

আমি কি এটিকে নিজেই স্থানান্তর করতে পারি? আমি ফোর্স_কি_ফ্রেমে 00: 00: 00.2
পিট

উত্তর:


9

-ssপরিবর্তনের আচরণ নির্ভর করে যদি এটি কোনও ইনপুট বা আউটপুট বিকল্প হিসাবে ব্যবহৃত হয়, এবং প্রায়শই ধীর হয় তবে আউটপুট বিকল্প হিসাবে ব্যবহার করার সময় আরও সঠিক হতে পারে। আরও বিশদ এবং উদাহরণের জন্য ধীরে ধীরে নির্দিষ্ট সময়সীমা থেকে ভিডিও রূপান্তরিত করার উত্তর দেখুন ffmpeg

18-28 (23 টি ডিফল্ট হয়) এর মধ্যে একটি মান সহ বিকল্পটি source.mp4ব্যবহারের জন্য আউটপুট মানের পরিবর্তন করতে -crf। উদাহরণস্বরূপ FFmpeg এবং x264 এনকোডিং গাইডের সিআরএফ বিভাগটি দেখুন ।

আপনার ছাঁটাই কমান্ড সহজ করা যেতে পারে:

ffmpeg -ss 577.92 -i source.mp4 -ss 0 -t 11.98 -c copy -map 0 clip1.mp4

আমি -codec:v copy -codec:a copyসঙ্গে প্রতিস্থাপন -c copy -map 0। এটি কেবলমাত্র প্রথম ভিডিও এবং অডিও স্ট্রিমের পরিবর্তে সমস্ত স্ট্রিমগুলি অনুলিপি করবে - যদিও আপনার পূর্ববর্তী আদেশের কারণে ইনপুটটিতে কেবল দুটি স্ট্রিম রয়েছে। যেহেতু আপনি পুনরায় এনকোডিং ছাড়াই স্কেল করতে পারবেন না, সুতরাং এটির সাথে পারস্পরিক একচেটিয়া হওয়া -codec:v copyএবং যেহেতু আপনার ইনপুটটি ইতিমধ্যে সেট আকারে স্কেল করা হয়েছে আমি ফিল্টার অপশনগুলি সরিয়েছি।

এটি এখনও যথাযথভাবে সঠিক না হলে চেষ্টা করুন:

ffmpeg -i source.mp4 -ss 577.92 -t 11.98 -c copy -map 0 clip1.mp4

এটি ধীর হবে তবে সম্ভবত আরও সঠিক। এই দুটি উদাহরণের পার্থক্যের বিবরণ দেওয়ার জন্য প্রথম লিঙ্কটিতে উত্তরের লিঙ্কগুলি দেখুন।

শেষ অবধি, আপনার source.mp4মাধ্যমে চলতে হবে qt-faststart(ffmpeg উত্সে সরঞ্জাম ডিরেক্টরিতে অবস্থিত), অথবা -movflags faststartবিকল্পটি ব্যবহার করা উচিত । এটি ফাইলের শুরুতে কিছু তথ্য স্থানান্তরিত করবে যাতে এটি সম্পূর্ণ ডাউনলোড হওয়ার আগে প্লেব্যাক শুরু করতে পারে।


টিপসের জন্য +1 তবে আমি ffmpeg -i Source.mp4 -ss 577.92 -t 011.980 -c copy -map 0 clip1.mp4 তবে প্রথম অংশ (প্রায় এক সেকেন্ড) এবং শেষ অংশ (সম্ভবত এক সেকেন্ডের এক চতুর্থাংশ) চেষ্টা করেছি ভিডিও মিস হয়েছে, অডিও যদিও ঠিক আছে।
পিট ওকে

@ পেটওকে আপনি কি বিটস্ট্রিম অনুলিপি ছাড়াই কাটতে চেষ্টা করেছেন, কিন্তু প্রকৃত পুনরায় এনকোডিং করছেন?
slhck

বিটস্ট্রিম কপি ছাড়াই এটি ব্যবহার করে দেখুন - ফলাফলগুলি আমার প্রশ্নের সাথে যুক্ত হয়।
পিট ওকে

3
-ssইনপুট বিকল্পের পরিবর্তে আউটপুট বিকল্প হিসাবে ব্যবহার করা আমার সমস্যাটিকে স্থির করেছে: প্রথম ভিডিও ফ্রেম আউটপুট ভিডিওতে 1 এর কাছাকাছি ছিল, তার আগে কেবল অডিও ছিল (এটিও নিশ্চিত করেছে ffprobe -show_frames)। এর -ssপরে সরানো -iএটিকে ফ্রেম 0 এ শুরু করে অডিও এবং ভিডিও ফ্রেমগুলি আউটপুট দেয়
কোডম্যানএক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.