วิธีการแปลงไฟล์. ts เป็นรูปแบบกระแสหลักแบบไม่มีการสูญเสีย?


13

ฉันมีไฟล์ที่ลงท้ายด้วย. ts (เช่นนี่คือ 10 MB แรก ) ฉันต้องการแปลงเป็นรูปแบบการสตรีมหลักเพิ่มเติม (เช่น mp4, MPEG2-PS ... ) ในลักษณะที่ไม่มีการสูญเสียหากเป็นไปได้ (เช่นการรีมิกซ์)

ฉันได้อ่านฉันจะแปลงไฟล์. ts เป็นสิ่งที่มีประโยชน์ได้อย่างไร คำถาม. ฉันลองavidemuxด้วยการตั้งค่า "คัดลอก" สำหรับวิดีโอและสตรีมเสียงและรูปแบบคอนเทนเนอร์ "PS" สำหรับ MPEG ที่ล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาด "เสียงที่เข้ากันไม่ได้ / สำหรับ DVD เสียงต้องเป็น 48 kHz MP2 (สเตอริโอ), AC3, DTS หรือ LPCM (สเตอริโอ)"

ฉันยังลองใช้คำสั่ง CLI ที่แนะนำ

avconv -i 10MB.ts -vcodec copy -acodec copy 10MB.mpg

ไฟล์เอาต์พุตมีวิดีโอที่ถูกต้อง แต่ไม่มีเสียงอย่างน้อยเมื่อเล่นกับ VLC สิ่งนี้ค่อนข้างavconvน่าสงสัยเพราะดูเหมือนจะตรวจพบกระแสข้อมูลเสียงได้อย่างถูกต้อง

Input #0, mpegts, from '10MB.ts':
  Duration: 00:00:06.36, start: 51523.824800, bitrate: 12563 kb/s
  Program 37888 
    Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x110]: Audio: aac, 0 channels, fltp, 144 kb/s
    Stream #0.2[0x130]: Data: [6][0][0][0] / 0x0006
    Stream #0.3[0x138]: Data: [6][0][0][0] / 0x0006
    Stream #0.4[0x140]: Data: [13][0][0][0] / 0x000D
    Stream #0.5[0x160]: Data: [13][0][0][0] / 0x000D
    Stream #0.6[0x161]: Data: [13][0][0][0] / 0x000D
    Stream #0.7[0x162]: Data: [13][0][0][0] / 0x000D
    Stream #0.8[0x170]: Data: [13][0][0][0] / 0x000D
    Stream #0.9[0x171]: Data: [13][0][0][0] / 0x000D
    Stream #0.10[0x172]: Data: [13][0][0][0] / 0x000D
Output #0, mpeg, to '10MB.mpg':
  Metadata:
    encoder         : Lavf54.20.4
    Stream #0.0: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 20000 kb/s, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)

ฉันยังพยายามคำสั่ง CLI แนะนำในความคิดเห็นของคำถามอื่น

avconv -i 10MB.ts -c:v copy -c:a libfaac 10MB.mp4

ไม่มีเสียงในไฟล์เอาต์พุตอีก

แก้ไข: ฉันลองใช้VLCตามที่ @Daniel แนะนำ มันเกือบจะสมบูรณ์แบบ มันรวดเร็วและใช้งานง่าย ฉันต้องคลิกที่ "แปลง / บันทึก" เพิ่มไฟล์อินพุตเลือกโปรไฟล์ MP4 กำหนดค่าตัวแปลงสัญญาณวิดีโอและตัวแปลงสัญญาณเสียงเป็น "เก็บแทร็กวิดีโอ / เสียงต้นฉบับ" เลือกไฟล์ปลายทางแล้วคลิก "เริ่ม" วิดีโอดูสมบูรณ์แบบ แต่เสียงมีความเสียหายเล็กน้อย แต่อาจเกิดจากบางสิ่งที่แปลกใหม่ในสตรีมเสียงของวิดีโอของฉัน


คุณลอง VLC แล้วหรือยัง videolan.org/vlc/index.html
Daniel

คุณพูดถึงว่าคุณต้องการ remux ไม่ใช่เข้ารหัสใหม่หากเป็นไปได้ คุณแน่ใจหรือว่า VLC เป็นเพียงการรีมิกซ์
21470 llogan

@ LordNeckbeard จุดดี! ฉันจะมั่นใจได้อย่างไร
lacton

ฉันไม่คุ้นเคยกับ VLC สำหรับการแปลง ffmpegแต่ผมเพิ่มคำตอบโดยใช้
23470 llogan

VLC จะแปลงอะไรเป็นอะไรก็ได้โดยไม่มีความสูญเสียที่โดดเด่น โดยทั่วไปคุณจะถูก จำกัด ด้วยรูปแบบที่คุณเลือก
Daniel

คำตอบ:


22

Matroska (MKV)

สิ่งนี้จะสตรีมการคัดลอก (re-mux) สตรีมทั้งหมด:

ffmpeg -i input -map 0 -c copy output.mkv

-map 0ตัวเลือกที่จะใช้ในการรวมถึงสตรีมทั้งหมด มิฉะนั้นจะใช้พฤติกรรมการเลือกกระแสเริ่มต้นซึ่งจะส่งผลให้หนึ่งกระแสต่อการเลือกประเภทของกระแส ตั้งแต่ Matroska -map 0สามารถจัดการกับลำธารพลส่วนใหญ่ผมรวม

MP4

