Po uruchomieniu tego polecenia ffmpeg -f concat -i mylist.txt -c copy output.mp4
- otrzymuję uszkodzony output.mp4
plik i ten komunikat:
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%
Zadowolony z mylist.txt
file 'cut.mp4'
file 'cut2.mp4'
Dane wyjściowe cut.mp4 z 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
Dane wyjściowe cut2.mp4 z 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
Dostałem to polecenie ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4
cut2.mp4
Dostałem to polecenie ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4
Dużo szukałem - nie znalazłem rozwiązania, być może ktoś może mi w tym pomóc.
output.mp4
jest grywalny, ale wygląda dziwnie.
-c copy
aby umożliwić ponowne kodowanie lub-c:a copy
tylko użycie . Następnie krok konkat może być nadal używany,-c copy
ponieważ wszystkie filmy są już ponownie kodowane. Pamiętaj, że niektóre filmy z tym ostrzeżeniem nadal wyglądają dobrze po konkat i tak-c copy
jest w porządku.Odpowiedzi:
Korzystanie z najnowszych
ffmpeg
Ogólni użytkownicy powinni zawsze korzystać
ffmpeg
z bieżącej gałęzi git master (najnowszy dostępny kod):Zobacz stronę pobierania FFmpeg, aby uzyskać różne opcje, lub zajrzyj na stronę FFmpeg Wiki: Przewodniki kompilacji .
Inne rzeczy
W swoim poleceniu
drawbox
możesz przekopiować dźwięk za pomocą pary-c:a copy
zamiast go ponownie kodować.Podczas korzystania
-ss
,-to
tylko działa zgodnie z oczekiwaniami, jeśli-ss
stosowany jest jako opcja wyjścia.źródło
Zgodnie z https://trac.ffmpeg.org/wiki/Concatenate
Miałem ten sam problem. Używam ffmpeg w wersji 2.6.3 na komputerze Mac. Przekształciłem klipy źródłowe do formatu .MTS z dodanym znacznikiem -q 0, zaktualizowałem rozszerzenia w pliku tekstowym i ustawiłem plik wyjściowy na .MTS, gdy uruchomiłem polecenie concat w ffmpeg. Działa jak urok. Oto mój przepływ pracy.
zaktualizowałem plik tekstowy (mylist.txt) do odczytu:
następnie uruchomił polecenie concat w następujący sposób:
Pracował dla mnie! Możesz przekonwertować końcowy wynik.MTS na dowolny potrzebny format.
źródło
Wystąpiły podobne błędy, a dźwięk w moich wyjściowych filmach czasami był niezsynchronizowany, a czasem zupełnie go brakowało, ale
mkvmerge
zamiast tego użyłem z mkvtoolnix.Moje wejściowe filmy wideo zostały zakodowane przy użyciu różnych ustawień i miały różne wymiary, więc najpierw zmieniłem ich rozmiar i ponownie zakodowałem za pomocą
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
Niektóre z moich wejściowych filmów wideo nie miały kanału audio, więc użyłem takiego polecenia, aby dodać do nich cichy kanał audio:
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
Następnie połączyłem filmy:
Jeśli twoje pliki wejściowe mają takie same wymiary, tę samą liczbę kanałów audio, tę samą częstotliwość próbkowania audio itd., Możesz użyć tylko
mkvmerge
do bezstratnego połączenia plików. Pliki wejściowe dlamkvmerge
mogą również mieć kontener MP4, ale plik wyjściowy będzie miał kontener MKV, nawet jeśli jego rozszerzenie nazwy pliku jest określone jako.mp4
. Możesz uruchomić,ffmpeg -i output.mkv -c copy output.mp4
aby zmienić kontener.mkvmerge
ma składnię typumkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv
, gdziemkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv
jest również akceptowane.źródło
Na podstawie naprawdę pomocnej odpowiedzi Duncana:
Wtedy to:
źródło
Kiedy używam ffmpeg do remuxingu niektórych nagranych filmów (może to być TS, MP4 lub MKV) i otrzymuję niemonotyczny dts w strumieniu wyjściowym - znaczniki czasu itp. Itd., Powstałe wideo albo wydaje się mieć tylko dźwięk, albo gra się gwałtownie. Jedynym sposobem, w jaki udało mi się rzetelnie sobie z tym poradzić, jest użycie AviDemux. Przy ustawieniach kopiowania audio i wideo oraz wybraniu MP4V2 Muxer możliwe jest ,, pod opcją Konfiguruj, aby wybrać Optymalizuj do przesyłania strumieniowego. Wynikowy plik MP4 może być teraz używany w ffmpeg bez generowania komunikatów o błędach. Ufaj, że to się przyda.
źródło