* .Ts ফাইলগুলিকে একক এমপি 4-তে একত্রিত করতে ffmpeg অনুলিপি কোডেক ব্যবহার করুন


47

আমি একক সূচি.এম 3 ইউ 8 ফাইল দ্বারা বর্ণিত অনেকগুলি টিএস সেগমেন্ট পেয়েছি:

index.m3u8        
segment1_0_av.ts  
segment2_0_av.ts  
segment3_0_av.ts  
segment4_0_av.ts  
segment5_0_av.ts

আমি জানি তারা সবাই একইভাবে এনকোডেড রয়েছে। ffprobe আমাকে নিম্নলিখিত দেয়:

Input #0, mpegts, from 'segment1_0_av.ts':
  Duration: 00:00:10.00, start: 0.100511, bitrate: 1251 kb/s
  Program 1 
    Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 25 tbc
    Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 105 kb/s
    Stream #0:2[0x102]: Unknown: none ([21][0][0][0] / 0x0015)

আমি তাদের একক এমপি 4 ধারক মধ্যে একত্রিত করতে চাই। তবে আমি যখন আদেশগুলি চেষ্টা করি:

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

যেখানে index.m3u8 ফাইল থেকে filelist.txt উত্পন্ন করে, সেখানে বিভিন্ন ফাইল পড়তে না পারার অভিযোগ করে। তবে টিএস ফাইলগুলি রূপান্তর করা নিজেরাই ঠিকঠাক কাজ করে বলে মনে হচ্ছে। আমি মনে করি আমি ffmpeg সঠিকভাবে ব্যবহার করছি না।

অনুলিপি কোডেক ব্যবহার করে সূচি.এম 3 ইউ 8 দ্বারা বর্ণিত টিএস ফাইলগুলিকে একক এমপি 4 ধারক হিসাবে একত্রিত করতে আমি কীভাবে ffmpeg ব্যবহার করব?

উত্তর:


58

আমি নিশ্চিত নই কেন ffmpeg আপনাকে ত্রুটি দিচ্ছে। তবে ts হ'ল কয়েকটি বিন্যাসগুলির মধ্যে একটি যা কেবল সংক্ষেপিত হতে পারে। তারপরে, একবার আপনার একক টিএস থাকলে এমপি 4 তে ট্রান্সম্যাক্স।

উইন্ডোজ অধীনে:

copy /b segment1_0_av.ts+segment2_0_av.ts+segment3_0_av.ts all.ts
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4

জিএনইউ / লিনাক্সের অধীনে, ব্যাশ ব্যবহার করে:

cat segment1_0_av.ts segment2_0_av.ts segment3_0_av.ts > all.ts
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4

12
আপনারও দরকার হতে পারে -bsf:a aac_adtstoasc
ক্যামিলো মার্টিন

1
কমান্ডটি আকর্ষণীয় নয় ffmpeg copy ..., এটি copy ...(উইন্ডোজের অধীনে) নয়
রন রায়স্টন

25

জাজমেরির বর্তমান শীর্ষ উত্তরের মতো ফাইলগুলি একত্রিত করতে অনুলিপি বা বিড়াল ব্যবহার করা আপনাকে এমন একটি ফাইলের সাথে ফেলে রাখতে পারে যা সীমা ছাড়িয়ে যায় এবং প্লেব্যাক সংক্রান্ত সমস্যাগুলি অনুসন্ধান করতে পারে না।

পরিবর্তে, এই ফাইলগুলিকে একত্রিত করার জন্য https://trac.ffmpeg.org/wiki/Concateate তে নির্দেশিতভাবে সঠিকভাবে ffmpeg ব্যবহার করুন । (যদি আপনার ইতিমধ্যে https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg না থাকে তবে এখানে ffmpeg ইনস্টল করুন ))

আপনি যদি আমার প্রথম লিঙ্কটি পড়তে খুব অলস হন তবে আপনি মূলত ফোল্ডারে যেখানে আপনি 'ফোল্ডারে আপনি যেভাবে সংযুক্ত করতে চান তার সমস্ত ফাইল (যা আমার প্রথম লিঙ্কটি সহজেই কীভাবে করার নির্দেশনা দেয়) একটি টেক্সট ফাইল তৈরি করতে হবে' পুনরায় সংক্ষেপণ করছেন:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

উদাহরণস্বরূপ আপনার যদি কমান্ডলাইনে উইন্ডোজ থাকে তবে একটি পাঠ্য ফাইল তৈরি করার জন্য আমার প্রথম লিঙ্ক থেকে একটি অনুলিপি পেস্ট করুন তবে স্পষ্টতই আপনি নিজে ফাইলটি তৈরি করতে পারেন তবে আপনি চান:

(for %i in (*.ts) do @echo file '%i') > mylist.txt

আপনার .txt ফাইলটি দেখতে ভাল দেখাচ্ছে এবং সঠিকভাবে ফর্ম্যাট হয়েছে তা ডাবল পরীক্ষা করে দেখুন!

এর পরে, কমান্ডলাইন রান করুন:

ffmpeg -f concat -i mylist.txt -c copy all.ts

যেখানে 'mylist.txt' হ'ল আপনি সদ্য তৈরি .txt ফাইল।

ফলস্বরূপ ফাইলটি ভিডিওটি সঠিকভাবে খেলছে কিনা তা পরীক্ষা করে দেখুন। এখান থেকে, আপনি যদি পছন্দ করেন তবে যথারীতি এমপি 4 তে ট্রান্সম্যাক্স করতে পারেন:

ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4

