Réponses:
Première exécution ffmpeg -i file.mp4
pour voir quels flux existent dans votre fichier. Vous devriez voir quelque chose comme ça:
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Ensuite, lancez ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
pour copier le flux vidéo et le second flux audio new_file.mp4
.
Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
: pour y remédier, changez simplement l'ordre des arguments de la manière suivante:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
d'avoir des flux identiques pour l' audio, la vidéo , mais des sous - titres aussi: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
Problème lié: la suppression de toutes les pistes audio d’un fichier mp4 peut être effectuée ainsi:
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Mais j'ai ajouté ces drapeaux et c'est toujours pareil ...?
Identifier les numéros de flux:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Utilisez -map _file_:_stream_
pour sélectionner les flux à traiter et à afficher
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
Vous pouvez essayer avidemux
lequel ne gère qu'un seul fichier audio en interne (et vous oblige donc à sélectionner une piste spécifique). Je n'ai jamais essayé avec .mp4 mais cela fonctionne avec d'autres formats.
J'ai utilisé plusieurs fois Avidemux (GUI) et ffmpeg (console).
Dans Avidemux, vous choisissez "Audio" -> "Sélectionner les pistes" dans le menu principal. puis enregistrez votre vidéo dans un nouveau fichier.
Fait intéressant, dans certains cas, Avidemux a produit une "meilleure" sortie que ffmpeg.
juste au cas où, Avidemux et ffmpeg sont dans le référentiel standard de Fedora Linux. (Je suis sûr qu'ils sont standard dans d'autres versions de Linux.)
-vn
ou -an
supprimera toutes les pistes vidéo ou audio. La fourniture -vn -acodec copy
supprimera la vidéo; -an -vcodec copy
va supprimer tout l'audio.
-vcodec copy
spécifie que ffmpeg doit faire une copie directe de la piste vidéo existante (et ne faire aucun traitement / encodage de celle-ci). Si vous ne le spécifiez pas, cela fonctionnera toujours, mais ffmpeg pourrait réencoder la piste vidéo existante et l'opération nécessitera davantage de ressources processeur et risque de prendre beaucoup plus de temps.
Utilisation d’avidemux en ligne de commande.
(Dans l'interface graphique Avidemux, comme décrit dans https://unix.stackexchange.com/a/85834/4319 ci-dessus, il vous suffit de sélectionner / désélectionner les pistes audio et d'enregistrer le fichier. (Tout est copié dans le nouvel AVI.))
J'ai examiné le type de projets enregistrés en tant que projets SpiderMonkey ou TinyPy pour mes actions. Il s'est avéré que le projet SpiderMonkey (JavaScript) ne comportait pas les actions de sélection de piste audio dont j'avais besoin, mais le projet TinyPy (Python) ne l'avait pas. leur.
J'ai tout supprimé (une douzaine de lignes inutiles), et voici ce que j'ai dans mon some_series.py
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
Il quitte la piste 1, mais laisse tomber la piste 0.
Ensuite, j'ai exécuté une conversion par lots de nombreux fichiers avec une commande comme celle-ci:
for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done
Il copie tout, mais supprime tout sauf la piste audio nécessaire.
La manière d’exécuter avidemux à partir de la ligne de commande a été apprise à l' adresse https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , bien qu'ils ne mentionnent pas les scripts Python, mais uniquement les scripts JS ( qui n'a pas fonctionné pour moi).
Le ffmpeg
programme a été remplacé par avconv
. avconv
a un usage très similaire à ffmpeg
, donc toutes les commandes de ce post peuvent être quelque chose comme:
avconv <old ffpmeg command line options>
Suivez ce lien pour installer avconv
si vous êtes sur Ubuntu.
FFMPEG pourrait être une solution utile pour vous.
$ man ffmpeg