0

我有下一个用于编辑视频的命令,但所有过程都需要很长时间。但具有与原始视频相同的质量。

//First cut original video
exec("ffmpeg -i $video_path_main -ss $first_time1 -t $first_time2 -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 1 -strict -2 $name_first");
exec("ffmpeg -i $video_path_main -ss $second_time1 -t $second_time2 -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 1 -strict -2 $name_second");

$name_edit_second = uniqid() . '.mp4'; //Then editing the second video
exec("ffmpeg -i $name_second -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 1 -strict -2 -vf movie='" . $image_name . " [watermark]; [in] [watermark] overlay=308:43"."' $name_edit_second");

//Then merge video file mp4 with Mencoder
$name_total_1 = uniqid() . '.mp4';
exec("mencoder -oac pcm -ovc xvid -vf scale -xvidencopts bitrate=460 -o $name_total_1 ".$name_first.' '.$name_edit_second);

//Then convert the video to 3 formats that is necessary in my Player.
$name_total = uniqid();

//Of MP4 a FLV
exec("ffmpeg -i $name_partial -f flv -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 1 $name_total.flv");

//Of MP4-Mencoder a MP4-FFMPEG
exec("ffmpeg -i $name_partial -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 1 -strict -2 $name_total.mp4"));

//Of MP4 a WEBM
exec("ffmpeg -i $name_partial -acodec libvorbis -s 476x268 -r 10 -b 2000k -r 30 -g 100 -ar 22050 -ab 48000 -ac 2 -f webm $name_total.webm");

我不知道某些参数是否需要很长时间才能完成所有过程。或者,如果此命令之一需要很长时间。

注意:有些视频有超过 2 个部分的原始视频。


更新

也许该参数-theards 1可以帮助我不占用大量 CPU 资源。另外,我需要优化重新编码,因为只有 8 个用户占用了 100% 的资源。

我在另一台服务器上运行 FFMPEG,将编辑的视频返回到我的应用程序所在的其他服务器。

对不起我的英语不好。

4

1 回答 1

1

制作分段和叠加图像

ffmpeg -i input.flv -i image.jpg -ss 30 -t 5 -c:v libx264 -preset medium \
-crf 23 -filter_complex overlay=308:43 -c:a libfaac -q:a 100 output1.mp4

ffmpeg -i input.flv -i image.jpg -ss 60 -t 5 -c:v libx264 -preset medium \
-crf 23 -filter_complex overlay=308:43 -c:a libfaac -q:a 100 output2.mp4

连接段并编码

首先制作解复用器将从中读取的文件列表。list.txt在本例中命名为:

echo "file 'output1.mp4'" >> list.txt
echo "file 'output2.mp4'" >> list.txt

内容list.txt很简单:

file 'output1.mp4'
file 'output2.mp4'

现在连接视频output1.mp4output2.mp4使用concat demuxer。解复用器将使用列出的文件list.txt作为输入:

ffmpeg -f concat -i list.txt -c copy -movflags faststart final.mp4
ffmpeg -f concat -i list.txt -c:v libvpx -c:a libtheora -q:a 3 final.webm

-movflags faststart将允许 mp4 文件在完全下载之前在 JW Player 中开始播放。您将希望在 webm 示例中添加某种速率控制方法(例如-b:v)。我不熟悉这个编码器,默认值不是很好。

现在,您在 MP4 容器中有一个包含 H.264 视频和 AAC 音频的文件,在 webm 容器中有一个包含 VP8 视频和 Vorbis 音频的文件,它应该为各种浏览器提供良好的覆盖。

也可以看看

于 2013-02-14T01:37:17.660 回答