2017-08-30 1 views
0

Disclaimer: Je ne comprends pas ffmpeg et la plupart du temps juste les commandes copierComment fusionner deux fichiers audio tout en conservant des timings corrects avec ffmpeg

J'ai deux fichiers vidéo WebM. Leur durée est d'environ une seconde.

Je converti ces à mp4 et tout allait bien:

ffmpeg -acodec libopus -i 1.webm -r 10 -cpu-used 5 -c:v libx264 -crf 20 -c:a aac -strict experimental -loglevel error 1.mp4

Je puis extrait l'audio de chaque vidéo et tout allait bien. Par bien, je veux dire, quand je lis les fichiers audio par eux-mêmes, ils correspondent aux timings de la vidéo originale. J'ai utilisé cette commande pour extraire l'audio:

fmpeg -i 1.mp4 -map 0:a -vn -acodec copy 1audio.m4a

J'ai maintenant deux pistes audio et je veux les combiner en un seul, je veux les « overlay », et je veux garder les timings même comme ils étaient. MAIS, chaque fois que j'essaie de combiner l'audio, les timings sont éteints. Les "secondes" ne correspondent pas aux fichiers audio originaux originaux.

J'ai essayé ces commandes pour fusionner l'audio:

ffmpeg -i 1audio.m4a -i 2audio.m4a -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map [a] -c:a libfdk_aac mergedaudio.m4a

ffmpeg -i 2audio.m4a -i 1audio.m4a -filter_complex amix=inputs=2:duration=first mergedaudio.m4a

ffmpeg -i 1audio.m4a -i 2audio.m4a -filter_complex amerge -ac 2 -c:a libfdk_aac -vbr 4 mergedaudio.m4a

Toutes les commandes ci-dessus ont donné lieu à un fichier audio fusionné ... mais les horaires sont éteints

Qu'est-ce que je fais mal?

+0

Afficher la sortie complète de la console pour la commande de fusion, et de partager les fichiers si vous le pouvez. – Mulvya

Répondre

0

J'ai trouvé le problème et la question est erronée mais mérite d'être répondue.

La question est, avant de fusionner, les deux fichiers audio avaient commencer horodatages> 0.

Mais quand les fichiers ont été fusionnés, ils se sont « remis à zéro », donc leur temps de départ différé ont été ignorés et l'audio ont commencé trop de bonne heure.

La solution est alors de coder l'audio à nouveau, mais cette fois ajouter un délai égal au retard de démarrage afin que lorsque vous avez mis à zéro vous avez le rembourrage dont vous avez besoin.

permet donc courir à travers ce nouveau:

  1. Vous commencez avec deux fichiers acc qui, pour quelque raison que ce temps de commencer ont 3 et 5 secondes respectivement.

  2. Ensuite, vous "zéro" chaque fichier:

ffmpeg -i 1audio.m4a -filter_complex "[0:a]adelay=3000[a0];[a0]amix=inputs=1[out]" -map "[out]" -ac 2 -c:a libfdk_aac 1zeroed.m4a

ffmpeg -i 2audio.m4a -filter_complex "[0:a]adelay=5000[a0];[a0]amix=inputs=1[out]" -map "[out]" -ac 2 -c:a libfdk_aac 2zeroed.m4a

Les nouveaux fichiers audio, 1zeroed et 2zeroed ont maintenant un temps 0 début, mais pendant le remplissage de codage a été ajouté alors quand chaque jeu, l'audio commence seulement quand il est censé.

Maintenant, lorsque vous fusionnez les deux fichiers, tout est super cool! :-)

ffmpeg -i 1zeroed.m4a -i 2zeroed.m4a -filter_complex amerge -ac 2 -c:a libfdk_aac -vbr 4 mergedaudio.m4a