Jak bezstratnie przekonwertować plik .ts na format głównego nurtu?

13

Mam plik z rozszerzeniem .ts (np. Tutaj jest pierwsze 10 MB ). Chciałbym przekonwertować go na bardziej główny format strumienia (np. Mp4, MPEG2-PS ...), w miarę możliwości bezstratnie (tj. Remuxing).

Przeczytałem Jak przekonwertować pliki .ts na coś przydatnego? pytanie. Próbowałem avidemuxz ustawieniami „kopiuj” dla strumieni wideo i audio oraz formatem kontenera „PS” dla MPEG. Nie powiodło się to z komunikatem o błędzie „Niezgodny dźwięk / DVD, dźwięk musi być 48 kHz MP2 (stereo), AC3, DTS lub LPCM (stereo)”.

Próbowałem także sugerowanego polecenia CLI.

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

Plik wyjściowy ma właściwe wideo, ale bez dźwięku, przynajmniej podczas odtwarzania z VLC. Jest to dość zagadkowe, ponieważ avconvwydaje się, że poprawnie wykrył strumień audio.

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)

Próbowałem także polecenia CLI sugerowanego w komentarzach do innego pytania .

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

Ponownie brak dźwięku w pliku wyjściowym.

EDYCJA: Próbowałem VLC zgodnie z sugestią @Daniel. To było prawie idealne. To było szybkie i przyjazne dla użytkownika. Musiałem tylko kliknąć opcję „Konwertuj / zapisz”, dodaj plik wejściowy, wybierz profil MP4, skonfiguruj kodek wideo i kodek audio do „Zachowaj oryginalną ścieżkę wideo / audio”, wybierz plik docelowy i kliknij „Start”. Film wyglądał idealnie, ale dźwięk był w jakiś sposób nieco uszkodzony, ale może to być spowodowane czymś egzotycznym w strumieniu audio mojego wideo.

lakton
źródło
Czy próbowałeś VLC? videolan.org/vlc/index.html
Daniel
Wspomniałeś, że chcesz remuxować, a nie, jeśli to możliwe, ponownie kodować. Czy jesteś pewien, że VLC to tylko remuxing?
llogan
@LordNeckbeard Dobra uwaga! Jak mogę być pewien?
Lakton
Nie znam VLC do konwersji, ale dodałem odpowiedź za pomocą ffmpeg.
llogan
VLC przekształci wszystko w wszystko z wyjątkową bezstratnością. Zasadniczo jesteś ograniczony przez wybrany format.
Daniel

Odpowiedzi:

22

Matroska (MKV)

Spowoduje to skopiowanie (ponowne zmiksowanie) wszystkich strumieni:

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

-map 0Opcja służy do obejmują wszystkie strumienie. W przeciwnym razie użyje domyślnego zachowania wyboru strumienia, co spowoduje, że zostanie wybrany tylko jeden strumień na typ strumienia. Ponieważ Matroska może obsłużyć większość dowolnych strumieni, które zawarłem -map 0.

MP4

Spowoduje to skopiowanie (ponowne zmiksowanie) wszystkich strumieni:

ffmpeg -i input -map 0 -c copy output.mp4
  • Jeśli twoje formaty wejściowe nie są kompatybilne z MP4, pojawi się błąd.
  • Twój odtwarzacz / urządzenie może nie obsługiwać wszystkich dowolnych, mniej popularnych lub starszych formatów, nawet jeśli są one obsługiwane przez MP4.
  • W razie wątpliwości ponownie zakoduj do H.264 + AAC, jak pokazano poniżej.

Spowoduje to ponowne zakodowanie wideo do H.264 i przesyłanie strumieniowe dźwięku:

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

Następny przykład przekoduje zarówno wideo, jak i audio:

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

Przykład bezstratnego H.264:

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

Pliki bezstratne będą ogromne.

Aby uzyskać więcej informacji, zobacz FFmpeg Wiki: H.264 .

Llogan
źródło
Jeśli chcesz zakodować bezstratny plik MP4, dodaj albo -qp 0, albo -crf 0, jak wspomniano na stronie wiki FFMpeg
SuperSluether
2
@SuperSluether Lossless tworzy ogromne pliki. Przez „bezstratny” uważam, że lakton oznaczał „remuxing”.
llogan
Przykładowy plik, który podałem, jest rzeczywiście obcięty. Rzeczywisty plik, który chcę ponownie przetworzyć, jest zbyt duży, aby można go było łatwo udostępnić.
lacton
1
@lacton Spróbuj muksowania do Matroska: ffmpeg -i 10MB.ts -c copy output.mkv. Dostaniesz błąd: Error parsing AAC extradata, unable to determine samplerate. Dlatego mój przykład MKV ponownie zakodował dźwięk. Zobacz także # 4472: Kopiowanie AAC ze strumienia bez kodowania kończy się niepowodzeniem i lavf / mkv: Napraw remuxing AAC . Jednak żaden z tych elementów nie może dotyczyć dużego, nieskalowanego pliku wejściowego i może działać zgodnie z oczekiwaniami.
llogan
1
@ LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkvdziałał idealnie. Wideo zostało przemienione, a dźwięk brzmi tak dobrze, jak oryginał, bez lekkiego zepsucia, które dostałem podczas konwersji za pomocą VLC.
Lakton
3

VideoLAN (VLC - http://www.videolan.org/vlc/index.html ) z łatwością przekształci niemal wszystko w cokolwiek.

Spróbuj. Działa w systemach Linux, Windows i Mac OS X i ma bardzo przyjazny interfejs użytkownika.

Daniel
źródło
Teraz, gdy użyłem VLC do konwersji wideo, poleciłbym to. Dziękuję za tę sugestię. W przypadku mojego pliku .ts prawie zadziałało. Film wyglądał idealnie, ale dźwięk był w jakiś sposób nieco uszkodzony. Może to być spowodowane czymś dość egzotycznym w strumieniu audio mojego wideo. Zredagowałem oryginalne pytanie, aby to uwzględnić.
lakton
Tak, może działać lepiej, jeśli użyjesz innego subkontenera dla dźwięku wewnątrz MP4. Być może RAW.
Daniel
0

Jako uzupełnienie drugiej odpowiedzi @llogan - i tak preferowana jest kopia strumieniowa:

Od dłuższego czasu używam niektórych poleceń do wyodrębniania dźwięku bez zmiany nazw plików, które można dostosować do przedstawionych tutaj, aby zintegrować je z menu kontekstowymi menedżerów plików.

Zatem do „demultipleksowania i multipleksowania” bez zmiany nazwy pliku użyj:

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

Dodałem to do niestandardowych akcji Thunara i narzędzia konfiguracji akcji FileManager (Nautilus, Nemo, Caja, PCManFM), jak:

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

ograniczając go do „* .ts” w Thunar i akcjach FileManager video/mp2t.

cypr
źródło