Quero dividir um longo arquivo de vídeo de 50 minutos em duas partes de 25 minutos. Eu finalmente descobri como transmitir um arquivo de vídeo para outro arquivo através da linha de comando, graças a http://www.videolan.org/doc/streaming-howto/en/ch03.html e http: //www.videolan. org / doc / streaming-howto / pt-br / ch04.html documentos.
Aqui está o comando do terminal que eu usei para conseguir isso:
vlc original_video.mp4 --start-time 0 --stop-time 1500 --sout "#standard{access=file,mux=ts,dst=/home/max/Desktop/video_A.mp4}"
O único problema é que parece que o VLC está apenas sentado lá original_video.mp4
entrando no canal video-A.mp4
. Parei depois de 5 minutos e vi que video_A.mp4
eram apenas 5 minutos.
Existe uma maneira de exeditar esse processo?
avconv
. Você pode me dizer como dividir meu grande arquivo de vídeo?Respostas:
Eu usaria
ffmpeg
o muxer de segmento (role um pouco esse link para alguns exemplos). Basicamente:Isso produzirá dois arquivos, 'output01.mp4' e 'output02.mp4'. Se você fosse usar
output%03d.mp4
, você iria em vez de obter 'output001.mp4' e 'output002.mp4'.-segment_times
exige uma lista de pontos de divisão separados por vírgula, medidos em segundos. Como você deseja dividir apenas uma vez, em 25 minutos, use 1500 (= 25 * 60). Observe que-segment_time
(sem os 's') é uma opção completamente separada - você usaria isso se quisesse dividir o arquivo a cada cinco segundos (por exemplo), sem colocar uma grande lista de todos os horários específicos.Você pode achar que precisa usar
-reset_timestamps 1
para que os arquivos sejam reproduzidos corretamente:Há muito mais opções na página de documentação. Isso deve ser muito rápido e sem perdas (para que você obtenha vídeos idênticos sem artefatos de vídeo extras). No entanto, não será 100% preciso, pois o ffmpeg precisa ser dividido em um quadro-chave , o que não pode ser garantido sem a recodificação.
Se você precisar de uma divisão precisa, a documentação recomenda recodificar e usar as opções
-force_key_frames
e-segment_time_delta
para garantir que haverá quadros I nos horários em que o muxer de segmento tentará dividir (consulte também os guias de codificação libx264 e AAC no ffmpeg wiki ):A versão do ffmpeg na maioria dos repositórios Linux será bastante antiga e, no caso do Debian e Ubuntu et al, a situação é ainda pior: eles não fornecem o ffmpeg, mas sim o fork, avconv, da equipe libav (consulte também a resposta de LordNeckbeard aqui ). O AVconv é uma ferramenta perfeitamente adequada por si só, mas não posso garantir que a sintaxe do ffmpeg funcione 100% do tempo, especialmente com coisas 'avançadas' como essa.
Eu recomendaria pegar uma compilação estática na página de downloads do ffmpeg ou compilar você mesmo . O principal benefício de compilar você mesmo é que você pode acessar
libfdk_aac
, o melhor codificador de áudio AAC que o ffmpeg pode usar - que não pode ser legalmente distribuído em um binário ffmpeg compilado, devido a conflitos de licenciamento (o fdk_aac usa uma licença copyleft personalizada, que é isn é bastante compatível com a GPL do ffmpeg).fonte
Unrecognized option 'segment_times'
quando eu tentoffmpeg -i file.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4
e quando eu mudar para-segment_time
eu recebo este erroOutput file #0 does not contain any stream