สิ่งนี้จะสตรีมการคัดลอก (re-mux) สตรีมทั้งหมด:

ffmpeg -i input -map 0 -c copy output.mp4
  • หากรูปแบบอินพุตของคุณเข้ากันไม่ได้กับ MP4 คุณจะได้รับข้อผิดพลาด
  • เครื่องเล่น / อุปกรณ์ของคุณอาจไม่รองรับรูปแบบตามอำเภอใจทั่วไปน้อยกว่าหรือรูปแบบดั้งเดิมแม้ว่า MP4 จะรองรับก็ตาม
  • หากสงสัยอีกครั้งเข้ารหัสเป็น H.264 + AAC ดังที่แสดงด้านล่าง

นี่จะเข้ารหัสวิดีโอเป็น H.264 อีกครั้งและสตรีมคัดลอกเสียง:

ffmpeg -i input.ts -c:v libx264 -c:a copy output.mp4

ตัวอย่างถัดไปจะเข้ารหัสทั้งวิดีโอและเสียงอีกครั้ง:

ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4

ตัวอย่าง H.264 แบบไม่สูญเสีย:

ffmpeg -i input.ts -c:v libx264 -crf 0 -c:a copy output.mp4

ไฟล์ Lossless จะมีขนาดใหญ่มาก

ดูFFmpeg Wiki: H.264สำหรับข้อมูลเพิ่มเติม


หากคุณต้องการเข้ารหัสไฟล์ lossless MP4 ให้เพิ่ม -qp 0 หรือ -crf 0 ตามที่กล่าวไว้ในหน้าวิกิ FFMpeg: trac.ffmpeg.org/wiki/Encode/H.264
SuperSluether

2
@ SuperSluether Lossless ทำให้ไฟล์ขนาดใหญ่ โดย "lossless" ฉันเชื่อว่า lacton แปลว่า "remuxing"
4704 llogan

ไฟล์ตัวอย่างที่ฉันให้นั้นถูกตัดทอนอย่างแน่นอน ไฟล์จริงที่ฉันต้องการให้รีมิกซ์ใหญ่เกินไปสำหรับการแบ่งปันที่ง่าย
lacton

1
@lacton ลอง muxing เข้า ffmpeg -i 10MB.ts -c copy output.mkvMatroska: Error parsing AAC extradata, unable to determine samplerateคุณจะได้รับข้อผิดพลาด: นั่นคือเหตุผลที่ตัวอย่าง MKV ของฉันเข้ารหัสเสียงอีกครั้ง ยังเห็น# 4472: สำเนา AAC จากกระแสโดยไม่ต้องเข้ารหัสล้มเหลวและlavf / MKV: แก้ไข AAC remuxing อย่างไรก็ตามสิ่งเหล่านี้อาจไม่มีผลกับไฟล์อินพุตขนาดใหญ่ที่ไม่ถูกคัดลอกและอาจทำงานได้ตามที่คาดไว้
4701 llogan

1
@LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkvทำงานได้อย่างสมบูรณ์แบบ วิดีโอถูกปรับปรุงใหม่และเสียงฟังดูดีเหมือนต้นฉบับโดยไม่มีความเสียหายเล็กน้อยที่ฉันได้รับเมื่อแปลงด้วย VLC
lacton

3

VideoLAN (VLC - http://www.videolan.org/vlc/index.html ) จะแปลงอะไรก็ได้เป็นอะไรก็ได้

ลองยิงดู มันทำงานบน Linux, Windows และ Mac OS X และมีส่วนต่อประสานที่ใช้งานง่าย


ตอนนี้ฉันได้ใช้ VLC สำหรับการแปลงวิดีโอฉันอยากจะแนะนำ ขอบคุณสำหรับข้อเสนอแนะนี้. สำหรับไฟล์. ts ของฉันมันใช้งานได้เกือบ วิดีโอดูสมบูรณ์แบบ แต่เสียงก็เสียหายเล็กน้อย อาจเกิดจากบางสิ่งที่แปลกใหม่ในสตรีมเสียงของวิดีโอของฉัน ฉันแก้ไขคำถามเดิมเพื่อรวมนี้
lacton

ใช่มันอาจทำงานได้ดีขึ้นถ้าคุณใช้ subcontainer อื่นสำหรับเสียงภายใน mp4 บางทีอาจเป็น RAW
แดเนียล

0

ในฐานะที่เป็นส่วนเติมเต็มให้กับคำตอบอื่น ๆโดย @llogan - เนื่องจากเป็นสำเนาของสตรีมจะดีกว่า:

ฉันใช้คำสั่งเพื่อแยกเสียงมาเป็นเวลานานโดยไม่ต้องเปลี่ยนชื่อไฟล์ซึ่งสามารถปรับให้เข้ากับที่นำเสนอที่นี่เพื่อให้พวกมันรวมเข้ากับเมนูบริบทของตัวจัดการไฟล์

ดังนั้นสำหรับ "demuxing และ muxing" โดยไม่ต้องเปลี่ยนชื่อไฟล์ให้ใช้:

ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv

ฉันได้เพิ่มสิ่งนั้นลงในการกระทำที่กำหนดเองของ Thunar และเครื่องมือการกำหนดค่า FileManager Actions (Nautilus, Nemo, Caja, PCManFM) เช่น:

sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f

ขณะที่ จำกัด ให้เป็น "* .ts" ใน Thunar และvideo/mp2tใน FileManager Actions

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.