Posso agilizar o fluxo do VLC para criar arquivos mais rapidamente?

1

Eu quero dividir um 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 de vídeo através da linha de comando graças ao link e link docs.

Aqui está o comando do terminal que 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 transmitindo o original_video.mp4 para video-A.mp4 . Parei depois de 5 minutos e vi que video_A.mp4 tinha apenas 5 minutos.

Existe uma maneira de exeditar este processo?

    
por max 28.04.2013 / 17:56

1 resposta

0

Eu usaria o segmento muxer de ffmpeg (role um pouco para baixo link para alguns exemplos). Basicamente:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4

Isso produzirá dois arquivos, 'output01.mp4' e 'output02.mp4'. Se você usasse output%03d.mp4 , você obteria 'output001.mp4' e 'output002.mp4'.

-segment_times chama uma lista separada por vírgula de pontos de divisão, medida em segundos. Como você só quer dividir uma vez, aos 25 minutos, basta usar 1500 (= 25 * 60). Note que -segment_time (sem o 's') é uma opção completamente separada - você usaria isso se quisesse dividir o arquivo a cada cinco segundos (por exemplo), sem colocar uma lista grande de cada tempo específico. / p>

Você pode achar que precisa usar -reset_timestamps 1 para os arquivos serem reproduzidos corretamente:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 -reset_timestamps 1 output%02d.mp4

Existem muito mais opções na página de documentação. Isso deve ser bem rápido e sem perdas (assim você obterá vídeo idêntico sem artefatos de vídeo extras). No entanto, ele não será 100% preciso, pois o ffmpeg precisa ser dividido em um frame-chave , que não pode ser garantido sem recodificação.

Se precisar de divisão precisa, a documentação recomenda recodificar e usar as opções -force_key_frames e -segment_time_delta para garantir que haverá I-frames nos horários que o multiplicador de segmento tentará dividir (consulte também o libx264 e guias de codificação AAC no ffmpeg wiki ):

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 \
-force_key_frames 1500 -f segment -segment_times 1500 -segment_time_delta 0.05 output%02d.mp4

A versão do ffmpeg na maioria dos repositórios do Linux será bastante antiga, e no caso do Debian e do Ubuntu et al a situação é ainda pior: eles não fornecem o ffmpeg, mas sim o fork, avconv, da equipe libav (veja também a resposta de LordNeckbeard aqui ). O AVconv é uma ferramenta perfeita por si só, mas não posso garantir que a sintaxe do ffmpeg funcionará com ele 100% do tempo, especialmente com coisas 'avançadas' como essa.

Eu recomendaria pegar uma versão estática da página de downloads do ffmpeg ou compilando você mesmo . O principal benefício de compilá-lo é que você pode obter acesso ao 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 licença (o fdk_aac usa uma licença copyleft personalizada , que não é totalmente compatível com a GPL do ffmpeg).

    
por 29.04.2013 / 02:50