Dhr*_*gal 70 command-line video vlc ffmpeg mencoder
我想以每个二十 (20) 的批量大小合并视频。我正在运行 Linux 机器。视频为 mp4 格式,质量中等。有些甚至丢失了音频流。到目前为止,我已经试过ffmpeg,mencoder,cvlc/vlc和MP4Box。我想编写一个命令行脚本来实现这一点,因为我正在做批处理。
主要问题是我尝试的一些解决方案适用于两个视频,一些适用于带有音频流的视频,而另一些适用于我的视频集的其他一些子集。但是,我一直无法为这项任务找到一个全面的解决方案。
小智 62
我正在使用mkvmerge将多个 MP4 文件合并为一个:
mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4
Run Code Online (Sandbox Code Playgroud)
May*_*hux 42
您可以使用ffmpeg:
ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4
Run Code Online (Sandbox Code Playgroud)
小智 22
创建一个文件 files.txt,其中包含您要以以下形式连接的所有文件(以 # 开头的行将被忽略):
# this is a comment
file 'file1.mp4'
file '/path/to/file2.mp4'
file 'file3.mp4'
Run Code Online (Sandbox Code Playgroud)
请注意,这些可以是相对或绝对路径。然后您可以流式复制或重新编码您的文件:
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
Dhr*_*gal 11
这解决了这个问题:https : //stackoverflow.com/a/22324018/5014767
melt是一个很好的命令行实用程序。
这是页面
从评论中编辑:解决我的问题的命令是这个
melt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264
我写了一个小 shell 脚本来连接 MP4,而无需使用 ffmpeg 进行转码。
for f in $(ls *.MP4); do
ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done
CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")
ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4
rm *.ts
Run Code Online (Sandbox Code Playgroud)
这会在 MPEG 容器中创建中间文件,然后将它们连接成 MP4。