উবুন্টুতে একাধিক (দু'জনের বেশি) ভিডিও কীভাবে মার্জ করবেন?


38

আমি প্রতিটি বিশটির বিশ ব্যাচের আকারে (20) ভিডিও একত্রীকরণ করতে চাই। আমি লিনাক্স মেশিন চালাচ্ছি। ভিডিওগুলি এমপি 4 ফর্ম্যাট এবং মাঝারি মানের। কারও কারও অডিও স্ট্রিম অনুপস্থিত। এ পর্যন্ত আমি চেষ্টা করেছি ffmpeg, mencoder, cvlc/vlcএবং MP4Box। আমি এটি অর্জনের জন্য একটি কমান্ড লাইন স্ক্রিপ্ট লিখতে চাই, যেহেতু আমি ব্যাচ প্রসেসিং করছি।

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


2
দয়া করে মাল্টি এসই সাইটে একই প্রশ্ন জিজ্ঞাসা করবেন না: superuser.com/questions/928548/…
মেথাক্স

আপনি এতদূর যা চেষ্টা করেছেন তা কি আপনি বিশেষভাবে পোস্ট করতে পারেন?
ওহাল

1
@ ওহাল আমি ffmpegফিল্টার এবং ফাইল প্রোটোকল সহ প্রদত্ত বিভিন্ন সংলগ্ন পদ্ধতি ব্যবহার করার চেষ্টা করেছি । এর concatবৈশিষ্ট্যটিও ব্যবহার করার চেষ্টা করেছি cvlc/vlc। এর concatবৈশিষ্ট্যও চেষ্টা করেছি mencoder। এগুলি সবাই আংশিকভাবে কাজ করেছিল। এটি শেষ পর্যন্ত আমাকে বিষয়টি সমাধান করতে সহায়তা করেছে।
ধ্রুব সিঙ্গাল

হ্যাঁ, আপনি ইতিমধ্যে সরঞ্জামগুলি উল্লেখ করেছেন, আমি যা বোঝাতে চাইছিলাম তা হ'ল আসল আদেশগুলি যা আপনি চালিত। এছাড়াও এটি দুর্দান্ত হবে যদি আপনি সেই আদেশটি অন্তর্ভুক্ত করতে পারেন যা ভবিষ্যতের দর্শকদের জন্য আপনার (আপনার উত্তরে) এটি সমাধান করে।
ওহাল

আহ, আমি আপনার বক্তব্য দেখতে। দুর্ভাগ্যক্রমে, নিছক সংখ্যার কারণে আমি আদেশগুলি তালিকাভুক্ত করতে পারি না। যে কমান্ডটি আমার সমস্যার সমাধান করেছিল তা হ'লmelt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264
ধ্রুব সিঙ্গল

উত্তর:


41

আমি mkvmergeএকক একাধিক এমপি 4 ফাইলগুলিতে যোগদান করতে ব্যবহার করছি :

mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4

3
.mkvআউটপুট ফাইলের জন্য এক্সটেনশনটি ব্যবহার করা ভাল , কারণ এটি আপনি কোনও এক্সটেনশানই দেন না কেন তা ম্যাট্রোস্কা ধারক।
haridsv

এখানে ইনস্টল করতে কীভাবে mkvmerge: tipsonubuntu.com
Morgoth

কেবল এই কমান্ডটি এমকেভ্র্যাম কাজ করে। সমস্ত ffmpeg কমপক্ষে স্থানান্তরিত অডিওতে ব্যর্থ।
42n4

25

আপনি এটি ব্যবহার করে এটি করতে পারেন ffmpeg:

ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4

রেফারেন্স এবং আরও তথ্য


2
আমি সেটা করার চেষ্টা করেছি। এটির সাথে সমস্যাটি হ'ল এটি একটি যথাযথ ফলাফল দেয় না। 1. অডিও ট্র্যাকগুলি মিশ্রিত হয়। ২. ভিডিও ট্র্যাকটিতে কিছুটা অশান্তি রয়েছে।
ধ্রুব সিঙ্গল

আমি এটি নমুনার চেয়ে বেশি ব্যবহার করেছি, ফলাফলটি উচ্চমানের, সম্ভবত আপনার উত্সের ভিডিও মানের সমস্যা?
মেথাক্স

তোমার ধারনা সম্ভবত ঠিক. এটি সমস্যার সমাধান করেছে: Askubuntu.com/a/637179/420614
ধ্রুব

2
এমপি 4 সংযুক্ত করতে কনক্যাট প্রোটোকল ব্যবহার করবেন না। এটি কেবলমাত্র নির্দিষ্ট ফর্ম্যাটগুলির সাথেই কাজ করে যা বেশিরভাগ সাধারণ ব্যবহারকারীদের মুখোমুখি হয় না। ব্যবহার করুন CONCAT ডিমাক্সার বা CONCAT ফিল্টার পরিবর্তে।
লোগান

আমি প্রতি 30 মিনিটের 2 এমপি 4 ফাইলের সাথে এফএফপিপ চেষ্টা করেছি। আমি 7 ঘন্টা দৈর্ঘ্য সহ একটি আউটপুট ফাইল পেয়েছি।
গিউস

7

এটি বিষয়টি সমাধান করেছে: https://stackoverflow.com/a/22324018/5014767

meltএটির জন্য একটি দুর্দান্ত কমান্ড লাইন ইউটিলিটি। পৃষ্ঠাটি এখানে

মন্তব্যগুলি থেকে সম্পাদনা করুন: যে কমান্ডটি আমার সমস্যার সমাধান করেছিল তা হ'ল melt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264


4

আমি ffmpeg ব্যবহার করে ট্রান্সকোডিং ছাড়াই এমপি 4 গুলি সংক্ষেপে একটি সামান্য শেল স্ক্রিপ্ট লিখেছিলাম।

for f in $(ls *.MP4); do
    ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done

CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")

ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4

rm *.ts

এটি একটি এমপিইজি ধারক মধ্যে অন্তর্বর্তী ফাইল তৈরি করে এবং তারপরে তাদের এমপি 4-এ সংযুক্ত করে।


এটি উল্লেখ করা জরুরী যে এই স্ক্রিপ্টটি ব্যর্থ হবে যদি কোনও ফাইলনামে ফাঁকা জায়গা থাকে বা কিছু ক্ষেত্রে বিশেষ অক্ষর থাকে। লুপ জন্য, এটি উল্লেখযোগ্যভাবে ভালো শুধু ব্যবহার করবেন তা for f in *.MP4ব্যবহার না করেই ls। (বেশ lsকয়েকটি গুরুত্বপূর্ণ কারণে আপনার সর্বদা স্ক্রিপ্টগুলি ব্যবহার করা এড়ানো উচিত ; আরও ভাল বিকল্প রয়েছে)) এছাড়াও, ভেরিয়েবলগুলির জন্য উদ্ধৃতিগুলি ব্যবহার করুন যদি না আপনি নিশ্চিত হন যে কোনও স্থান বা অন্যান্য বিশেষ অক্ষর নেই, সুতরাং "${f}"(বা ন্যায়সঙ্গত "$f") অযোগ্যতার পরিবর্তে $f
ধানের ল্যান্ডাউ

CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")1, 2, 3 ... 10 ... 20 নামক ফাইলগুলির সাথে ভাল কাজ করে না It এটি 1, 10 ... 2, 20 ... ইত্যাদি হিসাবে পার্স করা শেষ হয় আমি প্রস্তাব করি এটি CONCAT=$(echo $(ls -v *.ts) | sed -e "s/ /|/g")আদেশ নিশ্চিত করবে ।
tisaconundrum

2

নিম্নলিখিত ফর্মটিতে আপনি যে ফাইলগুলি আঁকতে চান তা দিয়ে একটি ফাইল ফাইলস টেক্সট তৈরি করুন (# দিয়ে শুরু হওয়া লাইনগুলি উপেক্ষা করা হবে):

# this is a comment
file 'file1.mp4'
file '/path/to/file2.mp4'
file 'file3.mp4'

মনে রাখবেন যে এগুলি আপেক্ষিক বা পরম পথ হতে পারে। তারপরে আপনি আপনার ফাইলগুলি অনুলিপি করতে বা পুনরায় এনকোড করতে পারেন:

ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

0

আমার স্ক্রিপ্ট, খালি ইন bashএবং ffmpeg। একটি কমান্ড লাইনে দেওয়া ফাইলগুলি পুনরায় এনকোড করে।

ফাইলগুলি একই রেজোলিউশনের হওয়া দরকার। বিভিন্ন মেটাডেটা ঘূর্ণন গ্রহণ ffmpeg concat:করে , যা হয় না।

rm ffmpeg-concat-output.mkv

FILE_COUNT=$#
INPUTS=""
FILTER=""
INDEX=0
for FNAME in $@; do
    echo "Processing ${FNAME}"
    INPUTS="${INPUTS} -i $FNAME"

    if [ -z "${FILTER}" ]; then
        FILTER="[$INDEX:v:0] [$INDEX:a:0]"
    else
        FILTER="${FILTER} [$INDEX:v:0] [$INDEX:a:0]"
    fi
    let INDEX+=1
done

COMMAND="ffmpeg ${INPUTS} \
    -filter_complex '${FILTER} \
        concat=n=${INDEX}:v=1:a=1 [v] [a]' \
    -map '[v]' -map '[a]' \
    ffmpeg-concat-output.mkv"

#   -af 'volume=15dB' # won't work with -filter_complex

bash -c "${COMMAND}"

0

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

এটি দিয়ে ব্যবহার করুন:

vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>

-1

Maythux এর উত্তর, ছাড়াও থেকে :

কয়েকটি মাল্টিমিডিয়া কনটেইনার (এমপিইজি -১, এমপিইজি -২ পিএস, ডিভি) কেবল একটিতে থাকা ফাইলগুলিকে কনটেনেট করে ভিডিওকে কনটেনেট করার অনুমতি দেয়।

উদাহরণস্বরূপ, ভিডিওগুলিকে সংশ্লেষিত করতে উপরে বর্ণিত ভিডিও ধারকগুলির মধ্যে একটি ব্যবহার করুন (যার মধ্যে আমি ব্যক্তিগত অভিজ্ঞতার জন্য এমপিইজি -4 পার্ট 14 যুক্ত করব), আপনি কেবল:

cat video1.ext video2.ext video3.ext > video4.ext

1
আমি এটি চেষ্টা করেছিলাম তবে এটি কেবল প্রথম ভিডিওটিকে আউটপুট হিসাবে দেয়। আমি কোথাও পড়েছি যে এটি কাজ করে না, যদিও এর পিছনে যুক্তি আমার মনে নেই।
ধ্রুব সিঙ্গল

@ ধ্রুবসিংগল হ্যাঁ, আমি এটি নিশ্চিত করতে পারি, আমি ঠিক একই ভিডিও / অডিও এনকোডিং সহ দুটি এমপি 4 ভিডিওতে চেষ্টা করেছি এবং আপনি হিসাবে আমি কেবল প্রথম ভিডিওটিই ব্রাউজ করতে পারি। যা যুক্তিসঙ্গত বলে মনে হয়, তবে আমি বেশ নিশ্চিত যে আমি এর আগেও বেশ কয়েকটি এমপি 4 ভিডিও দিয়ে এর আগে এটি করেছি। সম্ভবত মেমরিটি এখানে ভালভাবে কাজ করে না, বা এটির কাজ করার জন্য অন্যান্য প্রয়োজনীয়তাও রয়েছে। আমি এই বিষয়ে গবেষণা করতে চাই যেহেতু আমিও আগ্রহী, যদি আমি কিছু খুঁজে পাই তবে উত্তরটি আপডেট করব এবং আপনাকে একটি মন্তব্য দেব
kos

সম্মিলিত সিনেমার পুরো দৈর্ঘ্য এবং সম্ভবত অন্যান্য জিনিসগুলি অন্তর্ভুক্ত করার জন্য আমাদের প্রথম ভিডিওর শুরুতে মেটাডেটা পরিবর্তন করা দরকার। কেবলমাত্র কয়েকটি এমপিইগ 4 ফাইল আমাকে মেটাডেটা দেখতে দিচ্ছে ..
কেন মল্লরুপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.