এটি for %i in (*.ts) doআই> = ১০ এর জন্য সঠিকভাবে সাজান না that এগুলি ছাড়াও, সবকিছু কাজ করে, ধন্যবাদ। প্রকৃতপক্ষে, সংক্ষিপ্ত ফাইলটিতে সমস্যা ছিল, এটি উল্লেখ করার জন্য নয় যে আপনার পদ্ধতিটি ব্যবহার করে তৈরি করা ফাইলটি 16% ছোট হয়েছে (আমার 40000b দ্বারা 1400 অংশ ছিল) had
ব্যবহারকারী

for i in {1..10}; do echo file \'$i.ts\' >> list.txt ; done
@

8

2017 উত্তর

তবে আমি যখন আদেশগুলি চেষ্টা করি তখন ...এটি বিভিন্ন ফাইল পড়তে না পারার অভিযোগ করে।

আমি যখন ffmpeg -i some.ts -c copy some.mp4একটি নির্দিষ্ট ভিডিওতে চালিত করি তখন আমি এই ত্রুটি বার্তাটি পাই:

Malformed AAC bitstream detected: use the audio bitstream filter 
'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)

av_interleaved_write_frame(): Operation not permitted

অবাক হওয়ার মতো বিষয় নয়, ffmpeg -i some.ts -c copy -bsf:a aac_adtstoasc some.mp4এটি কার্যকর করা কার্যকর করে।


3
যথেষ্ট পরিমাণে নতুন পান ffmpegএবং এটি এখন স্বয়ংক্রিয়ভাবে এটি করবে।
লগন

7

সব একসাথে রাখা

জুয়ান অ্যাকিনোর উত্তরটি ব্যবহার করা (এবং বাশের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য প্রথম আদেশটি সংশোধন করা এবং ফাইলগুলির প্রাকৃতিক ক্রম ব্যবহার করে), এবং 7vujy0f0hy এর উত্তর, লিনাক্স ব্যাশ শেলের জন্য একটি সাধারণ কার্যনির্বাহী স্ক্রিপ্ট:

#!/bin/bash
for i in `ls *.ts | sort -V`; do echo "file $i"; done >> mylist.txt
ffmpeg -f concat -i mylist.txt -c copy -bsf:a aac_adtstoasc video.mp4

4

M3u8 প্লেলিস্ট থেকে একাধিক ভিডিও ফাইল সংঘবদ্ধ করার সঠিক উপায়

ffmpeg -i "index.m3u8" -codec copy output.mp4


  • m3u8 প্লেলিস্ট ওয়েবে বা স্থানীয়ভাবে ডিরেক্টরিতে থাকতে পারে
    • এটিতে প্লেলিস্টের সাথে সম্পর্কিত ফাইল পাথের তালিকা রয়েছে
  • -codec copy এনকোডিং এড়ানোর জন্য
  • ধারক ধরণের বিষয়:
    • *.mp4 ঠিক আছে তবে যখন প্লেলিস্টটি ওয়েব থেকে আনা হয় তখন তা ম্যাক্সের কাছে কিছুটা ধীর লাগে
    • *.mkvবা *.tsআমার জন্য সবচেয়ে ভাল কাজ

2

আপনি (বাশ সহ) এর মতো কনকনটেটিং সহজ করতে পারেন:

for f in ./{0..<number>}.ts; do cat $f >> out.ts; done

প্রতিস্থাপন করা <number>সর্বাধিক সংখ্যার (স্পষ্টতই) সাথে । Ffmpeg সহ রূপগুলি সঠিকভাবে কাজ করে না didn't আউটপুট ভিডিও ফাইল অদ্ভুতভাবে stutter হবে।

ফাইলগুলির সঠিক ক্রমটি নিশ্চিত করতে আমি লুপটি ব্যবহার করি। হয়তো আপনার দরকার নেই। এমনকি আউটপুটটিকে ffmpeg এ পাইপ করা এবং ফ্লাইতে এমপি 4 এ রূপান্তর করা এমনকি সম্ভব।


1

আপনি এমপি 4 ফাইলটি ffmpeg এবং আউটপুট করতে এই টিএস ফাইলগুলিকে পাইপ ব্যবহার করতে পারেন ।

cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4

অথবা যদি আপনার ফাইলের নামের অর্ডার না থাকে,

grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4


0

এই প্রশ্নের সমস্ত জনপ্রিয় উত্তর যা ffmpeg চালানোর আগে পাঠককে টিএস ফাইলগুলি কনটেনেট করতে ভুল করে দেয়। এমপি 4 স্ট্রিমের সমাবেশের সময় অডিও এবং ভিডিও সিঙ্কের বাইরে না যায় তা নিশ্চিত করার জন্য, ffmpeg এর দুর্বল দলিলযুক্ত তবে গুরুত্বপূর্ণ "-f কনক্যাট" বৈশিষ্ট্যটি ব্যবহার করা উচিত।

    delimiterBeforeFileNumber="-"
    ls |egrep '[.]ts$' \
        |sort "-t$delimiterBeforeFileNumber" -k2,2n \
        |sed -r "s/(.*)/file '\1'/" >ts.files.txt

    ffmpeg -f concat -i ts.files.txt -c copy tsw.014.ts.mp4

কোডের দুটি প্রস্তুতিমূলক লাইন কেবল এই লাইন ফর্ম্যাটে টিএস ফাইলের তালিকা সহ একটি ফাইল তৈরি করে:

    file 'seg-37-a.ts'

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