After a user uploads a video I would like ffmpeg to convert it to a .flv file. This works correctly on my localhost in development but not in production on my VPS. There are no errors in the production log which I have running in debug mode. In development on my local machine, it looks like ffmpeg converts the file before the post request is made. I think this might have something to do with the problem.
FFmpeg version git-740ad0d, Copyright (c) 2000-2011 the FFmpeg developers
built on Jan 31 2011 12:04:56 with gcc 4.4.5
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc
--enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-
libx264 --enable-libxvid --enable-x11grab
libavutil 50. 36. 0 / 50. 36. 0
libavcore 0. 16. 1 / 0. 16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52. 94. 0 / 52. 94. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1. 74. 0 / 1. 74. 0
libswscale 0. 12. 0 / 0. 12. 0
libpostproc 51. 2. 0 / 51. 2. 0
Input #0, avi, from '/path/public/system/assets/1/original
/215aa96bf54c591a8278bdc451c6d8b4.avi':
Metadata:
creation_time : 2011-01-09 20:10:41
encoder : CanonMVI06
Duration: 00:00:01.76, start: 0.000000, bitrate: 12810 kb/s
Stream #0.0: Video: mjpeg, yuvj422p, 640x480, 30 tbr, 30 tbn, 30 tbc
Stream #0.1: Audio: pcm_u8, 11024 Hz, 1 channels, u8, 88 kb/s
Incompatible sample format 'u8' for codec 'libmp3lame', auto-selecting format 's16'
[buffer @ 0xa058510] w:640 h:480 pixfmt:yuvj422p
[scale @ 0xa0588f0] w:640 h:480 fmt:yuvj422p -> w:480 h:360 fmt:yuv420p
flags:0xa000000开发者_开发问答4
Output #0, flv, to '/path/public/system/assets/1/original
/215aa96bf54c591a8278bdc451c6d8b4.avi.flv':
Metadata:
creation_time : 2011-01-09 20:10:41
encoder : Lavf52.94.0
Stream #0.0: Video: flv, yuv420p, 480x360, q=2-31, 200 kb/s, 1k tbn, 25 tbc
Stream #0.1: Audio: libmp3lame, 22050 Hz, 1 channels, s16, 32 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
Warning, using s16 intermediate sample format for resampling
frame= 37 fps= 0 q=8.0 size= 187kB time=1.48 bitrate=1035.4kbits/s dup=0
frame= 44 fps= 0 q=8.0 Lsize= 197kB time=1.76 bitrate= 916.3kbits/s dup=0
drop=9
video:188kB audio:7kB global headers:0kB muxing overhead 1.093285%
Started POST "/uploads" for 127.0.0.1 at Mon Jan 31 12:10:45 -0800 2011
Processing by UploadsController#create as HTML
Parameters: {"commit"=>"Create Upload", "upload"=>{"name"=>"", "asset"=>#
<ActionDispatch::Http::UploadedFile:0xb6737e84 @content_type="video/x-msvideo",
@original_filename="MVI_0767.AVI", @headers="Content-Disposition: form-data;
name=\"upload[asset]\"; filename=\"MVI_0767.AVI\"\r\nContent-Type: video/x-
msvideo\r\n", @tempfile=#<File:/tmp/RackMultipart20110131-22703-mb6pnq-0>>},
"authenticity_token"=>"tnMScVhmgvnxFpmMVhL/jm13O4rBoVT5bQGSiYZXemk=", "utf8"=>"✓"}
SQL (0.2ms) BEGIN
SQL (0.5ms) SHOW TABLES
SQL (1.2ms) describe `uploads`
AREL (0.4ms) INSERT INTO `uploads` (`created_at`, `updated_at`, `asset_updated_at`,
`asset_file_size`, `name`, `asset_file_name`, `status`, `asset_content_type`) VALUES
('2011-01-31 20:10:45', '2011-01-31 20:10:45', '2011-01-31 20:10:45', 2828934, '',
'215aa96bf54c591a8278bdc451c6d8b4.avi', 'pending', 'video/x-msvideo')
[paperclip] Saving attachments.
[paperclip] saving /path/public/system/assets/1/original
/215aa96bf54c591a8278bdc451c6d8b4.avi
SQL (26.0ms) COMMIT
SQL (0.1ms) BEGIN
AREL (33.7ms) UPDATE `uploads` SET `updated_at` = '2011-01-31 20:10:45', `status`
= 'converting' WHERE (`uploads`.`id` = 1)
[paperclip] Saving attachments.
SQL (36.8ms) COMMIT
Converting video...command: ffmpeg -i /path/public/system
/assets/1/original/215aa96bf54c591a8278bdc451c6d8b4.avi -ar 22050 -ab 32k -s
480x360 -vcodec flv -r 25 -qscale 8 -f flv -y /home/sean/applelocal/public/system
/assets/1/original/215aa96bf54c591a8278bdc451c6d8b4.avi.flv
SQL (0.2ms) BEGIN
AREL (1.2ms) UPDATE `uploads` SET `updated_at` = '2011-01-31 20:10:46',
`asset_file_name` = '215aa96bf54c591a8278bdc451c6d8b4.avi.flv' WHERE
(`uploads`.`id` = 1)
[paperclip] Saving attachments.
SQL (24.6ms) COMMIT
SQL (0.1ms) BEGIN
AREL (0.4ms) UPDATE `uploads` SET `updated_at` = '2011-01-31 20:10:46',
`asset_content_type` = 'application/x-flash-video' WHERE (`uploads`.`id` = 1)
[paperclip] Saving attachments.
SQL (51.3ms) COMMIT
SQL (0.1ms) BEGIN
AREL (0.5ms) UPDATE `uploads` SET `updated_at` = '2011-01-31 20:10:46', `status`
= 'converted' WHERE (`uploads`.`id` = 1)
[paperclip] Saving attachments.
SQL (51.3ms) COMMIT
Redirected to http://localhost:3000/uploads
Completed 302 Found in 1349ms
My production log shows this:
Started POST "/uploads/fast_upload?X-Progress-
ID=a96b4851f686ff28c8818e35962318bf" for 67.127.52.10 at Wed Feb 02 17:57:31 +0000
2011
Processing by UploadsController#create as HTML
Parameters: {"name"=>"", "upload"=>{"fast_asset"=>
{"original_name"=>"MVI_0767.AVI", "content_type"=>"video/x-msvideo",
"filepath"=>"/path$
[paperclip] file -b --mime-type '/path/shared/6/0000000026_1/MVI_0767.AVI'
2>/dev/null
^[[1m^[[35mSQL (0.2ms)^[[0m BEGIN
^[[1m^[[36mSQL (0.4ms)^[[0m ^[[1mSHOW TABLES^[[0m
^[[1m^[[35mSQL (0.5ms)^[[0m describe `uploads`
^[[1m^[[36mAREL (0.3ms)^[[0m ^[[1mINSERT INTO `uploads` (`asset_updated_at`,
`asset_content_type`, `name`, `status`, `updated_at`, `created_at`, `asset_f$
[paperclip] Saving attachments.
[paperclip] saving /path/public/system/assets/1/original
/df58a41b86249bbcb6ec4bafde725a75.avi
^[[1m^[[35mSQL (1.3ms)^[[0m COMMIT
^[[1m^[[36mSQL (0.1ms)^[[0m ^[[1mBEGIN^[[0m
^[[1m^[[35mAREL (0.3ms)^[[0m UPDATE `uploads` SET `status` = 'converting',
`updated_at` = '2011-02-02 17:57:31' WHERE (`uploads`.`id` = 1)
[paperclip] Saving attachments.
^[[1m^[[36mSQL (0.3ms)^[[0m ^[[1mCOMMIT^[[0m
Converting video...command: ffmpeg -i /path/public/system/assets
/1/original/df58a41b86249bbcb6ec4bafde725a75.a$
^[[1m^[[35mSQL (0.2ms)^[[0m BEGIN
^[[1m^[[36mAREL (0.3ms)^[[0m ^[[1mUPDATE `uploads` SET `status` = 'error',
`updated_at` = '2011-02-02 17:57:31' WHERE (`uploads`.`id` = 1)^[[0m
[paperclip] Saving attachments.
^[[1m^[[35mSQL (0.3ms)^[[0m COMMIT
Redirected to http://url.org/uploads
Completed 302 Found in 93ms
In my controller for the create method I just have something like this:
if @upload.save
@upload.convert
.convert runs the ffmpeg conversion
The problem was in my ffmpeg command in the model I neglected to include the full path to ffmpeg in my bin directory. This was not an issue on my localhost but running with passenger the full path is needed.
精彩评论