ইন্টারেক্টিভভাবে ভিডিও ফাইলগুলিকে কনটেনেট করুন


9

ইন্টারেক্টিভভাবে এক ফাইলে একাধিক এমপি 4 ভিডিও ফাইলকে কীভাবে সংযুক্ত (যোগদান) করবেন?

প্রচুর প্রোগ্রাম রয়েছে যা কমান্ড লাইন থেকে দুটি ফাইলের জন্য এটি করে। এই ক্ষেত্রে:

  • ffmpeg
  • avconv
  • MP4Box

তবে ইন্টারেক্টিভভাবে এটি করার জন্য আমাদের প্রায়শই একটি সমাধানের প্রয়োজন হয়।


1
ইন্টারেক্টিভ দ্বারা আপনি কী বোঝাতে চান তা বর্ণনা করতে পারেন?
slm

@ এসএলএম আমার অর্থ এমন একটি প্রোগ্রাম যা ব্যবহারকারীকে একের পর এক ইনপুট ফাইল প্রবেশ করতে বলে, তারপরে আউটপুট ফাইল তৈরি করতে বলে। এবং তারপরে উপসংহার তৈরি করুন।
স্লিক্স

আমি কখনই এমন কোনও প্রোগ্রাম দেখিনি যা এটি সরাসরি করে, এটি যেমন আপনি তৈরি করেছিলেন যেমন একটি শেল স্ক্রিপ্ট যা তথ্য সংগ্রহ করে এবং তারপরে কমান্ড-লাইনটি একত্রিত করে। আপনি কি আপনার উন্নতি খুঁজছেন?
slm

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

1
@ গোল্ড আমি কিউতে একটি সম্পাদনা রেখেছি। ffmpegদ্বারা প্রকৃতপক্ষে কোন মানে মৃত বা অপ্রচলিত: শেষ gitকমিট masterছিল 15 মিনিট আগে এবং আমি তা দৈনন্দিন ব্যবহার করুন।
আনকো

উত্তর:


8

আমি সম্প্রতি এই পদ্ধতিটি চেষ্টা করে দেখিনি তবে কেন এটি এখনও কাজ করবে না তা দেখতে পাচ্ছি না। আমি বিশ্বাস করি আপনি cat .mp4যদি এগুলি সম্মতি জানানো ব্যতীত অন্য কিছু করতে না চান তবে আপনি কেবল একসাথে ফাইল করতে পারবেন ।

1. বিড়াল ব্যবহার

$ cat file1.mp4 file2.mp4 > file3.mp4
$ ffmpeg -i file3.mp4 -qscale:v 2 output.avi

আমি এখনও ffmpegসব সময় ব্যবহার করি , এটি খুব ফাইলগুলিকে একত্রিত করতে পারে।

2. ffmpeg ব্যবহার

  1. সংযুক্ত করার জন্য ফাইলগুলির একটি তালিকা তৈরি করুন

    $ cat inputs.txt 
    file sample_mpeg4.mp4
    file sample_mpeg4.mp4
  2. শ্রেণীবদ্ধভাবে সংযুক্ত করা

    $ ffmpeg -f concat -i inputs.txt -c copy out.mp4
    
    $ ll |grep -E "sample|out"
    -rw-rw-r--. 1 saml saml 491860 Feb 19 23:36 out.mp4
    -rw-r--r--. 1 saml saml 245779 Feb 19 23:32 sample_mpeg4.mp4

    অন্যান্য পদ্ধতিগুলি এফএফম্পেগ উইকিতে আচ্ছাদিত রয়েছে: মিডিয়া ফাইলগুলিকে কীভাবে সংযুক্ত করতে (যোগদান করতে, একত্রীকরণ করতে)

    দ্রষ্টব্য: উবুন্টু concatফর্ম্যাটটি সমর্থন করে না । আপনাকে কনক্যাট প্রোটোকল ব্যবহার করতে হবে। এছাড়াও, এতে প্রতি স্ট্রিম কোডেক অপশন রয়েছে। সুতরাং, নিম্নলিখিত হিসাবে কনক্যাট প্রোটোকল ফলাফল ব্যবহার:

    $ ffmpeg -i input1.mp4 -vcodec copy -acodec copy \
         -vbsf h264_mp4toannexb -f mpegts intermediate1.ts
    
    $ ffmpeg -i input2.mp4 -vcodec copy -acodec copy \
         -vbsf h264_mp4toannexb -f mpegts intermediate2.ts
    
    $ ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" \
         -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4

    উবুন্টু ffmpeg বিকল্পগুলি এখানে নথিভুক্ত করা হয়


