Comment convertir un fichier .ts dans un format grand public sans perte?

13

J'ai un fichier qui se termine par .ts (par exemple, voici les 10 premiers Mo ). Je voudrais le convertir en un format de flux plus principal (par exemple, mp4, MPEG2-PS ...), d'une manière sans perte si possible (c'est-à-dire, le remuxage).

J'ai lu le Comment convertir des fichiers .ts en quelque chose d'utile? question. J'ai essayé avidemuxavec les paramètres "copier" pour les flux vidéo et audio, et le format de conteneur "PS" pour MPEG. Cela a échoué avec le message d'erreur "Audio incompatible / Pour DVD, l'audio doit être 48 kHz MP2 (stéréo), AC3, DTS ou LPCM (stéréo)".

J'ai également essayé la commande CLI suggérée.

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

Le fichier de sortie contient la bonne vidéo, mais aucun son, du moins lorsqu'il est lu avec VLC. C'est assez déroutant, car il avconvsemble avoir correctement détecté le flux 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)

J'ai également essayé la commande CLI suggérée dans les commentaires d' une autre question .

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

Encore une fois, aucun son dans le fichier de sortie.

EDIT: J'ai essayé VLC comme suggéré par @Daniel. C'était presque parfait. C'était rapide et convivial. Je n'ai eu qu'à cliquer sur "Convertir / Enregistrer", ajouter le fichier d'entrée, sélectionner le profil MP4, configurer le codec vidéo et le codec audio sur "Conserver la piste vidéo / audio d'origine", choisir un fichier de destination et cliquer sur "Démarrer". La vidéo avait l'air parfaite, mais l'audio était en quelque sorte légèrement corrompu, mais cela pourrait être causé par quelque chose d'assez exotique dans le flux audio de ma vidéo.

lacton
la source
Avez-vous essayé VLC? videolan.org/vlc/index.html
Daniel
Vous avez mentionné que vous vouliez recomposer, pas ré-encoder si possible. Êtes-vous sûr que VLC ne fait que remuxer?
llogan
@LordNeckbeard Bon point! Comment je peux être sûr?
lacton
Je ne connais pas VLC pour la conversion, mais j'ai ajouté une réponse en utilisant ffmpeg.
llogan
VLC convertira tout en n'importe quoi sans perte exceptionnelle. Fondamentalement, vous êtes limité par le format que vous avez choisi.
Daniel

Réponses:

22

Matroska (MKV)

Cela diffusera en continu (re-mux) tous les flux:

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

L' -map 0option est utilisée pour inclure tous les flux. Sinon, il utilisera le comportement de sélection de flux par défaut , ce qui entraînerait la sélection d'un seul flux par type de flux. Puisque Matroska peut gérer la plupart des flux arbitraires que j'ai inclus -map 0.

MP4

Cela diffusera en continu (re-mux) tous les flux:

ffmpeg -i input -map 0 -c copy output.mp4
  • Si vos formats d'entrées ne sont pas compatibles avec MP4, vous obtiendrez une erreur.
  • Votre lecteur / appareil peut ne pas prendre en charge tous les formats arbitraires, moins courants ou hérités même s'ils sont pris en charge par MP4.
  • En cas de doute, ré-encodez en H.264 + AAC comme indiqué ci-dessous.

Cela va ré-encoder la vidéo en H.264 et copier le flux audio:

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

L'exemple suivant ré-encodera la vidéo et l'audio:

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

Exemple H.264 sans perte:

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

Les fichiers sans perte seront énormes.

Voir FFmpeg Wiki: H.264 pour plus d'informations.

llogan
la source
Si vous souhaitez encoder un fichier MP4 sans perte, ajoutez soit -qp 0 soit -crf 0, comme mentionné sur la page wiki FFMpeg
SuperSluether
2
@SuperSluether Lossless crée des fichiers énormes. Par "sans perte", je crois que lacton signifie "remuxage".
llogan
L'exemple de fichier que j'ai fourni est en effet tronqué. Le fichier que je souhaite remuxer est trop volumineux pour un partage facile.
lacton
1
Essayez @lacton muxing dans Matroska: ffmpeg -i 10MB.ts -c copy output.mkv. Vous obtiendrez l' erreur: Error parsing AAC extradata, unable to determine samplerate. C'est pourquoi mon exemple MKV a ré-encodé l'audio. Voir aussi # 4472: La copie AAC du flux sans échec d'encodage et lavf / mkv: Correction du remuxage AAC . Cependant, rien de tout cela ne peut s'appliquer à votre fichier d'entrée volumineux et non tronqué et cela peut fonctionner comme prévu.
llogan
1
@LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkva parfaitement fonctionné. La vidéo a été remuxée et l'audio semble aussi bon que l'original, sans la légère corruption que j'ai obtenue lors de la conversion avec VLC.
lacton
3

VideoLAN (VLC - http://www.videolan.org/vlc/index.html ) convertira facilement à peu près n'importe quoi en n'importe quoi.

Donner un coup de feu. Il fonctionne sous Linux, Windows et Mac OS X et possède une interface très conviviale.

Daniel
la source
Maintenant que j'ai utilisé VLC pour la conversion vidéo, je le recommande. Merci pour cette suggestion. Pour mon fichier .ts, cela a presque fonctionné. La vidéo avait l'air parfaite, mais l'audio était en quelque sorte légèrement corrompu. Cela peut être dû à quelque chose d'assez exotique dans le flux audio de ma vidéo. J'ai modifié la question d'origine pour l'inclure.
lacton
Oui, cela pourrait mieux fonctionner si vous utilisez un sous-conteneur différent pour l'audio à l'intérieur du mp4. Peut-être RAW.
Daniel
0

En complément de l' autre réponse de @llogan - comme une copie de flux est préférable de toute façon:

J'utilise depuis longtemps certaines commandes pour extraire l'audio sans changer le nom des fichiers, qui peuvent être adaptés à ceux présentés ici, afin de les intégrer dans les menus contextuels des gestionnaires de fichiers.

Donc, pour "démultiplexer et multiplexer" sans changer le nom du fichier, utilisez:

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

J'ai ajouté cela aux actions personnalisées de Thunar et à l'outil de configuration des actions FileManager (Nautilus, Nemo, Caja, PCManFM), comme ceci:

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

tout en le restreignant à "* .ts" dans Thunar et video/mp2tdans les actions FileManager.

cipricus
la source