गुणवत्ता खोने के बिना ffmpeg concatenate ts फाइलें


0

मेरे पास एक फाइल है main.mp4जिसे मैं दो mp4 फाइलों में विभाजित करता हूं; first_half.mp4और second_half.mp4। Ffmpeg का उपयोग करते हुए मैं फिर तीन फाइलों को एक में मिला देता हूं: एक के मध्य में first_half.mp4और second_half.mp4, और एक के बाद एकsecond_half.mp4

फ़ाइलों में शामिल होने के लिए मैं उन्हें पहले .tsप्रारूप में परिवर्तित करता हूं और फिर उन्हें कॉनकैट प्रोटोकॉल का उपयोग करके शामिल करता हूं। समस्या यह है कि गुणवत्ता भयानक और पिक्सेलयुक्त हो जाती है। विभाजित अंशों का निरीक्षण करने के बाद मुझे पता चला कि उनकी गुणवत्ता ठीक थी और जब मैं परिवर्तित हुआ तो गुणवत्ता केवल मूल्यह्रास हो गई .ts

मैं मूल फ़ाइलों की तरह ts फ़ाइलों की गुणवत्ता कैसे रख सकता हूं?

मैंने कॉनकैट डिमॉक्सर की भी कोशिश की है लेकिन यह गुणवत्ता बनाए रखता है लेकिन केवल पहली फाइल के लिए काम करता है क्योंकि यह बाद की फाइलों को विकृत कर देता है।

यहाँ मेरे आदेश हैं:

// cut first half
$cmd ="ffmpeg -i main.mp4 -vcodec copy -acodec copy -ss 00:00:00 -t 00:15:00 first_half.mp4 -y";

shell_exec($cmd);

//convert to ts
$cmd = "ffmpeg -i first_half.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb -f mpegts in first_half.ts -y -b:v 1000000";

shell_exec($cmd);


//cut second half

$cmd ="ffmpeg -i main.mp4 -vcodec copy -acodec copy -ss 00:15:00 -t $length second_half.mp4 -y";

shell_exec($cmd);

//convert to ts

$cmd = "ffmpeg -i second_half.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in second_half.ts -y -b:v 1000000";

shell_exec($cmd);

//transcode the "slices"

$cmd = "ffmpeg -i front.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in front.ts -y -b:v 1000000";

shell_exec($cmd);

$cmd = "ffmpeg -i middle.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in middle.ts -y -b:v 1000000";

shell_exec($cmd);

$cmd = "ffmpeg -i end.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in end.ts -y -b:v 1000000";

shell_exec($cmd);

//concatenate them

$cmd = 'ffmpeg -i "concat:front.ts|first_half.ts|middle.ts|second_half.ts|end.ts" -c copy   output.mp4 -y -b 10000000';

shell_exec($cmd);

जवाबों:


1

सभी 'ट्रांसकोड' कमांड में, निकालें in

जैसे -f mpegts in first_half.ts->-f mpegts first_half.ts

अब, आपकी कोई भी आज्ञा वास्तव में ट्रांसकोडिंग नहीं है क्योंकि आपने निर्दिष्ट किया है -vcodec copy -acodec copy। वास्तव में ट्रांसकोड करने के लिए, निकालें -vcodec copy। आप मध्यवर्ती MP4 को भी छोड़ सकते हैं। जैसे

ffmpeg -i main.mp4 -vcodec libx264 -acodec copy -ss 00:00:00 -t 00:15:00 first_half.ts -y
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.