মজাদার ! আমি জানতাম না যে catএমপি 4 ফাইলের জন্য এটি যথেষ্ট! সমাধান যদিও ইন্টারেক্টিভ নয়!
স্লিক্স

স্লাইক্স - হ্যাঁ তাই আমি জিজ্ঞাসা করেছি আপনি ইন্টারেক্টিভ বলতে কী বোঝাতে চেয়েছিলেন। আপনি এটি সম্পর্কে কী বলেছিলেন তা আমাকে দেখতে দিন এবং আমি এতে কী যুক্ত করতে পারি তা দেখুন। catযদিও এটি কাজ করে দেখুন । শেষবার আমি এটি ব্যবহার করেছি .mpgফাইলগুলির সাথে এবং এটি ডিএফ। যারা কাজ করে।
slm

2
আমি তা যাচাই করেছিলাম। ব্যবহার catকরা কোনও বৈধ সমাধান নয়। catদুটি ফাইল আইএন দিয়ে উত্পন্ন ফাইল কেবল প্রথম ইনপুট ফাইলের সামগ্রী দেখায়!
স্লিক্স

@ স্লাইক্স - বিড়াল কাজ করে তবে টাইমস্ট্যাম্পগুলি সঠিক নয়, সুতরাং আপনি যখন এটি পুনরায় চালানোর চেষ্টা করবেন তখন ভিডিও প্লেয়ারটি টাইমস্ট্যাম্পে লাফ দিয়ে 00 থেকে শেষ পর্যন্ত বিভ্রান্ত হয়ে পড়বে, তবে 00 এ ফিরে যান you আপনি যদি ভিডিওটি ট্রান্সকোড করে থাকেন তবে যে প্রক্রিয়া অংশ হিসাবে স্থির হবে। টাইমস্ট্যাম্পগুলি আবার জেনারেট করার উপায় রয়েছে।
slm

এটাই আমি বলতে চাইছি। দুটি বিষয়বস্তু রয়েছে তবে মিডিয়া প্লেয়ার কেবল প্রথমটি সনাক্ত করে।
স্লেক্স

4

আমি ওয়ার্ক বেস হিসাবে এমপি 4বক্স ব্যবহার করি।
আমি যে স্ক্রিপ্টটির পরামর্শ দিচ্ছি তাতে সমস্ত ফাইল একে অপরের কাছে যাচাই করা হয় (প্রতিটি সাধারণ আবহাওয়া) যাচাই করে ব্যবহারকারীকে ইনপুট ফাইলের নাম তৈরি করতে বলে।

#!/bin/bash
printf "###  Concatenate Media files ###\n"
fInputCount=0
# Reading input files
IFS=''
while (true)
do
    let currentNumber=$fInputCount+1 
    printf "File n°%s (\"ok\" to finish): " $currentNumber
    read inputFile
    [ "$inputFile" == "ok" ] && break
    [ ! -e "$inputFile" ] || [ ! -f "$inputFile" ] && printf "\"%s\" : Invalid filename. Skipped !\n" "$inputFile" && continue
    ((fInputCount++))
    inputFileList[$fInputCount]=$inputFile
    printf "\"%s\" : Added to queue !\n" "$inputFile"
done
[ "$fInputCount" == "0" ] || [ "$fInputCount" == "1" ] && echo "No enough input data. BYE ! " && exit
# Listing the input file list 
for ((i=1;i<=$fInputCount;i++))
do
    printf "%2d : %s\n" $i ${inputFileList[$i]}
done
# Reading the output filename
while (true)
do
    printf "Output file without extention (\"none\" to dismiss) : "
    read outputRead
    [ "$outputRead" == "none" ] && echo "Dismissed. BYE ! " && exit
    [ "$outputRead" == "" ] && echo "Try again ! " && continue
    [ -e "$outputRead" ] && echo "\"$outputRead\" exists. Try again !" && continue
    outputFile=$outputRead.mp4
    echo "Output to \"$outputFile\". Go !" && break
done
# Creating a random temporary filename
tmpOutFile="/tmp/concatMedia"`date +"%s%N"| sha1sum | awk '{print $1}'`".mp4"
# Joining the two first input files
MP4Box -cat "${inputFileList[1]}" -cat "${inputFileList[2]}" $tmpOutFile
# Adding all other files
for ((i=3;i<=$fInputCount;i++))
do
    tmpIntermediateFile=$tmpOutFile
    tmpOutFile="/tmp/concatMedia"`date +"%s%N"| sha1sum | awk '{print $1}'`".mp4"
    MP4Box -cat $tmpIntermediateFile -cat "${inputFileList[$i]}" $tmpOutFile
    rm $tmpIntermediateFile
done
mv $tmpOutFile "$outputFile"
# Finished
echo "\"$outputFile\" Saved !"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.