После запуска этой команды ffmpeg -f concat -i mylist.txt -c copy output.mp4
- я получаю поврежденный output.mp4
файл и это сообщение:
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%
Содержание mylist.txt
file 'cut.mp4'
file 'cut2.mp4'
выход cut.mp4 из 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
выход cut2.mp4 из 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
Я получил по этой команде ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4
cut2.mp4
Я получил по этой команде ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4
Я много искал - не нашел решения, может быть, кто-то может помочь мне с этим.
output.mp4
играбельно, но выглядит странно.
-c copy
чтобы разрешить перекодирование или использовать-c:a copy
только. Тогда concat step еще можно использовать,-c copy
поскольку все видео уже перекодированы. Обратите внимание, что некоторые видео с этим предупреждением выглядят нормально после concat, и это-c copy
нормально.Ответы:
Используя последние
ffmpeg
Обычные пользователи всегда должны использовать
ffmpeg
из текущей ветки git master (последний доступный код):См. Страницу загрузки FFmpeg для различных вариантов или обратитесь к FFmpeg Wiki: Руководства по компиляции .
Другие вещи
В вашей команде
drawbox
вы можете скопировать аудио с помощью-c:a copy
вместо того, чтобы перекодировать его.При использовании
-ss
,-to
работает только как ожидается , если-ss
используются в качестве опции вывода.источник
Согласно https://trac.ffmpeg.org/wiki/Concatenate
У меня была такая же проблема. Я использую ffmpeg версии 2.6.3 на Mac. Я преобразовал мои исходные клипы в формат .MTS с добавленным тегом -q 0, обновил расширения в текстовом файле и установил для моего выходного файла значение .MTS, когда я запустил команду concat в ffmpeg. Оно работало завораживающе. Вот мой рабочий процесс.
обновил текстовый файл (mylist.txt) следующим образом:
затем выполнил команду concat следующим образом:
Работал на меня! Вы можете преобразовать окончательный вывод. MTS в любой формат, который вам нужен.
источник
У меня были похожие ошибки, и звук в моих выходных видео иногда не синхронизировался, а иногда и отсутствовал полностью, но
mkvmerge
вместо этого я использовал mkvtoolnix.Мои входные видео были закодированы с различными настройками, и они имели разные размеры, поэтому я сначала изменил их размер и перекодировал их, используя
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
У некоторых из моих входных видео не было аудиоканала, поэтому я использовал такую команду, чтобы добавить к ним тихий аудиоканал:
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
После этого я соединил видео:
Если ваши входные файлы имеют одинаковые размеры, одинаковое количество аудиоканалов, одинаковую частоту дискретизации и т. Д., Вы можете использовать их только
mkvmerge
для объединения файлов без потерь. Входные файлы дляmkvmerge
могут также иметь контейнер MP4, но выходной файл будет иметь контейнер MKV, даже если его расширение имени файла указано как.mp4
. Вы можете запустить,ffmpeg -i output.mkv -c copy output.mp4
чтобы изменить контейнер.mkvmerge
имеет синтаксис вродеmkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv
, гдеmkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv
также принимается.источник
Основываясь на действительно полезном ответе Дункана:
Тогда это:
источник
Когда я использую ffmpeg для повторного смешивания некоторого записанного видео (может быть TS, MP4 или MKV) и получаю немонотонную dts в выходном потоке - отметки времени и т. Д., И т. Д., Получающееся видео либо имеет только аудио, либо воспроизводится вяло. Единственный способ надежно справиться с этим - использовать AviDemux. С помощью настроек копирования для аудио и видео и выбора MP4V2 Muxer можно, под опцией Configure выбрать Optimize For Streaming. Полученный файл MP4 теперь можно использовать в ffmpeg без генерации сообщений об ошибках. Поверьте, это полезно.
источник