লিনাক্সে এমপি 4 ফাইলগুলিতে যোগদান করুন


30

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

MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4

দুর্ভাগ্যক্রমে অডিও সমস্ত মিশ্রিত হয়। আমি ভেবেছিলাম যে সমস্যাটি অডিওতে ছিল তাই আমি এটিকে এমপি 3 এ ট্রান্সকোড করেছি এবং আবার এমপি 4বক্স ব্যবহার করেছি। এক্ষেত্রে অডিওটি প্রথমার্ধের সাথে সম্পর্কিত newvideo.mp4(এর সাথে সম্পর্কিত video1.mp4) তবে তার কোনও অডিও নয় এবং আমি ভিডিওতেও নেভিগেট করতে পারি না।

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

এইভাবে আমি প্রথম ভিডিওটির জন্য দৌড়েছি:

 avconv -y -i video1.mp4 -c copy -map 0:0 videostream1.mp4
 avconv -y -i video1.mp4 -c copy -map 0:1 audiostream1.m4a
 avconv -y -i videostream1.mp4 -i audiostream1.m4a  -c copy -shortest  video1_aligned.mp4

একইভাবে দ্বিতীয় ভিডিওর জন্য এবং তারপরে আগের মতো এমপি 4বক্স ব্যবহার করা হয়েছে। দুর্ভাগ্যক্রমে এটিও কার্যকর হয়নি। আমার একমাত্র সাফল্য তখনই ছিল যখন আমি পৃথকভাবে ভিডিও স্ট্রিমগুলিতে (অর্থাত্‍ ভিডিওস্ট্রীম 1. এমপি 4 এবং ভিডিওস্ট্রিম 2. এমপি 4) এবং অডিও স্ট্রিমগুলি (অর্থাত্ অডিওস্ট্রীম 1.এম 4 এ এবং অডিওস্ট্রীম 2.এম 4 এ) যোগদান করে এবং তারপরে একটি চূড়ান্ত ফাইলে ভিডিও এবং অডিওতে যোগদান করি। তবে ভিডিওটির দ্বিতীয়ার্ধের জন্য সিঙ্ক্রোনাইজেশনটি হারিয়ে গেছে। কংক্রিটের সাথে অডিও এবং ভিডিওতে 1 সেকেন্ড বিলম্ব রয়েছে। কোন পরামর্শ সত্যিই স্বাগত।


