J'ai pipi un flux d'une instance de FFMPEG à un autre, mais parce que la compression a été utilisée sur le flux intermédiaire, le résultat final était laid. J'ai besoin d'un tuyau sans perte pour éviter cela, et je veux qu'il contienne à la fois audio et vidéo.
Je soupçonne qu'il y a plus d'une réponse à ce problème, alors les points bonus vont à quiconque fournit une liste exhaustive de solutions (conteneurs compatibles et codecs pouvant être canalisés). Les points bonus vont également à quiconque représente d'autres données, comme des sous-titres.
Edit: Je cherche des combinaisons de codec/conteneur appropriées. Je ne sais pas pourquoi les gens avaient de la difficulté à comprendre cela, puisque j'ai dit que j'ai déjà utilisé un tuyau et je l'ai maintenant besoin pour être sans perte.
Je ne sais pas comment expliquer cela sans sonner la vanité, mais c'est un FAQ Site. Poser des questions nécessitant des réponses extrêmement spécifiques n'entraînera pas les millions d'utilisateurs qui atteignent ce site en entrant dans leur propres problèmes dans les moteurs de recherche. Ma question a été conçue pour aider quelqu'un d'autre qui doit être sans perte de données de tuyaux entre les cas FFMPEG sans distraire tout le monde avec un mur de récit et de code expliquant ce que je faisais, pourquoi cela n'a pas fonctionné, et pourquoi ceci est la seule option.
Le seul problème avec l'autre réponse est qu'il s'agit de PCM_S16LE, pas de S16LE. En outre, il comprend beaucoup de paramètres redondants.
J'utiliserais PCM au lieu de FLAC dans le tuyau, car il faut beaucoup moins de temps pour traiter (PCM est audio brut, FLAC prend beaucoup de temps pour encoder).
Quoi qu'il en soit, voici comment je le ferais.
ffmpeg -i <input video file/stream> -vcodec rawvideo -acodec pcm_s16le pipe:1 | ffmpeg -f rawvideo -i - -vcodec <video output codec> -acodec <audio output codec> -vb <video bitrate if applicable> -ab <audio bitrate if applicable> <final-output-filename>
Cela a travaillé pour moi lorsque j'ai essayé la dernière fois, mais mon objectif était de pipeler FFMPEG dans FFPLYPLY, ce qui est un processus légèrement différent.
exemple:
Ceci tue une vidéo de FFMPEG à une autre instance en tant que sortie vidéo brute et PCM de 16 bits Little-Endian (à la fois sans perte, sauf si vous avez 24 bits PCM, puis substituez pcm_s24le
.) Il les convertit ensuite à H.264 dans la deuxième instance, avec la bibliothèque AAC Fraunhoefer AAC à partir du Android (libfaac
est plus couramment inclus dans les bâtiments FFMPEG. Vous pouvez le remplacer par cela à la place.)
ffmpeg -i montypythonsflyingcircus-s1e1.avi -vcodec rawvideo -acodec pcm_s16le pipe:1 | ffmpeg -i - -vcodec libx264 -acodec libfdk_aac -vb 1200k -ab 96k mpfc-s1e01-output.mkv
Si cela ne tue pas les sous-titres, vous pouvez toujours les déchirer à SRT, puis les plus mux de plus tard, ou les ajouter aux tuyaux au-dessus facilement.