Après avoir exécuté cette commande ffmpeg -f concat -i mylist.txt -c copy output.mp4
- je reçois un output.mp4
fichier corrompu et ce message:
ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, concat, from 'mylist.txt':
Duration: N/A, start: 0.000000, bitrate: 829 kb/s
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf56.25.101
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize= 5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%
Contenu de mylist.txt
file 'cut.mp4'
file 'cut2.mp4'
sortie cut.mp4 de ffmpeg:
ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.25.101
Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
sortie cut2.mp4 de ffmpeg:
ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.25.101
Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
Metadata:
handler_name : SoundHandler
cut.mp4
J'ai obtenu par cette commande ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4
cut2.mp4
J'ai obtenu par cette commande ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4
J'ai beaucoup cherché - je n'ai trouvé aucune solution, peut-être que quelqu'un peut m'aider avec celle-ci.
output.mp4
est jouable, mais semble bizarre.
-c copy
pour autoriser le réencodage ou l'utilisation-c:a copy
uniquement. Ensuite, l'étape de concaténation peut toujours être utilisée-c copy
car toutes les vidéos sont déjà ré-encodées. Notez que certaines vidéos avec cet avertissement semblent toujours correctes après la concaténation et donc tout-c copy
va bien.Réponses:
Utilisation des dernières
ffmpeg
Les utilisateurs généraux doivent toujours utiliser à
ffmpeg
partir de la branche git master actuelle (le dernier code disponible):Voir la page de téléchargement de FFmpeg pour diverses options, ou reportez-vous au wiki FFmpeg: Guides de compilation .
D'autres choses
Dans votre commande,
drawbox
vous pouvez copier à la vapeur l'audio avec-c:a copy
au lieu de le ré-encoder.Lors de l'utilisation
-ss
,-to
ne fonctionne comme prévu que si-ss
est utilisé comme option de sortie.la source
Selon https://trac.ffmpeg.org/wiki/Concatenate
J'ai eu ce même problème. J'utilise ffmpeg version 2.6.3 sur un mac. J'ai converti mes clips source au format .MTS avec une balise ajoutée de -q 0, mis à jour les extensions dans le fichier texte et défini mon fichier de sortie sur un .MTS lorsque j'ai exécuté la commande concat dans ffmpeg. Ça a marché comme sur des roulettes. Voici mon workflow.
mis à jour le fichier texte (mylist.txt) pour lire:
puis exécutez la commande concat comme suit:
A travaillé pour moi! Vous pouvez convertir la sortie finale.MTS dans le format dont vous avez besoin.
la source
J'ai eu des erreurs similaires, et l'audio dans mes vidéos de sortie était parfois désynchronisé et parfois complètement manquant, mais j'ai fini par utiliser
mkvmerge
mkvtoolnix à la place.Mes vidéos d'entrée avaient été encodées avec différents paramètres et elles avaient des dimensions différentes, donc je les ai d'abord redimensionnées et réencodées en utilisant
ffmpeg
:for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done
Certaines de mes vidéos d'entrée n'avaient pas de canal audio, j'ai donc utilisé une commande comme celle-ci pour leur ajouter un canal audio silencieux:
for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done
Après cela, j'ai concaténé les vidéos:
Si vos fichiers d'entrée ont les mêmes dimensions, le même nombre de canaux audio, la même fréquence d'échantillonnage audio, etc., vous pouvez utiliser simplement
mkvmerge
pour concaténer les fichiers sans perte. Les fichiers d'entrée pourmkvmerge
peuvent également avoir un conteneur MP4 mais le fichier de sortie aura un conteneur MKV même si son extension de nom de fichier est spécifiée comme.mp4
. Vous pouvez exécuterffmpeg -i output.mkv -c copy output.mp4
pour changer le conteneur.mkvmerge
a une syntaxe commemkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv
, oùmkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv
est également accepté.la source
Basé sur la réponse vraiment utile de Duncan:
Ensuite ceci:
la source
Lorsque j'utilise ffmpeg pour remuxer une vidéo enregistrée (peut être TS, MP4 ou MKV) et obtenir les dts non monotones dans le flux de sortie - horodatages, etc. La seule façon que j'ai trouvée de gérer ce problème de manière fiable est d'utiliser AviDemux. Avec les paramètres de copie pour l'audio et la vidéo et en sélectionnant MP4V2 Muxer, il est possible, sous l'option Configurer, de sélectionner Optimiser pour le streaming. Le fichier MP4 résultant peut maintenant être utilisé dans ffmpeg sans générer de messages d'erreur. Faites confiance à cela est utile.
la source