ffmpeg não está nem cortando este e outros mp4s para o segundo mais próximo

0

Eu tenho um arquivo

Outro - Relógio analógico-JEJqy1Wlovw.mp4, que é apenas um download do link

São 2 minutos e 13 segundos de duração.

Eu tive alguns problemas para o segundo.

Consegui usar este comando

ffmpeg -ss 0 -i infile.mp4 -c copy -t 60 output.mp4

para fazer um arquivo de 60 segundos, então não há problema até agora.

Esse é o arquivo exatamente 1 minuto, sem problemas até agora.

C:\vids\a>dir
blahhclo.mp4   9,590,540 bytes

C:\vids\a>


C:\vids\a>mediainfo blahhclo.mp4
General
Complete name                            : blahhclo.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom
File size                                : 9.15 MiB
Duration                                 : 1mn 0s
Overall bit rate                         : 1 278 Kbps
Writing application                      : Lavf58.3.100

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 3 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1mn 0s
Bit rate                                 : 1 146 Kbps
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.022
Stream size                              : 8.21 MiB (90%)

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 1mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 126 Kbps
Channel count                            : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 44.1 KHz
Compression mode                         : Lossy
Delay relative to video                  : 40ms
Stream size                              : 920 KiB (10%)



C:\vids\a>

Mas eu tenho um problema quando tento cortá-lo nos seguintes momentos, e é se eu tento cortar o 1 minuto ou os 2 min 13segs.

Se eu cortar com -ss 0 -t 1, ele produzirá um arquivo de 1s 22ms.

Então, isso não é tão ruim que é quase um segundo. 1,022 segundos é muito bom para uma tentativa de cortar um segundo.

Se eu cortar com -ss 0 -t 2, ele produz um arquivo que é 3s 19ms Isso é terrível! é para ser um segundo!

Se eu cortar com -ss 0 -t 30, então está bem 30s 1ms.

Ou este vídeo, por exemplo, também um mp4 link

C:\blah>ffmpeg -ss 189 -i vid.mp4 -c copy -t 6 someoutput.mp4

C:\blah>mediainfo someoutput.mp4

produz uma duração de 8s 383ms

Isso é tão errado, porque deve ser de 6 segundos! Então isso é dois segundos a mais!

C:\blah>ffmpeg -ss 191 -i vid.mp4 -c copy -t 6 someoutput2.mp4

C:\blah>mediainfo output2.mp4

mostra que ffmpeg produziu uma duração de 10s 403ms

que é loucamente errado porque o comando ffmpeg especificou 6 segundos!

Então, isso não é apenas um segundo fora, isso é de 4 segundos!

Isso é quase 50% mais longo do que deveria ser!

    
por barlop 21.01.2018 / 23:01

1 resposta

0

Eu falei com um cara que sabe algo sobre o ffmpeg. Eles disseram que não usam -c copiar. Eu vejo que cópia -acodec e -vcodec cópia, são tão ruins ou o mesmo. E eu não deveria usá-los para esse recorte de vídeo.

O vídeo foi contêiner MP4, vídeo AVC, áudio AAC. Ele também disse que o tempo de início ou término não está caindo em um I-Frame, então você pega o mais próximo, que pode estar bem longe do local desejado, e ele pensou que talvez houvesse algum perfil I-frames somente no AVC. Mas ele disse que o problema era que eu estava fazendo '-c copy' ou -vcodec copy. E eu não deveria fazer cópia.

Então eu tentei um -vcodec e -acodec que eu anotei tão bem para o mp4s ..

E eu os apliquei ao comando

ffmpeg -ss 191 -i vid.mp4 -vcodec libx264 -acodec libmp3lame -t 6 someoutput3.mp4 

Isso funcionou, produziu um arquivo de 6s 26ms. Isso é muito próximo do segundo.

ao contrário daquele com cópia -vcodec e cópia -acodec, isto foi 10,4 segundos.

Funciona

$ffmpeg -ss 193 -i vid.mp4 -acodec libmp3lame -vcodec libx264 -t 4 someoutput4.mp4

Produz um arquivo de 4ms 26ms. Perto de 4s, como deveria ser. Este site link menciona -acodec libvorbis recebo 4s 3ms com o que é ainda melhor.

Considerando que, se eu fizesse isso com cópia de acodec e cópia de vcodec, seria apenas mais de 5 segundos.

Portanto, especificar os codecs para o mp4 e não usar 'copy' resolveu o problema.

    
por 21.01.2018 / 23:35