Depois de executar este comando ffmpeg -f concat -i mylist.txt -c copy output.mp4
- estou recebendo um output.mp4
arquivo corrompido e esta mensagem:
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%
Conteúdo de mylist.txt
file 'cut.mp4'
file 'cut2.mp4'
saída cut.mp4 do 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
saída 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
Eu consegui esse comando ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4
cut2.mp4
Eu consegui esse comando ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4
Pesquisei bastante - não encontrei nenhuma solução, talvez alguém possa me ajudar com essa.
output.mp4
é jogável, mas parece estranho.
-c copy
para permitir recodificação ou uso-c:a copy
apenas. A etapa concat ainda pode ser usada,-c copy
pois todos os vídeos já foram recodificados. Observe que alguns vídeos com esse aviso ainda parecem-c copy
bons após a concat e, portanto, tudo bem.Respostas:
Usando o mais recente
ffmpeg
Usuários gerais sempre devem usar a
ffmpeg
partir da ramificação principal do git atual (o código mais recente disponível):Consulte a página de download do FFmpeg para obter várias opções ou consulte o Wiki do FFmpeg: guias de compilação .
Outras coisas
No seu comando,
drawbox
você pode copiar o áudio com vapor, em-c:a copy
vez de recodificá-lo.Ao usar
-ss
,-to
funciona apenas como esperado se-ss
for usado como uma opção de saída.fonte
Conforme https://trac.ffmpeg.org/wiki/Concatenate
Eu tive esse mesmo problema. Estou executando o ffmpeg versão 2.6.3 em um mac. Eu converti meus clipes de origem para o formato .MTS com uma marca adicional de -q 0, atualizei as extensões no arquivo de texto e configurei meu arquivo de saída para .MTS quando executei o comando concat no ffmpeg. Funcionou como um encanto. Aqui está o meu fluxo de trabalho.
atualizou o arquivo de texto (mylist.txt) para ler:
Em seguida, execute o comando concat da seguinte maneira:
Trabalhou para mim! Você pode converter o output.MTS final para qualquer formato que você precisar.
fonte
Eu recebi erros semelhantes, e o áudio nos meus vídeos de saída às vezes estava fora de sincronia e às vezes faltava completamente, mas acabei usando o
mkvmerge
mkvtoolnix.Meus vídeos de entrada foram codificados com configurações diferentes e tinham dimensões diferentes, então eu os redimensionei e os codifiquei novamente usando
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
Alguns dos meus vídeos de entrada não tinham um canal de áudio, então usei um comando como este para adicionar um canal de áudio silencioso a eles:
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
Depois concatenei os vídeos:
Se seus arquivos de entrada tiverem as mesmas dimensões, o mesmo número de canais de áudio, a mesma taxa de amostragem de áudio e assim por diante, você poderá usar apenas
mkvmerge
para concatenar os arquivos sem perdas. Os arquivos de entrada paramkvmerge
também podem ter um contêiner MP4, mas o arquivo de saída terá um contêiner MKV, mesmo que sua extensão de nome de arquivo seja especificada como.mp4
. Você pode executarffmpeg -i output.mkv -c copy output.mp4
para alterar o contêiner.mkvmerge
tem uma sintaxe comomkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv
, ondemkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv
também é aceita.fonte
Com base na resposta realmente útil de Duncan:
Então isso:
fonte
Quando eu uso o ffmpeg para remuxar algum vídeo gravado (pode ser TS, MP4 ou MKV) e obter os dts não monótonos no fluxo de saída - registros de data e hora, etc. A única maneira que encontrei de lidar com isso de forma confiável é usar o AviDemux. Com as configurações de cópia para áudio e vídeo e a seleção de MP4V2 Muxer, é possível ,, na opção Configurar, para selecionar Otimizar para streaming. O arquivo MP4 resultante agora pode ser usado no ffmpeg sem gerar mensagens de erro. Confie que isso é útil.
fonte