"এমপিজি 4 ফাইলের জন্য এফএফএমপিগ এটি করতে পারে না তাই পরিবর্তে আমি এমপি 4বক্স ব্যবহার করেছি" আপনি এমপি 4 ফাইল বোঝাতে চান? উভয় অডিও-ভিডিও স্ট্রিম কি একই এনকোডিং প্যারামিটারগুলি (প্রস্থ, উচ্চতা, এসপিএস, পিপিএস, ফ্রেমরেট, স্যাম্পলারেট, চ্যানেলের সংখ্যা ব্যবহার করে?

ffprobe ব্যবহার করে আমি দেখতে পাচ্ছি যে অডিও স্ট্রিমগুলির অভিন্ন বৈশিষ্ট্য রয়েছে। ভিডিও স্ট্রিমগুলির একই মাত্রা রয়েছে তবে বিভিন্ন হার। 1 ম ভিডিও ভিডিওর জন্য: h264, 720x592, 277 kb / s, PAR 18944: 12915 DAR 512: 287, 24.97 fps, 45k tbr, 90k tbn, 90k tbc जबकि দ্বিতীয় ভিডিওর জন্য: h264, 720x592, 226 কেবি / এস, PAR 481: 330 DAR 39:22, 24.91 fps, 45k tbr, 90k tbn, 90k tbc। আপনি কি বিশ্বাস করেন যে এটিই আমার সমস্যার উত্স?

এমপি 4 বিভিন্ন ভিডিওর জন্য বিভিন্ন ট্র্যাক ব্যবহার করে বিভিন্ন বৈশিষ্ট্য সহ ভিডিও / অডিওতে যোগদান সমর্থন করে তবে প্লেয়ারটি সেই স্মার্ট নয়।
রজনীশ


: আপনার প্রশ্নটি ইতিমধ্যে ffmpeg প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী উত্তর হয় ffmpeg.org/faq.html#How-can-I-join-video-files_003f
Palec

উত্তর:


28

এটি করার সর্বোত্তম উপায়টি হ'ল কনক্যাট ডেমাক্সারের সাথে । প্রথমে এমন একটি inputs.txtফর্ম্যাট করা ফাইল তৈরি করুন :

file '/path/to/input1.mp4'
file '/path/to/input2.mp4'
file '/path/to/input3.mp4'

তারপরে, কেবল এই ffmpeg কমান্ডটি চালান:

ffmpeg -f concat -i inputs.txt -c copy output.mp4

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীতে কনক্রিটেশনffmpeg দেখুন ।


আমি ffmpeg এর পুরানো সংস্করণ ব্যবহার করে কারও উপকারের জন্য এখানে নীচে রাখছি।

Ffmpeg এর সর্বশেষ সংস্করণগুলি এটি করতে পারে: আপনাকে এমপিইগ ট্রান্সপোর্ট স্ট্রিমগুলিতে প্রথমে ফাইলগুলি রিম্যাক্স করতে হবে (মোটামুটি প্রসেসর-আলো, কারণ এটি কেবল ধারক বিন্যাসটি পরিবর্তন করছে):

ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts

যদি এটি h264 সম্পর্কে কোনও ত্রুটি ছুঁড়ে ফেলে তবে আপনার ব্যবহারের প্রয়োজন হতে পারে:

ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts

প্রতিটি ইনপুট ফাইলের সাথে আপনাকে এটি আলাদাভাবে করতে হবে। একসাথে ফাইলগুলিকে যুক্ত করতে, ব্যবহার করুন:

ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy output.mp4

যদি এটি আ্যাক সম্পর্কে কোনও ত্রুটি ছুঁড়ে দেয় তবে আপনাকে ব্যবহারের প্রয়োজন হতে পারে

ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy -absf aac_adtstoasc output.mp4

যদি আপনার সিস্টেম নামের পাইপগুলিকে সমর্থন করে তবে আপনি মধ্যবর্তী ফাইলগুলি তৈরি না করে এটি করতে পারেন।

mkfifo temp0 temp1

আপনাকে তিনটি পৃথক ভার্চুয়াল টার্মিনালে নিম্নলিখিতটি করতে হবে:

ffmpeg -i input0.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0
ffmpeg -i input1.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

আউটপুট.এমপি 4 ইতিমধ্যে উপস্থিত থাকলে, তৃতীয় ffmpeg আপনাকে এটি ওভাররাইট করতে চান কিনা তা জিজ্ঞাসা করবে, তবে এটি FIFOs অ্যাক্সেস করার পরে এটি করবে এবং এটি ffmpegs প্রথমটি বন্ধ করে দেবে। সুতরাং নিশ্চিত হয়ে নিন যে আপনি নিজের আউটপুট ফাইলের জন্য অব্যবহৃত নামটি বেছে নিয়েছেন।

আপনার ইনপুট ফাইলগুলি পৃথক হলে এটি কাজ করতে পারে না - আমি বিশ্বাস করি যে বিট হারের মধ্যে পার্থক্যগুলি ঠিক আছে তবে ফ্রেমের আকার, ফ্রেম রেট ইত্যাদি মিলে যেতে হবে।


অনেক thx সাথী, একটি মোহন মত কাজ
জোসে আরমান্ডো

2
পুনঃটুইট এটি লিবাভ দলটি ইচ্ছাকৃতভাবে এবং বিদ্বেষজনকভাবে একটি বার্তা প্রচার করেছে, যারা এফকনভি বিকাশের জন্য ffmpeg প্রকল্প থেকে বিভক্ত হয়ে থাকে এমন এক বিকাশকারী (এবং নাম পরিবর্তন করেছে কারণ তারা ffmpeg নামের কপিরাইটটি সুরক্ষিত করতে পারে না)। দেখুন কে আমাকে ffmpeg, libav, এবং avconv এর মধ্যে পার্থক্য এবং সম্পর্ক বলতে পারে? আরও কিছু তথ্যের জন্য।
16-21

2
*** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.আমি এখন চলছে বলে একটি বার্তাffmpeg
লর্ড লোহ।

@LordLoh। আমার আগের মন্তব্যে লিঙ্কটি দেখুন।
অশুভ্রত

1
এই উত্তরটির কোনও উত্তর নেই - এমপি 4 দিয়ে কীভাবে সম্মতি জানাতে হয়avconv
লর্ড লোহ।

7

এমপি 4-এর জন্য আমি খুঁজে পেয়েছি জিপিএ্যাক প্যাকেজ থেকে এমপি 4বক্সের একমাত্র কার্যকরী সমাধান

#!/bin/bash
filesList=""
for file in $(ls *.mp4|sort -n);do
    filesList="$filesList -cat $file"
done
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4

বা কমান্ড হয়

MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4

মেনকোডার এবং অ্যাভকনভের সাহায্যে আমি এটি কার্যকর করতে পারি না :-(


2

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

#!/bin/bash
for FILE in "$@"; do
   TAG=$(echo "$FILE" | sed -e s/[^A-Za-z0-9.]/_/g)
   mkfifo $TAG.mp4concatpipe
   avconv -loglevel "quiet" -i "$FILE"  -f mpegts -c copy -bsf h264_mp4toannexb -y $TAG.mp4concatpipe &
   IN=$IN\|$TAG.fifo
done

IN=${IN#\|}
avconv -i concat:$IN -c copy out.mp4
rm *.mp4concatpipe

কোনও কারণে এটি আমাকে একটি "কনক্যাট: ফার্স্ট.এম 4v.fifo | সেকেন্ড.এম 4v.fifo: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি" ত্রুটি নেই .. এমনকি উদ্ধৃতি সহও (-আই কনক্যাট: "$ IN" বা -i "কনক্যাট: $ মধ্যে ")। নীচের অন্যান্য উত্তরে এমপি 4বক্স প্রস্তাবিত তবে দুর্দান্ত কাজ করে!
ভোরবার্গার

2

একটি ম্যাকে (ম্যাকোস 10.13 হাই সিয়েরা) আমি নিম্নলিখিতটি সাফল্যের সাথে ব্যবহার করেছি:

for f in *.m4a; do echo "file '$f'" >> mylist.txt; done

উপরের মতো একইভাবে পুনঃক্রম করুন প্রয়োজনে (নোট করুন। / অপসারণ করা হয়েছে - পাথ ffmpeg দ্বারা অনিরাপদ ফাইলের নাম ত্রুটি ছুঁড়ে ফেলছিল)।

তারপরে আমাকে পছন্দ করতে কোডড এবং বিটরেট ডিফল্ট ম্যাকপোর্টস ffmpeg জন্য নির্দিষ্ট করতে হবে:

ffmpeg -f concat -i mylist.txt  output.m4a

সুপার ব্যবহারকারীকে স্বাগতম! দয়া করে প্রশ্নটি আবার মনোযোগ দিয়ে পড়ুন। আপনার উত্তরটি মূল প্রশ্নটি উত্তর দেয় না যা লিনাক্স সম্পর্কে ছিল। যদি আপনি বিশ্বাস করেন যে এটি লিনাক্সে কাজ করবে তবে দয়া করে যোগ করুন যাতে ভবিষ্যতের পাঠকদের একটি স্পষ্ট বোঝা থাকতে পারে, অন্যটি ছাড়াও আপনার ইনপুটটির জন্য সুপারজার এবং থ্যাঙ্ক্যুতে আপনাকে স্বাগতম। দয়া করে কয়েক মিনিট সময় নিন এবং পড়ুন: - superuser.com/help। উত্তর: সুপার user.com/help/how-to-answer ।
mic84

2

এখানে একটি ওয়ান-লাইনার যা এটিকে এত সহজ করে তোলে। অবশেষে আপনাকে একটি ফলশ্রুতিযুক্ত ভিডিও ফাইল সরবরাহ করতে এটি করা সমস্ত কিছু করতে পারে। চিয়ার্স!

find *.mp4 | sed 's:\ :\\\ :g'| sed 's/^/file /' > list.txt; ffmpeg -f concat -i list.txt -c copy output.mp4; rm list.txts

1

থ্যাঙ্কস অরিসুপ; এখানে প্রক্রিয়া স্বয়ংক্রিয়, আরো সাম্প্রতিক ব্যবহার করে একটি সামান্য স্ক্রিপ্ট হয় avconv
বিটিডাব্লু, নামযুক্ত পাইপগুলি আমার পক্ষে কাজ করে না (তাদের কাছে আউটপুট আটকে যায়)।

   #!/bin/bash

    for FILE in $@; do
      avconv -i $FILE -map 0 -f mpegts -bsf h264_mp4toannexb -c:v copy -y $FILE.tmp
      IN=$IN\|$FILE.tmp
    done

    IN=${IN#\|}
    avconv -i concat:"$IN" out.mp4

    for FILE in $@; do
      rm $FILE.tmp
    done

0

সঙ্গে দুর্দান্ত সাফল্য উপভোগ করেছেন

for f in ./*.m4a; do echo "file '$f'" >> mylist.txt; done

আপনার কিছুটা আবার mylist.txt পুনঃক্রম করতে হবে

ffmpeg -f concat -i mylist.txt -c:a libfdk_aac -b:a 128k output.m4a

ffmpeg সংস্করণ 2.2.3

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